diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 35e377c..ec2f268 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -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 diff --git a/README.md b/README.md index 36ed919..c16df7f 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,19 @@ # 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 @@ -8,7 +21,11 @@ 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 diff --git a/agent-shell-side.el b/agent-shell-side.el index 8583c41..e2146a5 100644 --- a/agent-shell-side.el +++ b/agent-shell-side.el @@ -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,