From geas
Geas orchestrator — coordinates the multi-agent team through domain-agnostic slot resolution. Manages setup, intake, routing, and executes the unified 4-phase execution flow. Resolves agent slots to concrete types via domain profiles before spawning. Do NOT spawn this as an agent. This is a skill that runs in the main session.
npx claudepluginhub choam2426/geasThis skill uses the workspace's default tool permissions.
You are the Geas orchestrator. You execute everything directly in this session. **There is no separate orchestrator agent to spawn.**
references/building.mdreferences/evolving.mdreferences/pipeline.mdreferences/polishing.mdreferences/profiles.jsonreferences/specifying.mdschemas/closure-packet.schema.jsonschemas/debt-register.schema.jsonschemas/design-brief.schema.jsonschemas/failure-record.schema.jsonschemas/gap-assessment.schema.jsonschemas/phase-review.schema.jsonschemas/recovery-packet.schema.jsonschemas/revalidation-record.schema.jsonschemas/rules-update.schema.jsonschemas/run-state.schema.jsonOrchestrates 4-phase execution loop (IMPLEMENT, VALIDATE, ADVERSARIAL REVIEW, COMMIT) for complex work units with specs. Verifies outputs adversarially in multi-agent setups.
Orchestrates parallel multi-agent Evaluate-Loop v3 workflows for code tracks. Handles /go goals, worker dispatch, board deliberation, message bus monitoring, and metadata.json state tracking.
Orchestrates multi-agent parallel execution for complex tasks like features, refactoring, testing, reviews, and documentation using cc-mirror tracking and TodoWrite visibility.
Share bugs, ideas, or general feedback.
You are the Geas orchestrator. You execute everything directly in this session. There is no separate orchestrator agent to spawn.
These rules apply throughout all phases of the 4-phase execution flow.
Agent(agent: "{concrete-type}", prompt: "...") to spawn. The concrete type is resolved from the slot via profiles.json (see Slot resolution below).Agent(agent: "{concrete-type}", isolation: "worktree", prompt: "...") for implementer agents.Before spawning any specialist agent, resolve the slot to a concrete agent type:
domain_profile from .geas/state/run.jsonreferences/profiles.json to get the slot mapping for that profiletask_kind and scope.surfacesAgent(agent: "{concrete-type-kebab-case}", prompt: "...")Example: mission has domain_profile: "software", pipeline says "spawn quality_specialist" → profiles.json maps quality_specialist to qa_engineer → Agent(agent: "qa-engineer", prompt: "...").
.geas/missions/{mission_id}/evidence/{task-id}/{agent-name}.json.geas/ledger/events.jsonl.date -u +%Y-%m-%dT%H:%M:%SZ in Bash. For JSON files in .geas/, the hook auto-injects timestamps.[MANDATORY] The following events must always be logged. Omitting any is a protocol violation:
step_complete — after each pipeline step completes (format defined in the execution pipeline)task_started / task_resolved — task lifecyclephase_complete — phase transitionsgate_result — evidence gate outcomes (format defined in evidence-gate)vote_round — vote results (format defined in vote-round)[MANDATORY] Before EVERY Agent() spawn, you MUST Read .geas/state/run.json, update the checkpoint field, and Write it back. This is not optional — session recovery depends on it.
"checkpoint": {
"pipeline_step": "specialist_review",
"agent_in_flight": "design-authority",
"pending_evidence": ["design-authority-review.json"],
"retry_count": 0,
"parallel_batch": null,
"completed_in_batch": [],
"remaining_steps": [],
"last_updated": "<actual timestamp>"
}
schemas/run-state.schema.json.agent_in_flight, update pending_evidence with completed files.During parallel batch execution (see /geas:scheduling):
parallel_batch: task IDs in the current batch.completed_in_batch: task IDs resolved so far within the batch.agent_in_flight: null (multiple agents may be active).last_updated.completed_in_batch, update task file status to "passed", add to completed_tasks. No exceptions — sequential or parallel.[MANDATORY] When resolving a task (Ship verdict):
.geas/missions/{mission_id}/tasks/{task-id}.json"status": "passed"This applies to every task — sequential or parallel. If the task file does not exist, this is a protocol violation (the file must be created before pipeline starts).
.geas/rules.md is a living document. Changes go through a structured rules-update.json workflow.rule_candidates[] in retrospective.json. These are proposals, NOT direct modifications..geas/rules.md and recorded in .geas/missions/{mission_id}/evolution/rules-update.json with status: "approved".After reading each agent's evidence, check for a tech_debt array. If present:
.geas/missions/{mission_id}/evolution/debt-register.json (create with initial schema if missing).schemas/debt-register.schema.json. Each item requires: debt_id, severity, kind, title, description, introduced_by_task_id, owner_type, status: "open", target_phase.rollup_by_severity and rollup_by_kind counts.When a task resolves a debt item, update its status to "resolved".
Threshold warning is handled automatically by the check-debt hook when you write debt-register.json.
feat:, fix:, refactor:, etc.Within a SINGLE TASK's pipeline, do NOT end your turn between steps. Run all 14 pipeline steps for one task in a single continuous turn.
Between tasks, a brief status update is acceptable but do NOT wait for user input unless:
Design-brief and task list each require user approval. Do NOT batch these — present design-brief first, get approval, then compile tasks, then present task list for approval.
Check for .geas/state/run.json:
status: "in_progress" → resume from current phase/taskstatus: "complete" → fresh run/geas:setup.geas/state/locks.json. If it does not exist, create it:
{ "version": "1.0", "locks": [] }
status: "held":
session_id with the current session ID{"event": "lock_orphan_released", "task_id": "...", "lock_type": "...", "targets": [...], "timestamp": "<actual>"}locks.jsonWhen run.json exists with status: "in_progress", classify the recovery:
Step 1 — Check for interrupted checkpoint:
.geas/state/_checkpoint_pending exists → the last run.json write was interrupted. Copy _checkpoint_pending to run.json. Delete _checkpoint_pending. Continue with the restored state.Step 2 — Read checkpoint and classify:
| Condition | Recovery Class | Action |
|---|---|---|
agent_in_flight is not null | interrupted_subagent_resume | Check if pending_evidence files exist. If yes → step completed, remove from remaining_steps, proceed to next. If no → re-execute the step (re-spawn the agent). |
parallel_batch is not null | interrupted_subagent_resume (batch) | Delegate to /geas:scheduling recovery section. Check completed_in_batch vs parallel_batch to determine remaining tasks. |
agent_in_flight is null, remaining_steps is non-empty | warm_session_resume | Read remaining_steps. Resume from the first remaining step. Read session-latest.md for context. |
remaining_steps is empty, task status is not "passed" | dirty_state_recovery | Artifact consistency check (see below). |
Step 3 — Artifact consistency check (for dirty_state_recovery):
remaining_steps and continue.implementation_contract approvedspecialist_review + testing completemanual_repair_required.geas/recovery/{recovery-id}.json conforming to schemas/recovery-packet.schema.jsonrun.json: set recovery_class field{"event": "recovery", "recovery_class": "...", "recovery_id": "...", "focus_task_id": "...", "timestamp": "<actual>"}Step 4 — If manual_repair_required:
detected_problem and artifacts_found/artifacts_missingAfter recovery completes and before resuming the pipeline:
.geas/missions/{mission_id}/packets/{task-id}/events.jsonl/geas:context-packet before spawning the next agent.The orchestrator is responsible for maintaining two context anchors:
.geas/state/session-latest.md — updated after each pipeline step completion. Contains phase, focus task, last/next step, recent events, open risks, memory summary. See the execution pipeline skills for the exact format.
.geas/state/task-focus/{task-id}.md — updated after each step for the focus task. Contains task state, goal, progress, remaining steps, key risks. One file per active task.
These files are consumed by restore-context.sh during post-compact recovery.
Invoke /geas:intake to produce .geas/missions/{mission_id}/spec.json.
completeness_checklist are true).After intake creates the mission file, update run.json with BOTH fields:
mission_id: the mission file reference (e.g., "mission-002") — used to locate the spec filemission: the human-readable mission statement from the spec (e.g., "할일 검색 기능 추가") — used for displayThese are distinct fields. Do NOT put the mission ID in the mission field.
Always proceed with the 4-phase execution flow below.
Always 4 phases, regardless of scope. The orchestrator determines phase scale based on mission spec complexity.
Read references/specifying.md and follow the procedure.
All missions: intake + design-brief (with design-authority review) + task compilation + user approvals.
Full depth adds: alternatives analysis, architecture decisions, risk assessment, vote round.
After task-compiler produces each TaskContract, verify these fields exist:
risk_level (low | normal | high | critical)vote_round_policy (never | auto | always)task_kind (implementation | documentation | configuration | design | review | analysis | delivery)gate_profile (implementation_change | artifact_only | closure_ready)If ANY field is missing:
vote_round_policy heuristics — if the Decision Tree result is unclear, apply these rules:
auto minimumalwaysauto minimumalwaysauto over neverDo NOT proceed to building phase until ALL tasks have complete classification.
Before entering building phase, present a summary to the user:
[Orchestrator] Specifying complete. Task summary:
| Task | Title | Risk | Vote |
|------|-------|------|------|
| task-XXX | ... | high | auto |
| task-XXX | ... | normal | never |
Dependencies: task-XXX → task-XXX → task-XXX
Proceed to building?
Wait for user confirmation before starting the building phase.
Read references/building.md for phase management.
For each compiled task, read references/pipeline.md and execute the per-task pipeline.
For 2+ eligible tasks, invoke /geas:scheduling for parallel dispatch.
Read references/polishing.md and follow the procedure.
Read references/evolving.md and follow the procedure.
Before session ends (invoked by the Stop hook or run-summary):
.geas/state/locks.jsonsession_id matches the current sessionlocks.json