Offer PATH-detected cc-harness agents at /kickoff (work-system 1.12.0) - #52
Open
gering wants to merge 1 commit into
Open
Offer PATH-detected cc-harness agents at /kickoff (work-system 1.12.0)#52gering wants to merge 1 commit into
gering wants to merge 1 commit into
Conversation
When a `cc-harness-agents` helper is on PATH, /kickoff merges its foreign agents into the picker: full Claude Code sessions driven by a foreign model (cc-harness:grok, :kimi, :sol) via a local gateway. Auto-detected via one `command -v`; helper absent means no change from today. - agent-registry.sh: merge the helper's 4-column TSV (name/model/available/ note) into the 5-column list as cli=cc-harness, map only literal `available=yes` to available (fail closed on `unknown`), and resolve cc-harness:<id> to `cc-harness-agents exec <id> -- claude [-n <s>] /work-system:continue` — no --model, the helper sets it via env before exec'ing into claude, so the herdr pane roots at claude and agent_status + /close stay intact. - Helper exit 3 (capability absent) is a silent degrade, distinct from a listed-but-unavailable provider (resolve exit 3 + the helper's fix hint). - No per-agent code: whatever `list` prints becomes a picker entry — tested with a name the plugin has never shipped. - Lifecycle parity: supports= is the full claude set; a committed cc-harness:<id> default validates through the helper and falls back to the picker when it is gone. - Docs: plugins/work-system/docs/cc-harness-agents.md (contract + setup), knowledge, READMEs, CHANGELOG; kickoff/adopt picker prose. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DE9DzwzzsMMu84KxC1cB5R
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.
Summary
/kickoffcan now launch cc-harness foreign agents — full Claude Code sessions driven by a foreign model (e.g.cc-harness:grok,cc-harness:kimi,cc-harness:sol) through a local gateway. Strictly more capable than the nativegrok/codexCLI voice, which has no work-system skills.command -v cc-harness-agents. Helper absent → no behavior change at all.list/exec). No gateway URL, no token path, no model table, no per-agent code path — whateverlistprints becomes a picker entry.Changes
scripts/agent-registry.shname/model/available/note) into the 5-column list ascli=cc-harness. Availability and note come straight from the helper — no re-probing of gateway or credentials.available=yescounts as available (unknownfails closed for launch).resolve cc-harness:<id>emitscc-harness-agents exec <id> -- claude [-n <session>] /work-system:continue. No--model: the helper sets it via env, thenexecs intoclaude, so the herdr pane roots atclaudeandagent_status+/closeteardown stay intact.resolveexit 3 with the helper's fix hint).Picker (
skills/kickoff/SKILL.md, referenced by/adopt)cc-harness agents ▸aggregate, shown only when the helper printed rows. Page 2: the concrete harness agents.AskUserQuestion's hard 4-options-per-question cap — which the 7 native entries already exceeded.SELECTOR; the "save as project default?" answer is taken from the page where the final pick happened. Where a set still exceeds 4: consolidate and name what was left out (--agent <name>reaches any entry) — never silently truncate.Lifecycle parity
supports=is the full claude set —/continue,/closeScenario A/B and tab glyphs work unchanged. Nothing assumesargv[0] == claude.cc-harness:<id>default validates through the helper and falls back to the picker when the helper is gone (same path as a stale native name).Bug fixed while demoing
list's human table dropped the last harness row:$( )strips the trailing newline off the merged block, and the table'swhile readthen discards the final newline-less line — silently, and only in the table, since--jsonparses it fine. That table is exactly what the picker reads, so the lost row was an agent the user could never choose.Docs
plugins/work-system/docs/cc-harness-agents.md— the full contract (both subcommands, TSV columns, exec semantics, exit codes), a setup sketch, and security notes for helper authors.CLAUDE.md; version bumped to 1.12.0 inplugin.json+marketplace.json.Readiness
main— up-to-datekickoff-agent-selection.md+_index.mdupdatedcheck-structure.pygreen (0 errors), incl.test_agent_registry.pyDependency status
The paired dotfiles helper (
gering/dotfilesPR #12) is still open and not installed on PATH here. Everything in this PR is built against the documented contract and verified with mocks — no live integration has been exercised. Once the helper lands, a real/kickoff --pickrun is the remaining verification.Test plan
python3 plugins/work-system/scripts/test_agent_registry.py— passespython3 scripts/check-structure.py— 0 errorsagent-registry.sh listis unchanged, andresolve cc-harness:grokexits 2 with a hint naming the helperlist(including the last one),--jsonand the human table agree on the row countresolve cc-harness:<id> --session fooyieldscc-harness-agents exec <id> -- claude -n foo /work-system:continuewith no--modelavailable=nostill emits argv and exits 3 with the helper's note🤖 Generated with Claude Code
https://claude.ai/code/session_01DE9DzwzzsMMu84KxC1cB5R