The data branch is agents-data, checked out under .branches/ (#1736) - #1739
Merged
Conversation
Contributor
Author
|
Next commit here drops the inline skill from the system prompt: the agent gets How it gets there: the skill itself puts a symlink into every checkout it creates, one per harness — Why this way: it works the same for both harnesses (same file, same mechanism, no per-harness code in the daemon), and a new harness later is one more path in the skill's list. The alternative — the daemon passing |
suleimansh
marked this pull request as ready for review
August 28, 2026 19:24
This was referenced Aug 28, 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.
Second half of #1736, in two commits:
agents-data(wastf-data) and its checkout sits under.branches/beside the agent checkouts, at.branches/agents-data. The "temporary" spelling.the-framework/branches/tf-datafrom The skill owns its names: .branches/ and agent- (#1736) #1737 is gone.branchesskill is no longer pasted into the system prompt. The skill package links itself into every checkout it creates, where the agent's harness looks for skills —.claude/skills/branchesfor Claude Code,.agents/skills/branchesfor Codex — and the prompt's session-name step tells the agent to use it. Same mechanism for both harnesses; a new harness is one more path in the skill's list (decision in the comment below).Hard switch, no compat. What has to happen by hand after the merge is listed at the bottom — it's a branch rename on origin, and every machine re-ensures.
🤖 curated · Fable 5, effort high
What changed
framework-dir.ts:DATA_BRANCH = 'agents-data',DATA_CHECKOUT_DIR = '.branches/agents-data'(built from the skill'sBRANCHES_DIR, via the pure@gemstack/skill-branches/branch-namessubpath the dashboard already imports). The "temporary" comment is gone.data-branch.ts: afterworktree add, the checkout dir is hidden with/.branchesin git'sinfo/exclude— the same rule the skill writes when it creates an agent checkout, added here too because the data checkout can be the first checkout a project gets. The empty root commit's message uses the constant.framework-gitignore.ts: the comment line in.the-framework/.gitignorenames the branch from the constant..the-framework/LAYOUT(tracked):data-branch: agents-data— the Cloud web runs execute the published npm build, so their bookkeeping predates repo-side renames #1575 layout gate..the-framework/.gitignoreregenerated.data_branch_protocol.md(+ its SPEC,prompts/README.md,prompts/SPEC.md) sayagents-data..the-framework/branches/tf-datapaths now useDATA_CHECKOUT_DIR; the branch name stays a literal where a test names the branch on purpose.install.test.tschecks the gitignore's rule lines exactly (*,!.gitignore,!LAYOUT) instead of grepping the whole file foragents, which the comment line now contains.Commit 2 — the skill loads as a skill
skill-branches: newskill-links.ts—linkSkill(repo, checkout)makes one symlink per harness dir (HARNESS_SKILL_DIRS = ['.claude/skills', '.agents/skills']) namedbranches, pointing at the package dir (itsSKILL.mdis the skill), each hidden via the repository'sinfo/excludelike.branches/; best-effort, idempotent, leaves an existing entry alone. Called fromsettle(), so a created and a continued checkout both get it. The./SKILL.mdpackage export is gone — nothing reads it any more.framework:system-prompt.tsno longer appendsBRANCHES_SKILLfor an owned checkout (the non-owned fallbackBRANCH_YOURSELFstays);gen-prompts.mjsno longer compiles the package'sSKILL.md; the built-in prompt's session-name step now reads: "Name your branch after it: use thebranchesskill, which says how. Where that skill is not available, the "Branch management" section below says how instead."skill-links.SPEC.md;checkout.SPEC.md, the packageSPEC.md,system-prompt.SPEC.md,prompts/SPEC.md,prompts/system_prompt.SPEC.md,FEATURES-SPEC.mdsay the skill is the checkout's, not the prompt's.Dogfood — does the agent actually pick the skill up?
Yes. A throwaway repo with a local bare
origin, an isolated daemon built from this branch (XDG_CONFIG_HOMErig, port 4201), one local Opus run,handoff: local:.claude/skills/branchesand.agents/skills/branches→ the package;info/excludeholds/.branches,/.claude/skills/branches,/.agents/skills/branches;git status --porcelainin the checkout was empty.Skill {"skill": "branches"}→Bash "branches name add-farewell"→{"ok":true,"branch":"agent-add-farewell"}→ the edit → a commit →branches status→ done. The run'sbranchevent carriessessionName: "add-farewell"; the checkout's branch isagent-add-farewell..branches/agents-datafrom nothing, linkedticketsinto it at the root, and pushedagents-datato the remote.Codex was not run (no Codex login on this machine); its side is the same symlink to the same file, in the directory its docs name.
Proof: skill-branches 117/117, framework 1471/1471, dashboard 864/864, typecheck clean.
SPEC changes
packages/framework/src/framework-dir.SPEC.md— the "temporary" paragraph is gone, the intro names the place:packages/framework/src/data-branch.SPEC.md— rename only, 5 lines; the two that carry the path:packages/framework/prompts/data_branch_protocol.SPEC.md(7 lines),packages/framework/src/SPEC.md,packages/framework/prompts/SPEC.md,SPEC.md,FEATURES-SPEC.md(1 line each):tf-data→agents-data, nothing else.After the merge — by hand
Once, on origin (the branch rename; the daemon never renames a branch):
On every machine that ran the framework in this repo, after pulling main:
then start the daemon: it creates
.branches/agents-datafrom origin, re-linkstickets, and writes the/.branchesexclude.Known consequence, on purpose:
framework@0.7.0on npm still writesdata-branch: tf-data, so the layout gate (#1575) refuses that build in this repo from the merge on — cloud runs that install from npm are blocked until the next publish. The publish is held anyway until the skill packages are reviewed.