Paseo Committee
getpaseo/paseo
Forms a two-agent committee with contrasting profiles to analyze a stuck problem in parallel, reconcile their views and return a consensus plan without editing files.
Shorthand for oh-my-claudecode's consensus planning, where Planner, Architect and Critic agents iterate on a plan before any execution begins.
$ npx skills add Yeachan-Heo/gajae-code --skill ralplan -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install Yeachan-Heo/gajae-code ralplan --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/Yeachan-Heo/gajae-code.git skills-src && mkdir -p .claude/skills && cp -r skills-src/packages/coding-agent/src/defaults/gjc/skills/ralplan .claude/skills/ralplan && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "ralplan" agent skill from https://github.com/Yeachan-Heo/gajae-code/tree/main/packages/coding-agent/src/defaults/gjc/skills/ralplan into .claude/skills/ralplan/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ralplan", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/Yeachan-Heo/gajae-code/tree/main/packages/coding-agent/src/defaults/gjc/skills/ralplanType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add Yeachan-Heo/gajae-code --skill ralplan -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install Yeachan-Heo/gajae-code ralplan --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Yeachan-Heo/gajae-code.git skills-src && mkdir -p .agents/skills && cp -r skills-src/packages/coding-agent/src/defaults/gjc/skills/ralplan .agents/skills/ralplan && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "ralplan" agent skill from https://github.com/Yeachan-Heo/gajae-code/tree/main/packages/coding-agent/src/defaults/gjc/skills/ralplan into .agents/skills/ralplan/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ralplan", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add Yeachan-Heo/gajae-code --skill ralplan -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install Yeachan-Heo/gajae-code ralplan --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Yeachan-Heo/gajae-code.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/packages/coding-agent/src/defaults/gjc/skills/ralplan .cursor/skills/ralplan && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "ralplan" agent skill from https://github.com/Yeachan-Heo/gajae-code/tree/main/packages/coding-agent/src/defaults/gjc/skills/ralplan into .cursor/skills/ralplan/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ralplan", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/Yeachan-Heo/gajae-code.git --path packages/coding-agent/src/defaults/gjc/skills/ralplan--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add Yeachan-Heo/gajae-code --skill ralplan -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install Yeachan-Heo/gajae-code ralplan --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Yeachan-Heo/gajae-code.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/packages/coding-agent/src/defaults/gjc/skills/ralplan .gemini/skills/ralplan && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "ralplan" agent skill from https://github.com/Yeachan-Heo/gajae-code/tree/main/packages/coding-agent/src/defaults/gjc/skills/ralplan into .gemini/skills/ralplan/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ralplan", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install Yeachan-Heo/gajae-code ralplanInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add Yeachan-Heo/gajae-code --skill ralplan -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/Yeachan-Heo/gajae-code.git skills-src && mkdir -p .github/skills && cp -r skills-src/packages/coding-agent/src/defaults/gjc/skills/ralplan .github/skills/ralplan && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "ralplan" agent skill from https://github.com/Yeachan-Heo/gajae-code/tree/main/packages/coding-agent/src/defaults/gjc/skills/ralplan into .github/skills/ralplan/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ralplan", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add Yeachan-Heo/gajae-code --skill ralplan -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install Yeachan-Heo/gajae-code ralplan --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Yeachan-Heo/gajae-code.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/packages/coding-agent/src/defaults/gjc/skills/ralplan .opencode/skills/ralplan && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "ralplan" agent skill from https://github.com/Yeachan-Heo/gajae-code/tree/main/packages/coding-agent/src/defaults/gjc/skills/ralplan into .opencode/skills/ralplan/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ralplan", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
ralplanShorthand for oh-my-claudecode's consensus planning, where Planner, Architect and Critic agents iterate on a plan before any execution begins.
Ralplan is an alias for /oh-my-claudecode:plan --consensus. It loops Planner, Architect and Critic agents until they agree, using a structured deliberation format called RALPLAN-DR that runs in a short mode by default and a deliberate mode for high-risk work. It also gates vague ralph, autopilot or team requests so they get a plan first.
Flags adjust the run. --interactive adds prompts for draft review and final approval, --deliberate forces deliberate mode with a pre-mortem of three scenarios and wider test planning, and --architect codex or --critic codex hand those passes to Codex when its CLI is present. Deliberate mode also starts on its own for requests touching auth, migrations, destructive changes or similar risks. Ralplan only plans: artifacts stay pending approval, and it must not edit files, commit, push or delegate implementation until you approve.
9 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 91fe978. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
makejustFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Ralplan Consensus Planning loads about 8.5k tokens when it runs. Until then it costs about 24 tokens; SKILL.md has 4,116 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from Yeachan-Heo/gajae-code at commit 91fe978, republished under its MIT licence (© Yeachan-Heo). 4,116 words, ~8,462 tokens.
.claude/skills/ralplan/SKILL.md (or your agent's skills folder).Ralplan is the consensus planning workflow. It triggers iterative planning with Planner, Architect, and Critic agents until consensus is reached, with RALPLAN-DR structured deliberation (short mode by default, deliberate mode for high-risk work).
/skill:ralplan "task description"--interactive: Adds draft-review prompts and one-at-a-time reconciliation. When the final receipt resolves auto_handoff.effectiveTarget to off without degradationReason: "planning_stuck", final approval uses an ask workflow gate; a configured automatic admission is handled by step 8.--deliberate: Forces high-risk deliberation: pre-mortem plus expanded test planning. It may also auto-enable for explicit auth/security, migration, destructive, incident, compliance/PII, or public-API-breakage risk.--architect openai-code / --critic openai-code: Use OpenAI code for that review pass when available; otherwise note the fallback and use default GJC review.gjc.ralplan.autoHandoff: Selects final-plan admission: off (default), ultragoal, or autoresearch. An autoresearch target admits /skill:autoresearch to continue research from the approved plan rather than implement it; it needs no availability probe. PLANNING-STUCK also resolves every target to off. Invalid settings reject the final write before any final artifact is persisted. The final receipt's ledger-backed runtime-owned auto_handoff.effectiveTarget is authoritative across state loss and run switching.--write --stage <type> --stage_n <N> --artifact <markdown file path or markdown string>: Native writer for Planner/Architect/Critic/revision/ADR/final pending-approval markdown under .gjc/_session-{sessionid}/plans/ralplan/<run-id>/; do not edit .gjc/ directly.For corrupt, tampered, unreadable, or stale current-session ralplan state, run gjc state clear --force --mode ralplan scoped by --session-id, command payload, or GJC_SESSION_ID; it clears only ralplan state for that session.
Ralplan is planning only. It may inspect context and draft plan/spec/proposal artifacts, but those remain pending approval until tagged structured-UI execution approval for the current final artifact, or a valid non-off final receipt's runtime-owned auto_handoff.effectiveTarget admits the existing handoff chain. Before either admission, do not mutate product source, run mutation-oriented shell, commit, push, open PRs, invoke execution skills, or delegate implementation.
Explicitly naming ultragoal (including /skill: and gjc forms) selects the desired execution target; it does not replace structured approval for the current final artifact when auto_handoff.effectiveTarget is off. Never invent a direct approval record or infer execution consent from the skill name.
Persist planning artifacts and handoffs through the ralplan CLI writer, never direct .gjc/ edits:
Direct write, edit, or ast_edit calls against .gjc/_session-{sessionid}/specs, .gjc/_session-{sessionid}/plans, .gjc/_session-{sessionid}/state, or any other .gjc/ path are forbidden unless an explicit force override is active.
gjc ralplan --write --worktree-root <repository_binding.worktreeRoot> --session-id <owner-session-id> --run-id <run-id> --stage <type> --stage_n <N> --artifact "markdown file path or markdown string"
# restricted role agents use:
gjc ralplan --write --worktree-root <repository_binding.worktreeRoot> --session-id <owner-session-id> --run-id <run-id> --stage <type> --stage_n <N> --artifact-env GJC_RALPLAN_ARTIFACTUse stages planner, intent, architect, critic, disposition, revision, post-interview, adr, or final; increment --stage_n each consensus pass. The writer accepts inline markdown (or JSON for disposition), an artifact path prepared outside .gjc/, or --artifact-env GJC_RALPLAN_ARTIFACT, persists stage-<NN>-<stage>.md plus index.jsonl under .gjc/_session-{sessionid}/plans/ralplan/<run-id>/, and copies final to pending-approval.md. Ralplan mutation blocking is enforced in code; use temp directories (os.tmpdir()/$TMPDIR, /tmp, /var/tmp) only for oversized scratch artifacts, never the repo or .gjc/. Staging via the write tool or a quoted-delimiter bash heredoc (cat > /tmp/plan.md <<'EOF' … EOF) into those temp roots is tolerated by the planning-phase guard.
Restricted read-only role agents (planner, architect, critic) must pass markdown through GJC_RALPLAN_ARTIFACT with --artifact-env GJC_RALPLAN_ARTIFACT; their restricted bash environment disables artifact file-path ingestion.
RECEIPT-ONLY guideline: role agents (planner, architect, and critic) persist durable outputs via gjc ralplan --write and return ONLY the receipt fields (session_id, run_id, path, sha256) plus verdict/status routing fields; include stage and stage_n when available, and never return the full persisted body.
The ralplan seed/write receipt's session_id is the immutable workflow owner session and run_id is the run identity. Include both in every Planner/Architect/Critic assignment and every parent-side revision/post-interview/ADR/final write. A role subagent's own session id is transcript/resume identity only and MUST NOT own ralplan state or artifacts.
The seed/write receipt's repository_binding.worktreeRoot is the canonical artifact root for the run. Whenever a writer's cwd can differ from that root — a dispatcher directory, a linked branch worktree, or a role subagent runtime cwd — propagate the seed receipt's repository_binding.worktreeRoot as --worktree-root <repository_binding.worktreeRoot> on every gjc ralplan seed/write (Planner, Architect, Critic, revision, disposition, post-interview, ADR, and final). Explicit-target mode routes all run state, stage artifacts, index.jsonl, HUD state, stuck markers, and review-budget accounting to that exact worktree regardless of the writer's cwd; it fails before any write when the target is missing, not a directory, not a git worktree root, when no seeded run state exists there, or when the target is not exactly the run's bound worktreeRoot (a linked worktree that merely shares commonDir is rejected). A relative --artifact file is still resolved from the invoking cwd. Without --worktree-root, legacy cwd-based behavior is unchanged. Never scan the filesystem for runs or merge artifact trees by hand.
This skill runs GJC planning in consensus mode for the provided arguments.
The consensus workflow:
Planner creates the initial plan and a compact RALPLAN-DR summary before review. Launch the Planner ONCE per run as a detached, resumable subagent (await it before the Architect) and record its returned subagent id as the run's persisted Planner id; persist the stage with gjc ralplan --write --worktree-root <repository_binding.worktreeRoot> --stage planner --stage_n 1 --artifact-env GJC_RALPLAN_ARTIFACT --planner-id <id> --planner-resumable <true|false> (see Persisted role agents below):
Pre-consensus material-intent reconciliation (always before Architect/Critic): Reconcile material scope and intent before paying for consensus review. This is a bounded contract check, not a second planning loop.
a. Read the persisted Planner artifact plus relevant .gjc/_session-{sessionid}/specs/deep-interview-*.md, prior plans, and current user constraints. Extract only material unresolved decisions, assumptions that could change architecture/scope/acceptance criteria, and conflicts with an explicit prior non-goal. Cosmetic wording and implementation details that do not alter the contract are not material.
b. When material open items exist, use the ask tool one at a time, highest-impact first, with concrete options. When none exist, proceed without an empty ceremony or user prompt.
c. Persist the check with gjc ralplan --write --worktree-root <repository_binding.worktreeRoot> --stage intent --stage_n <N> --artifact-env GJC_RALPLAN_ARTIFACT --json. The artifact must list evidence inspected, resolved material decisions, retained non-goals, and either material-open-items: none or the still-open items.
d. If reconciliation changes objective, scope, non-goals, acceptance criteria, or verification obligations, resume the persisted Planner and persist a revision before review. Architect and Critic receive the reconciled Planner/revision receipt plus the intent receipt; they never review the superseded pre-reconciliation draft.
e. With --interactive, also present the reconciled draft plus Principles / Drivers / Options summary (Proceed to review / Request changes / Skip review). Without --interactive, proceed automatically once material intent is resolved.
Review fan-out after Planner persistence: launch the Architect and Critic ONCE per run as detached, resumable review lanes against the same immutable Planner receipt/path/sha/stage_n. Their pass-1 fan-out remains parallel when Critic is plan-only and does not consume Architect output (see Persisted role agents below).
gjc ralplan --write --worktree-root <repository_binding.worktreeRoot> --stage architect --stage_n <N> --artifact-env GJC_RALPLAN_ARTIFACT --architect-id <id> --architect-resumable <true|false> --lane-verdict <token> --json, then return receipt/path plus CLEAR/WATCH/BLOCK and APPROVE/COMMENT/REQUEST CHANGES.gjc ralplan --write --worktree-root <repository_binding.worktreeRoot> --stage critic --stage_n <N> --artifact-env GJC_RALPLAN_ARTIFACT --critic-id <id> --critic-resumable <true|false> --lane-verdict <token> --json, then return receipt/path plus OKAY/ITERATE/REJECT.--lane-verdict <token> on its existing gjc ralplan --write: Architect passes its Architectural Status token (CLEAR/WATCH/BLOCK), and Critic passes its verdict token (OKAY/ITERATE/REJECT). The flag is optional so legacy invocations stay valid.Review join gate: before consensus, revision, reconciliation, finalization, or approval, verify both Architect and Critic receipts/verdicts exist for the same Planner artifact/pass (path, sha256, stage_n). A non-CLEAR Architect verdict, non-APPROVE Architect decision, or any non-OKAY Critic verdict routes back to Planner revision; do not finalize from only one review lane.
add vs remove, or remove vs change) against the same stable plan target id, do not treat the join as clean and do not start revision until a disposition stage is persisted for that pass. Collect typed findings (stable findingId, targetId, action, severity, evidence, sourceRole, source receipt) from both review artifacts, derive conflicts, and require one explicit disposition per conflict (accept_architect | accept_critic | synthesize | defer_user | reject_both) with rationale, decisionOwner, and affectedSections. Persist via gjc ralplan --write --worktree-root <repository_binding.worktreeRoot> --stage disposition --stage_n <N> --artifact-env GJC_RALPLAN_ARTIFACT --json using schema ralplan.review_conflicts.v1. Source receipts must be authoritative same-pass attestations: plannerStageN equals CLI --stage_n, each finding's sourceReceipt.stage equals sourceRole, sourceReceipt.stageN equals plannerStageN, and path/sha256 resolve against the run's persisted Architect/Critic index.jsonl rows. The writer fails closed if any conflict remains open, a disposition references an unknown conflict, or provenance is mismatched/spoofed. Product intent/scope remains owned by the user + approval gate; the ralplan leader owns reconciliation; reviewers advise and block.Re-review loop (max 5 iterations; runtime-enforced): Any non-OKAY Critic verdict (ITERATE or REJECT) or Architect result that is not CLEAR/APPROVE MUST run the same full closed loop. Pass 2+ resumes the SAME persisted Architect and Critic lane subagents with the mandatory re-review context bundle and runs sequentially Architect -> Critic: await the Architect result and its receipt/path before assigning Critic; Critic receives the current-pass Architect receipt/path and performs the rule-5 counter-review before consolidated feedback routes to Planner revision. From pass 2, both reviewers are bound by the five-rule ratchet: delta-only review, novelty justification, verdict monotonicity, severity scoping, and Critic counter-review of Architect scope inflation; unjustified inflation does not force a revision.
a. Collect Architect + Critic feedback
b. When typed conflicts exist, persist dispositions (step 4 typed conflict gate) before revision so the Planner receives a machine-checkable conflict set, not prose alone
c. Revise the plan by resuming the SAME persisted Planner subagent with consolidated Architect + Critic feedback and any disposition receipts (see Persisted role agents below); fall back to a fresh Planner spawn only per the fallback routing table
Re-review context bundle (pass 2+; mandatory): Every pass-2+ Architect or Critic assignment MUST include:
N for that lane, stated literally as review pass N in the assignment text, where N is the ordinal review pass for that lane across the entire ralplan run/re-review loop (equivalently the opener-iteration ordinal): the review of the initial Planner artifact is review pass 1, the review of the first revised Planner artifact is review pass 2, and so on; N never resets within an opener iteration and never resets when a new revision opener begins in the same run — it increments monotonically with every review the lane performs in the run. This ordinal is a workflow counter distinct from the runtime lane budget (which counts lane writes per opener iteration, WI-5): at the default budget the two coincide numerically, but the ratchet ("from pass 2") always keys off the run-level N so normal post-revision re-reviews activate delta-only review, monotonicity, and the sequential cadence;path, sha256, stage_n);stage-NN-architect.md / stage-NN-critic.md) with its receipt fields;The re-review context bundle remains mandatory regardless of whether a reviewer is resumed or uses a fresh-spawn fallback. A fresh-spawn fallback always receives everything required to apply delta-only review (rule 1), novelty justification (rule 2), monotonicity (rule 3), severity scoping (rule 4), and counter-review (rule 5). d. For pass 2+, resume (or fresh-spawn only per the routing table) Architect -> Critic sequentially: await the Architect result and receipt/path, then issue Critic with the mandatory context bundle, including the current-pass Architect receipt/path. Critic performs the rule-5 counter-review before consolidated feedback routes to Planner revision.
gjc ralplan --write --worktree-root <repository_binding.worktreeRoot> --stage revision --stage_n <N> --artifact-env GJC_RALPLAN_ARTIFACT --json before re-review, then pass the receipt/path forward instead of duplicating the full revision markdown in the parent conversation.
e. Re-join Architect and Critic verdicts for the same revised Planner artifact/pass (including a fresh disposition stage if new conflicts appear)
f. Repeat this loop until Critic returns OKAY and Architect is CLEAR/APPROVE for the same Planner artifact/pass, or 5 iterations are reached
g. If 5 iterations are reached without Critic OKAY plus Architect CLEAR/APPROVE, stop opening further planner/revision passes. Preserve the best version as a terminal PLANNING-STUCK result; do not route it to automatic or explicit execution.
h. Runtime budget (#3165): native gjc ralplan --write refuses a new planner/revision that would open consensus iteration > max (default 5, overridable via gjc.ralplan.maxIterations, integer 1..20, using the workflow-settings precedence below). Cap uses the same iteration definition as the HUD (planner/revision openers in index.jsonl). Overflow exits 3, prints operator-visible PLANNING-STUCK on stdout (and stderr detail; JSON includes planning_stuck: true), and still allows architect/critic within an already-opened pass plus post-interview/adr/final so the best plan can be escalated to pending approval without dispatch. A new --run-id starts a fresh budget.Final intent verification (post-consensus delta gate): After the review join gate has both Critic OKAY and Architect CLEAR/APPROVE for the same Planner artifact/pass, verify only intent deltas introduced or newly exposed by consensus. The pre-consensus intent receipt is the baseline; do not re-ask decisions already settled there.
a. Collect new open items from the run: assumptions or conflicts introduced after the latest intent receipt, plus any material ambiguity first exposed by Architect/Critic. Source these from persisted artifacts, not memory.
b. Cross-check prior context for conflicts: glob .gjc/_session-{sessionid}/specs/deep-interview-*.md and other prior specs/plans/context relevant by topic. For each, list points where the consensus plan contradicts, weakens, or expands beyond a previously crystallized decision, constraint, or non-goal. Cite the conflicting artifact and line/section.
c. Reconcile with the user via the ask tool (always, regardless of --interactive): Never stop idle with plain-text prose after the consensus loop. Every reconciliation question MUST go through the ask tool with contextual options plus free-text.
ask tool, weakest/highest-impact first, polishing intent. If any confirmation reveals that the plan diverges from user intent, route the consolidated correction back into the re-review loop (step 5b Planner revision) and re-run Architect + Critic before returning here. Cap at the same 5-iteration ceiling.pending approval artifact records each decision; record any item the user explicitly defers as an open confirmation under that same section.
d. Persist the reconciliation with gjc ralplan --write --worktree-root <repository_binding.worktreeRoot> --stage post-interview --stage_n <N> --artifact-env GJC_RALPLAN_ARTIFACT --json, then return the receipt/path plus a compact status (reconciled-clean / reconciled-with-revision / open-confirmations-pending) instead of pasting the full body.On reconciliation completion, re-check the review join gate (Critic OKAY plus Architect CLEAR/APPROVE for the same Planner artifact/pass), mark the plan pending approval unless execution is already authorized by the resolved handoff admission, then persist the ADR/final plan via gjc ralplan --write --worktree-root <repository_binding.worktreeRoot> --stage final --stage_n <N> --artifact-env GJC_RALPLAN_ARTIFACT --json. Read the successful receipt's auto_handoff object; its ledger-backed effectiveTarget is runtime-owned and is the only automatic-routing decision; do not directly edit .gjc/_session-{sessionid}/plans. Final plan must include ADR (Decision, Drivers, Alternatives considered, Why chosen, Consequences, Follow-ups) and, when present, the ## Intent Reconciliation section.
Final admission and approval gate: Reconciliation must first reach the successful final receipt from step 7. If that receipt has auto_handoff.degradationReason: "planning_stuck", it is terminal: retain the pending approval artifact and never dispatch, including for an explicitly named execution skill; do not issue an approval ask. Otherwise, if its runtime-owned auto_handoff.effectiveTarget is ultragoal, that valid non-off receipt is explicit operator admission for same-turn execution through that target; proceed to step 9 without an ask. If it is off, including ordinary off, require an accepted tagged structured approval for the current final artifact even if the user already named an execution skill. Unless that current final artifact already has that approval, present the finalized plan via the ask tool (regardless of --interactive) with workflowGate: { stage: "ralplan", kind: "approval" } on the final question so RPC/headless clients receive a ralplan/approval workflow gate, not a deep-interview question gate. Identify the current final receipt/path in the question. A revised final artifact requires a fresh structured approval; approval of a previous final artifact does not carry over. Use these options:
pending approval and make no further changesAlways include a free-text option for the ordinary off approval flow. Do not stop with plain text and no ask in that flow; its terminal action is this ask.
Example: a request to "plan this, then use /skill:ultragoal" still requires the tagged final approval ask after step 7 when the receipt resolves to off. Only an accepted Approve execution via ultragoal choice for that current final artifact admits step 9. Free text, refinement, cancellation, timeout, and Stop here do not authorize execution.
On valid automatic admission or explicit approval, invoke the admitted/approved /skill:ultragoal target by default. On Refine further, return to the step 5 re-review loop. On Stop here, leave the pending approval artifact and stop. A planning_stuck final receipt never reaches this step. Never implement directly.
Before invoking /skill:ultragoal, mark ralplan ready for handoff so the skill tool's chain guard permits the transition:
gjc state ralplan write --input '{"current_phase":"handoff"}' --jsonThe skill tool then dispatches the execution skill same-turn and runs gjc state ralplan handoff --to ultragoal --json in-process to atomically demote ralplan, promote the callee, and sync .gjc/_session-{sessionid}/state/skill-active-state.json. You do not need to run the handoff verb yourself.
Important: Architect and Critic MAY run in the same parallel batch only for the plan-only Critic lane after Planner persistence (review pass 1). Pass 2+ re-reviews MUST run sequentially Architect -> Critic: await Architect before issuing Critic, pass the current-pass Architect receipt/path to Critic for the rule-5 counter-review, then apply the same review join gate before consensus.
Default max consensus iterations: 5 (gjc.ralplan.maxIterations).
On cap: exit code 3, marker PLANNING-STUCK (stdout), no silent re-loop, no automatic or explicit ultragoal dispatch. Opener budget is max(index.jsonl openers, on-disk stage-*-{planner,revision}.md count) so a missing/empty/malformed ledger cannot fail open after prior openers.
Headless/CI: treat PLANNING-STUCK / exit 3 as terminal planning failure for orchestration/watchdogs.
Interactive: retain the best existing plan as a terminal planning result; residual critic findings stay as caveats.
Workflow settings precedence — ralplan reads all of its settings
(gjc.ralplan.maxIterations, gjc.ralplan.maxReviewPassesPerLane,
gjc.ralplan.autoHandoff) through one shared resolver in this exact order
(first valid value wins):
.gjc/config.yml<agentDir>/config.yml (normally ~/.gjc/agent/config.yml, honoring
GJC_CODING_AGENT_DIR/PI_CODING_AGENT_DIR; XDG applies only to categorized data/state/cache subdirs, never the workflow config path)config.yml uses the nested (schema) form — gjc: { ralplan: { maxIterations } }.
Project configuration beats user configuration. The reported source is the
canonical path of the winning file, or default. config.yml is the ONLY
settings surface: the legacy settings.json files (project and config-root)
are retired: the config-root ~/.gjc/settings.json is migrated once into the
default global agent config.yml and its source removed, while the project
.gjc/settings.json is retained for non-workflow settings (only its workflow
keys are migrated into project .gjc/config.yml and no longer read unless a migration target is absent - a migration that could not publish (e.g. a read-only .gjc) leaves the retained legacy value effective as the previously configured override until it can publish). Malformed or
invalid explicit settings in any layer exit 2
(invalid ralplan settings at <path>: <reason>) — including
gjc.ralplan.maxIterations, whose former silent fallback to the default is
removed.
Override example (project .gjc/config.yml):
gjc:
ralplan:
maxIterations: 3gjc.ralplan.maxReviewPassesPerLane (integer 1..10, registered in the public settings schema) using the workflow-settings precedence above; project overrides user.PLANNING-STUCK marker and lane-specific JSON/stderr detail.post-interview, adr, and final are always allowed.--run-id starts a fresh budget.revision opener (new iteration, fresh lane budget), never a second same-iteration review pass..gjc/config.yml):gjc:
ralplan:
maxIterations: 3
maxReviewPassesPerLane: 2Follow this ralplan-internal consensus workflow for consensus mode details.
The Planner, Architect, and Critic are same-session persisted subagents. Launch the Planner detached once and await it before review fan-out; Architect and Critic are also launched once per run as detached, resumable subagents in the pass-1 fan-out (parallel only for the plan-only Critic lane tied to the same Planner receipt/path/sha/stage_n). On pass 2+, resume the SAME persisted Planner with consolidated feedback and resume the SAME persisted Architect and Critic lane subagents with the mandatory re-review context bundle instead of fresh-spawning. Do NOT modify the subagent control surface; use existing subagent resume/steer controls only.
Persistence boundary: same-parent, active-session continuity only. Resumability requires retained subagent resume metadata and a persistent parent session (in-memory parent yields resumable:false), not just .gjc run-state. A terminal subagent can still resume when its retained descriptor points at a saved subagent session; after process restart, missing metadata, or failed/unavailable resume, use the fresh role/lane fallback.
Resume routing table (for every persisted role: Planner, Architect, and Critic) (per re-review pass, when resuming that role's persisted id):
| Resume outcome | Action |
|---|---|
running | steer/inject that role's follow-up context to the same id, then await — do NOT fresh-spawn |
queued | retain/update the queued message or await the same id — do NOT fresh-spawn just because it is queued |
context_unavailable, not_found, no_runner, resume_failed | fresh-spawn fallback for that role/lane on that pass; record the fallback metadata. not_found should only mean same-session resume metadata is unavailable, not merely that a terminal live job was evicted. |
terminal (completed/failed/cancelled) + follow-up message | resume the same id when context is available; otherwise use the fresh-spawn fallback above |
Ratchet synergy: a resumed Architect or Critic natively retains prior-pass context, but the re-review context bundle remains mandatory regardless so the fresh-spawn fallback remains fully functional and applies all five rules.
Recording persisted-role-agent metadata (audit/routing only — never claim subagent list proves resumability, since the snapshot does not expose resumable). Ride the matching optional flags on the role's normal --write for the pass:
| Role | Normal write stage | Metadata flags |
|---|---|---|
| Planner | planner or revision | `--planner-id <id> --planner-resumable <true |
| Architect | architect | `--architect-id <id> --architect-resumable <true |
| Critic | critic | `--critic-id <id> --critic-resumable <true |
The existing fallback flags ride the same role's normal write: --fallback-reason <context_unavailable|not_found|no_runner|resume_failed|process_restart|missing_record>, --fallback-attempted-id <id>, --fallback-stage-n <N>, and optional --fallback-receipt-path <fresh-role-stage-artifact-path>. A planner/revision write records Planner fallback metadata, an Architect write records Architect fallback metadata, and a Critic write records Critic fallback metadata. Set the matching --*-resumable flag to true only when the parent session is provably persistent; set/record false after an observed context_unavailable; otherwise omit it (unknown). Fallback flags are recorded only when a fresh-spawn fallback actually occurs: a fallback record requires --fallback-reason together with --fallback-attempted-id and --fallback-stage-n (the failed id and the pass it failed on), while --fallback-receipt-path is optional.
Execution skills (ultragoal) implement bounded work; they are not scope-discovery lanes. Vague execution requests are routed through ralplan so scope, acceptance criteria, consensus, and verification exist before code changes.
Passes the gate (specific enough for direct execution): file paths, issue/PR numbers, named symbols, explicit tests, numbered steps, acceptance criteria, error references, code blocks, or escape prefixes (force: / !). Examples: fix src/hooks/bridge.ts, implement #42, add validation to processKeywordDetector, do:\n1. Add input validation\n2. Write tests.
Gated — redirected to ralplan: fix this, build the app, improve performance, add authentication, make it better.
Gate auto-pass signals: file path, issue/PR number, camelCase/PascalCase/snake_case symbol, test runner, numbered steps, acceptance criteria, error reference, code block, or escape prefix. If it fires on a well-specified prompt, add one concrete anchor; if you intentionally bypass, prefix force: or !.
On consensus approval, choose:
A redirected request proceeds only through the tagged structured approval for the current final artifact or a valid non-off final receipt's automatic admission; naming an execution skill or saying just do it / skip planning alone leaves the plan pending approval.
© Yeachan-Heo, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in packages/coding-agent/src/defaults/gjc/skills/ralplan of Yeachan-Heo/gajae-code.
Open the folder on GitHubat commit 91fe978
Ralplan Consensus Planning next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Ralplan Consensus Planning this skillYeachan-Heo/gajae-code | 2.9k | — | ~8.5k | Automated safety check: Pass | MIT | |
| Paseo Committeegetpaseo/paseo | 20k | 1 repos | ~496 | Automated safety check: Pass | Custom licence | |
| Codex with ChatGPT Planning LoopXiaoDuoYa/codex-with-chatgpt | 7.2k | — | ~11k | Automated safety check: Notes | MIT | |
| AutopilotYeachan-Heo/oh-my-claudecode | 40k | — | ~4.4k | Automated safety check: Pass | MIT | |
| Autopilot End-to-End Buildernick-vels/skills | 414 | — | ~2.5k | Automated safety check: Notes | MIT | |
| Blueprint Construction Planneraffaan-m/ECC | 276k | 5 repos | ~1.3k | Automated safety check: Pass | MIT |
getpaseo/paseo
Forms a two-agent committee with contrasting profiles to analyze a stuck problem in parallel, reconcile their views and return a consensus plan without editing files.
XiaoDuoYa/codex-with-chatgpt
Uses ChatGPT in the browser as the planning and review brain for a Codex session, with Codex keeping all execution and ChatGPT reading the workspace through a bridge.
Yeachan-Heo/oh-my-claudecode
Takes a short product idea through requirements, design, planning, parallel implementation, QA cycles and multi-reviewer validation to produce working code.
nick-vels/skills
Builds an app, site, bot or feature from a spoken idea through requirements, spec, tickets, subagent work, review and acceptance, with a live progress dashboard.
affaan-m/ECC
Turns a one-line objective into a multi-step plan file with PR-sized steps, context briefs, a dependency graph, parallel-step detection and an adversarial review.
Yeachan-Heo/oh-my-claudecode
Delivery pipeline from mission brief to verified change: writes a spec, splits it into tickets, runs them in parallel, verifies and reports a decision log after a repo audit gate.
Yeachan-Heo/gajae-code
Runs one improvement mission as a bounded loop: each round makes a change, runs a strict JSON evaluator, logs the decision in markdown and continues until a max runtime is hit.
Yeachan-Heo/gajae-code
Operate trusted local GJC sessions through a reviewed broker-bound CLI allowlist with single-use human approval.
Yeachan-Heo/gajae-code
Breaks a brief into ordered goals, keeps a durable ledger under .omc/ultragoal and prints handoff text so a Claude /goal run survives session restarts.
Yeachan-Heo/gajae-code
Delegate planning and execution workflows to gajae-code via the coordinator MCP server.
Yeachan-Heo/gajae-code
Discover and inspect trusted local GJC sessions through the broker-bound session CLI.
Yeachan-Heo/gajae-code
Operate GJC SDK sessions from the CLI (gjc sdk session list|inspect|send|status|tail|close|raw plus the explicit raw control|query|global hatch).
Categories
Shorthand for oh-my-claudecode's consensus planning, where Planner, Architect and Critic agents iterate on a plan before any execution begins. Ralplan is an alias for /oh-my-claudecode:plan --consensus. It loops Planner, Architect and Critic agents until they agree, using a structured deliberation format called RALPLAN-DR that runs in a short mode by default and a deliberate mode for high-risk work.
Ralplan Consensus Planning fits situations like: planning a risky change such as a migration before any code is touched; turning a vague request into an approved plan before running autopilot or team; getting Architect and Critic review of a design before building it.
Run `npx skills add Yeachan-Heo/gajae-code --skill ralplan -a claude-code`. Or copy the skill folder (packages/coding-agent/src/defaults/gjc/skills/ralplan in Yeachan-Heo/gajae-code) into .claude/skills/ralplan in your project. Claude Code loads it when a task matches its description.
Run `npx skills add Yeachan-Heo/gajae-code --skill ralplan -a codex`. Or copy the skill folder (packages/coding-agent/src/defaults/gjc/skills/ralplan in Yeachan-Heo/gajae-code) into .agents/skills/ralplan in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add Yeachan-Heo/gajae-code --skill ralplan -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/ralplan, .gemini/skills/ralplan, .github/skills/ralplan and .opencode/skills/ralplan in your project.
Going by SKILL.md and its folder, Ralplan Consensus Planning needs the command-line tools its instructions call (make and just). Our summary lists: oh-my-claudecode installed; Codex CLI (optional, for the codex architect and critic options).
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Ralplan Consensus Planning is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 8.5k tokens (SKILL.md is roughly 34k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Ralplan Consensus Planning: Paseo Committee (getpaseo/paseo, 20k stars), Codex with ChatGPT Planning Loop (XiaoDuoYa/codex-with-chatgpt, 7.2k stars), Autopilot (Yeachan-Heo/oh-my-claudecode, 40k stars) and Autopilot End-to-End Builder (nick-vels/skills, 414 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
Yeachan-Heo (a GitHub user) maintains it in Yeachan-Heo/gajae-code, which has 2,937 GitHub stars. The repository holds 9 skills in this directory. The repository was last updated on October 10, 2026.
Source: Yeachan-Heo/gajae-code on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.