Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 33 additions & 3 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,19 +1,49 @@
name: CI

# Pushes only build on `main'. Work on a branch is covered by its pull
# request, so without this bound every branch push would build twice.
on:
push:
branches: [main]
paths-ignore:
- '**.md'
- LICENSE
pull_request:
paths-ignore:
- '**.md'
- LICENSE

# One live run per branch or pull request. Pushing again supersedes the
# run still going for the same ref, so a burst of commits costs one build
# rather than one per commit. Runs on `main' are left to finish: they are
# the record that a released commit was green, and cancelling one would
# leave a gap no later run fills.
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}

# The job only reads the checkout. Nothing here writes to the repository,
# comments, or publishes, so the token gets no other scope.
permissions:
contents: read

jobs:
test:
runs-on: ubuntu-latest
# The suite runs in well under a second; the rest is provisioning
# Emacs. This is a stop for a hang, not a target to tune against.
timeout-minutes: 10
strategy:
matrix:
emacs-version: [30.1]
# `Package-Requires' names 30.1 as the floor. Kept to one version
# on purpose: each entry added here is another full build per push.
emacs-version: ['30.1']
steps:
- uses: actions/checkout@v4
- uses: purcell/setup-emacs@master
# Both actions are pinned to a release rather than a branch: `master'
# moves under us, and an action that changes without a version bump
# turns a green build into an unreproducible one.
- uses: actions/checkout@v7
- uses: purcell/setup-emacs@v8.0
with:
version: ${{ matrix.emacs-version }}
- name: Byte compile
Expand Down
21 changes: 19 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,31 @@
# agent-shell-side

Ask a quick question without derailing the conversation you are in.
[![CI](https://github.com/liaowang11/agent-shell-side/actions/workflows/ci.yml/badge.svg)](https://github.com/liaowang11/agent-shell-side/actions/workflows/ci.yml)
[![License: GPL v3](https://img.shields.io/badge/license-GPL--3.0--or--later-blue.svg)](LICENSE)

Ask a quick side question in Emacs without derailing the AI coding session you
are in.

> [!WARNING]
> **Experimental, and under active development.** Command names, options, and
> the boundary instruction text can change without a deprecation period, and
> this package is not on MELPA. Pin a commit if you depend on it. The live
> probes have been run against one adapter only; see
> [What has been tested live](#what-has-been-tested-live) for exactly what is
> and is not proven, and [DESIGN.md](DESIGN.md) for what is deliberately
> unbuilt.

`M-x agent-shell-side` forks the current [agent-shell](https://github.com/xenodium/agent-shell)
session into a second shell whose inherited history is demoted to reference
material. The agent can still read everything that came before, so the question
needs no re-explaining, but it is told not to continue the parent's task, not to
touch sub-agents, and not to change anything unless this conversation asks.

Modelled on the `/side` command in OpenAI's Codex TUI.
Modelled on the `/side` command in OpenAI's Codex TUI. It answers the same need
as Claude Code's `/btw`, by a different mechanism: a real forked session that
keeps its tools, rather than a single tool-less turn. Works with any coding
agent that speaks the [Agent Client Protocol](https://agentclientprotocol.com)
and advertises `session/fork`, such as claude-agent-acp.

## Install

Expand Down
3 changes: 3 additions & 0 deletions agent-shell-side.el
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@

;; Ask a quick question without derailing the conversation you are in.
;;
;; Experimental, and under active development. Command names, options, and
;; the boundary instruction text can change without a deprecation period.
;;
;; `agent-shell-side' forks the current session into a second shell whose
;; inherited history is demoted to reference material. The agent can still
;; read everything that came before, so the question needs no re-explaining,
Expand Down