Skip to content

feat(agents): add remaining 15 adapters (droid, amp, agy, crush, aider, goose, auggie, continue, devin, cline, kiro, kilocode, vibe, pi, autohand)#150

Merged
harshitsinghbhandari merged 5 commits into
mainfrom
land/remaining-adapters
Jun 6, 2026
Merged

feat(agents): add remaining 15 adapters (droid, amp, agy, crush, aider, goose, auggie, continue, devin, cline, kiro, kilocode, vibe, pi, autohand)#150
harshitsinghbhandari merged 5 commits into
mainfrom
land/remaining-adapters

Conversation

@harshitsinghbhandari
Copy link
Copy Markdown
Collaborator

Summary

Lands the remaining 15 yyovil agent adapters onto main via the cherry-pick recipe from Discussion #148, following #119 (platform) and #145 (grok/cursor/qwen/copilot/kimi).

Adapters added in this PR (registered in registry.Constructors() and activitydispatch.Derivers where applicable):

  • droid, amp, agy, crush, aider, goose, auggie, continue, devin, cline, kiro, kilocode, vibe, pi, autohand

After merge, registry.Constructors() will hold the full set of 23 shipped adapters and all 24 entries in migration 0007_allow_implemented_harnesses.sql are wired.

Approach

Per Discussion #148:

cherry-pick the adapter's own commit onto a fresh branch off main … You can batch multiple adapters into one PR (that's what #145 did for the first five).

Commits cherry-picked from origin/agents/02-droidorigin/agents/20-autohand:

Adapter Cherry-pick
droid 3f94a65
amp dbb800e
agy 0da8825
crush 8ff7b3a
aider e37fef8
goose b936443
auggie 6ffac86
continue afb9430
devin 0cb96f6
cline 3925e6b
kiro 1e6b496
kilocode 1c58723
vibe 302cab3
pi 2d73665
autohand 8c3e9d9

The first 3 adapters (droid/amp/agy) preserve yyovil's per-adapter commits; the remaining 12 are squashed into one batch commit because each commit's edits to registry.go / activitydispatch/dispatch.go / wiring_test.go conflicted with the previous adapter's additions to the same regions, and resolving each conflict individually was strictly mechanical (keep both sides). The adapter directories themselves are unchanged from yyovil's commits.

Test plan

  • cd backend && go build ./... — clean.
  • cd backend && go test -race ./... — 1081 passed in 61 packages.
  • GitHub CI

🤖 Generated with Claude Code

yyovil and others added 4 commits June 7, 2026 03:30
Registers the droid harness, stacked on the agent platform. Includes its own activity deriver.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Registers the amp harness, stacked on the agent platform.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Registers the agy harness, stacked on the agent platform. Includes its own activity deriver.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…, kiro, kilocode, vibe, pi, autohand adapters

Cherry-pick batch landing the remaining 12 yyovil adapter directories per
Discussion #148 recipe, on top of #145 (grok/cursor/qwen/copilot/kimi) and
the droid/amp/agy commits earlier on this branch. Each adapter is a
self-contained package under backend/internal/adapters/agent/<name>/;
registry.Constructors(), activitydispatch.Derivers (for adapters with
activity.go), and wiring_test.go are unified to register all 23 shipped
adapters in one place. No new migration: 0007_allow_implemented_harnesses
already widens the sessions.harness CHECK to cover every adapter.
@greptile-apps
Copy link
Copy Markdown
Contributor

greptile-apps Bot commented Jun 6, 2026

Greptile Summary

This PR lands the remaining 15 agent adapters (droid, amp, agy, crush, aider, goose, auggie, continue, devin, cline, kiro, kilocode, vibe, pi, autohand), completing the full set of 23 shipped adapters registered in registry.Constructors() and wiring all 24 entries in the 0007_allow_implemented_harnesses.sql migration.

  • Each adapter follows the established pattern: binary resolution with platform-specific PATH fallback, permission-mode mapping, in-command prompt delivery, and where applicable, hook installation or Claude-compat delegation. Tier B adapters (devin, continueagent) reuse claudecode.Plugin.GetAgentHooks to benefit from Claude-format lifecycle hook payloads without duplicating hook-install logic.
  • Seven new DeriveActivityState functions are registered in activitydispatch.Derivers; adapters with no native hook surface (Tier C) and those delegating through the claudecode dispatcher are correctly omitted from that map.

