docs(runtimes): the acp runtime, ADR 0049 and SDK 1.26.0 (#1634) - #1839
Merged
Conversation
This was referenced Sep 10, 2026
lex00
reviewed
Sep 10, 2026
lex00
left a comment
Collaborator
There was a problem hiding this comment.
Two things before this one goes in:
CHANGELOG.mdline 50 has a stray>>>>>>> theirsmarker that this commit introduced (it is in none of the source branches).mainmoved to SDK 1.25.0 with #1809 after this stack was cut, so this release collides; it needs 1.26.0, and #1849 then needs 1.27.0 or the other way round depending on which lands first.
Approving the rest of the stack.
jhgaylor
force-pushed
the
stack/1634-7-conformance
branch
from
September 11, 2026 01:19
5c6b9a2 to
39fc7ba
Compare
jhgaylor
force-pushed
the
stack/1634-8-docs
branch
from
September 11, 2026 01:19
e91d1bb to
53ddf3e
Compare
jhgaylor
force-pushed
the
stack/1634-7-conformance
branch
from
September 11, 2026 01:41
39fc7ba to
238dd13
Compare
jhgaylor
force-pushed
the
stack/1634-8-docs
branch
from
September 11, 2026 01:41
53ddf3e to
5388bc2
Compare
Collaborator
Author
|
Rebased onto the current Worth noting the collision was invisible to the tooling: GitHub reported |
jhgaylor
force-pushed
the
stack/1634-7-conformance
branch
from
September 11, 2026 02:04
238dd13 to
1bc5c84
Compare
jhgaylor
force-pushed
the
stack/1634-8-docs
branch
from
September 11, 2026 02:04
5388bc2 to
586b513
Compare
jhgaylor
force-pushed
the
stack/1634-7-conformance
branch
from
September 11, 2026 02:10
1bc5c84 to
179a369
Compare
jhgaylor
force-pushed
the
stack/1634-8-docs
branch
from
September 11, 2026 02:10
586b513 to
c47d2bd
Compare
jhgaylor
force-pushed
the
stack/1634-7-conformance
branch
from
September 11, 2026 02:13
179a369 to
afadc23
Compare
The last PR of the stack. Everything the seven below it built is now documented, decided and released. - **`decisions/0049-the-acp-runtime-runs-a-command-you-name.md`.** The free-string decision was justified in a moduledoc, a migration docstring and a docs page, and in none of them durably: it is the kind of choice that constrains future work, and "why not a catalog of blessed commands" will be asked again. The ADR carries that, the isolation claim and where it is weakest, the two silent shell traps, and the four alternatives. Index regenerated; `okf validate decisions` reports 0 errors and only the four actor-convention warnings that already sit on other ADRs. - **`docs/catalog/runtimes/index.md`** gains the runtime, a row in the comparison table, a skills-layout row, and *Running a program as an agent*: the manifest, the five things that follow from the command being a shell line, and how the turn is priced. - **Two traps have their own paragraphs**, because both are silent and both cost a turn. Write `exec` before the program, or the login shell stays as the parent and an interrupt can leave the program running on a persistent sandbox. And nothing may print on stdout before the program starts, because a profile's banner lands in front of the first protocol message. - **What "the same isolation" means is stated where it is weakest.** On `sandbox_provider: runner` with the default backend it is a directory and the daemon's own user, so the page says so and links to trusted mode. - `docs/concepts/agent.md`, `docs/concepts/permissions.md` (both tables, since whether the command asks and how long a grant lasts are its decisions, not Fountain's), `docs/sdk.md`, `docs/reference/glossary.md`, `docs/build/index.md` and the three "all four runtimes speak ACP" lines. - **TypeScript SDK 1.26.0.** `Agent["model"]` is `string | null`, and the two request bodies take `string | null` optionally. A client that assumed a string needs a null check; nothing else on the wire changed shape. The Swift SDK's matching widening landed with the schema change earlier in the stack. The docs suite, `docs-style.py` (its one finding is a pre-existing page I did not touch), vale and destink all pass. Closes #1634 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01A2iMoNvSvrkQQfnP4RzVi2
jhgaylor
force-pushed
the
stack/1634-8-docs
branch
from
September 11, 2026 02:13
c47d2bd to
3b54c55
Compare
This was referenced Sep 11, 2026
This was referenced Sep 11, 2026
This was referenced Sep 11, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The last PR of the stack. Everything the seven below it built is now
documented and released.
docs/catalog/runtimes/index.mdgains the runtime, a row in thecomparison table, a skills-layout row, and Running a program as an agent:
the manifest, the five things that follow from the command being a shell
line, and how the turn is priced.
cost a turn. Write
execbefore the program, or the login shell stays as theparent and an interrupt can leave the program running on a persistent
sandbox. And nothing may print on stdout before the program starts, because a
profile's banner lands in front of the first protocol message.
string is safe because it runs where an environment's setup script already
runs. On
sandbox_provider: runnerwith the default backend that is adirectory and the daemon's own user, so the page says so and links to
trusted mode.
docs/concepts/agent.md,docs/concepts/permissions.md(both tables, sincewhether the command asks and how long a grant lasts are its decisions, not
Fountain's),
docs/sdk.md,docs/reference/glossary.md,docs/build/index.mdand the three "all four runtimes speak ACP" lines.
Agent["model"]isstring | null, and the two requestbodies take
string | nulloptionally. A client that assumed a string needsa null check; nothing else on the wire changed shape.
The docs suite,
docs-style.py(its two findings are pre-existing pages I didnot touch), vale and destink all pass.
Stack for #1634 (merge top down; each PR is based on the one below it in the list):
Fountain.CommandRuntimeand the host dispatch foracpagents.runtime_command, andacpbecomes a runtime you can nameReplaces #1677, which was the same feature as one 1,760-line branch.
🤖 Generated with Claude Code
https://claude.ai/code/session_01A2iMoNvSvrkQQfnP4RzVi2