synabun 2026.4.21 → 2026.4.25-beta.2
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/CHANGELOG.md +175 -881
- package/README.md +1 -1
- package/hooks/claude-code/prompt-submit.mjs +39 -18
- package/hooks/claude-code/session-start.mjs +10 -3
- package/hooks/claude-code/shared.mjs +39 -2
- package/hooks/claude-code/stop.mjs +33 -6
- package/mcp-server/src/index.ts +9 -1
- package/mcp-server/src/services/neural-interface.ts +42 -14
- package/mcp-server/src/services/profiles.ts +8 -7
- package/mcp-server/src/tools/browser-advanced.ts +12 -10
- package/mcp-server/src/tools/browser-interact.ts +39 -38
- package/mcp-server/src/tools/browser-navigate.ts +12 -4
- package/mcp-server/src/tools/loop.ts +7 -3
- package/mcp-server/src/tools/profile.ts +19 -1
- package/neural-interface/lib/loop-logger.js +103 -0
- package/neural-interface/lib/mcp-installer.js +109 -0
- package/neural-interface/lib/plugin-installer.js +264 -0
- package/neural-interface/package.json +1 -1
- package/neural-interface/public/shared/api.js +66 -17
- package/neural-interface/public/shared/cdx/cdx-icons.js +5 -4
- package/neural-interface/public/shared/cdx/cdx-panel.js +117 -14
- package/neural-interface/public/shared/cdx/cdx-render.js +170 -43
- package/neural-interface/public/shared/cdx/cdx-styles.js +55 -10
- package/neural-interface/public/shared/cdx/cdx-tabs.js +394 -72
- package/neural-interface/public/shared/cli-status.js +157 -0
- package/neural-interface/public/shared/constants.js +3 -2
- package/neural-interface/public/shared/html-shell.js +32 -11
- package/neural-interface/public/shared/ocp/ocp-panel.js +127 -28
- package/neural-interface/public/shared/ocp/ocp-render.js +52 -44
- package/neural-interface/public/shared/ocp/ocp-styles.js +33 -0
- package/neural-interface/public/shared/ocp/ocp-tabs.js +693 -82
- package/neural-interface/public/shared/styles.css +635 -0
- package/neural-interface/public/shared/ui-automation-studio.js +38 -12
- package/neural-interface/public/shared/ui-claude-panel.js +322 -15
- package/neural-interface/public/shared/ui-file-explorer.js +38 -18
- package/neural-interface/public/shared/ui-menubar.js +34 -10
- package/neural-interface/public/shared/ui-navbar.js +8 -6
- package/neural-interface/public/shared/ui-schedules-studio.js +1464 -0
- package/neural-interface/public/shared/ui-settings.js +274 -50
- package/neural-interface/public/shared/ui-sidepanel-layout.js +18 -7
- package/neural-interface/public/shared/ui-sidepanel-tray.js +287 -0
- package/neural-interface/public/shared/ui-sync.js +9 -5
- package/neural-interface/public/shared/ui-terminal.js +76 -27
- package/neural-interface/public/shared/ui-tool-updates.js +49 -15
- package/neural-interface/public/shared/ui-tutorial-steps.js +4 -2
- package/neural-interface/public/shared/ui-tutorial.js +24 -18
- package/neural-interface/public/shared/ui-whiteboard.js +79 -31
- package/neural-interface/public/shared/vterm-buffer.js +9 -8
- package/neural-interface/public/variant/2d/main.js +9 -7
- package/neural-interface/public/variant/3d/main.js +10 -8
- package/neural-interface/server.js +1292 -255
- package/package.json +1 -1
- package/skills/leonardo/SKILL.md +5 -1
- package/skills/leonardo/modules/image-prompter.md +5 -1
- package/skills/leonardo/modules/video-prompter.md +5 -1
- package/skills/synabun/SKILL.md +44 -26
- package/skills/synabun/modules/audit.md +40 -36
- package/skills/synabun/modules/changelog.md +22 -18
- package/skills/synabun/modules/memorize.md +19 -15
- package/skills/synabun/modules/schedule.md +285 -0
- package/CLAUDE.md +0 -217
package/package.json
CHANGED
package/skills/leonardo/SKILL.md
CHANGED
|
@@ -26,7 +26,11 @@ This is a **100% browser-based** workflow. Leonardo.ai runs in SynaBun's headed
|
|
|
26
26
|
|
|
27
27
|
## Runtime Compatibility
|
|
28
28
|
|
|
29
|
-
- **Interactive choice prompt** means
|
|
29
|
+
- **Interactive choice prompt** means an interactive option card the user clicks — not plain text choices.
|
|
30
|
+
- **Claude Code (REQUIRED path):** `AskUserQuestion` is a deferred tool — its schema is not loaded by default. Before the first prompt in this skill, call `ToolSearch` with query `select:AskUserQuestion` to load it, then call `AskUserQuestion` with 2-4 options. NEVER write the choices as plain text — the sidepanel will render text as static markdown, not an interactive card.
|
|
31
|
+
- **OpenCode (REQUIRED path):** call the native `question` tool — the sidepanel renders it as an interactive card via the `/question.asked` event. NEVER write the choices as plain text.
|
|
32
|
+
- **Codex (REQUIRED path):** call `request_user_input` — the sidepanel renders it as an interactive card. NEVER write the choices as plain text.
|
|
33
|
+
- **Other runtimes:** only when no interactive tool exists, fall back to a concise plain-text multiple-choice question and wait for the user's reply.
|
|
30
34
|
- **Load/read a module file** means: use whatever local file-reading mechanism exists in the current runtime. Do not depend on a tool literally being named `Read`.
|
|
31
35
|
|
|
32
36
|
---
|
|
@@ -4,7 +4,11 @@ Guide the user through creating the perfect image on Leonardo.ai. Ask questions
|
|
|
4
4
|
|
|
5
5
|
**Important:** This is a browser-based workflow. After the questionnaire, you'll set all parameters in the Leonardo.ai UI using browser tools, then fill the prompt and click Generate.
|
|
6
6
|
|
|
7
|
-
**Runtime compatibility:** An **interactive choice prompt** means
|
|
7
|
+
**Runtime compatibility:** An **interactive choice prompt** means an interactive option card the user clicks — not plain text choices.
|
|
8
|
+
- **Claude Code (REQUIRED path):** `AskUserQuestion` is a deferred tool — its schema is not loaded by default. Before the first prompt in this skill, call `ToolSearch` with query `select:AskUserQuestion` to load it, then call `AskUserQuestion` with 2-4 options. NEVER write the choices as plain text — the sidepanel will render text as static markdown, not an interactive card.
|
|
9
|
+
- **OpenCode (REQUIRED path):** call the native `question` tool — the sidepanel renders it as an interactive card via the `/question.asked` event. NEVER write the choices as plain text.
|
|
10
|
+
- **Codex (REQUIRED path):** call `request_user_input` — the sidepanel renders it as an interactive card. NEVER write the choices as plain text.
|
|
11
|
+
- **Other runtimes:** only when no interactive tool exists, fall back to a concise plain-text multiple-choice question and wait for the user's reply.
|
|
8
12
|
|
|
9
13
|
---
|
|
10
14
|
|
|
@@ -4,7 +4,11 @@ Guide the user through creating the perfect video on Leonardo.ai. Ask questions
|
|
|
4
4
|
|
|
5
5
|
**Important:** This is a browser-based workflow. After the questionnaire, you'll set all parameters in the Leonardo.ai UI using browser tools, then fill the prompt and click Generate.
|
|
6
6
|
|
|
7
|
-
**Runtime compatibility:** An **interactive choice prompt** means
|
|
7
|
+
**Runtime compatibility:** An **interactive choice prompt** means an interactive option card the user clicks — not plain text choices.
|
|
8
|
+
- **Claude Code (REQUIRED path):** `AskUserQuestion` is a deferred tool — its schema is not loaded by default. Before the first prompt in this skill, call `ToolSearch` with query `select:AskUserQuestion` to load it, then call `AskUserQuestion` with 2-4 options. NEVER write the choices as plain text — the sidepanel will render text as static markdown, not an interactive card.
|
|
9
|
+
- **OpenCode (REQUIRED path):** call the native `question` tool — the sidepanel renders it as an interactive card via the `/question.asked` event. NEVER write the choices as plain text.
|
|
10
|
+
- **Codex (REQUIRED path):** call `request_user_input` — the sidepanel renders it as an interactive card. NEVER write the choices as plain text.
|
|
11
|
+
- **Other runtimes:** only when no interactive tool exists, fall back to a concise plain-text multiple-choice question and wait for the user's reply.
|
|
8
12
|
|
|
9
13
|
---
|
|
10
14
|
|
package/skills/synabun/SKILL.md
CHANGED
|
@@ -12,19 +12,23 @@ You are the SynaBun assistant hub. The user has invoked `/synabun`.
|
|
|
12
12
|
|
|
13
13
|
**Base directory**: This skill's base directory is shown above as "Base directory for this skill". Store it as `$SKILL_DIR` — you'll need it to load module files.
|
|
14
14
|
|
|
15
|
-
## CRITICAL: SynaBun MCP Tool Quirks
|
|
16
|
-
|
|
17
|
-
- Make ALL SynaBun MCP calls **sequentially** (never in parallel — one failure cascades to all sibling calls in the batch).
|
|
18
|
-
- `remember` accepts `tags` and `importance` directly and returns the full UUID.
|
|
19
|
-
- `reflect` requires the **FULL UUID** (e.g., `8f7cab3b-644e-4cea-8662-de0ca695bdf2`). Use the UUID returned by `remember`, or `recall` to find existing memories.
|
|
20
|
-
|
|
21
|
-
## Runtime Compatibility
|
|
22
|
-
|
|
23
|
-
- **Interactive choice prompt** means
|
|
24
|
-
- **
|
|
25
|
-
- **
|
|
26
|
-
|
|
27
|
-
|
|
15
|
+
## CRITICAL: SynaBun MCP Tool Quirks
|
|
16
|
+
|
|
17
|
+
- Make ALL SynaBun MCP calls **sequentially** (never in parallel — one failure cascades to all sibling calls in the batch).
|
|
18
|
+
- `remember` accepts `tags` and `importance` directly and returns the full UUID.
|
|
19
|
+
- `reflect` requires the **FULL UUID** (e.g., `8f7cab3b-644e-4cea-8662-de0ca695bdf2`). Use the UUID returned by `remember`, or `recall` to find existing memories.
|
|
20
|
+
|
|
21
|
+
## Runtime Compatibility
|
|
22
|
+
|
|
23
|
+
- **Interactive choice prompt** means an interactive option card the user clicks — not plain text choices.
|
|
24
|
+
- **Claude Code (REQUIRED path):** `AskUserQuestion` is a deferred tool — its schema is not loaded by default. Before the first prompt in this skill, call `ToolSearch` with query `select:AskUserQuestion` to load it, then call `AskUserQuestion` with 2-4 options. NEVER write the choices as plain text — the sidepanel will render text as static markdown, not an interactive card.
|
|
25
|
+
- **OpenCode (REQUIRED path):** call the native `question` tool — the sidepanel renders it as an interactive card via the `/question.asked` event. NEVER write the choices as plain text.
|
|
26
|
+
- **Codex (REQUIRED path):** call `request_user_input` — the sidepanel renders it as an interactive card. NEVER write the choices as plain text.
|
|
27
|
+
- **Other runtimes:** only when no interactive tool exists, fall back to a concise plain-text multiple-choice question and wait for the user's reply.
|
|
28
|
+
- **Load/read a module file** means: use whatever local file-reading mechanism exists in the current runtime. Do not depend on a tool literally being named `Read`.
|
|
29
|
+
- **Category management** means: use the runtime's available category tool surface, whether that is split helpers such as `category_list` / `category_create` or a unified `category` tool with actions like `list` / `create`.
|
|
30
|
+
|
|
31
|
+
---
|
|
28
32
|
|
|
29
33
|
## Step 1 — Route or Menu
|
|
30
34
|
|
|
@@ -35,6 +39,7 @@ Parse `$ARGUMENTS` to determine the path:
|
|
|
35
39
|
- If args start with `audit` → extract the rest as the scope, set `$ARGUMENTS` to that scope, then jump to **Step 2b: Audit Memories**.
|
|
36
40
|
- If args start with `memorize` or `remember` or `store` or `save` → extract the rest as the focus hint, set `$ARGUMENTS` to that hint, then jump to **Step 2c: Memorize Context**.
|
|
37
41
|
- If args start with `changelog` or `changes` or `log` → extract the rest as the focus hint, set `$ARGUMENTS` to that hint, then jump to **Step 2d: Changelog**.
|
|
42
|
+
- If args start with `schedule` or `schedules` or `cron` → extract the rest as the goal hint, set `$ARGUMENTS` to that hint, then jump to **Step 2e: Schedule Wizard**.
|
|
38
43
|
- If args start with `health` or `stats` → jump to **Step 3: Memory Health**.
|
|
39
44
|
- If args start with `search` or `recall` or `find` → jump to **Step 4: Search Memories**, using the rest as the initial query.
|
|
40
45
|
|
|
@@ -46,19 +51,26 @@ Output a single line:
|
|
|
46
51
|
|
|
47
52
|
The menu is paginated (3 features + 1 navigation slot per page). Start on **Page 1**.
|
|
48
53
|
|
|
49
|
-
**Page 1** — use an interactive choice prompt with:
|
|
54
|
+
**Page 1** — use an interactive choice prompt with:
|
|
50
55
|
|
|
51
56
|
- **Brainstorm Ideas** — "Cross-pollinate memories to spark creative ideas and novel connections"
|
|
52
57
|
- **Audit Memories** — "Validate stored memories against the current codebase for staleness"
|
|
53
58
|
- **Memorize Context** — "Convert the current conversation into a structured, tagged memory"
|
|
54
|
-
- **More...** — "Memory Health, Search Memories, Auto Changelog"
|
|
59
|
+
- **More...** — "Schedule Wizard, Memory Health, Search Memories, Auto Changelog"
|
|
55
60
|
|
|
56
61
|
If user picks **More...** → show **Page 2**.
|
|
57
62
|
|
|
58
|
-
**Page 2** — use an interactive choice prompt with:
|
|
63
|
+
**Page 2** — use an interactive choice prompt with:
|
|
59
64
|
|
|
65
|
+
- **Schedule Wizard** — "Create a recurring schedule via guided interactive prompts (loop-template + cron)"
|
|
60
66
|
- **Memory Health** — "Quick stats overview and staleness check of your memory system"
|
|
61
67
|
- **Search Memories** — "Find something specific across your entire memory bank"
|
|
68
|
+
- **More...** — "Auto Changelog, Back"
|
|
69
|
+
|
|
70
|
+
If user picks **More...** → show **Page 3**.
|
|
71
|
+
|
|
72
|
+
**Page 3** — use an interactive choice prompt with:
|
|
73
|
+
|
|
62
74
|
- **Auto Changelog** — "Analyze this session's work and generate CHANGELOG.md entries"
|
|
63
75
|
- **Back** — "Return to page 1"
|
|
64
76
|
|
|
@@ -70,7 +82,7 @@ Based on the user's selection, proceed to the matching step below.
|
|
|
70
82
|
|
|
71
83
|
## Step 2a: Brainstorm Ideas
|
|
72
84
|
|
|
73
|
-
Use an interactive choice prompt to ask:
|
|
85
|
+
Use an interactive choice prompt to ask:
|
|
74
86
|
|
|
75
87
|
> "What topic should we brainstorm around?"
|
|
76
88
|
|
|
@@ -83,25 +95,31 @@ Based on the user's answer, set `$ARGUMENTS` to:
|
|
|
83
95
|
- Current project → the detected project name
|
|
84
96
|
- Custom text via "Other" → their text
|
|
85
97
|
|
|
86
|
-
**Then**: Load/read the file at `$SKILL_DIR/modules/idea.md`. Follow the instructions in that file exactly, passing through the `$ARGUMENTS` value. That file is your complete brainstorming procedure — execute it fully.
|
|
98
|
+
**Then**: Load/read the file at `$SKILL_DIR/modules/idea.md`. Follow the instructions in that file exactly, passing through the `$ARGUMENTS` value. That file is your complete brainstorming procedure — execute it fully.
|
|
87
99
|
|
|
88
100
|
---
|
|
89
101
|
|
|
90
102
|
## Step 2b: Audit Memories
|
|
91
103
|
|
|
92
|
-
**Directly**: Load/read the file at `$SKILL_DIR/modules/audit.md`. Follow the instructions in that file exactly, passing through the `$ARGUMENTS` value. That file is your complete audit procedure — execute it fully.
|
|
104
|
+
**Directly**: Load/read the file at `$SKILL_DIR/modules/audit.md`. Follow the instructions in that file exactly, passing through the `$ARGUMENTS` value. That file is your complete audit procedure — execute it fully.
|
|
93
105
|
|
|
94
106
|
---
|
|
95
107
|
|
|
96
108
|
## Step 2c: Memorize Context
|
|
97
109
|
|
|
98
|
-
**Directly**: Load/read the file at `$SKILL_DIR/modules/memorize.md`. Follow the instructions in that file exactly, passing through the `$ARGUMENTS` value (the focus hint, if any). That file is your complete memorization procedure — execute it fully.
|
|
110
|
+
**Directly**: Load/read the file at `$SKILL_DIR/modules/memorize.md`. Follow the instructions in that file exactly, passing through the `$ARGUMENTS` value (the focus hint, if any). That file is your complete memorization procedure — execute it fully.
|
|
99
111
|
|
|
100
112
|
---
|
|
101
113
|
|
|
102
114
|
## Step 2d: Changelog
|
|
103
115
|
|
|
104
|
-
**Directly**: Load/read the file at `$SKILL_DIR/modules/changelog.md`. Follow the instructions in that file exactly, passing through the `$ARGUMENTS` value. That file is your complete changelog procedure — execute it fully.
|
|
116
|
+
**Directly**: Load/read the file at `$SKILL_DIR/modules/changelog.md`. Follow the instructions in that file exactly, passing through the `$ARGUMENTS` value. That file is your complete changelog procedure — execute it fully.
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
## Step 2e: Schedule Wizard
|
|
121
|
+
|
|
122
|
+
**Directly**: Load/read the file at `$SKILL_DIR/modules/schedule.md`. Follow the instructions in that file exactly, passing through the `$ARGUMENTS` value (the goal hint, if any). That file is your complete schedule wizard procedure — execute it fully.
|
|
105
123
|
|
|
106
124
|
---
|
|
107
125
|
|
|
@@ -110,7 +128,7 @@ Based on the user's answer, set `$ARGUMENTS` to:
|
|
|
110
128
|
This is handled inline (no module needed).
|
|
111
129
|
|
|
112
130
|
1. Call `memories` with `action: "stats"`.
|
|
113
|
-
2. Call `sync` to check for stale memories with changed files, scoping it to relevant categories if the current runtime requires an explicit category filter.
|
|
131
|
+
2. Call `sync` to check for stale memories with changed files, scoping it to relevant categories if the current runtime requires an explicit category filter.
|
|
114
132
|
3. Present a formatted dashboard:
|
|
115
133
|
|
|
116
134
|
```
|
|
@@ -132,7 +150,7 @@ This is handled inline (no module needed).
|
|
|
132
150
|
══════════════════════════════════════
|
|
133
151
|
```
|
|
134
152
|
|
|
135
|
-
4. If stale memories were found, use an interactive choice prompt:
|
|
153
|
+
4. If stale memories were found, use an interactive choice prompt:
|
|
136
154
|
- **Run full audit** — "Launch the audit module to verify and fix stale memories"
|
|
137
155
|
- **View details** — "Show which files changed for each stale memory"
|
|
138
156
|
- **Done** — "Thanks, just wanted the overview"
|
|
@@ -146,7 +164,7 @@ This is handled inline (no module needed).
|
|
|
146
164
|
|
|
147
165
|
This is handled inline (no module needed).
|
|
148
166
|
|
|
149
|
-
1. If no query was provided from args, use an interactive choice prompt:
|
|
167
|
+
1. If no query was provided from args, use an interactive choice prompt:
|
|
150
168
|
> "What are you looking for?"
|
|
151
169
|
- **Architecture decisions** — "Past architectural choices and their reasoning"
|
|
152
170
|
- **Bug fixes** — "Previously solved bugs and their solutions"
|
|
@@ -171,7 +189,7 @@ This is handled inline (no module needed).
|
|
|
171
189
|
...
|
|
172
190
|
```
|
|
173
191
|
|
|
174
|
-
4. Use an interactive choice prompt:
|
|
192
|
+
4. Use an interactive choice prompt:
|
|
175
193
|
- **View full** — "Show the complete content of a specific memory (enter the number)"
|
|
176
194
|
- **Search again** — "Try a different query"
|
|
177
195
|
- **Done** — "Found what I needed"
|
|
@@ -186,6 +204,6 @@ This is handled inline (no module needed).
|
|
|
186
204
|
## Guidelines
|
|
187
205
|
|
|
188
206
|
- Keep the interaction snappy — don't over-explain. SynaBun should feel like a fast, responsive assistant.
|
|
189
|
-
- When loading a module file, follow its instructions completely as if they were inline in this skill. The module IS the skill — execute it, don't summarize it.
|
|
207
|
+
- When loading a module file, follow its instructions completely as if they were inline in this skill. The module IS the skill — execute it, don't summarize it.
|
|
190
208
|
- For inline actions (health, search), handle everything within this skill's flow.
|
|
191
209
|
- Always make SynaBun MCP calls sequentially, never in parallel.
|
|
@@ -8,21 +8,25 @@ You are now in **memory audit mode**. Your job is to systematically validate Syn
|
|
|
8
8
|
- If the input is "all" → audit all categories
|
|
9
9
|
- If the input matches a category name → audit that category (and its children if it is a parent)
|
|
10
10
|
|
|
11
|
-
## CRITICAL: SynaBun MCP Tool Quirks
|
|
12
|
-
|
|
13
|
-
- Make ALL SynaBun MCP calls **sequentially** (never in parallel — one failure cascades to all sibling calls in the batch).
|
|
14
|
-
- `remember` accepts `tags` and `importance` directly and returns the full UUID.
|
|
15
|
-
- `reflect` requires the **FULL UUID** (e.g., `8f7cab3b-644e-4cea-8662-de0ca695bdf2`). Use the UUID returned by `remember`, or `recall` to find existing memories.
|
|
16
|
-
- The `forget` tool also requires the full UUID.
|
|
17
|
-
- The `memories` tool maxes out at 50 results per call. If a category has more than 50 memories, warn the user that only the 50 most recent will be audited.
|
|
18
|
-
|
|
19
|
-
## Runtime Compatibility
|
|
20
|
-
|
|
21
|
-
- **Interactive choice prompt** means
|
|
22
|
-
- **
|
|
23
|
-
- **
|
|
24
|
-
|
|
25
|
-
|
|
11
|
+
## CRITICAL: SynaBun MCP Tool Quirks
|
|
12
|
+
|
|
13
|
+
- Make ALL SynaBun MCP calls **sequentially** (never in parallel — one failure cascades to all sibling calls in the batch).
|
|
14
|
+
- `remember` accepts `tags` and `importance` directly and returns the full UUID.
|
|
15
|
+
- `reflect` requires the **FULL UUID** (e.g., `8f7cab3b-644e-4cea-8662-de0ca695bdf2`). Use the UUID returned by `remember`, or `recall` to find existing memories.
|
|
16
|
+
- The `forget` tool also requires the full UUID.
|
|
17
|
+
- The `memories` tool maxes out at 50 results per call. If a category has more than 50 memories, warn the user that only the 50 most recent will be audited.
|
|
18
|
+
|
|
19
|
+
## Runtime Compatibility
|
|
20
|
+
|
|
21
|
+
- **Interactive choice prompt** means an interactive option card the user clicks — not plain text choices.
|
|
22
|
+
- **Claude Code (REQUIRED path):** `AskUserQuestion` is a deferred tool — its schema is not loaded by default. Before the first prompt in this skill, call `ToolSearch` with query `select:AskUserQuestion` to load it, then call `AskUserQuestion` with 2-4 options. NEVER write the choices as plain text — the sidepanel will render text as static markdown, not an interactive card.
|
|
23
|
+
- **OpenCode (REQUIRED path):** call the native `question` tool — the sidepanel renders it as an interactive card via the `/question.asked` event. NEVER write the choices as plain text.
|
|
24
|
+
- **Codex (REQUIRED path):** call `request_user_input` — the sidepanel renders it as an interactive card. NEVER write the choices as plain text.
|
|
25
|
+
- **Other runtimes:** only when no interactive tool exists, fall back to a concise plain-text multiple-choice question and wait for the user's reply.
|
|
26
|
+
- **Category management** means: use the runtime's available category tool surface, whether that is split helpers such as `category_list` / `category_create` or a unified `category` tool with actions like `list` / `create`.
|
|
27
|
+
- **Delegation/subagent tool** means: use the runtime's available delegation capability if it exists and is allowed. In Claude this may be `Task`; in Codex it may be `spawn_agent`/`wait_agent`. If delegation is unavailable, perform the verification locally with the same batching discipline and output format.
|
|
28
|
+
|
|
29
|
+
## Classification Definitions
|
|
26
30
|
|
|
27
31
|
| Status | Meaning | Default Action |
|
|
28
32
|
|--------|---------|----------------|
|
|
@@ -45,7 +49,7 @@ This phase collects three pieces of information: audit scope, model choice, and
|
|
|
45
49
|
|
|
46
50
|
#### Step 1a: Landscape Survey
|
|
47
51
|
|
|
48
|
-
1. List categories in `tree` format to get the full category hierarchy.
|
|
52
|
+
1. List categories in `tree` format to get the full category hierarchy.
|
|
49
53
|
2. Call `memories` with action `stats` to get total counts and per-category breakdowns.
|
|
50
54
|
3. Internalize the results — you'll need them for every subsequent step.
|
|
51
55
|
|
|
@@ -62,25 +66,25 @@ This phase collects three pieces of information: audit scope, model choice, and
|
|
|
62
66
|
|
|
63
67
|
**If `$ARGUMENTS` is empty or did not match:**
|
|
64
68
|
|
|
65
|
-
Use an interactive choice prompt with these options:
|
|
69
|
+
Use an interactive choice prompt with these options:
|
|
66
70
|
|
|
67
71
|
- **Audit everything** — "Full audit of all [N] memories across all categories"
|
|
68
72
|
- **Audit a parent category** — "Audit a parent and all its children"
|
|
69
73
|
- **Audit a specific category** — "Audit just one category"
|
|
70
74
|
|
|
71
|
-
If user picks **parent category**, follow up with another interactive choice prompt listing only parent categories with their total memory counts (sum of parent + all children). Let the user pick one.
|
|
75
|
+
If user picks **parent category**, follow up with another interactive choice prompt listing only parent categories with their total memory counts (sum of parent + all children). Let the user pick one.
|
|
72
76
|
|
|
73
|
-
If user picks **specific category**, follow up with another interactive choice prompt listing all categories (flat) with their memory counts. Let the user pick one.
|
|
77
|
+
If user picks **specific category**, follow up with another interactive choice prompt listing all categories (flat) with their memory counts. Let the user pick one.
|
|
74
78
|
|
|
75
79
|
#### Step 1c: Model Selection
|
|
76
80
|
|
|
77
|
-
Use an interactive choice prompt to ask which model should verify memories against code:
|
|
81
|
+
Use an interactive choice prompt to ask which model should verify memories against code:
|
|
78
82
|
|
|
79
83
|
- **Sonnet (Recommended)** — "Good balance of quality and cost"
|
|
80
84
|
- **Opus** — "Most thorough analysis, highest token cost"
|
|
81
85
|
- **Haiku** — "Fastest and cheapest, may miss subtle staleness"
|
|
82
86
|
|
|
83
|
-
Store the selection. Use it in Phase 4 when the runtime's delegation tool supports explicit model selection.
|
|
87
|
+
Store the selection. Use it in Phase 4 when the runtime's delegation tool supports explicit model selection.
|
|
84
88
|
|
|
85
89
|
#### Step 1d: Cost Warning and Confirmation
|
|
86
90
|
|
|
@@ -88,7 +92,7 @@ Calculate the estimated scope:
|
|
|
88
92
|
- Count total memories in scope (from stats).
|
|
89
93
|
- Count categories in scope.
|
|
90
94
|
|
|
91
|
-
Use an interactive choice prompt:
|
|
95
|
+
Use an interactive choice prompt:
|
|
92
96
|
|
|
93
97
|
- **Proceed** — "Start the audit"
|
|
94
98
|
- **Abort** — "Cancel and return to normal mode"
|
|
@@ -105,7 +109,7 @@ If user aborts, end gracefully with a message.
|
|
|
105
109
|
|
|
106
110
|
This phase uses the `sync` MCP tool for instant staleness detection on memories that have stored file checksums. This is essentially free — no LLM verification tokens needed.
|
|
107
111
|
|
|
108
|
-
1. Call `sync`, scoping it to the relevant project and/or categories when the current runtime requires explicit filters.
|
|
112
|
+
1. Call `sync`, scoping it to the relevant project and/or categories when the current runtime requires explicit filters.
|
|
109
113
|
2. Parse the results:
|
|
110
114
|
- Memories flagged as stale by sync → **pre-classified as STALE** with HIGH confidence.
|
|
111
115
|
- Note the specific files that changed for each stale memory.
|
|
@@ -157,19 +161,19 @@ Ready to verify:
|
|
|
157
161
|
|
|
158
162
|
---
|
|
159
163
|
|
|
160
|
-
### Phase 4 — Semantic Verification (Delegated or Local)
|
|
164
|
+
### Phase 4 — Semantic Verification (Delegated or Local)
|
|
161
165
|
|
|
162
166
|
This is the most token-intensive phase. Only Bucket C and Bucket D memories need verification.
|
|
163
167
|
|
|
164
168
|
**Skip this phase entirely** if Buckets C and D are both empty.
|
|
165
169
|
|
|
166
|
-
#### Verification via Delegation Tool
|
|
167
|
-
|
|
168
|
-
Batch memories from Buckets C and D into groups of **5 memories** per verification pass. Sort by importance descending so the most critical memories are verified first.
|
|
169
|
-
|
|
170
|
-
For each batch, use the runtime's available delegation/subagent capability when it exists and is allowed. Pass the selected model if the runtime supports explicit model selection. If no delegation tool is available, perform the same verification yourself in the current session and still follow the exact output format below.
|
|
171
|
-
|
|
172
|
-
**Verification prompt template for each delegated or local verification pass:**
|
|
170
|
+
#### Verification via Delegation Tool
|
|
171
|
+
|
|
172
|
+
Batch memories from Buckets C and D into groups of **5 memories** per verification pass. Sort by importance descending so the most critical memories are verified first.
|
|
173
|
+
|
|
174
|
+
For each batch, use the runtime's available delegation/subagent capability when it exists and is allowed. Pass the selected model if the runtime supports explicit model selection. If no delegation tool is available, perform the same verification yourself in the current session and still follow the exact output format below.
|
|
175
|
+
|
|
176
|
+
**Verification prompt template for each delegated or local verification pass:**
|
|
173
177
|
|
|
174
178
|
```
|
|
175
179
|
You are verifying stored memories against the current state of the codebase.
|
|
@@ -210,7 +214,7 @@ Content:
|
|
|
210
214
|
===
|
|
211
215
|
```
|
|
212
216
|
|
|
213
|
-
After each verification pass completes, parse its structured output and add results to the master results list.
|
|
217
|
+
After each verification pass completes, parse its structured output and add results to the master results list.
|
|
214
218
|
|
|
215
219
|
**Progress reporting**: After each batch, output:
|
|
216
220
|
"Verified batch X/Y — [count] VALID, [count] STALE, [count] INVALID, [count] UNVERIFIABLE so far..."
|
|
@@ -263,7 +267,7 @@ Suggested update (preview):
|
|
|
263
267
|
──────────────────────────────────────────
|
|
264
268
|
```
|
|
265
269
|
|
|
266
|
-
Then use an interactive choice prompt with these options:
|
|
270
|
+
Then use an interactive choice prompt with these options:
|
|
267
271
|
|
|
268
272
|
- **Update** — "Apply the suggested content update via reflect"
|
|
269
273
|
- **Delete** — "Remove this memory entirely"
|
|
@@ -278,7 +282,7 @@ If there are more than 1 stale memory remaining after presenting the first one,
|
|
|
278
282
|
Actions:
|
|
279
283
|
- **Update**: Call `reflect` with `memory_id` (full UUID) and `content` (suggested update).
|
|
280
284
|
- **Delete**: Call `forget` with the full UUID.
|
|
281
|
-
- **View full**: Show both full texts, then re-present the same interactive choice prompt.
|
|
285
|
+
- **View full**: Show both full texts, then re-present the same interactive choice prompt.
|
|
282
286
|
- **Update all**: Loop through remaining stale memories, call `reflect` for each sequentially.
|
|
283
287
|
- **Skip / Skip all**: Move on.
|
|
284
288
|
|
|
@@ -300,7 +304,7 @@ Content (preview):
|
|
|
300
304
|
──────────────────────────────────────────
|
|
301
305
|
```
|
|
302
306
|
|
|
303
|
-
Use an interactive choice prompt with options:
|
|
307
|
+
Use an interactive choice prompt with options:
|
|
304
308
|
|
|
305
309
|
- **Delete** — "Remove this memory"
|
|
306
310
|
- **Skip** — "Keep it for now"
|
|
@@ -348,7 +352,7 @@ These memories could not be verified from code alone:
|
|
|
348
352
|
|
|
349
353
|
#### Save Report
|
|
350
354
|
|
|
351
|
-
Use an interactive choice prompt:
|
|
355
|
+
Use an interactive choice prompt:
|
|
352
356
|
|
|
353
357
|
- **Save report** — "Store this audit report in SynaBun for tracking memory health over time"
|
|
354
358
|
- **No thanks** — "Skip saving"
|
|
@@ -7,18 +7,22 @@ You are now in **changelog mode**. Your job is to analyze the current session's
|
|
|
7
7
|
- If the input is empty → analyze the full session context and all recent git changes
|
|
8
8
|
- If the input contains text → use it as a focus hint (e.g., "changelog the auth refactor" → focus on that specific work within the session)
|
|
9
9
|
|
|
10
|
-
## CRITICAL: SynaBun MCP Tool Quirks
|
|
11
|
-
|
|
12
|
-
- Make ALL SynaBun MCP calls **sequentially** (never in parallel — one failure cascades).
|
|
13
|
-
- `remember` accepts `tags` and `importance` directly and returns the full UUID.
|
|
14
|
-
- `reflect` requires the **FULL UUID**. Use the UUID returned by `remember`, or `recall` to find existing memories.
|
|
15
|
-
|
|
16
|
-
## Runtime Compatibility
|
|
17
|
-
|
|
18
|
-
- **Interactive choice prompt** means
|
|
19
|
-
- **
|
|
20
|
-
|
|
21
|
-
|
|
10
|
+
## CRITICAL: SynaBun MCP Tool Quirks
|
|
11
|
+
|
|
12
|
+
- Make ALL SynaBun MCP calls **sequentially** (never in parallel — one failure cascades).
|
|
13
|
+
- `remember` accepts `tags` and `importance` directly and returns the full UUID.
|
|
14
|
+
- `reflect` requires the **FULL UUID**. Use the UUID returned by `remember`, or `recall` to find existing memories.
|
|
15
|
+
|
|
16
|
+
## Runtime Compatibility
|
|
17
|
+
|
|
18
|
+
- **Interactive choice prompt** means an interactive option card the user clicks — not plain text choices.
|
|
19
|
+
- **Claude Code (REQUIRED path):** `AskUserQuestion` is a deferred tool — its schema is not loaded by default. Before the first prompt in this skill, call `ToolSearch` with query `select:AskUserQuestion` to load it, then call `AskUserQuestion` with 2-4 options. NEVER write the choices as plain text — the sidepanel will render text as static markdown, not an interactive card.
|
|
20
|
+
- **OpenCode (REQUIRED path):** call the native `question` tool — the sidepanel renders it as an interactive card via the `/question.asked` event. NEVER write the choices as plain text.
|
|
21
|
+
- **Codex (REQUIRED path):** call `request_user_input` — the sidepanel renders it as an interactive card. NEVER write the choices as plain text.
|
|
22
|
+
- **Other runtimes:** only when no interactive tool exists, fall back to a concise plain-text multiple-choice question and wait for the user's reply.
|
|
23
|
+
- **File operations** mean: use the runtime's available local file tools. In Claude environments that may be `Read` / `Write` / `Edit`; in Codex it may be shell reads plus `apply_patch` or equivalent editing tools.
|
|
24
|
+
|
|
25
|
+
---
|
|
22
26
|
|
|
23
27
|
## Process
|
|
24
28
|
|
|
@@ -111,7 +115,7 @@ Present the drafted entries to the user:
|
|
|
111
115
|
|
|
112
116
|
Then output the full drafted entries exactly as they would appear in CHANGELOG.md — the `### Added/Fixed/Changed` sections with all bullet points.
|
|
113
117
|
|
|
114
|
-
Then use an interactive choice prompt with:
|
|
118
|
+
Then use an interactive choice prompt with:
|
|
115
119
|
|
|
116
120
|
- **Save as-is** — "Write these entries to CHANGELOG.md"
|
|
117
121
|
- **Edit first** — "I want to adjust entries before saving"
|
|
@@ -129,11 +133,11 @@ Once the user confirms:
|
|
|
129
133
|
|
|
130
134
|
1. Set the changelog path: `$PROJECT_ROOT/CHANGELOG.md`
|
|
131
135
|
|
|
132
|
-
2. Check if the file exists by reading it with the runtime's available file tools.
|
|
136
|
+
2. Check if the file exists by reading it with the runtime's available file tools.
|
|
133
137
|
|
|
134
138
|
**If CHANGELOG.md does NOT exist:**
|
|
135
139
|
|
|
136
|
-
Create a new file using the runtime's available file-editing tools:
|
|
140
|
+
Create a new file using the runtime's available file-editing tools:
|
|
137
141
|
|
|
138
142
|
```markdown
|
|
139
143
|
# Project Changelog
|
|
@@ -145,7 +149,7 @@ Create a new file using the runtime's available file-editing tools:
|
|
|
145
149
|
|
|
146
150
|
**If CHANGELOG.md EXISTS:**
|
|
147
151
|
|
|
148
|
-
Read the entire file, then determine the insertion point:
|
|
152
|
+
Read the entire file, then determine the insertion point:
|
|
149
153
|
|
|
150
154
|
- **Case A — Today's date section already exists** (a `## YYYY-MM-DD` line matching today's date is found):
|
|
151
155
|
- Find the end of today's date block (just before the next `## ` line or end of file).
|
|
@@ -156,7 +160,7 @@ Read the entire file, then determine the insertion point:
|
|
|
156
160
|
- Insert a new `## YYYY-MM-DD` section immediately after the first `# ` title line (and any blank line after it), before any existing `## ` date entries.
|
|
157
161
|
- Place all drafted entries under the new date header.
|
|
158
162
|
|
|
159
|
-
Use the runtime's available file-editing tools for modifications to existing files.
|
|
163
|
+
Use the runtime's available file-editing tools for modifications to existing files.
|
|
160
164
|
|
|
161
165
|
After writing, confirm to the user:
|
|
162
166
|
|
|
@@ -181,7 +185,7 @@ Silently call `remember` with:
|
|
|
181
185
|
- `tags`: `["changelog", "documentation", "session-summary"]`
|
|
182
186
|
- `related_files`: `["CHANGELOG.md"]`
|
|
183
187
|
|
|
184
|
-
Do NOT use an interactive choice prompt here — auto-remember is mandatory per project rules.
|
|
188
|
+
Do NOT use an interactive choice prompt here — auto-remember is mandatory per project rules.
|
|
185
189
|
|
|
186
190
|
---
|
|
187
191
|
|
|
@@ -7,18 +7,22 @@ You are now in **memorize mode**. Your job is to analyze the full conversation c
|
|
|
7
7
|
- If the input is empty → analyze the entire conversation context
|
|
8
8
|
- If the input contains text → use it as a focus hint (e.g., "memorize the redis discussion" → focus on that topic within the conversation)
|
|
9
9
|
|
|
10
|
-
## CRITICAL: SynaBun MCP Tool Quirks
|
|
11
|
-
|
|
12
|
-
- Make ALL SynaBun MCP calls **sequentially** (never in parallel — one failure cascades).
|
|
13
|
-
- `remember` accepts `tags` and `importance` directly and returns the full UUID.
|
|
14
|
-
- `reflect` requires the **FULL UUID**. Use the UUID returned by `remember`, or `recall` to find existing memories.
|
|
15
|
-
|
|
16
|
-
## Runtime Compatibility
|
|
17
|
-
|
|
18
|
-
- **Interactive choice prompt** means
|
|
19
|
-
- **
|
|
20
|
-
|
|
21
|
-
|
|
10
|
+
## CRITICAL: SynaBun MCP Tool Quirks
|
|
11
|
+
|
|
12
|
+
- Make ALL SynaBun MCP calls **sequentially** (never in parallel — one failure cascades).
|
|
13
|
+
- `remember` accepts `tags` and `importance` directly and returns the full UUID.
|
|
14
|
+
- `reflect` requires the **FULL UUID**. Use the UUID returned by `remember`, or `recall` to find existing memories.
|
|
15
|
+
|
|
16
|
+
## Runtime Compatibility
|
|
17
|
+
|
|
18
|
+
- **Interactive choice prompt** means an interactive option card the user clicks — not plain text choices.
|
|
19
|
+
- **Claude Code (REQUIRED path):** `AskUserQuestion` is a deferred tool — its schema is not loaded by default. Before the first prompt in this skill, call `ToolSearch` with query `select:AskUserQuestion` to load it, then call `AskUserQuestion` with 2-4 options. NEVER write the choices as plain text — the sidepanel will render text as static markdown, not an interactive card.
|
|
20
|
+
- **OpenCode (REQUIRED path):** call the native `question` tool — the sidepanel renders it as an interactive card via the `/question.asked` event. NEVER write the choices as plain text.
|
|
21
|
+
- **Codex (REQUIRED path):** call `request_user_input` — the sidepanel renders it as an interactive card. NEVER write the choices as plain text.
|
|
22
|
+
- **Other runtimes:** only when no interactive tool exists, fall back to a concise plain-text multiple-choice question and wait for the user's reply.
|
|
23
|
+
- **Category management** means: use the runtime's available category tool surface, whether that is split helpers such as `category_list` / `category_create` or a unified `category` tool with actions like `list` / `create`.
|
|
24
|
+
|
|
25
|
+
---
|
|
22
26
|
|
|
23
27
|
## Process
|
|
24
28
|
|
|
@@ -93,7 +97,7 @@ Compose the memory as a structured markdown document. Follow this template preci
|
|
|
93
97
|
Determine the appropriate metadata for this memory:
|
|
94
98
|
|
|
95
99
|
#### Category Selection
|
|
96
|
-
1. Check if the conversation topic fits an existing child category under `conversations` by listing categories in `tree` format.
|
|
100
|
+
1. Check if the conversation topic fits an existing child category under `conversations` by listing categories in `tree` format.
|
|
97
101
|
2. If the conversation has a clear specialized topic that doesn't fit existing children, consider creating a new child category under `conversations` — but only if it represents a genuinely distinct recurring topic (not a one-off).
|
|
98
102
|
3. **Default**: Use `conversations` as the category. Most context memories belong here.
|
|
99
103
|
|
|
@@ -139,14 +143,14 @@ Then output the metadata:
|
|
|
139
143
|
──────────────────────────────────────────
|
|
140
144
|
```
|
|
141
145
|
|
|
142
|
-
Then use an interactive choice prompt:
|
|
146
|
+
Then use an interactive choice prompt:
|
|
143
147
|
|
|
144
148
|
- **Save as-is** — "Store this memory exactly as drafted"
|
|
145
149
|
- **Edit first** — "I want to adjust the content or metadata before saving"
|
|
146
150
|
- **Cancel** — "Don't save anything"
|
|
147
151
|
|
|
148
152
|
**If user picks "Edit first":**
|
|
149
|
-
Use an interactive choice prompt to ask what they want to change:
|
|
153
|
+
Use an interactive choice prompt to ask what they want to change:
|
|
150
154
|
|
|
151
155
|
- **Edit content** — "Change the memory text (tell me what to modify)"
|
|
152
156
|
- **Change importance** — "Adjust the importance level"
|