Add a new third-party integration (Jira/Linear-style) — per-workspace credentials, 90s auth-health poller, settings page, link/import buttons. Use when scaffolding a new external service integration.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Debug an ACP agent CLI by spawning it, speaking raw JSON-RPC, and capturing every frame to a JSONL file. Use when the user asks to probe an agent's capabilities, compare agents, test a prompt against an agent, inspect raw ACP wire frames, or investigate why an agent fails to initialize.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
실행 점수 미검증
설치 방법 보기설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.
Run a headless ACP JSON-RPC session against any registered kandev agent (or an arbitrary command), record every wire frame to a JSONL file, and summarize the handshake. Backed by the acpdbg binary at apps/backend/bin/acpdbg.
session/new response actually look like for X"test -x apps/backend/bin/acpdbg || make -C apps/backend build-acpdbg
acpdbg list # enumerate registered ACP agents
acpdbg probe <agent> # initialize + session/new + close
acpdbg probe --exec "<cmd> [args...]" # probe an arbitrary binary not in the registry
acpdbg mcp-probe <agent> # inject a temporary MCP sentinel into session/new
acpdbg prompt --prompt "..." [--model M] [--mode M] <agent>
acpdbg session-load --session-id <id> <agent>
acpdbg matrix # probe every ACP agent in parallel
Flags MUST come before the positional
<agent>. The CLI uses Go's stdlibflagparser, which stops at the first non-flag token — so any flag placed after<agent>is silently ignored (probe/matrix, e.g. a dropped--timeout) or errors (prompt→--prompt is required). Always writeacpdbg prompt --prompt "..." --timeout 240s <agent>, notacpdbg prompt <agent> --prompt ....
Shared flags (apply to every sub-command):
--out DIR — JSONL output directory (default ./acp-debug/)--file PATH — exact JSONL path, overrides --out--timeout DUR — overall run timeout (default 30s)--workdir PATH — child cwd (default: fresh /tmp/kandev-acpdbg-<pid>-*)--verbose — mirror frames to stderr--stderr — capture child stderr into the JSONLCreate a task for each step below and mark them as completed as you go.
acpdbg probe Xacpdbg prompt --prompt "..." Xacpdbg matrixacpdbg session-load --session-id <id> Xacpdbg mcp-probe Xacpdbg probe --exec "path/to/bin --acp"Always capture stdout — it contains the JSONL file path (and for matrix, the summary table and matrix-summary.json path).
apps/backend/bin/acpdbg probe --timeout 45s auggie
For matrix, prefer --timeout 60s so npx-spawned agents have time to cold-start.
For Claude ACP, the generated default workdir is an absolute temporary
directory and is sent as the ACP cwd; no --workdir flag is required. If
you override it, supply an existing absolute directory (for example, run
mkdir -p /tmp/kandev-acpdbg-claude before passing that path to --workdir).
An empty cwd can cause Claude to reject session/new; confirm the cwd in
the recorded request frame before diagnosing a provider failure.
The JSONL schema is:
direction | Meaning | Extra fields |
|---|---|---|
meta | acpdbg-generated marker | event (start / close), meta (map with agent, command, workdir for start; exit_code, reason for close) |
sent | Frame written to child's stdin | frame (JSON-RPC request or reply) |
received | Frame read from child's stdout | frame (JSON-RPC request, response, or notification) |
stderr | Child stderr line (only when --stderr) | line |
Entries are strictly chronological. Each line is a single JSON object terminated by \n.
Useful jq recipes:
# Full initialize response
jq -c 'select(.direction == "received" and .frame.id == 1)' acp-debug/<file>.jsonl
# Full session/new response (models, modes, auth)
jq '.frame.result' acp-debug/<file>.jsonl | head -50
# Just the models advertised
jq -r 'select(.direction == "received") | .frame.result.models.availableModels[]?.modelId' acp-debug/<file>.jsonl
# Close event (exit code + reason)
jq -c 'select(.direction == "meta" and .event == "close")' acp-debug/<file>.jsonl
# All agent-initiated requests we auto-replied to
jq -c 'select(.direction == "received" and .frame.method and .frame.id)' acp-debug/<file>.jsonl
Give a concise markdown summary: agent, protocol version, models found (with currentModelId), modes found (with currentModeId), auth methods, any errors, and the JSONL path for deeper inspection. Example:
**auggie** (protocol v1, auggie 0.20.1)
Models (11): claude-sonnet-4-6 (current), claude-opus-4-6, gpt-5-4, …
Modes (2): default (current), ask
Auth methods: (none advertised)
JSONL: acp-debug/auggie-probe-20260409-183104.jsonl
Common failure modes:
| Symptom | Likely cause | Next step |
|---|---|---|
meta close exit_code: 127 immediately | child binary not installed | Check which <cmd>; suggest install command |
meta close before any received frame | child crashed on startup | Re-run with --stderr to capture the error |
initialize response has populated authMethods but session/new fails | auth required | Surface the auth method ids; suggest setting env var / running CLI login |
session/new hangs (context deadline exceeded) | agent waiting on an unanswered agent-initiated request | Check JSONL for received frames with method + id that we auto-replied to with method not found — the agent may be retrying |
Response has no models / modes fields | agent doesn't expose them over ACP | Not a bug — document the gap |
Re-run with --stderr whenever the child exits before the handshake completes; the stderr lines land in the JSONL and usually contain the root cause.
For mcp-probe, distinguish sentinel_delivered (the agent accepted the
session/new configuration) from initialize_observed and
tools_list_observed (the temporary endpoint received MCP traffic). An
unobserved result is intentionally not a generic agent failure: a provider
can attach lazily or ignore the supplied transport. Sentinel metadata has only
opaque connection IDs and timestamps; the explicit acpdbg JSONL still contains
raw ACP frames and must stay a developer-only artifact.
matrix, read matrix-summary.json toojq '.' acp-debug/matrix-summary.json
One entry per agent with status, models_count, current_model_id, auth_methods_count, duration_ms, and jsonl (the full per-agent JSONL file). Useful for answering "which agents succeeded / failed / need auth" without re-reading every JSONL.
matrix-summary.json output or build a separate visualization tool on top of the JSONL.fs/read_text_file, session/request_permission, etc.) are answered with -32601 method not found so the session doesn't hang. If you need to exercise a real permission flow, use the full kandev backend.auggie --acp invocation.아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.
로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.
아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.
Add a new third-party integration (Jira/Linear-style) — per-workspace credentials, 90s auth-health poller, settings page, link/import buttons. Use when scaffolding a new external service integration.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Delete local branches whose remote has been deleted ([gone]), including their worktrees. Use for branch cleanup after merging PRs.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Review changed code for quality, security, and architecture compliance. Use only when the user explicitly requests local review or a PR finding requires it.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Stage and commit changes using Conventional Commits. Use when there are dirty/staged files to commit, the user says "commit", or before pushing a PR.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Curate the right project context before coding or debugging. Use when starting a new session, switching areas of the codebase, output quality is drifting, a task spans backend/frontend/docs, or external instructions need to be reconciled with Kandev conventions.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Create, modify, debug, test, package, or publish a Kandev runtime plugin in its dedicated repository. Use only when the requested work targets a Kandev plugin implementation or its release and marketplace lifecycle, including fixing a bug in an existing plugin. Do not use for agent skills, MCP servers, general integrations, or Kandev host, SDK, loader, and registry changes that do not also change a plugin.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.