Repository navigation
matrix: add openhands, amp, kiro and factory_droid (A3, vendor-docs) - #180
Merged
Merged
Conversation
openhands gets a config-driven adapter in the flat_decision family. Its
hooks page (docs.openhands.dev, read 2026-10-11, against OpenHands v1.26.0
and agent SDK v1.54.0) documents a per-repository .openhands/hooks.json
that accepts the Claude Code format, the event name under `event_type`,
and a block as {"decision": "deny", "reason"} or exit 2 at PreToolUse,
UserPromptSubmit and Stop. A bare allow is exit 0. Any other exit code
proceeds, so the row is fail-open. Escalate and transform degrade to a
block. The derived grades are best-effort at pre_tool, prompt_submit and
stop, and detect elsewhere.
amp, kiro and factory_droid get unadapted rows with events {} and dated
doc links:
- Amp documents only an in-process TypeScript plugin API. Its legacy
delegate permission helper is an exit-code check with no event name.
- Kiro has command hooks, but in a dialect no family speaks: a versioned
list of named hooks with an action object, and an exit-code verdict
that the IDE and CLI read differently.
- Factory Droid speaks the Claude Code dialect, but its payload carries
the same keys as Claude Code's, including the markers used to
recognise Claude Code. A factory_droid adapter would make detection
ambiguous for Claude Code payloads too. Separating them needs a
value-based probe, which is a core change.
The instruction-count pin moves to 25. The example docstrings' wiring
counts and the VERIFY.md adapter count are re-measured against 14
adapters.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Jothi Mani Rajendran <250249270+jothimani-rajendran@users.noreply.github.com>
The figure generator's 21-agent layout pin moves to 25. Its description names the three new agents with nothing gateable at pre_tool, and the thirteenth best-effort one. The figures and the brand-assets card are regenerated from the package (14 adapters, 25 in the matrix). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Jothi Mani Rajendran <250249270+jothimani-rajendran@users.noreply.github.com>
This was referenced Oct 11, 2026
Each row's notes now point at its evidence-wanted issue: #181 (openhands), #182 (amp), #183 (kiro) and #184 (factory_droid). The openhands example page is regenerated to carry the new note. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Jothi Mani Rajendran <250249270+jothimani-rajendran@users.noreply.github.com>
make_social.py renders the PNG from social-card.svg when cairosvg is installed. The committed PNG still said 21 agents; this one matches the SVG (25 agents x 12 events, 0 of 300 cells enforced). CI does not reproduce the PNG, so the SVG stays the asserted artifact. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Jothi Mani Rajendran <250249270+jothimani-rajendran@users.noreply.github.com>
jothimani-rajendran
marked this pull request as ready for review
October 11, 2026 03:40
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.
What this changes
This is batch A3 of org-plan
plan/one-oh-gaps.md(at 5271b89). It adds four matrix rows, all atbasis: vendor-docs.flat_decisionfamily.src/agentseam/data/vendors/openhands.jsonis added and joins_CONFIG_DRIVEN.tests/test_adapter_openhands.py(14 tests) andexamples/generated/openhands.mdcome with it.unadaptedrows withevents {}, dated doc links and a note saying why.Derived tiers at
pre_tool, fromagentseam tier-table. The table's own Tier column is the matrix's categoricaltierfield, which is set in the row; the grade and fail mode are derived.openhands' grades at its other events: best-effort at
prompt_submitandstop; detect atpost_tool,session_startandsession_end.Evidence-wanted issues, each linked from its row's notes:
Claim check
MATRIXrow carries averifiedrecord (version, date, method)file_editor/definition.pyat v1.54.0. Versions: OpenHands v1.26.0 (2026-10-08);openhands-sdk1.54.0, measured on PyPI (2026-10-09).@ampcode/cli0.0.1791676897-g77c125, measured on npm (2026-10-11).droid0.238.0, measured on npm (2026-10-10).Why each of the three is unadapted
delegatepermission helper is an exit-code check. It receives no event name and runs only when the user has already opted into the old permissions system.{version: "v1", hooks: [{name, trigger, matcher, action: {type, command}}]}, which no install wrapper writes;transcript_pathandpermission_mode, whichlooks_like_claude_codetreats as markers. Afactory_droidclaim would make detection ambiguous for every Claude Code payload too, and an ambiguous payload is allowed through. Separating the two needs a value-based probe, which is a core change.Checks
pytest -qpasses locally: 2117 passed, 4 skippedruff check .andruff format --check .passtests/check_stdlib_only.pyOK)Notes for the reviewer
Measured risk, recorded in the kiro row rather than fixed (it would need a core change). Today
detect()assigns a Kiro-shaped payload toclaude_code. A deny then goes back as a JSON body with exit 0, and Kiro reads only the exit code, so the deny would not block. The row says Kiro is not a supported target. A Droid-shaped payload is also detected asclaude_code, and its wire answer is the one Droid documents. However, Droid'sExecuteandCreatetools are not in Claude Code's tool lists, so a policy keyed on shell or write tools would not recognise those calls. The factory_droid row records this.Known OpenHands limit, recorded in the row.
file_editorcarries its own sub-command (create,str_replaceand so on) intool_input.command, the same key the shell tool uses. SoEvent.commandcarries it for file-editor calls.Changes beyond the plan's Touches, all required by invariant tests or CI generators:
instructions.py(AGENTS.md for all four agents), allow-semantics for openhands, and the packaging and permissions unrecorded reasons.tools/capture.py.tables.pyanddialects.py.test_decision_vocabularyprobe addsevent_type=.test_instructionspin moves from 21 to 25, as do themake_matrixandmake_socialpins.event_log.pyandnotify.pydocstrings: 11 of 14 and 13 of 14 adapters wire;tools/VERIFY.mdandtools/capture.py: 12 of 14 adapters rest on docs or source.README counts are left alone on purpose: A4 owns them.
Missing label:
evidence wanteddoes not exist in this repo. The four issues carryhelp wantedonly. Should the owner create the label?🤖 Generated with Claude Code