feat: add Kimi worker adapter, parity skills, and launcher hardening #1
No reviewers
Labels
No labels
agent:mac-pending
agent:vm-pending
bug
documentation
duplicate
enhancement
good first issue
help wanted
invalid
question
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
hermes/coding-agent-system!1
Loading…
Reference in a new issue
No description provided.
Delete branch "feat/kimi-adapter-and-parity"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Lands work that had been sitting uncommitted in the installed copy at
/root/coding-agent-system, somaincan move forward again.Contents
Kimi worker support
host/local/bin/agent-kimi— host adapterlib/kimi_config.py,lib/kimi_session_guard.pytests/test_kimi_config.py,tests/test_kimi_session_guard.pySkills from the agent-scripts parity review
create-cli,github-project-triage,ssh-doctor,worker-firstdocs/steipete-agent-scripts-parity.md,docs/plan/steipete-parity.mdLauncher and contract hardening
host/local/bin/agent-claude,host/local/bin/agent-codexhooks/dispatch.py,lib/host_contract.py,lib/skill_layout.pybin/agent-system-doctor,configure-hosts.pytests/test_agent_claude_launcher.py,tests/test_agent_permission_contract.py32 paths, +3768/-64.
Verification
./validate.shpasses at the branch head2992c46: 140 tests, 2 skipped, repository check PASS.Why this was uncommitted
/root/.agents/bin/*symlinks point directly into this repository's working tree, so the checked-out branch is the live installed engineering system. The earlier fast-forward ofmaintoaef4e97was refused because those uncommitted changes toAGENTS.mdwould have been overwritten. Now that the work is committed on a branch,maincan advance normally — GitHub reports this branch as cleanly mergeable, so the twoAGENTS.mdedits do not overlap.The host stays checked out on this branch until the PR merges, to avoid breaking the live adapters.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit:
2992c468f6ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
@ -192,3 +212,3 @@for name in ("agent-claude", "agent-codex"):for name in host_launchers:source = host_integration / "bin" / namefor binary in (agents / "bin" / name, home / ".local" / "bin" / name):If
hostLaunchersis a JSON list containing a non-string unhashable value, such as["agent-claude", {}], constructingset(host_launchers)raisesTypeErrorbefore the later element-type validation runs. The doctor therefore exits with a traceback instead of reportingagent hostLaunchers configuration is invalid; validate that every item is a string before deduplicating.Useful? React with 👍 / 👎.
@ -29,0 +371,4 @@rewrite_config_arguments "$@" || exit $?if [[ -n "$staging_dir" ]]; thenif ! /usr/bin/chown "$uid:$gid" -- "${staged_config_files[@]}" "$staging_dir"; thenecho "agent-claude: could not transfer staged configs to execution user '$run_as'" >&2On an OpenClaw host using the default
claude-agentexecution user, this grants that general Claude worker read/write access to/root/.openclaw/workspace/MEMORY.md; the loop immediately above also grants recursive access to the workspace memory directory. This contradicts the explicit isolation goal indocs/plan/steipete-parity.md:28and allows unrelated repository workers to inspect or alter persistent personal context, so these ACLs must remain restricted to the owning orchestrator rather than the shared Claude runner.AGENTS.md reference: AGENTS.md:L114-L118
Useful? React with 👍 / 👎.
--For a noninteractive invocation such as
agent-claude -p -- -h, the-his positional data after the end-of-options marker, but this scan still classifies the entire invocation as passthrough. The passthrough branch then launches Claude without the explicit managed permission arguments, relying on mutable provider configuration instead; stop classification at--, as the later permission parser already does.AGENTS.md reference: AGENTS.md:L28-L30
Useful? React with 👍 / 👎.
When the command is
revieworexec review, this unconditionally overwrites the declared or defaultAGENT_ACCESS_MODE=writewithread. That changes the real permission profile based solely on a role/command name, contrary to the repository contract; callers that need a read-only review should declareAGENT_ACCESS_MODE=read, while an explicit write profile must remain unchanged.AGENTS.md reference: AGENTS.md:L31-L33
Useful? React with 👍 / 👎.
@ -0,0 +92,4 @@case "$argument" in--yolo|-y|--yes)requested_yolo=1;;When
AGENT_ACCESS_MODE=read, accepted clusters such as-ymoperatorstill enable Kimi's-yflag, but this check only detects an argument that equals-y. The clustered-option parser inlib/kimi_session_guard.pyexplicitly treatsyas a standalone flag, so the invocation passes preflight and launches with yolo enabled despite the read-mode contract; detectyinside valid short-option clusters or reject such clusters in read mode.AGENTS.md reference: AGENTS.md:L31-L33
Useful? React with 👍 / 👎.
@ -0,0 +125,4 @@exec "$kimi_bin" "$@" \--agent-file "$agent_file" \--config-file "$config_file" \"${permission_args[@]}"For an accepted invocation such as
agent-kimi --print -- prompt, Kimi treats--as the end of options, so the subsequently appended--agent-file,--config-file, and--yolotokens are positional arguments rather than configuration flags. This launches without the canonical policy, managed hooks, or explicit write bypass; insert the managed options before the caller's--or reject that form.AGENTS.md reference: AGENTS.md:L28-L30
Useful? React with 👍 / 👎.
@ -0,0 +27,4 @@if os.geteuid() != 0 or not SETPRIV.is_file():return Falseuser = pwd.getpwnam(user_name)return identity_is_mapped(Path("/proc/self/uid_map"), user.pw_uid) and identity_is_mapped(When the suite runs as root on a host without the optional
claude-agentaccount,pwd.getpwnam()raisesKeyErrorwhile theskipUnlessdecorators are being evaluated, sotest_agent_claude_launchercannot even be imported. This currently makes./validate.shfail in a standard root container; treat an unknown account asFalseso the environment-dependent tests are skipped as intended.Useful? React with 👍 / 👎.
View command line instructions
Manual merge helper
Use this merge commit message when completing the merge manually.
Checkout
From your project repository, check out a new branch and test the changes.Merge
Merge the changes and update on Forgejo.Warning: The "Autodetect manual merge" setting is not enabled for this repository, you will have to mark this pull request as manually merged afterwards.