sisyphi 1.1.34 → 1.1.36
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/dist/cli.js +1480 -431
- package/dist/cli.js.map +1 -1
- package/dist/templates/agent-plugin/agents/operator.md +10 -0
- package/dist/templates/agent-plugin/hooks/CLAUDE.md +0 -1
- package/dist/templates/agent-plugin/hooks/operator-user-prompt.sh +33 -1
- package/dist/templates/agent-plugin/skills/operator/SKILL.md +38 -0
- package/dist/templates/agent-plugin/skills/operator-memory/SKILL.md +64 -0
- package/dist/templates/companion-plugin/hooks/user-prompt-context.sh +5 -2
- package/dist/templates/orchestrator-planning.md +7 -1
- package/dist/tui.js +45 -20
- package/dist/tui.js.map +1 -1
- package/package.json +1 -1
- package/templates/agent-plugin/agents/operator.md +10 -0
- package/templates/agent-plugin/hooks/CLAUDE.md +0 -1
- package/templates/agent-plugin/hooks/operator-user-prompt.sh +33 -1
- package/templates/agent-plugin/skills/operator/SKILL.md +38 -0
- package/templates/agent-plugin/skills/operator-memory/SKILL.md +64 -0
- package/templates/companion-plugin/hooks/user-prompt-context.sh +5 -2
- package/templates/orchestrator-planning.md +7 -1
package/package.json
CHANGED
|
@@ -7,8 +7,12 @@ effort: low
|
|
|
7
7
|
interactive: true
|
|
8
8
|
permissionMode: bypassPermissions
|
|
9
9
|
systemPrompt: append
|
|
10
|
+
skills:
|
|
11
|
+
- operator
|
|
12
|
+
- operator-memory
|
|
10
13
|
plugins:
|
|
11
14
|
- capture@crouton-kit
|
|
15
|
+
- authoring@crouton-kit
|
|
12
16
|
---
|
|
13
17
|
|
|
14
18
|
You are the human in the loop. When the team needs someone to actually use the product, test a flow, check what's on screen, read logs, interact with an external service, or do anything that a developer would alt-tab to a browser for — that's you.
|
|
@@ -31,6 +35,12 @@ Key thing: prefer interacting via accessible names (`capture click "Submit"`, `c
|
|
|
31
35
|
|
|
32
36
|
Don't guess the target. The product might be a browser page, an Electron app, or something else entirely. If the spawn instructions don't specify what to attach to, run `capture detect` / `capture list` and ask for guidance rather than assuming Chrome.
|
|
33
37
|
|
|
38
|
+
## Project-Local Memory
|
|
39
|
+
|
|
40
|
+
You have a memory file at `.sisyphus/agent-plugin/skills/operator/SKILL.md`, plus per-task-family reference files alongside it. **Read it now** — it's accumulated knowledge from prior operator runs in this project (auth flow, db reset, common surfaces, known footguns). It scaffolds itself on first use; if it looks like a stub, you're the first.
|
|
41
|
+
|
|
42
|
+
**Before submitting your final report**, invoke the `operator-memory` skill — it covers when and how to update the memory so the next operator starts ahead of where you started. For generic skill-authoring conventions (frontmatter, length, structure), defer to `/authoring:skills`.
|
|
43
|
+
|
|
34
44
|
## Unblock Yourself
|
|
35
45
|
|
|
36
46
|
You are the operator. If something stands between you and testing, **fix it yourself**. Never give up and never fall back to reading code and making assumptions — that defeats the entire point of your role.
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
- The bundled `hooks.json` here is the **manifest** — the daemon merges it with project (`.sisyphus/agent-plugin/hooks/hooks.json`) and user (`~/.sisyphus/agent-plugin/hooks/hooks.json`) layers at spawn time, then writes the merged result into the per-agent plugin dir. Script edits are invisible to running agents; **respawn required**.
|
|
2
|
-
- New hooks register declaratively: add a manifest entry with `agentTypes: [...]` (or `["all"]`) and the script gets copied automatically. No `src/daemon/agent.ts` edits needed for new agent-type-specific hooks. The merge logic lives in `src/daemon/extensions.ts` (`mergeHookManifests`, `collectReferencedHookScripts`).
|
|
3
2
|
- A bundled hook script is only copied into a spawned agent's plugin dir if the merged manifest references it for that agent type — scripts whose entries filter out (e.g. `plan-validate.sh` for a `review` agent) are skipped. Higher layers can suppress a bundled script by basename via `"disable": ["script.sh"]` at the manifest's top level.
|
|
4
3
|
- `interactive: true` in agent frontmatter triggers `condition: "non-interactive"` filtering — entries with that condition (currently the bundled `require-submit.sh` Stop hook) are dropped from the merged manifest for interactive agents.
|
|
5
4
|
- Scripts receive no `{{placeholder}}` substitution — placeholders appear as literal text, unlike `.md` templates.
|
|
@@ -1,7 +1,39 @@
|
|
|
1
1
|
#!/bin/bash
|
|
2
|
-
# UserPromptSubmit hook:
|
|
2
|
+
# UserPromptSubmit hook: scaffold project-local operator memory on first run,
|
|
3
|
+
# then reinforce paranoid testing.
|
|
3
4
|
if [ -z "$SISYPHUS_SESSION_ID" ]; then exit 0; fi
|
|
4
5
|
|
|
6
|
+
# ── Scaffold project-local operator memory ──────────────────────────────────
|
|
7
|
+
# On first run in a project, .sisyphus/agent-plugin/skills/operator/ doesn't
|
|
8
|
+
# exist. The bundled seed has already been copied into this agent's per-spawn
|
|
9
|
+
# plugin dir by the daemon (operator.md frontmatter lists skills: [operator]),
|
|
10
|
+
# so it's reachable via $CLAUDE_PLUGIN_ROOT — copy it from there to the
|
|
11
|
+
# project layer so future operator runs pick up the project-layer overlay.
|
|
12
|
+
SCAFFOLDED=0
|
|
13
|
+
if [ -n "$SISYPHUS_CWD" ] && [ -n "$CLAUDE_PLUGIN_ROOT" ]; then
|
|
14
|
+
PROJECT_MEMORY_DIR="$SISYPHUS_CWD/.sisyphus/agent-plugin/skills/operator"
|
|
15
|
+
BUNDLED_SEED_DIR="$CLAUDE_PLUGIN_ROOT/skills/operator"
|
|
16
|
+
if [ ! -f "$PROJECT_MEMORY_DIR/SKILL.md" ] && [ -d "$BUNDLED_SEED_DIR" ]; then
|
|
17
|
+
mkdir -p "$PROJECT_MEMORY_DIR"
|
|
18
|
+
cp -R "$BUNDLED_SEED_DIR/." "$PROJECT_MEMORY_DIR/"
|
|
19
|
+
SCAFFOLDED=1
|
|
20
|
+
fi
|
|
21
|
+
fi
|
|
22
|
+
|
|
23
|
+
if [ "$SCAFFOLDED" = "1" ]; then
|
|
24
|
+
cat <<'HINT'
|
|
25
|
+
<operator-memory-scaffolded>
|
|
26
|
+
Project-local operator memory was just scaffolded at .sisyphus/agent-plugin/skills/operator/ — read it now (it's a stub; you're the first operator in this project). Before submitting your final report, invoke the `operator-memory` skill and update the memory with whatever future operators should not have to rediscover.
|
|
27
|
+
</operator-memory-scaffolded>
|
|
28
|
+
HINT
|
|
29
|
+
else
|
|
30
|
+
cat <<'HINT'
|
|
31
|
+
<operator-memory>
|
|
32
|
+
Project-local operator memory is at .sisyphus/agent-plugin/skills/operator/ — read it now to inherit what prior operators learned. Before submitting your final report, invoke the `operator-memory` skill and update the memory with anything new you discovered.
|
|
33
|
+
</operator-memory>
|
|
34
|
+
HINT
|
|
35
|
+
fi
|
|
36
|
+
|
|
5
37
|
cat <<'HINT'
|
|
6
38
|
<operator-reminder>
|
|
7
39
|
Click EVERYTHING — assume something is broken and prove it:
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: operator
|
|
3
|
+
description: Project-local operational knowledge for THIS app, accumulated by prior operator runs. Covers app surfaces (routes, ports, processes, admin overlays), auth/login flow, db state management, common UI flows, and known footguns. Use whenever the operator agent needs project-specific operating knowledge — read at session start, update before submitting.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Operator memory for this project
|
|
7
|
+
|
|
8
|
+
This is the operator agent's accumulated memory for THIS project. Each prior operator run added what it learned. You should add what you learn before submitting.
|
|
9
|
+
|
|
10
|
+
If this file looks mostly empty, you're early — populate as you go. The structure below is the target shape, not a requirement to fill all sections immediately.
|
|
11
|
+
|
|
12
|
+
## App surfaces
|
|
13
|
+
|
|
14
|
+
Routes, ports, processes, admin overlays, debug flags. One line each — link to a reference file if there's depth.
|
|
15
|
+
|
|
16
|
+
- *(populate as you discover them)*
|
|
17
|
+
|
|
18
|
+
## Common operational patterns
|
|
19
|
+
|
|
20
|
+
Login, logout, db reset, seeding, environment toggles. Brief — defer details to reference files.
|
|
21
|
+
|
|
22
|
+
- *(populate as you discover them)*
|
|
23
|
+
|
|
24
|
+
## Known footguns
|
|
25
|
+
|
|
26
|
+
Things that broke once and might break again — race conditions, ordering requirements, stale-cache traps.
|
|
27
|
+
|
|
28
|
+
- *(populate as you discover them)*
|
|
29
|
+
|
|
30
|
+
## Reference files
|
|
31
|
+
|
|
32
|
+
One line per file in this directory. Add an entry here when you create a new reference.
|
|
33
|
+
|
|
34
|
+
- *(none yet)*
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
For guidance on what to capture, where to put it (SKILL.md vs new reference file), and naming conventions, invoke the `operator-memory` skill before submitting.
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: operator-memory
|
|
3
|
+
description: Use right before the operator agent submits its final report. Provides guidance for updating the project-local operator memory at .sisyphus/agent-plugin/skills/operator/ — what to capture, where to put it (SKILL.md vs a new reference file), naming conventions, and what to skip. Defers to /authoring:skills for generic skill conventions (frontmatter, length budgets, structure).
|
|
4
|
+
user-invocable: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Updating operator memory
|
|
8
|
+
|
|
9
|
+
You're about to submit. Spend a minute capturing what the next operator should not have to rediscover.
|
|
10
|
+
|
|
11
|
+
The memory lives at `.sisyphus/agent-plugin/skills/operator/`:
|
|
12
|
+
- `SKILL.md` — the high-level map of this app's surfaces and operations
|
|
13
|
+
- per-task-family reference files alongside it (`auth.md`, `db-reset.md`, `checkout-flow.md`, etc.)
|
|
14
|
+
|
|
15
|
+
## When to update (and when NOT to)
|
|
16
|
+
|
|
17
|
+
The bar is **"will future operators benefit from this?"** Specifics:
|
|
18
|
+
|
|
19
|
+
UPDATE when you discovered:
|
|
20
|
+
- A repeatable operational procedure (login flow, db reset, seed step, environment toggle)
|
|
21
|
+
- A surface that wasn't obvious (admin route, debug overlay, hidden flag, internal port)
|
|
22
|
+
- A footgun you hit and worked around (race condition, ordering requirement, stale-cache trap)
|
|
23
|
+
- A convention this app uses that differs from defaults (custom auth headers, non-standard ports, weird redirect chains)
|
|
24
|
+
|
|
25
|
+
DON'T update when:
|
|
26
|
+
- It's session-specific state (this user's email, this session's seeded data)
|
|
27
|
+
- It's a one-off observation that won't reproduce
|
|
28
|
+
- It's already covered (read existing files first — duplication is worse than nothing)
|
|
29
|
+
- It's about the codebase, not about operating the app — that's the orchestrator's domain, not yours
|
|
30
|
+
|
|
31
|
+
## SKILL.md vs a reference file
|
|
32
|
+
|
|
33
|
+
**SKILL.md** is the high-level map. It answers "what surfaces does this app have, what are the most common operations, where do I find deep dives?" Keep it dense — under ~80 lines. Each entry is a line or two with a pointer.
|
|
34
|
+
|
|
35
|
+
**A reference file** is the deep dive for one task family. It answers "exactly how do I do X step by step in this project". Each file has scope: `auth.md`, `db-reset.md`, `checkout-flow.md`, `feature-flags.md`.
|
|
36
|
+
|
|
37
|
+
Decision rule:
|
|
38
|
+
- New task family the operator might face → new reference file (and add a one-line entry to SKILL.md's Reference Files section).
|
|
39
|
+
- Refinement to existing knowledge → update the existing reference file or SKILL.md.
|
|
40
|
+
- A surface name you keep referencing → add it to SKILL.md's App Surfaces section once.
|
|
41
|
+
|
|
42
|
+
## Naming conventions
|
|
43
|
+
|
|
44
|
+
- Reference files: kebab-case, task-family scope, no `operator-` prefix (the directory already implies it), `.md` extension.
|
|
45
|
+
- Good: `auth.md`, `admin-panel.md`, `db-reset.md`, `feature-flags.md`.
|
|
46
|
+
- Bad: `operator-auth.md`, `flows.md`, `notes.md`, `stuff.md`.
|
|
47
|
+
- One file per task family. If `auth.md` exists, append to it; don't create `auth-new.md` or `auth-2.md`.
|
|
48
|
+
|
|
49
|
+
## How to update
|
|
50
|
+
|
|
51
|
+
1. **Read first.** Open the current `SKILL.md` and any reference file you'll touch — orient before writing. Avoid duplicating what's already there.
|
|
52
|
+
2. **Write/edit with the Write or Edit tool.** The directory already exists at `.sisyphus/agent-plugin/skills/operator/` (the hook scaffolds it on first run).
|
|
53
|
+
3. **Keep prose dense.** The next operator pays in tokens for everything you write. If a step is obvious, omit it.
|
|
54
|
+
4. **Register new reference files** by adding a one-line entry to `SKILL.md`'s "Reference files" section so they're discoverable.
|
|
55
|
+
|
|
56
|
+
For frontmatter, length budgets, and general skill structure rules, invoke `/authoring:skills`. Don't reinvent those rules here — this skill only covers operator-specific guidance.
|
|
57
|
+
|
|
58
|
+
## Examples
|
|
59
|
+
|
|
60
|
+
**Discovered magic-link auth flow:** Create `auth.md` with the steps (email submit → check inbox → click link → cookie set). Add a one-liner to `SKILL.md` App Surfaces (`/login` — magic-link, see `auth.md`). Add to Common Operational Patterns (`Log in: see auth.md`).
|
|
61
|
+
|
|
62
|
+
**Hit a stale-cache footgun:** The `/dashboard` route serves stale data for ~30s after a write because of an SWR cache. Add a single bullet to `SKILL.md` Known Footguns: `Dashboard SWR cache holds stale data ~30s after writes — hard refresh or wait`. No new reference file needed — it's a one-liner.
|
|
63
|
+
|
|
64
|
+
**Found admin overlay:** `?admin=1` query param toggles an admin panel with seed/reset buttons. Add to `SKILL.md` App Surfaces: `Admin overlay: append ?admin=1 to any page; has seed/reset/feature-flag buttons`. If the overlay is rich enough to need step-by-step coverage, create `admin-panel.md` and link from there.
|
|
@@ -1,3 +1,6 @@
|
|
|
1
1
|
#!/bin/bash
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
if [ -z "${SISYPHUS_COMPANION_CWD:-}" ]; then exit 0; fi
|
|
4
|
+
SESSION_ID=$(jq -r '.session_id // empty')
|
|
5
|
+
[ -n "$SESSION_ID" ] || exit 0
|
|
6
|
+
exec sisyphus companion context --cwd "$SISYPHUS_COMPANION_CWD" --session-id "$SESSION_ID"
|
|
@@ -110,10 +110,16 @@ The cycle shape:
|
|
|
110
110
|
plan phase 1 → implement phase 1 → validate phase 1 → plan phase 2 → implement phase 2 → validate phase 2 → ...
|
|
111
111
|
```
|
|
112
112
|
|
|
113
|
-
|
|
113
|
+
**Not every phase needs its own plan cycle.** Before yielding back, look at phase N+1 in `strategy.md`. If it's wrapper-shaped (every change backs onto an existing CLI/API/handler), mechanical (rename, move, reformat), or scoped to a single agent-cycle of work, yield directly to implementation and let the implement agent work from `strategy.md` plus what phase N taught you. Reserve the plan cycle for phases where the *how* is genuinely open.
|
|
114
|
+
|
|
115
|
+
After a phase's implementation passes e2e validation, yield for the next phase — pick the mode that matches its shape:
|
|
114
116
|
|
|
115
117
|
```bash
|
|
118
|
+
# Phase N+1 needs planning (default):
|
|
116
119
|
sis orch yield --mode planning --prompt "Phase N validated. Plan phase N+1 per strategy.md."
|
|
120
|
+
|
|
121
|
+
# Phase N+1 is wrapper-shaped or single-cycle:
|
|
122
|
+
sis orch yield --mode implementation --prompt "Phase N validated. Implement phase N+1 per strategy.md."
|
|
117
123
|
```
|
|
118
124
|
|
|
119
125
|
When spawning the phase-scoped plan lead, name in the prompt:
|