Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Autonomous orchestrator for manifest work items through the development lifecycle. Use when running egregore to process a backlog automatically.
.claude/skills/athola-summon/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-06 | ✗→✓ | ▲ Improved | 242% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 172% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 119% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 60% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 46% | 0% |
Summon is the egregore orchestration loop. It reads the manifest (.egregore/manifest.json), selects the next active work item, maps the current pipeline step to a specialist skill, and invokes that skill. After each step it advances the pipeline, checks context and token budgets, and repeats until all items are completed or the budget is exhausted.
The orchestrator never re-implements phase logic. Each pipeline step delegates to an existing skill via Skill() calls. Summon only manages state transitions, retries, and budget guards.
intake-build-quality-ship pipeline.
exists with active items).
exit.
directly instead).
skill invocations).
Always launch the orchestrator agent in the FOREGROUND. Do not use run_in_background: true. The main session becomes the egregore: it blocks on the orchestrator agent until the egregore finishes or is dismissed.
Agent(
subagent_type: "egregore:orchestrator",
prompt: "<context about work items and current state>",
run_in_background: false // Required
)If you launch the orchestrator in the background, the main session will have nothing to do and will stop. This defeats the entire purpose of the egregore. The stop hook cannot prevent this because background agents are detached.
Before launching the orchestrator, ensure the manifest has the correct run mode:
--bounded flag): set "indefinite": truein the manifest. The egregore will scan for new work after completing all items and run until dismissed.
--bounded flag: set "mode": "bounded" in themanifest. The egregore stops after all items are completed or failed.
If the manifest already exists and has "mode": "bounded" but the user did NOT pass --bounded, update the manifest to "indefinite": true before launching.
After launching, do NOT produce any summary, status table, or "what's happening" output. The orchestrator IS the session now. Let it run.
Follow these steps exactly. Each iteration processes one pipeline step for one work item.
manifest = Read(".egregore/manifest.json")
config = Read(".egregore/config.json")
budget = Read(".egregore/budget.json")If manifest.json does not exist, stop with an error: "No manifest found. Run egregore init first."
item = manifest.next_active_item()If item is None, all work is done. Save the manifest, report completion, and exit.
Look up item.pipeline_stage and item.pipeline_step in the Pipeline-to-Skill Mapping table below. Determine the skill name or action to invoke.
Call Skill() or execute the mapped action. Pass any required context (branch name, issue ref, etc.) from the work item.
On success:
manifest.advance(item.id) to move to the next step.item.attempts to 0.On failure:
manifest.fail_current_step(item.id, reason).item.attempts < item.max_attempts, retry the samestep on the next iteration.
item.status is now "failed", log the failure andmove to the next work item.
Estimate context window usage. If usage exceeds 80%:
.egregore/continuation.json with the current item ID, stage, and step.
Skill(conserve:clear-context).resumes from the saved state.
If the last skill call returned a rate limit error:
budget.json viabudget.record_rate_limit(cooldown_minutes).
budget.json.notify.py).CronCreate to schedule a one-shot resume prompt at the cooldown expiry time. The session stays alive and resumes automatically with context preserved.
gracefully. The watchdog checks cooldown before relaunching.
Go back to step 2. Continue until all items are completed, all items are failed, or a budget limit is reached.
| Stage | Step | Skill/Action | |-------|------|--------------| | intake | parse | Parse prompt or fetch issue via gh issue view | | intake | validate | Validate requirements are actionable | | intake | prioritize | Order by complexity (single item = skip) | | build | brainstorm | Skill(attune:project-brainstorming) | | build | specify | Skill(attune:project-specification) | | build | blueprint | Skill(attune:project-planning) | | build | execute | Skill(attune:project-execution) | | quality | code-review | Skill(pensive:code-refinement) | | quality | unbloat | Skill(conserve:bloat-detector) | | quality | code-refinement | Skill(pensive:code-refinement) | | quality | update-tests | Skill(sanctum:test-updates) | | quality | update-docs | Skill(sanctum:doc-updates) | | ship | prepare-pr | Skill(sanctum:pr-prep) | | ship | pr-review | Skill(sanctum:pr-review) | | ship | fix-pr | Apply review fixes | | ship | merge | gh pr merge (if auto_merge enabled) |
The intake stage steps (parse, validate, prioritize) are handled inline by the orchestrator. See modules/intake.md for details.
The orchestrator runs inside a finite context window. To avoid losing state when the window fills:
how much of the context window has been consumed.
.egregore/continuation.json with a snapshot ofthe current position.
Skill(conserve:clear-context).continuation.json and resume fromthe saved position. The manifest on disk is the source of truth for pipeline progress.
manifest.continuation_count each time acontext-overflow handoff occurs.
This protocol ensures zero lost progress across context boundaries.
After loading state (step 1), schedule a recurring heartbeat that both reports status and recovers stalled pipelines:
CronCreate(
cron: "*/5 * * * *",
prompt: "Check .egregore/manifest.json. If there are pending or active items that are not being processed, resume the orchestration loop by invoking Skill(egregore:summon). Otherwise, report status via /egregore:status.",
recurring: true
)This serves two purposes:
so autonomous runs are observable.
or unexpected error breaks the orchestration loop, the next heartbeat detects stalled items and re-enters the pipeline automatically.
The cron task auto-expires after 7 days by default. Use durable: true to persist across restarts, or CronDelete to cancel early.
Egregore sessions consume API tokens across a budget window (default: 5 hours). The budget protocol prevents runaway spending:
budget.json for anactive cooldown. If is_in_cooldown(budget) returns true, exit and let the watchdog retry later.
budget.record_rate_limit(cooldown_minutes). The cooldown duration equals the API retry-after header plus config.budget.cooldown_padding_minutes.
budget.json, alert theoverseer, and exit with code 0.
budget.json before relaunching.It will not start a new session until the cooldown expires.
See modules/budget.md for the full calculation and state schema.
Each work item allows up to max_attempts retries per step (default: 3, configurable in config.json).
attempts < max_attempts,the orchestrator retries the same step on the next iteration. The manifest is saved between retries.
attempts >= max_attempts, the itemstatus changes to "failed" and failure_reason is set. The orchestrator moves to the next active item.
configured notification channel.
input. If a step requires clarification, record a decision (see modules/decisions.md) and proceed with the best available option.
rules, idempotency guarantees.
detection, cooldown calculation, graceful shutdown.
issues, brainstorm skip logic.
decision log format, examples.
.egregore/manifest.json is read successfully before theorchestration loop starts; if absent, skill halts with "No manifest found. Run egregore init first."
item.pipeline_stagein the manifest and the manifest is saved to disk
.egregore/continuation.jsonwith current item ID, stage, and step before handoff
budget.json is updated with cooldownduration before the session exits with code 0
with a completion report listing item statuses
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | pass→fail | 6,716 | 4,889 | -27% | 1 | 1 | 0% | 990 | 3,210 | +224% | 0 | 0 | — |
case-02 | fail→fail | 3,696 | 7,247 | +96% | 1 | 1 | 0% | 237 | 3,237 | +1266% | 0 | 0 | — |
case-03 | fail→fail | 14,153 | 4,465 | -68% | 1 | 1 | 0% | 2,312 | 3,147 | +36% | 0 | 0 | — |
case-04 | fail→fail | 4,432 | 6,905 | +56% | 1 | 1 | 0% | 239 | 3,308 | +1284% | 0 | 0 | — |
case-05 | pass→pass | 10,716 | 2,337 | -78% | 1 | 1 | 0% | 1,812 | 3,206 | +77% | 0 | 0 | — |
case-06 | fail→pass | 6,507 | 2,588 | -60% | 1 | 1 | 0% | 950 | 3,251 | +242% | 0 | 0 | — |
case-07 | fail→pass | 7,391 | 1,840 | -75% | 1 | 1 | 0% | 1,137 | 3,096 | +172% | 0 | 0 | — |
case-08 | fail→pass | 8,846 | 1,764 | -80% | 1 | 1 | 0% | 1,381 | 3,025 | +119% | 0 | 0 | — |
case-09 | fail→pass | 12,569 | 2,228 | -82% | 1 | 1 | 0% | 1,982 | 3,166 | +60% | 0 | 0 | — |
case-10 | fail→pass | 13,915 | 1,629 | -88% | 1 | 1 | 0% | 2,055 | 3,008 | +46% | 0 | 0 | — |
case-11 | fail→pass | 13,917 | 3,496 | -75% | 1 | 1 | 0% | 2,236 | 3,451 | +54% | 0 | 0 | — |
case-12 | pass→pass | 11,425 | 2,270 | -80% | 1 | 1 | 0% | 1,839 | 3,156 | +72% | 0 | 0 | — |
case-13 | pass→pass | 6,526 | 3,425 | -48% | 1 | 1 | 0% | 1,035 | 3,367 | +225% | 0 | 0 | — |
case-14 | fail→pass | 10,163 | 3,059 | -70% | 1 | 1 | 0% | 1,661 | 3,340 | +101% | 0 | 0 | — |
case-15 | fail→pass | 6,271 | 1,262 | -80% | 1 | 1 | 0% | 924 | 2,960 | +220% | 0 | 0 | — |
case-16 | fail→pass | 7,629 | 1,313 | -83% | 1 | 1 | 0% | 1,169 | 3,000 | +157% | 0 | 0 | — |
case-17 | fail→pass | 4,508 | 1,556 | -65% | 1 | 1 | 0% | 628 | 3,008 | +379% | 0 | 0 | — |
case-18 | fail→pass | 6,476 | 1,436 | -78% | 1 | 1 | 0% | 1,019 | 2,990 | +193% | 0 | 0 | — |
case-19 | fail→pass | 6,721 | 1,408 | -79% | 1 | 1 | 0% | 909 | 2,986 | +228% | 0 | 0 | — |
case-20 | pass→pass | 5,345 | 2,313 | -57% | 1 | 1 | 0% | 844 | 3,176 | +276% | 0 | 0 | — |
case-21 | pass→pass | 13,688 | 4,234 | -69% | 1 | 1 | 0% | 2,036 | 3,435 | +69% | 0 | 0 | — |
case-22 | fail→pass | 14,583 | 3,563 | -76% | 1 | 1 | 0% | 2,217 | 3,390 | +53% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 18 counted toward the lift figure. The other 4 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +55 percentage points is the difference between those two pass rates over the 18 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.