Summary
The /implement skill is currently duplicated across four repos (Ground-Control, shifter, pulsar, aptl). ~80% of the content is byte-identical; the rest is repo-specific path conventions, UID example strings, and one behavioral fork (pulsar's plan-approval mode). Edits to the workflow don't propagate; bugs get fixed N times.
Beyond the dedup, the skill is currently only invokable from Claude Code. The same workflow needs to be drivable from Codex as well — same content, same MCP tool calls, same review pipeline — so the team isn't locked into a single agent runtime.
This issue captures the interim work to centrally package the workflow as an agent-neutral artifact, parameterized by per-repo .ground-control.yaml configuration, until GC-O009 lands the durable Temporal-workflow rewrite.
Requirement UIDs
- GC-O007 — Gated Agentic Development Loop (the workflow contract this skill embodies)
- GC-O009 — Workflow Orchestration via Temporal (the durable end state this work feeds into)
ADR Impact
- ADR-027 added — Central packaging of the implement workflow + dual-driver (Claude Code + Codex) compatibility + codex-as-reviewer-of-record invariant. Documents the
.ground-control.yaml schema additions (docs, example_paths, plan, preflight, cross_cutting_concerns, requirements.uid_examples), the agent-neutral content layout, and the constraint that all review steps continue to route through gc_codex_* MCP tools regardless of driver.
ADR-021 (Gated Agentic Development Loop) is not superseded — that ADR governs the workflow shape; ADR-027 governs how it's packaged and which agents can drive it.
What changed (proposed)
.ground-control.yaml schema extension
docs:
adr_dir: architecture/adrs/
architecture_overview: docs/architecture/ARCHITECTURE.md
coding_standards: docs/CODING_STANDARDS.md
workflow_reference: docs/DEVELOPMENT_WORKFLOW.md
knowledge_base: docs/knowledge/
example_paths:
source: backend/src/main/java/com/keplerops/groundcontrol/
test: backend/src/test/java/com/keplerops/groundcontrol/
requirements:
uid_examples: ["GC-X001", "OBS-042"]
plan:
approval_gate: user-mode # default; uses EnterPlanMode (Claude) or equivalent in Codex
# approval_gate: issue-comment # pulsar's variant
preflight:
required_before_planning: false
cross_cutting_concerns:
description: |
Logger: SLF4J via @Slf4j; structured logging via logstash-encoder
Validation: Bean Validation + @Validated; Zod on the frontend
Errors: ErrorResponse envelope via GlobalExceptionHandler
Tests: @WebMvcTest, @DataJpaTest, ArchUnit
gc_get_repo_ground_control_context extension
Return the new blocks alongside existing fields. Backwards compatible — repos without the new keys get sensible defaults (matching today's hardcoded values).
Skill content layout
- Single canonical workflow file lives in one place per host (
~/.claude/skills/implement/SKILL.md for the interim local approach; promoted to a packaged distribution if the Claude Code plugin format stabilizes — separately scoped, not blocking this work).
- Per-repo
.claude/skills/implement/ becomes optional override only if the repo legitimately needs to tweak something the schema doesn't capture.
- Codex-side: equivalent pointer via Codex's prompt/AGENTS conventions so both runtimes load the same canonical content.
- Skill prose renders against
cfg.docs.*, cfg.example_paths.*, cfg.cross_cutting_concerns.description instead of hardcoding paths.
Behavioral knobs as config
plan.approval_gate=user-mode (default) → skill uses EnterPlanMode (Claude) or Codex equivalent and waits for approval.
plan.approval_gate=issue-comment (pulsar) → skill posts plan as gh issue comment and proceeds directly to TDD.
preflight.required_before_planning=true (pulsar) → skill must complete codex preflight before producing the plan.
Codex-as-reviewer-of-record (invariant)
Regardless of which agent runtime drives the workflow, every review step continues to route through gc_codex_* MCP tools (gc_codex_review, gc_codex_verify_finding, gc_codex_architecture_preflight). Reviews don't switch to whichever agent runtime is driving — codex remains the reviewer of record. This must hold through ADR-027's central packaging AND through GC-O009's eventual Temporal migration.
Acceptance criteria
Ground Control Checks
This is a tooling/workflow change. Sweep is unaffected by it; deferred with reason.
Test plan
Traceability
- IMPLEMENTS: GC-O007 → canonical SKILL.md + the implement workflow in
~/.claude/skills/ (or chosen central location)
- IMPLEMENTS: GC-O009 → contributes the configuration model that the future Temporal workflow will consume; preserves codex-as-reviewer-of-record invariant
- IMPLEMENTS: GC-O007 →
.ground-control.yaml schema extensions (backend GroundControlYamlConfig-equivalent)
- IMPLEMENTS: GC-O009 → architecture/adrs/027-implement-workflow-packaging.md
- TESTS: GC-O007 → unit tests for
gc_get_repo_ground_control_context schema returns
- TESTS: GC-O007 → end-to-end smoke run of /implement from Claude Code AND Codex against the dummy issue
Related
Summary
The
/implementskill is currently duplicated across four repos (Ground-Control, shifter, pulsar, aptl). ~80% of the content is byte-identical; the rest is repo-specific path conventions, UID example strings, and one behavioral fork (pulsar's plan-approval mode). Edits to the workflow don't propagate; bugs get fixed N times.Beyond the dedup, the skill is currently only invokable from Claude Code. The same workflow needs to be drivable from Codex as well — same content, same MCP tool calls, same review pipeline — so the team isn't locked into a single agent runtime.
This issue captures the interim work to centrally package the workflow as an agent-neutral artifact, parameterized by per-repo
.ground-control.yamlconfiguration, until GC-O009 lands the durable Temporal-workflow rewrite.Requirement UIDs
ADR Impact
.ground-control.yamlschema additions (docs,example_paths,plan,preflight,cross_cutting_concerns,requirements.uid_examples), the agent-neutral content layout, and the constraint that all review steps continue to route throughgc_codex_*MCP tools regardless of driver.ADR-021 (Gated Agentic Development Loop) is not superseded — that ADR governs the workflow shape; ADR-027 governs how it's packaged and which agents can drive it.
What changed (proposed)
.ground-control.yamlschema extensiongc_get_repo_ground_control_contextextensionReturn the new blocks alongside existing fields. Backwards compatible — repos without the new keys get sensible defaults (matching today's hardcoded values).
Skill content layout
~/.claude/skills/implement/SKILL.mdfor the interim local approach; promoted to a packaged distribution if the Claude Code plugin format stabilizes — separately scoped, not blocking this work)..claude/skills/implement/becomes optional override only if the repo legitimately needs to tweak something the schema doesn't capture.cfg.docs.*,cfg.example_paths.*,cfg.cross_cutting_concerns.descriptioninstead of hardcoding paths.Behavioral knobs as config
plan.approval_gate=user-mode(default) → skill usesEnterPlanMode(Claude) or Codex equivalent and waits for approval.plan.approval_gate=issue-comment(pulsar) → skill posts plan asgh issue commentand proceeds directly to TDD.preflight.required_before_planning=true(pulsar) → skill must complete codex preflight before producing the plan.Codex-as-reviewer-of-record (invariant)
Regardless of which agent runtime drives the workflow, every review step continues to route through
gc_codex_*MCP tools (gc_codex_review,gc_codex_verify_finding,gc_codex_architecture_preflight). Reviews don't switch to whichever agent runtime is driving — codex remains the reviewer of record. This must hold through ADR-027's central packaging AND through GC-O009's eventual Temporal migration.Acceptance criteria
.ground-control.yamlschema extended withdocs,example_paths,plan,preflight,cross_cutting_concerns,requirements.uid_examplesblocks; backend deserializer updated; existing repos continue to load with sensible defaults for missing blocks.gc_get_repo_ground_control_contextMCP tool returns the new blocks; backwards compatible.~/.claude/skills/); per-repo.claude/skills/implement/either deleted (when no override needed) or reduced to a minimal override.plan.approval_gateandpreflight.required_before_planningconfig knobs work end-to-end (verified by toggling pulsar's config and seeing the appropriate behavior).gc_codex_*MCP tools — verified by running a full /implement cycle from Codex and confirming codex (not the driver agent) produces the review.Ground Control Checks
make policypassesgc_evaluate_quality_gatespasses or is unchanged by this repo-only changegc_run_sweepreviewed or intentionally deferred with reasonThis is a tooling/workflow change. Sweep is unaffected by it; deferred with reason.
Test plan
gc_get_repo_ground_control_contextreturns the new blocks; defaults applied when blocks are missing).gc_codex_review.plan.approval_gateand verify both branches (user-modetriggers EnterPlanMode/Codex equivalent;issue-commentposts to the issue).Traceability
~/.claude/skills/(or chosen central location).ground-control.yamlschema extensions (backendGroundControlYamlConfig-equivalent)gc_get_repo_ground_control_contextschema returnsRelated
/implementworkflow CI/codex iteration cost)