원클릭으로
provider-parity-audit
Systematically audit and improve feature parity across Claude, Codex, and Gemini providers.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Systematically audit and improve feature parity across Claude, Codex, and Gemini providers.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Fully autonomous PR polish loop. Runs N rounds of local bramble review (codex + cursor, optionally + gemini), folds in any existing PR comments and CI failures as round-1 input, fixes findings locally, pushes once at the end.
Compare bramble code-review output across reviewer configs (cursor with composer-2, codex with gpt-5.4-mini, gemini with gemini-3.1-flash-lite-preview). Runs each config three times against the same branch — turn 1 fresh, turn 2 resumed with default follow-up prompt, turn 3 resumed with fresh prompt — to also characterize backend resume behavior, then compares findings side-by-side and logs results.
Build and use a ground-truth eval dataset for bramble code-review. Two modes. COLLECTION scans past /pr-polish'd PRs and judges each into a frozen ground truth — multiple rounds of bramble re-review + an independent judge sub-agent per round, until the judge's full-diff bug census saturates. REPLAY runs a reviewer-under-test and scores it mechanically against that frozen ground truth — precision/recall/F1, no sub-agents, cheap and repeatable.
One-shot review of an external GitHub PR. Checks out the PR into an isolated worktree (or temp clone), runs `bramble code-review` against the diff, and produces a calibrated verdict — APPROVE unless there is a blocking correctness issue, with optional improvements listed separately. Read-only on the remote PR, never pushes. User-invoked only via `/external-pr-review`.
Iterative review of a markdown design document. Reads the doc, proposes a tailored grilling rubric, runs N rounds of codex+cursor (optionally +gemini) against the doc with that rubric, edits between rounds, commits locally each round. Never pushes.
Ensure the current branch is cleanly rebased onto the remote base branch so that `origin/{base}..HEAD` only shows this branch's commits.
| name | provider-parity-audit |
| description | Systematically audit and improve feature parity across Claude, Codex, and Gemini providers. |
| disable-model-invocation | true |
Systematically find and fix capability gaps across Claude, Codex, and Gemini providers. The goal is to ensure the provider abstraction layer (multiagent/agent/) accurately represents each provider's capabilities and that higher-level consumers (Bramble sessions, swarm orchestration, task routing) work correctly regardless of which backend is active.
/provider-parity-audit [--iterations N] [--until "condition"] [--focus <area>]
| Flag | Default | Description |
|---|---|---|
--iterations N | 5 | Stop after N rounds |
--until "cond" | — | Stop when condition met (e.g., "no gaps in matrix") |
--focus <area> | all | Focus area: events, sessions, permissions, usage, mcp |
Read these files to understand the current state — don't research from scratch:
multiagent/agent/provider.go — Core Provider and LongRunningProvider interfacesmultiagent/agent/integration/provider_conformance_test.go — Current conformance expectationsagent-cli-wrapper/agentstream/event.go — Unified event interfacemultiagent/agent/bridge.go — Event bridging logicmemory/gap-matrix.md (in this skill's directory) — Current parity statusAlso review the provider implementations:
multiagent/agent/claude_provider.gomultiagent/agent/codex_provider.gomultiagent/agent/gemini_provider.goDo this research yourself before dispatching any work.
For each provider, document what the SDK wrapper actually supports by reading the implementation code. Don't guess from interface definitions alone — check what each method actually does.
Capability dimensions to check:
| Dimension | What to Verify |
|---|---|
| Basic execution | Execute() returns result with text, thinking, usage |
| Event streaming | Events() channel emits text, thinking, tool, turn, error events |
| Long-running sessions | Start() / SendMessage() / Stop() multi-turn flow |
| Permission handling | Permission callbacks work, modes (bypass/plan/default) respected |
| Token usage | InputTokens, OutputTokens, CacheReadTokens, CostUSD populated |
| MCP integration | MCP server configuration and tool routing |
| Tool tracking | ToolStart/ToolEnd events with name, ID, input, result |
| Thinking/reasoning | Thinking events emitted during execution |
| Error handling | Graceful error propagation, context cancellation |
| Work directory | Respects configured work directory |
bazel test //multiagent/agent/integration/... --test_timeout=120
Note which tests are skipped per provider and why. The conformance tests already encode known parity expectations — gaps marked with hasEvents: false or newLongRunning == nil are acknowledged limitations.
Start Bramble and run sessions with each provider to check the end-to-end flow:
providerRunner.bridgeProviderEvents()?Create a table in memory/gap-matrix.md:
supported / missing / partial / n/a with notesSort by impact: session-breaking gaps > data loss gaps > degraded UX > nice-to-have.
Print budget each round:
[Round N/max] | Focus: <area or all> | Until: <cond or N/A>
Select the highest-impact gaps from the matrix. Prioritize:
Each gap falls into one of these layers:
| Layer | Location | Example Fix |
|---|---|---|
| SDK wrapper | agent-cli-wrapper/<provider>/ | Parse new event type, handle new protocol message |
| Agentstream interface | agent-cli-wrapper/agentstream/ | Add new event kind, extend interface |
| Provider implementation | multiagent/agent/<provider>_provider.go | Wire new SDK event to AgentEvent, implement missing method |
| Event bridge | multiagent/agent/bridge.go | Handle new agentstream kind in generic bridge |
| Conformance tests | multiagent/agent/integration/ | Add test case, update expectations |
| Consumer layer | bramble/session/, multiagent/orchestrator/ | Handle new event type, update UI rendering |
For each gap:
Verify protocol behavior first — Use /protocol-research to confirm the CLI actually supports the capability. Don't implement handling for events that the CLI doesn't emit.
Write the conformance test first (TDD) — Add or update provider_conformance_test.go to express the expected behavior. The test should fail before your implementation.
Fix bottom-up — Start at the SDK wrapper layer and work up:
Update the provider's capability flags — If the provider now supports something new, update the conformance test expectations (hasEvents, newLongRunning, etc.).
After implementation:
# Lint first
scripts/lint.sh
# Build everything
bazel build //...
# Run all unit tests
bazel test //... --test_timeout=60
# Run conformance tests specifically
bazel test //multiagent/agent/integration/... --test_timeout=120
For integration-level changes, also test through Bramble to verify the end-to-end flow works.
memory/gap-matrix.mdStop if: max iterations reached, --until condition met, or no actionable gaps remain.
Provider (basic)
├── Execute(ctx, prompt, wtCtx, opts...) → AgentResult
├── Events() → <-chan AgentEvent
└── Close()
LongRunningProvider (extends Provider)
├── Start(ctx)
├── SendMessage(ctx, msg) → AgentResult
└── Stop()
Not all providers implement LongRunningProvider. Currently:
Provider only (thread-per-execution model)The bridgeEvents[E any]() generic function in multiagent/agent/bridge.go uses type assertions on agentstream interfaces. SDK events that don't implement any agentstream interface are silently skipped — this is intentional, not a bug. Provider-specific events (like claude.CLIToolResultEvent or codex.CommandOutputEvent) are SDK-internal details that don't need to cross the abstraction boundary.
These are documented in conformance tests:
hasEvents: false — limited streaming event emissionLongRunningProvider — uses ephemeral thread modelAgentUsage fields empty)| File | Purpose |
|---|---|
multiagent/agent/provider.go | Core interfaces and AgentEvent types |
multiagent/agent/bridge.go | Generic event bridge implementation |
multiagent/agent/integration/provider_conformance_test.go | Cross-provider test suite |
agent-cli-wrapper/agentstream/event.go | Shared event kind definitions |
bramble/session/manager.go | How Bramble creates and manages provider sessions |
bramble/session/provider_runner.go | How Bramble bridges provider events to TUI output |