Confidence Score: 5/5

All 15 adapters follow the codebase's established patterns, build cleanly, and pass the full test suite including race detection.

The changes are purely additive — new adapter packages wired into the registry and dispatch map with no modifications to existing adapters or shared infrastructure. Each adapter is self-contained and tested. The two new findings are documentation gaps and a code-duplication nit with no effect on runtime behavior.

No files require special attention; the noted issues in agy/agy.go and kilocode/hooks.go are quality-of-life items only.

Important Files Changed

Filename Overview
backend/internal/adapters/agent/registry/registry.go Registers all 15 new adapters in Constructors(); ordering matches the PR description and no adapter is duplicated or missing.
backend/internal/adapters/agent/activitydispatch/dispatch.go Registers 7 new DeriveActivityState functions (droid, agy, goose, cline, kiro, kilocode, autohand); Tier-C and Claude-compat adapters are correctly omitted.
backend/internal/adapters/agent/agy/agy.go AcceptEdits and Auto permission modes are silently dropped with no explanatory comment, unlike peer adapters that document intentional no-ops.
backend/internal/adapters/agent/kilocode/hooks.go Duplicates atomicWriteFile locally instead of using hookutil.AtomicWriteFile; sentinel-guarded overwrite/delete logic is correct and idempotent.
backend/internal/adapters/agent/droid/droid.go Well-structured adapter; permission modes delivered via temp-file settings approach correctly keyed by session id and sanitized for safe path construction.
backend/internal/adapters/agent/continueagent/continueagent.go Delegates hook install to claudecode.Plugin (Continue's Claude-compat layer), uses --fork for targeted resume rather than --resume (last session only).
backend/internal/adapters/agent/goose/goose.go Permission delivered via GOOSE_MODE env prefix; Auto and BypassPermissions intentionally collapse to 'auto' (documented); binary name collision with pressly/goose is acknowledged.
backend/internal/adapters/agent/devin/devin.go Delegates hook install to claudecode.Plugin via Devin's documented Claude-compat layer; AcceptEdits maps to 'auto' with explanatory comment.
backend/internal/daemon/wiring_test.go Adds resolver coverage for all 15 new adapters including the continue/continueagent name split; complete and consistent.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    R[registry.Constructors] --> A1[droid] & A2[amp] & A3[agy] & A4[crush] & A5[aider] & A6[goose] & A7[auggie] & A8[continueagent] & A9[devin] & A10[cline] & A11[kiro] & A12[kilocode] & A13[vibe] & A14[pi] & A15[autohand]

    subgraph TierA[Tier A - Native Hooks]
        A1 --> H1[.factory/hooks.json]
        A3 --> H3[agy hooks]
        A6 --> H6[.agents/plugins/hooks.json]
        A10 --> H10[.clinerules/hooks/]
        A11 --> H11[.kiro/hooks/]
        A12 --> H12[.kilocode/plugins/ao-activity.ts]
        A15 --> H15[autohand hook config]
    end

    subgraph TierB[Tier B - Claude Compat]
        A8 --> CC[claudecode.Plugin.GetAgentHooks]
        A9 --> CC
    end

    subgraph TierC[Tier C - No Hooks]
        A2 & A4 & A5 & A7 & A13 & A14 --> NOOP[no-op]
    end

    D[activitydispatch.Derivers] --> |droid,agy,goose,cline,kiro,kilocode,autohand| DA[DeriveActivityState]
    CC --> |ao hooks claude-code evt| DA2[claudecode deriver]
Loading

Reviews (2): Last reviewed commit: "fix(agents/kilocode): return error from ..." | Re-trigger Greptile

Comment thread backend/internal/adapters/agent/crush/activity.go
Comment thread backend/internal/adapters/agent/kilocode/kilocode.go Outdated
Comment thread backend/internal/adapters/agent/cline/cline.go
…nfig

Previously the marshal error was discarded and the function returned a
prefix carrying an empty KILO_CONFIG_CONTENT. An unrecoverable marshal
failure for the typed map should never happen in practice, but if it ever
did, Kilo would silently launch with default permissions regardless of
the requested mode. Surface it as "no prefix" so the caller's mode choice
can't be misrepresented.
@harshitsinghbhandari harshitsinghbhandari merged commit 9dedae9 into main Jun 6, 2026
8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants