pantheon-opencode 1.1.1-beta.10 → 1.1.1-beta.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,79 +0,0 @@
1
- ---
2
- description: "Start a heavy multi-phase task with persisted checkpoints, phased specialist dispatch, and Themis review gates. Progress saved to .pantheon/deepwork/ for resumability."
3
- agent: "zeus"
4
- ---
5
- # /pantheon-deepwork — Heavy Task Workflow
6
-
7
- Structured, checkpointed workflow for complex multi-step tasks spanning multiple agents and sessions. Progress persisted to `.pantheon/deepwork/<task-slug>/`. Each phase gated by Themis.
8
-
9
- | Use When | Don't Use When |
10
- |---|---|
11
- | 10+ turns or multi-session | Simple fixes (→ @talos) |
12
- | Multi-agent dependencies | Single-file changes (→ /subtask) |
13
- | Costly context loss | < 5 turns (→ normal delegation) |
14
-
15
- ## Workflow
16
-
17
- ```
18
- Phase 0: SCOPING
19
- └─ Zeus + Athena define scope, phases, acceptance criteria → PLAN.md
20
-
21
- Phase 1: DISCOVERY
22
- └─ @apollo maps relevant codebase areas → DISCOVERY.md
23
-
24
- Phase 2-N: IMPLEMENTATION (parallel per phase)
25
- └─ @hermes, @aphrodite, @demeter, @hephaestus, @prometheus
26
- └─ Output: IMPL-phase-<N>-<agent>.md
27
-
28
- GATE after each phase:
29
- └─ @themis reviews output → FAIL (fix + resubmit) or PASS (continue)
30
-
31
- Phase FINAL: VERIFICATION
32
- └─ @themis full integration review → REVIEW.md
33
- └─ All tests pass, coverage >80%
34
- ```
35
-
36
- ## Checkpoints
37
-
38
- ```
39
- Usage: --resume <slug> | --status <slug> | --list
40
-
41
- .pantheon/deepwork/<slug>/
42
- ├── PLAN.md DISCOVERY.md IMPL-phase-*-*.md phase-*-review.md REVIEW.md STATUS.md
43
- ```
44
-
45
- ## Full-Auto Mode (`--full-auto`)
46
-
47
- > ⚠️ Bypasses human review gates. Tier 1 gates (plan, commit, deploy) still require approval.
48
-
49
- **Themis auto-approves non-blocking reviews** — only stops on **BLOCKING** verdict. No waiting between phases. Checkpoints saved at every boundary.
50
-
51
- ```
52
- /pantheon-deepwork --full-auto "Refactor auth service to use JWT"
53
- /pantheon-deepwork --full-auto --resume auth-jwt
54
- ```
55
-
56
- ## Anti-Stall
57
-
58
- - **Stall Detection** — 3 turns no progress → escalate
59
- - **Phase Reminder** — continue only independent work after dispatch
60
- - **Progress Checkpoint** — every 5 turns, summarize completed vs remaining
61
- - **Delegate Retry** — failures retried once with rephrased prompt
62
-
63
- ## Usage
64
-
65
- ```
66
- /pantheon-deepwork "Add user authentication with OAuth2" # Start new session
67
- /pantheon-deepwork --resume auth-oauth2 # Resume interrupted
68
- /pantheon-deepwork --status auth-oauth2 # Show progress
69
- /pantheon-deepwork --list /pantheon-deepwork --archive <slug> # List / archive
70
- /pantheon-deepwork --full-auto "Refactor auth" # Themis auto-approve
71
- /pantheon-deepwork --full-auto --resume auth-refactor # Resume full-auto
72
- ```
73
-
74
- ## Safety
75
-
76
- - All progress persisted — work is never lost
77
- - Each phase gated by Themis — quality enforced at every step
78
- - Explicit resume required — no auto-continue without intent (unless `--full-auto`)
79
- - `.pantheon/deepwork/` is gitignored — no accidental commits
@@ -1,9 +0,0 @@
1
- ---
2
- description: "Pin a session goal to prevent scope creep. Usage: /pantheon-focus"
3
- agent: "zeus"
4
- ---
5
- # /pantheon-focus — Session Goal
6
-
7
- **What:** Pins a session objective. When active, all agents verify every action against the pinned goal. Off-topic work is flagged and blocked.
8
- **Usage:** `/pantheon-focus <short objective>`
9
- **Commands:** `/pantheon-focus list` — show all active goals, `/pantheon-focus clear` — remove all
@@ -1,58 +0,0 @@
1
- ---
2
- description: "Compress old memory entries into summarized form. /pantheon-forget lists entries older than N days, then replaces them with a compressed summary. --auto applies without confirmation. Usage: /pantheon-forget"
3
- agent: "zeus"
4
- ---
5
- # /pantheon-forget — Memory Range Compression
6
-
7
- **What:** Applies range compression to old memory entries — groups entries by time period and namespace, generates a concise summary via fast LLM, replaces N raw entries with 1 summary. Companion to memory_consolidate (merge) vs memory_forget (compress).
8
-
9
- ## Usage
10
-
11
- ```
12
- /pantheon-forget → Lista candidatas (7+ dias, modo interativo)
13
- /pantheon-forget --days=30 → Só entradas com 30+ dias
14
- /pantheon-forget --namespace=sessions → Namespace específico
15
- /pantheon-forget --namespace=sessions --days=14 Combinado
16
- /pantheon-forget --auto → Comprime sem confirmação
17
- /pantheon-forget --auto --days=30 --compress → Agressivo: 30+ dias + comprimir em 1 arquivo
18
- /pantheon-forget --dry-run → Preview sem modificar
19
- ```
20
-
21
- ## Flags
22
-
23
- | Flag | Default | Descrição |
24
- |------|---------|-----------|
25
- | `--days=<N>` | `7` | Idade mínima em dias |
26
- | `--namespace=<ns>` | `all` | Namespace específico |
27
- | `--auto` | off | Comprimir sem confirmação |
28
- | `--dry-run` | off | Preview sem modificar |
29
- | `--compress` | off | Comprimir tudo em 1 único entry (modo agressivo) |
30
-
31
- ## How It Works
32
-
33
- 1. `memory_list()` → obtém entradas, filtra por idade
34
- 2. Agrupa por namespace + mês
35
- 3. Cada grupo: envia para LLM fast com prompt:
36
- ```
37
- Summarize these N memory entries into 2-3 sentences:
38
- [entries...]
39
- ```
40
- 4. Substitui grupo por entry único com key `compressed:<namespace>:<YYYY-MM>`
41
- 5. Entradas originais são deletadas via `memory_forget()`
42
-
43
- ## Output
44
-
45
- ```
46
- 🗜️ Memory Range Compression
47
-
48
- Group: sessions · 2026-06 (15 entries · 1.2K tokens)
49
- → "Sessões de junho focadas em migração FastAPI, ajustes de rota e correção de testes."
50
- → Compressed: 15 → 1 entry ✅
51
-
52
- Group: decisions · 2026-05 (8 entries · 640 tokens)
53
- → "Decisões de maio sobre arquitetura: monorepo mantido, SQLAlchemy 2.0 como padrão."
54
- → Compressed: 8 → 1 entry ✅
55
-
56
- Summary: 2 groups compressed, 23 entries → 2 entries (-91%)
57
- Tokens saved: ~1.8K
58
- ```
@@ -1,79 +0,0 @@
1
- ---
2
- description: "Scan, clean, cache, and archive Pantheon project files. Scans for bloat, archives completed deepwork, migrates flat files to MCP memory, and reports optimization opportunities. Usage: /pantheon-optimize"
3
- agent: "zeus"
4
- ---
5
- # /pantheon-optimize — Pantheon Project Optimizer
6
-
7
- **What:** Multi-mode optimization: scans for documentation bloat, archives completed deepwork, migrates memory-bank flat files to MCP memory (ChromaDB), and reports token savings.
8
-
9
- ## Usage
10
-
11
- ```
12
- /pantheon-optimize → Full scan + compress (default)
13
- /pantheon-optimize --dry-run → Preview only, no changes
14
- /pantheon-optimize --archive → Archive completed deepwork sessions
15
- /pantheon-optimize --cache → Migrate memory-bank to MCP memory
16
- /pantheon-optimize --path=<dir> → Limit scan to directory
17
- /pantheon-optimize --all → Run all modes (default)
18
- ```
19
-
20
- ## Modes
21
-
22
- ### `--archive` — Deepwork Archiving
23
- Archives completed deepwork sessions from `.pantheon/deepwork/<slug>/` to `.pantheon/deepwork/archive/<slug>/`.
24
-
25
- **Criteria:** A session is "completed" if it has a `REVIEW.md` containing "APPROVED".
26
-
27
- ```
28
- /pantheon-optimize archive → Interactive (ask per slug)
29
- /pantheon-optimize archive --dry-run → Preview only
30
- /pantheon-optimize archive --auto → Archive all completed
31
- /pantheon-optimize archive --auto --keep=2 → Keep only PLAN.md + REVIEW.md
32
- /pantheon-optimize archive --auto --compress → Single .md per slug
33
- ```
34
-
35
- ### `--cache` — Memory Bank Migration
36
- Scans `.pantheon/memory-bank/` for flat `.md` files and migrates them to the MCP memory server (ChromaDB).
37
-
38
- **What it does:**
39
- 1. Reads all `.md` files in `.pantheon/memory-bank/`
40
- 2. Chunks by heading (## sections)
41
- 3. Calls `memory_store()` for each chunk with appropriate namespace
42
- 4. Optionally archives the original files after successful migration
43
-
44
- ```
45
- /pantheon-optimize cache → Preview candidates, ask confirm
46
- /pantheon-optimize cache --dry-run → Show what would migrate
47
- /pantheon-optimize cache --auto → Migrate + archive originals
48
- ```
49
-
50
- ### `--dry-run` (global flag)
51
- Prevents any destructive action. Shows what WOULD be done.
52
-
53
- ### Default mode (no flags)
54
- Runs bloat scan on all `.md` and `.json` files + compression report.
55
-
56
- ## Output
57
-
58
- ```
59
- 🧹 Pantheon Optimize Report
60
-
61
- 📦 Bloat Scan: 47 .md + 12 .json files
62
- → 3 oversized files found
63
- → ~2.4K tokens recoverable
64
-
65
- 📁 Deepwork Archive: 15 candidates
66
- → 12 completed (REVIEW.md APPROVED)
67
- → 3 in progress (skipped)
68
- → Run with --archive --auto to archive 12 sessions
69
-
70
- 🗄️ Memory Cache: 24 files in memory-bank/
71
- → 18 already in MCP memory (dedup)
72
- → 6 candidates for migration (~3.2K tokens)
73
- → Run with --cache to migrate
74
-
75
- 📊 Summary:
76
- ⚡ 15 files optimizable → ~5.6K tokens
77
- 🗑️ 12 deepworks archivable → ~320 files cleanup
78
- 🗄️ 6 memory files → MCP migration ready
79
- ```
@@ -1,44 +0,0 @@
1
- ---
2
- description: "Store or recall a memory interactively. /pantheon-remember <text> → stores it. /pantheon-remember recall <key> → retrieves it. Omitting args starts interactive mode. Usage: /pantheon-remember"
3
- agent: "zeus"
4
- ---
5
- # /pantheon-remember — Memory Store & Recall
6
-
7
- **What:** Stores a memory entry via `memory_store()` or recalls via `memory_recall()`. Interactive mode if no arguments.
8
-
9
- ## Usage
10
-
11
- ```
12
- /pantheon-remember "Decisão: usar FastAPI em vez de Flask" → Store (namespace: default)
13
- /pantheon-remember "Decisão: ..." --namespace=decisions → Store em namespace específico
14
- /pantheon-remember recall "FastAPI decision" → Recall por key
15
- /pantheon-remember recall "FastAPI decision" --namespace=decisions → Recall em namespace
16
- /pantheon-remember → Modo interativo (pergunta→store→pergunta recall)
17
- ```
18
-
19
- ## Behavior
20
-
21
- ### Store mode (default)
22
- 1. Chama `memory_store()` com o texto fornecido
23
- 2. Metadata: preenche `agent`, `type`, `timestamp` automaticamente
24
- 3. Pergunta: "Quer buscar algo relacionado? (y/n)"
25
- - `y` → `memory_recall()` com extração automática de keywords
26
- - `n` → fim
27
-
28
- ### Recall mode
29
- 1. Chama `memory_recall()` com a key fornecida
30
- 2. Se não achar, tenta `memory_search()` como fallback
31
-
32
- ### Interactive mode (no args)
33
- 1. "O que você quer armazenar?"
34
- 2. Recebe texto → `memory_store()`
35
- 3. "Quer buscar algo relacionado?"
36
- 4. Opcional: "Qual namespace?" (default: "default")
37
-
38
- ## Output
39
-
40
- ```
41
- ✅ Stored — id: 42 | namespace: decisions | key: auto-generated
42
- 📎 Related entries (memory_recall):
43
- - #1: "Decisão: usar FastAPI..." (score: 0.92)
44
- ```
@@ -1,48 +0,0 @@
1
- ---
2
- description: "Search memories by text with optional namespace filter, category, and result limit. /pantheon-search <query> --namespace=<ns> --top=<N> --stats. Usage: /pantheon-search"
3
- agent: "zeus"
4
- ---
5
- # /pantheon-search — Memory Search
6
-
7
- **What:** Searches memory entries via `memory_search()` with hybrid vector + keyword (RRF fusion). Supports namespace filter, result limit, and stats view.
8
-
9
- ## Usage
10
-
11
- ```
12
- /pantheon-search "FastAPI performance" → Busca em todos os namespaces
13
- /pantheon-search "FastAPI" --namespace=decisions → Busca só em decisions
14
- /pantheon-search "bug pattern" --namespace=sessions --top=10 → 10 resultados
15
- /pantheon-search --stats → memory_stats() completo
16
- /pantheon-search --stats --namespace=decisions → Stats por namespace
17
- ```
18
-
19
- ## Flags
20
-
21
- | Flag | Default | Descrição |
22
- |------|---------|-----------|
23
- | `--namespace=<ns>` | `all` | Filtrar por namespace específico |
24
- | `--top=<N>` | `5` | Número de resultados (max 50) |
25
- | `--stats` | off | Mostrar estatísticas em vez de buscar |
26
-
27
- ## Output (search)
28
-
29
- ```
30
- 🔍 Memory Search: "FastAPI performance"
31
-
32
- Results (namespace: all):
33
- #1 │ decisions │ "Decisão: usar FastAPI..." │ score: 0.89 │ 2026-07-20
34
- #2 │ repo │ "FastAPI async patterns" │ score: 0.74 │ 2026-07-18
35
- #3 │ sessions │ "FastAPI migration done" │ score: 0.61 │ 2026-07-15
36
-
37
- Found 3 results in 2 namespaces (0.23s)
38
- ```
39
-
40
- ## Output (stats)
41
-
42
- ```
43
- 📊 Memory Stats
44
- Total entries: 142
45
- Namespaces: decisions (58), sessions (44), repo (28), default (12)
46
- Vector entries: 142
47
- DB size: 1.2 MB
48
- ```
@@ -1,71 +0,0 @@
1
- ---
2
- description: "Show Pantheon version, model tier, and all available agents with status"
3
- agent: "zeus"
4
- ---
5
- # /pantheon-status — System Status & Agent Registry
6
-
7
- **What:** Displays the current Pantheon version, model tier (Pro/Free), and a full status table of all agents.
8
- **Usage:** `/pantheon-status`
9
- **Returns:** Version badge · model tier · agent table with availability
10
- **Use when:** You want to see what version of Pantheon is running and which agents are loaded
11
-
12
- ## Output Format
13
-
14
- Produce EXACTLY this structure:
15
-
16
- ```
17
- ## 🏛️ Pantheon System Status
18
-
19
- **Version:** vX.Y.Z
20
- **Model Tier:** Pro (premium models) | Free (default models)
21
- **Platform:** <detect: opencode | claude | cursor | windsurf | vscode>
22
- **Agents loaded:** N of 14
23
-
24
- ### Agent Registry
25
-
26
- | Agent | Role | Tier | Status |
27
- |-------|------|------|--------|
28
- | @zeus | Central orchestrator | default | ✅ |
29
- | @athena | Strategic planner | premium | ✅ |
30
- | @hermes | Backend (FastAPI) | default | ✅ |
31
- | @aphrodite | Frontend (React) | default | ✅ |
32
- | @demeter | Database | default | ✅ |
33
- | @themis | Quality & security | premium | ✅ |
34
- | @prometheus | Infrastructure | default | ✅ |
35
- | @apollo | Codebase discovery | fast | ✅ |
36
- | @iris | GitHub operations | fast | ✅ |
37
- | @mnemosyne | Memory bank | fast | ✅ |
38
- | @talos | Hotfixes | fast | ✅ |
39
- | @hephaestus | AI pipelines | default | ✅ |
40
- | @nyx | Observability | fast | ✅ |
41
- | @gaia | Remote sensing | fast | ✅ |
42
-
43
- ### Commands Available
44
-
45
- `/pantheon` `/pantheon-status` `/audit` `/focus` `/deepwork` `/optimize` `/sketch` `/` `/` `/` `/pantheon-remember` `/pantheon-search` `/` `/pantheon-forget`
46
-
47
- ### Health
48
-
49
- - ✅ All agents responding
50
- - ⚠️ N agents degraded (if any)
51
- - ❌ N agents unavailable (if any)
52
- ```
53
-
54
- ## How to Detect Version
55
-
56
- Read `package.json` → `"version"` field. If unavailable, read `plugin.json` → `"version"`.
57
-
58
- ## How to Detect Model Tier
59
-
60
- - **Pro:** Any agent with `model_tier: premium` in `routing.yml` is using a premium model (athena, themis)
61
- - **Free:** All agents using `default` or `fast` tier models
62
- - Report based on what `routing.yml` declares for the active platform
63
-
64
- ## How to Detect Platform
65
-
66
- Check for platform-specific markers:
67
- - `opencode.json` present → **OpenCode**
68
- - `.claude/` directory → **Claude Code**
69
- - `.cursor/` directory → **Cursor**
70
- - `.windsurf/` directory → **Windsurf**
71
- - `.vscode/` directory → **VS Code Copilot**
@@ -1,49 +0,0 @@
1
- ---
2
- description: "Dispatch a question to 2-4 specialist agents via inline Zeus council"
3
- agent: zeus
4
- ---
5
- # /pantheon — Council Synthesis
6
-
7
- **What:** Dispatches the question to 2-3 specialist agents **in parallel** via `task()`, then synthesizes their responses into a single recommendation with resolved divergences.
8
- **Usage:** `/pantheon <question>`
9
- **When:** Architecture trade-offs, technology selection, security assessments, multi-stakeholder concerns
10
- **Returns:** Structured synthesis with recommendation, confidence level, resolved divergences
11
-
12
- ## Dispatch Selection
13
-
14
- Choose 2-3 agents based on domain:
15
-
16
- | Domain | Specialists |
17
- |--------|-------------|
18
- | Architecture | hermes, demeter, themis, athena |
19
- | Security | themis, hermes, prometheus, nyx |
20
- | Database | demeter, hermes, prometheus |
21
- | AI/RAG | hephaestus, nyx |
22
- | Infrastructure | prometheus, hermes, themis |
23
- | Frontend/UX | aphrodite, themis, hermes |
24
- | Observability | nyx, hermes |
25
- | General | athena, themis, hermes |
26
-
27
- Send ALL `task()` calls in a single message. Each must return: Recommendation · Reasoning · Trade-offs · Risks · Confidence.
28
-
29
- ## Synthesis Structure
30
-
31
- After ALL responses arrive, produce EXACTLY this structure:
32
-
33
- ### 📋 Individual Assessments
34
- For each specialist: Recommendation, Reasoning, Trade-offs, Risks, Confidence
35
-
36
- ### ✅ Agreements
37
- Where 2+ specialists converge
38
-
39
- ### ⚡ Divergences
40
- Where they disagree — resolve each one with reasoning
41
-
42
- ### 🔥 Total Divergence
43
- If ALL specialists disagree on a point, call this out explicitly
44
-
45
- ### 🏆 Recommendation
46
- Decisive conclusion with confidence level
47
-
48
- ## Question:
49
- $ARGUMENTS
@@ -1,23 +0,0 @@
1
- #!/usr/bin/env bash
2
- # check-version-consistency.sh — Verifies all 3 manifests have the same version
3
- set -euo pipefail
4
-
5
- SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
6
- ROOT="$(dirname "$SCRIPT_DIR")"
7
-
8
- pkg_ver=$(node -p "require('$ROOT/package.json').version")
9
- plugin_ver=$(node -p "require('$ROOT/plugin.json').version")
10
- gh_plugin_ver=$(node -p "require('$ROOT/.github/plugin/plugin.json').version")
11
-
12
- echo "package.json: $pkg_ver"
13
- echo "plugin.json: $plugin_ver"
14
- echo ".github/plugin/plugin.json: $gh_plugin_ver"
15
-
16
- if [ "$pkg_ver" != "$plugin_ver" ] || [ "$pkg_ver" != "$gh_plugin_ver" ]; then
17
- echo "❌ Version mismatch across manifests!"
18
- echo ""
19
- echo "Fix: run 'node scripts/versioning.mjs apply' to sync all manifests"
20
- exit 1
21
- fi
22
-
23
- echo "✅ All versions match: $pkg_ver"
@@ -1,104 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * generate-routing-docs.mjs — Generate routing docs from routing.yml
4
- *
5
- * Reads the canonical routing.yml and outputs markdown documentation
6
- * to stdout. Pipe to a file to save: node generate-routing-docs.mjs > ROUTING.md
7
- */
8
-
9
- import { existsSync, readFileSync } from 'node:fs'
10
- import { dirname, join } from 'node:path'
11
- import { fileURLToPath } from 'node:url'
12
- import yaml from 'js-yaml'
13
-
14
- const __dirname = dirname(fileURLToPath(import.meta.url))
15
- const ROOT = join(__dirname, '..')
16
-
17
- const routingPath = join(ROOT, 'routing.yml')
18
- if (!existsSync(routingPath)) {
19
- console.error('❌ routing.yml not found')
20
- process.exit(1)
21
- }
22
- const routing = yaml.load(readFileSync(routingPath, 'utf8'))
23
-
24
- const agents = routing.agents || {}
25
- const matrix = routing.routing_matrix || []
26
- const handoffs = routing.handoffs || {}
27
-
28
- let doc = ''
29
-
30
- // Title
31
- doc += `# Pantheon Routing Reference\n\n`
32
- doc += `Auto-generated from \`routing.yml\` (v${routing.version || '?'})\n\n`
33
- doc += `${Object.keys(agents).length} agents · ${matrix.length} routing rules · ${Object.keys(handoffs).length} agent handoff groups\n\n`
34
-
35
- // Agent Registry
36
- doc += `---\n\n## Agent Registry\n\n`
37
- doc += `All ${Object.keys(agents).length} Pantheon agents with roles, model tiers, and capabilities.\n\n`
38
- doc += `| Agent | Role | Model Tier | User-Invocable | Delegates To | Skills |\n`
39
- doc += `|-------|------|-----------|----------------|-------------|--------|\n`
40
-
41
- for (const [name, info] of Object.entries(agents)) {
42
- const role = info.role || '—'
43
- const tier = info.model_tier || '—'
44
- const invocable = info.user_invocable ? '✅ Yes' : '❌ No'
45
- const delegates = (info.subagent_can_delegate_to || []).join(', ') || '—'
46
- const agentSkills = (info.skills || []).map((s) => `\`${s}\``).join(', ') || '—'
47
- doc += `| **@${name}** | ${role} | ${tier} | ${invocable} | ${delegates} | ${agentSkills} |\n`
48
- }
49
-
50
- // Routing Matrix
51
- doc += `\n---\n\n## Routing Matrix\n\n`
52
- doc += `Task category → primary agent mapping. Use this to decide which agent to invoke.\n\n`
53
- doc += `| Category | Primary Agent | Model Tier | Can Run Parallel With |\n`
54
- doc += `|----------|--------------|-----------|----------------------|\n`
55
-
56
- for (const entry of matrix) {
57
- const primary = `@${entry.primary_agent}`
58
- const tier = entry.model_tier || '—'
59
- const parallel = entry.parallel_with ? entry.parallel_with.map((a) => `@${a}`).join(', ') : '—'
60
- doc += `| ${entry.category} | ${primary} | ${tier} | ${parallel} |\n`
61
- }
62
-
63
- // Handoff Reference
64
- doc += `\n---\n\n## Handoff Reference\n\n`
65
- doc += `Structured delegation contracts between agents.\n\n`
66
-
67
- for (const [agentName, agentHandoffs] of Object.entries(handoffs)) {
68
- doc += `### @${agentName}\n\n`
69
- doc += `| Handoff | Target Agent | Model Tier | Description |\n`
70
- doc += `|---------|-------------|-----------|-------------|\n`
71
-
72
- for (const [key, handoff] of Object.entries(agentHandoffs)) {
73
- if (typeof handoff !== 'object') continue
74
- const target = `@${handoff.agent}`
75
- const tier = handoff.model_tier || '—'
76
- const desc = handoff.description || handoff.prompt?.substring(0, 80) || '—'
77
- doc += `| **${key}** | ${target} | ${tier} | ${desc} |\n`
78
- }
79
- doc += `\n`
80
- }
81
-
82
- // Deployment platforms
83
- doc += `---\n\n## Deployment Platforms\n\n`
84
- doc += `Supported platforms and their configuration details.\n\n`
85
- doc += `| Platform | Directory | Format | Handoff Strategy |\n`
86
- doc += `|----------|-----------|--------|-----------------|\n`
87
-
88
- const PLATFORM_INFO = {
89
- opencode: { dir: '.opencode/agents/', format: '.md with YAML', handoff: 'native (YAML)' },
90
- claude: { dir: '.claude/agents/', format: '.md with YAML', handoff: 'embed (body)' },
91
- cursor: { dir: '.cursor/rules/', format: '.mdc rule files', handoff: 'embed (body)' },
92
- windsurf: { dir: '.windsurf/rules/', format: '.md rule files', handoff: 'embed (body)' },
93
- cline: { dir: '.clinerules/', format: 'plain text', handoff: 'embed (body)' },
94
- copilot: { dir: '.github/agents/', format: '.agent.md with YAML', handoff: 'native (YAML)' },
95
- continue: { dir: '.continue/rules/', format: '.md rules', handoff: 'embed (body)' },
96
- }
97
-
98
- for (const [platform, info] of Object.entries(PLATFORM_INFO)) {
99
- doc += `| **${platform}** | ${info.dir} | ${info.format} | ${info.handoff} |\n`
100
- }
101
-
102
- doc += `\n---\n\n*Generated on ${new Date().toISOString().split('T')[0]} from \`routing.yml\`*\n`
103
-
104
- console.log(doc)