pantheon-opencode 1.6.0-beta.7 → 1.6.0-beta.9
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.
- package/AGENTS.md +58 -15
- package/CHANGELOG.md +61 -94
- package/README.md +81 -103
- package/README.pt-BR.md +19 -37
- package/commands/pantheon-audit.md +7 -1
- package/commands/pantheon-consolidate.md +1 -1
- package/commands/pantheon-focus.md +17 -0
- package/package.json +1 -2
- package/plugin.json +2 -2
- package/pyproject.toml +1 -1
- package/scripts/build-agents-md.mjs +2 -3
- package/scripts/doctor.mjs +22 -104
- package/scripts/hooks/scan-secrets.sh +97 -0
- package/scripts/install/config-migration.mjs +9 -42
- package/scripts/install/interactive.mjs +1 -1
- package/scripts/install/opencode.mjs +174 -77
- package/scripts/install/plugin.mjs +43 -9
- package/scripts/install/strings.mjs +0 -8
- package/scripts/probe-pantheon-cost.mjs +3 -16
- package/scripts/sync-artifacts.mjs +1 -0
- package/scripts/sync-tui.mjs +24 -3
- package/scripts/test-opencode-v2-sandbox.sh +203 -786
- package/scripts/validate-sandbox-install.mjs +138 -0
- package/skills-lock.json +4 -5
- package/src/agents/aphrodite.md +2 -9
- package/src/agents/demeter.md +0 -9
- package/src/agents/gaia.md +1 -0
- package/src/agents/hephaestus.md +0 -9
- package/src/agents/hermes.md +2 -9
- package/src/agents/mnemosyne.md +18 -53
- package/src/agents/prometheus.md +0 -9
- package/src/agents/themis.md +0 -1
- package/src/agents/zeus.md +180 -19
- package/src/instructions/agent-return-format.instructions.md +48 -3
- package/src/instructions/memory-protocol.instructions.md +8 -9
- package/src/instructions/zeus-anti-stall.instructions.md +54 -6
- package/src/instructions/zeus-council-synthesis.instructions.md +71 -0
- package/src/instructions/zeus-memory-operations.instructions.md +4 -4
- package/src/instructions/zeus-timeout-retry.instructions.md +81 -7
- package/src/pantheon/v2-delegation-enforce.ts +2 -1
- package/src/plugin-v2.ts +251 -168
- package/src/plugins/pantheon-hooks.ts +35 -82
- package/src/plugins/tui/dist/tui-v2.d.ts +9 -0
- package/src/plugins/tui/dist/tui-v2.d.ts.map +1 -0
- package/src/plugins/tui/dist/tui-v2.js +151 -0
- package/src/plugins/tui/dist/tui-v2.js.map +1 -0
- package/src/plugins/tui/dist/tui.d.ts.map +1 -1
- package/src/plugins/tui/dist/tui.js +29 -53
- package/src/plugins/tui/index-v2.ts +6 -0
- package/src/plugins/tui/package-lock.json +5411 -1292
- package/src/plugins/tui/package.json +10 -7
- package/src/plugins/tui/src/index-v2.tsx +108 -0
- package/src/plugins/tui/src/index.tsx +28 -63
- package/src/plugins/tui/src/opencode-v2.d.ts +13 -0
- package/src/plugins/tui/tsdown.config.ts +2 -2
- package/src/plugins/tui/tui-v2.ts +2 -0
- package/src/plugins/tui/tui.ts +3 -0
- package/src/routing.yml +4 -2
- package/src/skills/README.md +7 -12
- package/src/skills/agent-coordination/SKILL.md +83 -13
- package/src/skills/auto-continue/SKILL.md +13 -14
- package/src/skills/context-compression/SKILL.md +26 -879
- package/src/skills/session-goal/SKILL.md +14 -5
- package/src/pantheon/secret-scanner.ts +0 -489
- package/src/plugins/tui/README.md +0 -14
- package/src/skills/council-synthesis/SKILL.md +0 -29
|
@@ -1,19 +1,23 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pantheon-tui",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "1.6.0-beta.
|
|
5
|
-
"description": "Pantheon TUI plugin —
|
|
4
|
+
"version": "1.6.0-beta.9",
|
|
5
|
+
"description": "Pantheon TUI plugin — V1 rich sidebar and usage gauges; native V2 status, session and delegation sidebar",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"engines": {
|
|
8
8
|
"node": "^22.22.2 || ^24.15.0 || >=26.0.0"
|
|
9
9
|
},
|
|
10
10
|
"exports": {
|
|
11
11
|
"./tui": "./dist/tui.js",
|
|
12
|
+
"./tui-v2": "./dist/tui-v2.js",
|
|
12
13
|
"./server": "./dist/server.js"
|
|
13
14
|
},
|
|
14
15
|
"files": [
|
|
15
16
|
"dist",
|
|
16
|
-
"src"
|
|
17
|
+
"src",
|
|
18
|
+
"tui.ts",
|
|
19
|
+
"tui-v2.ts",
|
|
20
|
+
"index-v2.ts"
|
|
17
21
|
],
|
|
18
22
|
"scripts": {
|
|
19
23
|
"build": "tsdown",
|
|
@@ -22,8 +26,6 @@
|
|
|
22
26
|
"peerDependencies": {
|
|
23
27
|
"@opencode-ai/plugin": "1.18.33",
|
|
24
28
|
"@opencode-ai/sdk": "1.18.33",
|
|
25
|
-
"@opentui/core": "0.5.10",
|
|
26
|
-
"@opentui/solid": "0.5.10",
|
|
27
29
|
"solid-js": "1.9.12"
|
|
28
30
|
},
|
|
29
31
|
"devDependencies": {
|
|
@@ -39,8 +41,9 @@
|
|
|
39
41
|
"//overrides": "TUI production advisory fixes: Babel >=7.29.6 and Seroval >=1.6.3; Solid stays at 1.9.12 to satisfy OpenTUI's exact peer. Remove only after upstream ranges include fixed versions; Seroval compatibility is covered by the Solid serializer regression test.",
|
|
40
42
|
"dependencies": {
|
|
41
43
|
"@opencode-ai/plugin": "1.18.33",
|
|
42
|
-
"@
|
|
43
|
-
"@opentui/
|
|
44
|
+
"@opencode/plugin": "2.0.26",
|
|
45
|
+
"@opentui/core": "0.5.17",
|
|
46
|
+
"@opentui/solid": "0.5.17",
|
|
44
47
|
"solid-js": "1.9.12"
|
|
45
48
|
}
|
|
46
49
|
}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
// biome-ignore-all lint/suspicious/noExplicitAny: OpenCode V2 exposes its TUI API at runtime.
|
|
2
|
+
/** @jsxImportSource @opentui/solid */
|
|
3
|
+
|
|
4
|
+
import { Plugin } from '@opencode/plugin/tui'
|
|
5
|
+
import { createMemo, createSignal, For, onCleanup, onMount, Show } from 'solid-js'
|
|
6
|
+
|
|
7
|
+
const SINGLETON = Symbol.for('pantheon.tui.v2.loaded')
|
|
8
|
+
|
|
9
|
+
function Sidebar(props: { context: any; sessionID?: string }) {
|
|
10
|
+
const { context } = props
|
|
11
|
+
const [revision, setRevision] = createSignal(0)
|
|
12
|
+
const location = context.location ?? context.data.location.default()
|
|
13
|
+
|
|
14
|
+
const session = createMemo(() => {
|
|
15
|
+
revision()
|
|
16
|
+
return props.sessionID ? context.data.session.get(props.sessionID) : undefined
|
|
17
|
+
})
|
|
18
|
+
const branch = createMemo(() => {
|
|
19
|
+
revision()
|
|
20
|
+
const info = context.data.location.vcs.info(location)
|
|
21
|
+
return info?.branch?.current ?? null
|
|
22
|
+
})
|
|
23
|
+
const delegations = createMemo(() => {
|
|
24
|
+
revision()
|
|
25
|
+
const id = props.sessionID
|
|
26
|
+
if (!id) return []
|
|
27
|
+
const family: string[] = context.data.session.family(id) ?? []
|
|
28
|
+
return family
|
|
29
|
+
.filter((childID) => childID !== id)
|
|
30
|
+
.map((childID) => context.data.session.get(childID))
|
|
31
|
+
.filter((child: any) => child?.parentID === id)
|
|
32
|
+
.slice(0, 6)
|
|
33
|
+
})
|
|
34
|
+
|
|
35
|
+
onMount(() => {
|
|
36
|
+
const stop: Array<() => void> = []
|
|
37
|
+
for (const type of [
|
|
38
|
+
'session.created',
|
|
39
|
+
'session.updated',
|
|
40
|
+
'session.status',
|
|
41
|
+
'session.deleted',
|
|
42
|
+
]) {
|
|
43
|
+
try {
|
|
44
|
+
stop.push(context.data.on(type, () => setRevision((value) => value + 1)))
|
|
45
|
+
} catch {
|
|
46
|
+
// Sidebar remains useful with the initial cached state if an event is unavailable.
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
if (props.sessionID) {
|
|
50
|
+
void context.data.session.sync(props.sessionID).then(() => setRevision((value) => value + 1))
|
|
51
|
+
}
|
|
52
|
+
void context.data.location.vcs.sync(location).then(() => setRevision((value) => value + 1))
|
|
53
|
+
onCleanup(() => {
|
|
54
|
+
for (const unsubscribe of stop) unsubscribe()
|
|
55
|
+
})
|
|
56
|
+
})
|
|
57
|
+
|
|
58
|
+
const text = () => context.theme.text?.base
|
|
59
|
+
const muted = () => context.theme.text?.muted ?? text()
|
|
60
|
+
|
|
61
|
+
return (
|
|
62
|
+
<box flexDirection="column" width="100%" padding={1}>
|
|
63
|
+
<text fg={text()} attributes={1}>{`Pantheon v${__PANTHEON_VERSION__}`}</text>
|
|
64
|
+
<text fg={muted()}>OpenCode V2 · plugin TUI ativo</text>
|
|
65
|
+
<Show when={branch()}>{(value) => <text fg={muted()}>{`Branch: ${value()}`}</text>}</Show>
|
|
66
|
+
<Show when={session()} fallback={<text fg={muted()}>Nenhuma sessão selecionada</text>}>
|
|
67
|
+
{(current) => (
|
|
68
|
+
<>
|
|
69
|
+
<text fg={text()}>{`Sessão: ${current().title || current().id}`}</text>
|
|
70
|
+
<Show when={current().agent}>
|
|
71
|
+
<text fg={muted()}>{`Agente: ${current().agent}`}</text>
|
|
72
|
+
</Show>
|
|
73
|
+
</>
|
|
74
|
+
)}
|
|
75
|
+
</Show>
|
|
76
|
+
<Show when={delegations().length > 0}>
|
|
77
|
+
<text fg={text()} attributes={1}>
|
|
78
|
+
Delegações
|
|
79
|
+
</text>
|
|
80
|
+
<For each={delegations()}>
|
|
81
|
+
{(child: any) => <text fg={muted()}>{`· ${child.title || child.id}`}</text>}
|
|
82
|
+
</For>
|
|
83
|
+
</Show>
|
|
84
|
+
</box>
|
|
85
|
+
)
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
const plugin = Plugin.define({
|
|
89
|
+
id: 'pantheon.tui',
|
|
90
|
+
setup(context: any) {
|
|
91
|
+
const globalState = globalThis as unknown as Record<PropertyKey, unknown>
|
|
92
|
+
if (globalState[SINGLETON]) return
|
|
93
|
+
globalState[SINGLETON] = true
|
|
94
|
+
|
|
95
|
+
const unregister = context.ui.slot({
|
|
96
|
+
append: 'sidebar.content',
|
|
97
|
+
render: ({ sessionID }: { sessionID?: string }) => (
|
|
98
|
+
<Sidebar context={context} sessionID={sessionID} />
|
|
99
|
+
),
|
|
100
|
+
})
|
|
101
|
+
return () => {
|
|
102
|
+
if (typeof unregister === 'function') unregister()
|
|
103
|
+
delete globalState[SINGLETON]
|
|
104
|
+
}
|
|
105
|
+
},
|
|
106
|
+
})
|
|
107
|
+
|
|
108
|
+
export default plugin
|
|
@@ -5,9 +5,9 @@
|
|
|
5
5
|
/**
|
|
6
6
|
* pantheon-tui — Pantheon TUI plugin for opencode.
|
|
7
7
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
8
|
+
* V1 bundle: `tsdown` emits `dist/tui.js`, re-exported by root `tui.ts`.
|
|
9
|
+
* OpenCode V2 uses the separate `src/index-v2.tsx` entry and native CLI plugin
|
|
10
|
+
* API. No raw TSX implementation is shipped. Because the bundle inlines relative
|
|
11
11
|
* imports, this entry may be split into modules without breaking the loader.
|
|
12
12
|
*
|
|
13
13
|
* Slots:
|
|
@@ -740,27 +740,12 @@ async function loadConfig(configPath: string | undefined): Promise<UsageBarConfi
|
|
|
740
740
|
}
|
|
741
741
|
}
|
|
742
742
|
|
|
743
|
-
/** Vendored usage-bar plugin init: reads config, seeds the kv cache,
|
|
744
|
-
* the
|
|
743
|
+
/** Vendored usage-bar plugin init: reads config, seeds the kv cache, starts
|
|
744
|
+
* the poll loop and registers the `app_bottom` slot. Skips everything (and
|
|
745
745
|
* registers nothing) when no provider is enabled — mirrors the standalone
|
|
746
746
|
* plugin's early return. */
|
|
747
747
|
async function setupUsageBar(api: TuiPluginApi) {
|
|
748
|
-
let disposed = false
|
|
749
|
-
let clockInterval: ReturnType<typeof setInterval> | undefined
|
|
750
|
-
const pollTimeouts = new Set<ReturnType<typeof setTimeout>>()
|
|
751
|
-
|
|
752
|
-
// This optional feature owns timers independently from the sidebar. A slow
|
|
753
|
-
// config read may finish after shutdown, so register cleanup before awaiting
|
|
754
|
-
// anything and check the disposed flag at every async boundary.
|
|
755
|
-
api.lifecycle.onDispose(() => {
|
|
756
|
-
disposed = true
|
|
757
|
-
if (clockInterval !== undefined) clearInterval(clockInterval)
|
|
758
|
-
for (const timeout of pollTimeouts) clearTimeout(timeout)
|
|
759
|
-
pollTimeouts.clear()
|
|
760
|
-
})
|
|
761
|
-
|
|
762
748
|
const config = await loadConfig(api.state.path?.config)
|
|
763
|
-
if (disposed) return
|
|
764
749
|
if (api.state.path?.state) opencodeAuthFile = join(api.state.path.state, 'auth.json')
|
|
765
750
|
|
|
766
751
|
const enabled = providers.filter((p) => config.providers[p.id].enabled)
|
|
@@ -777,6 +762,28 @@ async function setupUsageBar(api: TuiPluginApi) {
|
|
|
777
762
|
const [byStatus, setByStatus] = createSignal<Record<string, StatusIndicator>>({})
|
|
778
763
|
const [now, setNow] = createSignal(Date.now())
|
|
779
764
|
|
|
765
|
+
setInterval(() => setNow(Date.now()), 1_000)
|
|
766
|
+
|
|
767
|
+
for (const p of enabled) {
|
|
768
|
+
const cfg = config.providers[p.id]
|
|
769
|
+
const poll = async () => {
|
|
770
|
+
// Fetch usage and status concurrently; status pages are CDN-backed and
|
|
771
|
+
// never throttle, so we poll them on the same cadence as usage.
|
|
772
|
+
const statusP = config.showStatus && p.statusUrl ? fetchStatus(p.statusUrl) : null
|
|
773
|
+
const [all, status] = await Promise.all([p.fetchUsage(cfg), statusP])
|
|
774
|
+
if (all) {
|
|
775
|
+
const windows = all.filter((w) => cfg.show[w.category] && w.resetsAt > Date.now())
|
|
776
|
+
setByProvider((prev) => ({ ...prev, [p.id]: windows }))
|
|
777
|
+
api.kv.set(`usage-bar.${p.id}.windows`, windows)
|
|
778
|
+
}
|
|
779
|
+
// `null` means the status fetch failed — keep the last known indicator.
|
|
780
|
+
if (status !== null) setByStatus((prev) => ({ ...prev, [p.id]: status }))
|
|
781
|
+
// Back off when the usage fetch failed (e.g. 429 — these endpoints throttle).
|
|
782
|
+
setTimeout(poll, all ? POLL_MS : POLL_MS * 3)
|
|
783
|
+
}
|
|
784
|
+
void poll()
|
|
785
|
+
}
|
|
786
|
+
|
|
780
787
|
api.slots.register({
|
|
781
788
|
order: 60,
|
|
782
789
|
slots: {
|
|
@@ -864,46 +871,6 @@ async function setupUsageBar(api: TuiPluginApi) {
|
|
|
864
871
|
},
|
|
865
872
|
},
|
|
866
873
|
})
|
|
867
|
-
|
|
868
|
-
// Start background work only once the optional UI slot was accepted. If
|
|
869
|
-
// registration fails, the outer fail-open handler can suppress it without
|
|
870
|
-
// leaving a timer or provider request running in the background.
|
|
871
|
-
clockInterval = setInterval(() => setNow(Date.now()), 1_000)
|
|
872
|
-
|
|
873
|
-
const schedulePoll = (run: () => void, delay: number) => {
|
|
874
|
-
if (disposed) return
|
|
875
|
-
const timeout = setTimeout(() => {
|
|
876
|
-
pollTimeouts.delete(timeout)
|
|
877
|
-
if (!disposed) run()
|
|
878
|
-
}, delay)
|
|
879
|
-
pollTimeouts.add(timeout)
|
|
880
|
-
}
|
|
881
|
-
|
|
882
|
-
for (const p of enabled) {
|
|
883
|
-
const cfg = config.providers[p.id]
|
|
884
|
-
const poll = async () => {
|
|
885
|
-
if (disposed) return
|
|
886
|
-
// Fetch usage and status concurrently; status pages are CDN-backed and
|
|
887
|
-
// never throttle, so we poll them on the same cadence as usage.
|
|
888
|
-
const statusP = config.showStatus && p.statusUrl ? fetchStatus(p.statusUrl) : null
|
|
889
|
-
const [all, status] = await Promise.all([p.fetchUsage(cfg), statusP])
|
|
890
|
-
if (disposed) return
|
|
891
|
-
if (all) {
|
|
892
|
-
const windows = all.filter((w) => cfg.show[w.category] && w.resetsAt > Date.now())
|
|
893
|
-
setByProvider((prev) => ({ ...prev, [p.id]: windows }))
|
|
894
|
-
api.kv.set(`usage-bar.${p.id}.windows`, windows)
|
|
895
|
-
}
|
|
896
|
-
// `null` means the status fetch failed — keep the last known indicator.
|
|
897
|
-
if (status !== null) setByStatus((prev) => ({ ...prev, [p.id]: status }))
|
|
898
|
-
// Back off when the usage fetch failed (e.g. 429 — these endpoints throttle).
|
|
899
|
-
schedulePoll(runPoll, all ? POLL_MS : POLL_MS * 3)
|
|
900
|
-
}
|
|
901
|
-
const runPoll = () => {
|
|
902
|
-
if (disposed) return
|
|
903
|
-
void poll().catch(() => schedulePoll(runPoll, POLL_MS * 3))
|
|
904
|
-
}
|
|
905
|
-
runPoll()
|
|
906
|
-
}
|
|
907
874
|
}
|
|
908
875
|
|
|
909
876
|
/* ─── Delegations (real-time panel) ────────────────────────
|
|
@@ -3167,9 +3134,7 @@ const tui: TuiPlugin = (api, _options, _meta) => {
|
|
|
3167
3134
|
.catch(() => setVersion(null))
|
|
3168
3135
|
|
|
3169
3136
|
// Vendored feature (MIT): AI subscription usage gauges.
|
|
3170
|
-
|
|
3171
|
-
// never turn an otherwise healthy TUI startup into an unhandled rejection.
|
|
3172
|
-
void setupUsageBar(api).catch(() => undefined)
|
|
3137
|
+
void setupUsageBar(api) // async init — never blocks sidebar registration
|
|
3173
3138
|
|
|
3174
3139
|
// ── Live delegation store (tool-part tracker + sidebar invalidation) ──
|
|
3175
3140
|
// The Delegations panel's PRIMARY source is `api.client.session.children`
|
|
@@ -26,7 +26,7 @@ async function ensureDistArtifactsEndWithNewline(): Promise<void> {
|
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
export default defineConfig({
|
|
29
|
-
entry: { tui: 'src/index.tsx', server: 'src/server.ts' },
|
|
29
|
+
entry: { tui: 'src/index.tsx', 'tui-v2': 'src/index-v2.tsx', server: 'src/server.ts' },
|
|
30
30
|
format: ['esm'],
|
|
31
31
|
platform: 'node',
|
|
32
32
|
outDir: 'dist',
|
|
@@ -47,7 +47,7 @@ export default defineConfig({
|
|
|
47
47
|
}),
|
|
48
48
|
],
|
|
49
49
|
deps: {
|
|
50
|
-
neverBundle: [/^@opencode-ai\//, /^@opentui\//, /^solid-js/],
|
|
50
|
+
neverBundle: [/^@opencode-ai\//, /^@opencode\//, /^@opentui\//, /^solid-js/],
|
|
51
51
|
},
|
|
52
52
|
onSuccess: ensureDistArtifactsEndWithNewline,
|
|
53
53
|
})
|
package/src/routing.yml
CHANGED
|
@@ -133,7 +133,7 @@ agents:
|
|
|
133
133
|
- artifact-management
|
|
134
134
|
- context-compression
|
|
135
135
|
- auto-continue
|
|
136
|
-
-
|
|
136
|
+
- incremental-implementation
|
|
137
137
|
athena:
|
|
138
138
|
role: Strategic planner
|
|
139
139
|
reasoning_effort: high
|
|
@@ -188,6 +188,8 @@ agents:
|
|
|
188
188
|
- pantheon_code_mode
|
|
189
189
|
skills:
|
|
190
190
|
- tdd-with-agents
|
|
191
|
+
- file-prompts
|
|
192
|
+
- streaming-patterns
|
|
191
193
|
- git-workflow-and-versioning
|
|
192
194
|
- incremental-implementation
|
|
193
195
|
aphrodite:
|
|
@@ -209,7 +211,7 @@ agents:
|
|
|
209
211
|
skills:
|
|
210
212
|
- tdd-with-agents
|
|
211
213
|
- visual-review-pipeline
|
|
212
|
-
-
|
|
214
|
+
- file-prompts
|
|
213
215
|
demeter:
|
|
214
216
|
role: Database specialist
|
|
215
217
|
reasoning_effort: medium
|
package/src/skills/README.md
CHANGED
|
@@ -4,14 +4,14 @@
|
|
|
4
4
|
|
|
5
5
|
Skills are reference modules loaded on demand by agents. Each skill provides domain-specific knowledge — architecture patterns, security checklists, optimization strategies, and implementation guides. Agents load skills when their task matches the skill's description, keeping context focused and token-efficient.
|
|
6
6
|
|
|
7
|
-
There are **
|
|
7
|
+
There are **20 skills** divided into **5 domains**.
|
|
8
8
|
|
|
9
9
|
## Skills by Domain
|
|
10
10
|
|
|
11
11
|
### Domain 1: Orchestration & Workflow
|
|
12
12
|
|
|
13
13
|
1. **agent-coordination** — `agent-coordination/SKILL.md`
|
|
14
|
-
-
|
|
14
|
+
- Multi-agent orchestration with model routing, category delegation, and sprint management.
|
|
15
15
|
- Used by: Zeus
|
|
16
16
|
|
|
17
17
|
2. **artifact-management** — `artifact-management/SKILL.md`
|
|
@@ -23,8 +23,8 @@ There are **21 skills** divided into **5 domains**.
|
|
|
23
23
|
- Used by: Zeus, Apollo, Hephaestus, Nyx, Gaia
|
|
24
24
|
|
|
25
25
|
4. **context-compression** — `context-compression/SKILL.md`
|
|
26
|
-
-
|
|
27
|
-
- Used by: Zeus, Mnemosyne
|
|
26
|
+
- Native compaction guidance and explicit checkpoint rules; no automatic compression MCP calls.
|
|
27
|
+
- Used by: Zeus, Mnemosyne
|
|
28
28
|
|
|
29
29
|
5. **memory-bank** — `memory-bank/SKILL.md`
|
|
30
30
|
- Memory bank rules, structure, and optimization — complete guide to Pantheon memory management.
|
|
@@ -34,10 +34,6 @@ There are **21 skills** divided into **5 domains**.
|
|
|
34
34
|
- Pin session objectives to prevent scope creep across long multi-agent sessions.
|
|
35
35
|
- Used by: Zeus, Mnemosyne
|
|
36
36
|
|
|
37
|
-
- **council-synthesis** — `council-synthesis/SKILL.md`
|
|
38
|
-
- Full structured council workflow, loaded only for `/pantheon` or a material multi-perspective decision.
|
|
39
|
-
- Used by: Zeus
|
|
40
|
-
|
|
41
37
|
### Domain 2: Development Tools
|
|
42
38
|
|
|
43
39
|
7. **clonedeps** — `clonedeps/SKILL.md`
|
|
@@ -50,7 +46,7 @@ There are **21 skills** divided into **5 domains**.
|
|
|
50
46
|
|
|
51
47
|
9. **incremental-implementation** — `incremental-implementation/SKILL.md`
|
|
52
48
|
- Implement in thin vertical slices — one commit per task, testable, rollback-safe.
|
|
53
|
-
- Used by: Hermes, Aphrodite, Demeter, Prometheus, Talos
|
|
49
|
+
- Used by: Zeus, Hermes, Aphrodite, Demeter, Prometheus, Talos
|
|
54
50
|
|
|
55
51
|
10. **loop-engineering** — `loop-engineering/SKILL.md`
|
|
56
52
|
- Iterative refinement pattern for complex problems — solve, review, improve, repeat in controlled cycles.
|
|
@@ -128,12 +124,12 @@ The `SKILL.md` file contains YAML frontmatter with `name`, `description`, and pl
|
|
|
128
124
|
| 1 | agent-coordination | Orchestration & Workflow | Zeus |
|
|
129
125
|
| 2 | artifact-management | Orchestration & Workflow | Zeus, Mnemosyne, Iris |
|
|
130
126
|
| 3 | auto-continue | Orchestration & Workflow | Zeus, Apollo, Hephaestus, Nyx, Gaia |
|
|
131
|
-
| 4 | context-compression | Orchestration & Workflow | Zeus, Mnemosyne
|
|
127
|
+
| 4 | context-compression | Orchestration & Workflow | Zeus, Mnemosyne |
|
|
132
128
|
| 5 | memory-bank | Orchestration & Workflow | Mnemosyne, Athena |
|
|
133
129
|
| 6 | session-goal | Orchestration & Workflow | Zeus, Mnemosyne |
|
|
134
130
|
| 7 | clonedeps | Development Tools | Hermes, Hephaestus |
|
|
135
131
|
| 8 | git-workflow-and-versioning | Development Tools | Hermes, Prometheus, Iris |
|
|
136
|
-
| 9 | incremental-implementation | Development Tools | Hermes, Aphrodite, Demeter, Prometheus, Talos |
|
|
132
|
+
| 9 | incremental-implementation | Development Tools | Zeus, Hermes, Aphrodite, Demeter, Prometheus, Talos |
|
|
137
133
|
| 10 | loop-engineering | Development Tools | All agents |
|
|
138
134
|
| 11 | reflect | Development Tools | All agents |
|
|
139
135
|
| 12 | simplify | Development Tools | All agents |
|
|
@@ -145,7 +141,6 @@ The `SKILL.md` file contains YAML frontmatter with `name`, `description`, and pl
|
|
|
145
141
|
| 18 | spec-driven-development | Planning | Athena |
|
|
146
142
|
| 19 | verification-planning | Planning | Athena, Zeus |
|
|
147
143
|
| 20 | visual-review-pipeline | Frontend Development | Aphrodite |
|
|
148
|
-
| 21 | council-synthesis | Orchestration & Workflow | Zeus |
|
|
149
144
|
|
|
150
145
|
---
|
|
151
146
|
|
|
@@ -1,25 +1,95 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: agent-coordination
|
|
3
|
-
description: "
|
|
3
|
+
description: "Multi-agent orchestration with model routing, category delegation, and sprint management. Use for coordinating Pantheon agents."
|
|
4
4
|
context: fork
|
|
5
5
|
globs: []
|
|
6
6
|
alwaysApply: false
|
|
7
7
|
---
|
|
8
8
|
|
|
9
|
-
# Agent
|
|
9
|
+
# Agent Coordination
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
Master guide to orchestrating the multi-agent system. Includes category routing, model selection, and sprint management for rapid, TDD-driven feature development.
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Agent Hierarchy
|
|
16
|
+
|
|
17
|
+
See `AGENTS.md` for the full agent table.
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## Category Routing
|
|
22
|
+
|
|
23
|
+
Route tasks to optimized agents based on category instead of specifying agents manually:
|
|
24
|
+
|
|
25
|
+
| Category | Agent | Use For |
|
|
26
|
+
|----------|-------|---------|
|
|
27
|
+
| **Deep** | Athena, Hephaestus | Complex planning, AI pipelines |
|
|
28
|
+
| **Quick** | Talos, Apollo | Fast fixes, codebase search |
|
|
29
|
+
| **Ultrabrain** | Zeus | Multi-agent orchestration, model routing |
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## Sprint Workflow
|
|
34
|
+
|
|
35
|
+
```
|
|
36
|
+
1. User describes feature
|
|
37
|
+
2. @athena creates PLAN with phases and agents
|
|
38
|
+
3. User approves PLAN (GATE 1)
|
|
39
|
+
4. Zeus dispatches agents to phases (parallel when possible)
|
|
40
|
+
5. Each agent: TDD cycle → writes IMPL artifact
|
|
41
|
+
6. @themis reviews all phases (GATE 2)
|
|
42
|
+
7. User reviews Themis findings
|
|
43
|
+
8. If approved → user commits (GATE 3)
|
|
44
|
+
9. @mnemosyne updates memory bank
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## Parallel Execution Declaration
|
|
14
50
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
51
|
+
```
|
|
52
|
+
🔀 PARALLEL EXECUTION — Phase 2
|
|
53
|
+
Running simultaneously:
|
|
54
|
+
- @hermes → backend tests → .tmp/IMPL-phase2-hermes.md
|
|
55
|
+
- @aphrodite → frontend → .tmp/IMPL-phase2-aphrodite.md
|
|
56
|
+
- @demeter → migrations → .tmp/IMPL-phase2-demeter.md
|
|
57
|
+
Themis reviews all three after completion.
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## Artifact Protocol
|
|
63
|
+
|
|
64
|
+
All phase outputs go to `.pantheon/memory-bank/.tmp/`. See `skill: artifact-management` for the complete protocol (who generates what, templates, lifecycle).
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## Safety Gates
|
|
69
|
+
|
|
70
|
+
| Gate | When | Why |
|
|
71
|
+
|------|------|-----|
|
|
72
|
+
| **GATE 1** | After PLAN | User confirms scope |
|
|
73
|
+
| **GATE 2** | After Themis review | User sees changes |
|
|
74
|
+
| **GATE 3** | Before git commit | User controls history |
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## Model Selection
|
|
79
|
+
|
|
80
|
+
Model routing is handled by Prometheus and the platform configuration. Zeus delegates model selection to the tier system (`fast` / `default` / `coding` / `premium`).
|
|
81
|
+
|
|
82
|
+
- **Deep tasks** → High-quality models (Claude, GPT-4)
|
|
83
|
+
- **Quick tasks** → Fast/cheap models (Haiku, 4o-mini)
|
|
84
|
+
- **Visual tasks** → Multimodal models (GPT-4V, Claude Vision)
|
|
85
|
+
- **Cost optimization** → Route to cheapest model that meets quality bar
|
|
86
|
+
|
|
87
|
+
---
|
|
19
88
|
|
|
20
|
-
##
|
|
89
|
+
## Anti-Patterns
|
|
21
90
|
|
|
22
|
-
- Zeus
|
|
23
|
-
-
|
|
24
|
-
-
|
|
25
|
-
-
|
|
91
|
+
- ❌ Zeus doing implementation work (orchestrates, doesn't code)
|
|
92
|
+
- ❌ Skipping TDD cycle (RED → GREEN → REFACTOR)
|
|
93
|
+
- ❌ Auto-committing without user approval
|
|
94
|
+
- ❌ Parallel phases with dependencies (order matters)
|
|
95
|
+
- ❌ Ignoring Themis CRITICAL findings
|
|
@@ -52,8 +52,6 @@ Full-auto may continue only within a task and scope the user explicitly authoriz
|
|
|
52
52
|
|
|
53
53
|
---
|
|
54
54
|
|
|
55
|
-
---
|
|
56
|
-
|
|
57
55
|
## Implementation Pattern
|
|
58
56
|
|
|
59
57
|
```
|
|
@@ -165,25 +163,26 @@ Should I now run the migration tests? [waiting]
|
|
|
165
163
|
|
|
166
164
|
## Session Heartbeat & Checkpoints
|
|
167
165
|
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
166
|
+
Session state is **not** file-based. It lives in **pantheon-persistence** under the
|
|
167
|
+
`checkpoint:<slug>` namespace and is cleaned up automatically by a 4h TTL.
|
|
168
|
+
|
|
169
|
+
Use checkpoints only when `context_save` and `context_get` are explicitly
|
|
170
|
+
present in the active session's tool list. If unavailable, do not attempt a
|
|
171
|
+
checkpoint or guess a session ID; carry the handoff in the normal response.
|
|
173
172
|
|
|
174
|
-
When
|
|
175
|
-
`
|
|
176
|
-
|
|
177
|
-
compaction. `state` must be an object — never pass a bare string as `content`: its
|
|
173
|
+
When available, call `context_save` with `content=JSON.stringify(state)` and an
|
|
174
|
+
explicit `session_id`. A successful save needs no immediate `context_get`; read
|
|
175
|
+
only when resuming or when the save result is uncertain. Reuse the same session
|
|
176
|
+
ID so the `latest` pointer survives compaction. `state` must be an object — never pass a bare string as `content`: its
|
|
178
177
|
`goal`/`phase`/`delegations`/`heartbeat` values are objects and `tail` is an array.
|
|
179
178
|
`goal` is optional; when unset, omit the key rather than passing a string placeholder.
|
|
180
179
|
|
|
181
180
|
### Heartbeat Check
|
|
182
|
-
-
|
|
183
|
-
- Write a heartbeat after anti-stall recovery only when the current session exposes
|
|
181
|
+
- Check heartbeat only when checkpoint tools are available and the workflow needs a durable resume.
|
|
182
|
+
- Write a heartbeat after anti-stall recovery only when the current session exposes checkpoint tools.
|
|
184
183
|
|
|
185
184
|
### Checkpoint Rules
|
|
186
|
-
1. Save checkpoints for long-running/multi-phase work, context-loss risk, or substantive parallel work — not a one-off command or bounded fix
|
|
185
|
+
1. Save checkpoints only for long-running/multi-phase work, context-loss risk, or substantive parallel work — not a one-off command or bounded fix
|
|
187
186
|
2. Include current phase and remaining tasks when a checkpoint is warranted
|
|
188
187
|
3. On resume, read the latest checkpoint only with a known session ID; otherwise request the missing handoff context.
|
|
189
188
|
|