@veedubin/neuralgentics 0.13.4 → 0.13.6
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/.opencode/AGENTS.md +366 -0
- package/.opencode/agents/agent-builder.md +188 -0
- package/.opencode/agents/architect.md +229 -0
- package/.opencode/agents/coder.md +241 -0
- package/.opencode/agents/explorer.md +180 -0
- package/.opencode/agents/git.md +222 -0
- package/.opencode/agents/linter.md +174 -0
- package/.opencode/agents/orchestrator.md +362 -0
- package/.opencode/agents/release.md +173 -0
- package/.opencode/agents/researcher.md +128 -0
- package/.opencode/agents/reviewer.md +225 -0
- package/.opencode/agents/tester.md +214 -0
- package/.opencode/agents/writer.md +187 -0
- package/.opencode/skills/boomerang-handoff/SKILL.md +100 -0
- package/.opencode/skills/boomerang-orchestrator/SKILL.md +480 -0
- package/.opencode/skills/external-skills-fetcher/SKILL.md +100 -0
- package/.opencode/skills/kanban-board-manager/SKILL.md +173 -0
- package/.opencode/skills/skill-self-audit/SKILL.md +131 -0
- package/.opencode/skills/todo-list-updater/SKILL.md +111 -0
- package/.opencode/skills/update-gh-docs/SKILL.md +206 -0
- package/dist/neuralgentics/init.d.ts.map +1 -1
- package/dist/neuralgentics/init.js +119 -5
- package/dist/neuralgentics/init.js.map +1 -1
- package/package.json +3 -2
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: kanban-board-manager
|
|
3
|
+
description: Manages the Boomerang kanban board in TASKS.md. Creates, moves, and audits cards across seven statuses (triage, todo, ready, running, blocked, done, archived). Seeded by the orchestrator from a roadmap; queried by the orchestrator to find ready cards for dispatch; updated by workers when they complete a card. The board is the durable source of truth for "what is being worked on."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Kanban Board Manager
|
|
7
|
+
|
|
8
|
+
## Description
|
|
9
|
+
|
|
10
|
+
The kanban board lives in the project's `TASKS.md` file. It has seven statuses (Hermes-compatible) and supports dependency links between cards. The board manager is the **only** agent that mutates the board. Workers report status changes through it; the orchestrator queries it to find ready cards.
|
|
11
|
+
|
|
12
|
+
## When to Use This Skill
|
|
13
|
+
|
|
14
|
+
- After the architect writes a roadmap → seed the board with one card per task.
|
|
15
|
+
- A worker has finished a card → move it `running → done` with evidence.
|
|
16
|
+
- A worker is stuck → move it `running → blocked` with a reason.
|
|
17
|
+
- The orchestrator needs to find `ready` cards → query the board.
|
|
18
|
+
- The user asks "what's the status?" → render the board.
|
|
19
|
+
- A card needs to be broken into smaller cards.
|
|
20
|
+
- A card needs to be re-architect-ed.
|
|
21
|
+
- A card needs to be requeued to "next session" (moved to `todo` with a reason).
|
|
22
|
+
|
|
23
|
+
## Card Schema
|
|
24
|
+
|
|
25
|
+
Each card in `TASKS.md` uses this exact format. The board manager is responsible for keeping the format consistent.
|
|
26
|
+
|
|
27
|
+
```markdown
|
|
28
|
+
### T-001 · <task title>
|
|
29
|
+
- **Status:** <triage|todo|ready|running|blocked|done|archived>
|
|
30
|
+
- **Assignee:** <agent profile, e.g. boomerang-coder>
|
|
31
|
+
- **Phase:** <phase name from roadmap>
|
|
32
|
+
- **Roadmap:** `docs/roadmap-<proj>.md#task-1-1`
|
|
33
|
+
- **Goal:** one-sentence goal
|
|
34
|
+
- **Acceptance:** testable criteria (bullet list)
|
|
35
|
+
- **Scope IN:** bullet list
|
|
36
|
+
- **Scope OUT:** bullet list, with escalation target
|
|
37
|
+
- **Depends on:** T-002, T-003 (or `none`)
|
|
38
|
+
- **Blocks:** T-004, T-005 (or `none`)
|
|
39
|
+
- **Created:** YYYY-MM-DD
|
|
40
|
+
- **Updated:** YYYY-MM-DD
|
|
41
|
+
- **Wrap-up evidence:**
|
|
42
|
+
- changed_files: [...]
|
|
43
|
+
- verification: [...]
|
|
44
|
+
- residual_risk: [...]
|
|
45
|
+
- summary: one-paragraph closeout
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Cards are grouped by status in `TASKS.md` with `## <Status>` headers (e.g. `## Triage`, `## Todo`, `## Ready`, `## Running`, `## Blocked`, `## Done`, `## Archived`). The board manager keeps the seven sections in this order.
|
|
49
|
+
|
|
50
|
+
## Operations
|
|
51
|
+
|
|
52
|
+
### seed_from_roadmap(roadmap_path)
|
|
53
|
+
|
|
54
|
+
Called by the orchestrator after the architect writes a roadmap. Reads `docs/roadmap-<proj>.md`, creates one card per task with:
|
|
55
|
+
- Status defaults to `todo` (unless the task has no dependencies, in which case `ready`)
|
|
56
|
+
- Assignee defaults to the profile listed in the roadmap
|
|
57
|
+
- ID assigned sequentially (`T-001`, `T-002`, ...)
|
|
58
|
+
- All other fields populated from the roadmap section
|
|
59
|
+
|
|
60
|
+
The board manager **does not** skip this step. The roadmap is the contract; the board is the working copy.
|
|
61
|
+
|
|
62
|
+
### list_by_status(status)
|
|
63
|
+
|
|
64
|
+
Returns all card IDs and titles with the given status. Used by the orchestrator to find `ready` cards for dispatch.
|
|
65
|
+
|
|
66
|
+
### find_ready_cards()
|
|
67
|
+
|
|
68
|
+
Returns all cards with status `ready` AND all dependencies marked `done`. These are dispatchable.
|
|
69
|
+
|
|
70
|
+
### claim(card_id, worker)
|
|
71
|
+
|
|
72
|
+
Moves a card `ready → running` and stamps the worker as the assignee. Returns the card's full content for the worker's Context Package.
|
|
73
|
+
|
|
74
|
+
### complete(card_id, evidence)
|
|
75
|
+
|
|
76
|
+
Moves a card `running → done`. The `evidence` argument is the structured wrap-up:
|
|
77
|
+
|
|
78
|
+
```json
|
|
79
|
+
{
|
|
80
|
+
"summary": "one-paragraph closeout",
|
|
81
|
+
"changed_files": ["path/to/file.py"],
|
|
82
|
+
"verification": ["pytest tests/x.py", "npm run lint"],
|
|
83
|
+
"residual_risk": ["what was not tested", "what still needs human review"],
|
|
84
|
+
"retry_notes": "what failed before if this was a retry"
|
|
85
|
+
}
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
The board manager appends the evidence to the card's `Wrap-up evidence` block and stamps the `Updated` date.
|
|
89
|
+
|
|
90
|
+
### block(card_id, reason)
|
|
91
|
+
|
|
92
|
+
Moves a card `running → blocked` (or `todo → blocked`) with a `Blocked reason` field. The orchestrator surfaces blocked cards to the user.
|
|
93
|
+
|
|
94
|
+
### unblock(card_id, resolution)
|
|
95
|
+
|
|
96
|
+
Moves a card `blocked → ready` (or `todo`) with a `Resolution` field describing what changed.
|
|
97
|
+
|
|
98
|
+
### break_down(card_id, new_cards)
|
|
99
|
+
|
|
100
|
+
Splits a card into multiple smaller cards. Closes the original as `archived` with reason "broken into T-X, T-Y, T-Z" and creates the new cards with `todo` status. Dependencies are re-pointed.
|
|
101
|
+
|
|
102
|
+
### rearchitect(card_id, question)
|
|
103
|
+
|
|
104
|
+
Moves a card `todo → triage` with a `Re-architect question` field. The orchestrator will route the card back to the architect with this question as part of the Context Package.
|
|
105
|
+
|
|
106
|
+
### requeue(card_id, reason)
|
|
107
|
+
|
|
108
|
+
Moves a card to `todo` with a `Requeue reason` field. Use this for cards that are out of scope for the current session but should be revisited later.
|
|
109
|
+
|
|
110
|
+
## Audit Operations
|
|
111
|
+
|
|
112
|
+
### walk_board()
|
|
113
|
+
|
|
114
|
+
Renders a human-readable summary of all cards grouped by status. Used by the orchestrator at wrap-up and by the user for status checks.
|
|
115
|
+
|
|
116
|
+
### find_unaccounted()
|
|
117
|
+
|
|
118
|
+
Returns all cards that are not `done` or `archived` AND have not been updated in the last 7 days. The orchestrator uses this at wrap-up to decide what to break, re-architect, or requeue.
|
|
119
|
+
|
|
120
|
+
### find_blocked()
|
|
121
|
+
|
|
122
|
+
Returns all `blocked` cards. The orchestrator surfaces these to the user; they need human input.
|
|
123
|
+
|
|
124
|
+
### find_done_without_evidence()
|
|
125
|
+
|
|
126
|
+
Returns all `done` cards where `Wrap-up evidence` is missing or incomplete. The orchestrator uses this to verify worker wrap-ups.
|
|
127
|
+
|
|
128
|
+
## Implementation Notes
|
|
129
|
+
|
|
130
|
+
- The board manager operates on `TASKS.md` directly. The file is the board. There is no separate database.
|
|
131
|
+
- Card IDs are stable. Once assigned, an ID is never reused.
|
|
132
|
+
- `Updated` is stamped on every status change.
|
|
133
|
+
- The board manager does NOT decide what to work on. The orchestrator decides that. The board manager only records decisions.
|
|
134
|
+
- Workers report status changes through the board manager; they do not edit `TASKS.md` directly.
|
|
135
|
+
|
|
136
|
+
## Model
|
|
137
|
+
|
|
138
|
+
Use **Gemini** for routine board operations. The board manager is mostly mechanical (move status, append evidence) and does not need heavy reasoning.
|
|
139
|
+
|
|
140
|
+
## Anti-Patterns
|
|
141
|
+
|
|
142
|
+
- **Do not** let a worker edit `TASKS.md` directly. All changes go through the board manager.
|
|
143
|
+
- **Do not** store card content in chat context. Always read from `TASKS.md` and write back to `TASKS.md`.
|
|
144
|
+
- **Do not** create a card without a roadmap link (except in `triage`, where the card IS the rough idea).
|
|
145
|
+
- **Do not** move a card to `done` without evidence. The board manager should refuse and prompt the worker for the wrap-up JSON.
|
|
146
|
+
- **Do not** auto-promote a card to `ready` if its dependencies are not all `done`. The orchestrator (or board manager's `find_ready_cards()`) checks this explicitly.
|
|
147
|
+
|
|
148
|
+
## Card Granularity Rules (Added Session 23)
|
|
149
|
+
|
|
150
|
+
These rules govern **how fine-grained a card should be**. Over-broad cards waste context and degrade worker output.
|
|
151
|
+
|
|
152
|
+
### Rule G1: One logical change per card
|
|
153
|
+
A card's "Acceptance" should fit in **one logical change**. Examples of properly-scoped cards:
|
|
154
|
+
- ✅ "Fix silent error swallowing in 7 Scan loops in store package"
|
|
155
|
+
- ✅ "Fix CountMemories broken primary query"
|
|
156
|
+
- ✅ "Add regression test for CountMemories"
|
|
157
|
+
- ❌ "Refactor memory store package" (too broad — 1768 LOC god-file)
|
|
158
|
+
- ❌ "Fix memory store bugs" (too vague)
|
|
159
|
+
|
|
160
|
+
If a logical change touches multiple files in the same module, that's fine — one card, one dispatch. But if it touches multiple unrelated concerns (e.g., error handling + a new feature + perf), that's three cards.
|
|
161
|
+
|
|
162
|
+
### Rule G2: Cards that need linting spawn a separate card
|
|
163
|
+
If a card's "Scope IN" includes "touch N files" and the touched files will need lint/format work, the card's wrap-up should list those files explicitly so a follow-up `T-LINT-XXX` card can dispatch to a `boomerang-linter` agent. Do not bundle the lint work into the coder's dispatch.
|
|
164
|
+
|
|
165
|
+
Card convention:
|
|
166
|
+
- Logic-fix cards: `T-NNN · <verb> <thing> — <one-line summary>`
|
|
167
|
+
- Lint-only cards: `T-LINT-NNN · <tool> <files> after <T-XXX>`
|
|
168
|
+
|
|
169
|
+
### Rule G3: Cards that span new code + tests split
|
|
170
|
+
A "fix this bug" card is fine to include "add regression test" in the same dispatch (the test proves the fix). But a "fill coverage gap" card that is purely about adding tests to existing code should be `T-TEST-NNN`, not bundled with a refactor.
|
|
171
|
+
|
|
172
|
+
### Rule G4: Refactor of N>1 file splits into N or more cards
|
|
173
|
+
A refactor that splits a 1768-LOC file into 10 files is **at least 10 cards** (one per new file extraction), executed sequentially. Don't try to do all 10 in one dispatch.
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: skill-self-audit
|
|
3
|
+
description: End-of-cycle audit that detects repeated processes and creates skills for them. Invoked by the orchestrator before wrap-up. If a process was repeated more than once during the cycle, the orchestrator invokes boomerang-agent-builder to formalize it as a skill before signing off.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Skill Self-Audit
|
|
7
|
+
|
|
8
|
+
## Description
|
|
9
|
+
|
|
10
|
+
The orchestrator runs this audit at the end of every cycle. The audit scans the cycle for processes that were repeated more than once — and if any are found, the orchestrator creates a skill for them. This is how the Boomerang v3 skill library grows organically: as patterns repeat, they get formalized.
|
|
11
|
+
|
|
12
|
+
## The Rule
|
|
13
|
+
|
|
14
|
+
> **If we did a process more than once this cycle, it should be a skill.**
|
|
15
|
+
|
|
16
|
+
This is not optional. The orchestrator's wrap-up protocol includes this step explicitly. The user said:
|
|
17
|
+
|
|
18
|
+
> "We need to at the end of every boomerang look at if we did a process if it would make sense to make it a skill. We need this also built in."
|
|
19
|
+
|
|
20
|
+
So this skill is built in.
|
|
21
|
+
|
|
22
|
+
## When to Use This Skill
|
|
23
|
+
|
|
24
|
+
- The orchestrator is about to wrap up a cycle (every cycle)
|
|
25
|
+
- The user says "/boomerang-handoff" or the cycle is naturally ending
|
|
26
|
+
- A session is being terminated
|
|
27
|
+
- The user explicitly invokes "skill audit" or "self-audit"
|
|
28
|
+
|
|
29
|
+
## Audit Process
|
|
30
|
+
|
|
31
|
+
### 1. Review the cycle's actions
|
|
32
|
+
|
|
33
|
+
Walk through the orchestrator's actions in the current cycle:
|
|
34
|
+
- Memory queries
|
|
35
|
+
- Architect dispatches
|
|
36
|
+
- Worker dispatches (Task tool calls)
|
|
37
|
+
- File reads / searches
|
|
38
|
+
- Skill invocations
|
|
39
|
+
- Context Package builds
|
|
40
|
+
- Status changes
|
|
41
|
+
|
|
42
|
+
Look for **processes that recurred** — meaning the same multi-step pattern was executed more than once, even if the targets were different.
|
|
43
|
+
|
|
44
|
+
Examples of "recurring process":
|
|
45
|
+
- Built 3 different Context Packages for 3 different cards (→ the "build Context Package" process should be a skill)
|
|
46
|
+
- Dispatched 4 coder tasks each with the same permission-check step (→ the "broker permission gate" should be a skill)
|
|
47
|
+
- Read AGENTS.md, TASKS.md, HANDOFF.md at the start of two different cycles (→ already a skill: the Session Start Protocol)
|
|
48
|
+
- Had to look up the same docs/roadmap path 5 times during dispatch (→ the orchestrator should pin the roadmap as a session variable)
|
|
49
|
+
- Translated the same kind of card evidence into the same kanban-board-manager call 6 times (→ the wrap-up evidence structure is already formalized; no new skill needed)
|
|
50
|
+
|
|
51
|
+
Examples of "not recurring" (do NOT make a skill):
|
|
52
|
+
- Read 1 file once to get context
|
|
53
|
+
- Asked the architect to design 1 thing
|
|
54
|
+
- Performed 1 dispatch
|
|
55
|
+
|
|
56
|
+
### 2. For each recurring process, decide
|
|
57
|
+
|
|
58
|
+
Ask three questions:
|
|
59
|
+
|
|
60
|
+
1. **Is the process already a skill?** If yes, no action. Example: "build Context Package" is a documented pattern in the orchestrator skill, not a new skill.
|
|
61
|
+
2. **Is the process too narrow to be a skill?** A skill should be reusable across projects and sessions. If the process is project-specific or one-off, document it in HANDOFF.md instead of creating a skill.
|
|
62
|
+
3. **Would formalizing it reduce token cost or increase reliability?** If yes, create the skill. If it's just a "nice to have," defer.
|
|
63
|
+
|
|
64
|
+
If all three answer "no," don't create a skill.
|
|
65
|
+
|
|
66
|
+
### 3. If a new skill is warranted
|
|
67
|
+
|
|
68
|
+
Invoke the `boomerang-agent-builder` skill with:
|
|
69
|
+
|
|
70
|
+
- **Process name** — what to call the new skill
|
|
71
|
+
- **Process description** — what it does, when to use it
|
|
72
|
+
- **Process steps** — the exact sequence of operations
|
|
73
|
+
- **Inputs** — what the skill takes
|
|
74
|
+
- **Outputs** — what the skill returns
|
|
75
|
+
- **Example invocation** — a worked example
|
|
76
|
+
|
|
77
|
+
`boomerang-agent-builder` handles the rest: frontmatter, naming convention, syncing across the 3 skill locations, validating with `npm run fix-perms` and yaml_check.
|
|
78
|
+
|
|
79
|
+
### 4. If a skill should be UPDATED (not created)
|
|
80
|
+
|
|
81
|
+
If an existing skill is being applied in a way that wasn't anticipated, the orchestrator should:
|
|
82
|
+
- Note the deviation in HANDOFF.md
|
|
83
|
+
- Add a TODO to the kanban board for "improve <skill-name> to handle <scenario>"
|
|
84
|
+
- Continue with the current cycle; do not block on the skill update
|
|
85
|
+
|
|
86
|
+
### 5. Record the audit result
|
|
87
|
+
|
|
88
|
+
Whether or not a skill was created, the audit result is recorded:
|
|
89
|
+
|
|
90
|
+
- **Skills created this cycle:** T-XXX → new skill name
|
|
91
|
+
- **Skills marked for improvement:** T-YYY → skill name → reason
|
|
92
|
+
- **No new skills needed:** a one-liner explaining why the cycle's processes were all unique or already covered
|
|
93
|
+
|
|
94
|
+
This is saved to memoryManager with `project` metadata so the next session can see what was learned.
|
|
95
|
+
|
|
96
|
+
## Output Format
|
|
97
|
+
|
|
98
|
+
The audit returns a single Markdown block:
|
|
99
|
+
|
|
100
|
+
```markdown
|
|
101
|
+
## Skill Self-Audit Result
|
|
102
|
+
|
|
103
|
+
### Skills Created
|
|
104
|
+
- **<skill-name>** — <one-line description>
|
|
105
|
+
- Triggered by: <which actions in the cycle>
|
|
106
|
+
- Replaces: <ad-hoc process description>
|
|
107
|
+
|
|
108
|
+
### Skills Marked for Improvement
|
|
109
|
+
- **<skill-name>** — <gap description>
|
|
110
|
+
- Tracked as: T-XXX on the kanban board
|
|
111
|
+
|
|
112
|
+
### No Action Needed
|
|
113
|
+
- <one-liner per non-issue, e.g. "The Context Package template is already in boomerang-orchestrator SKILL.md">
|
|
114
|
+
|
|
115
|
+
### Cycle Summary
|
|
116
|
+
- Total actions reviewed: N
|
|
117
|
+
- Recurring processes found: N
|
|
118
|
+
- Skills created: N
|
|
119
|
+
- Skills marked for improvement: N
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
## Anti-Patterns
|
|
123
|
+
|
|
124
|
+
- **Do not** create a skill for a process that was performed only once. "Once" is data, not a pattern.
|
|
125
|
+
- **Do not** create a skill that overlaps with an existing skill. Update the existing one instead.
|
|
126
|
+
- **Do not** create skills for project-specific processes. Those belong in HANDOFF.md or the project's own docs.
|
|
127
|
+
- **Do not** skip the audit. The user asked for it to be "built in," and it is.
|
|
128
|
+
|
|
129
|
+
## Model
|
|
130
|
+
|
|
131
|
+
Use **Gemini** for the audit reasoning. Skill creation itself (via `boomerang-agent-builder`) uses the agent-builder's recommended model (deepseek-v4-pro:cloud or higher).
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: todo-list-updater
|
|
3
|
+
description: Refreshes the project's todo list (TASKS.md or its Current Phase section) to reflect the current cycle's state. Invoked by the orchestrator at end of cycle, when a phase transitions, or when the user asks to clean up the todo list. Marks done items, removes stale items, adds newly discovered items, and keeps the file scannable for the next cycle.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Todo List Updater
|
|
7
|
+
|
|
8
|
+
## Description
|
|
9
|
+
|
|
10
|
+
The todo list lives in `TASKS.md` (or in a project-specific location if the project overrides the convention). The orchestrator invokes this skill to keep the file current. The file is the canonical "what are we working on right now" — chat scrollback and memory are not.
|
|
11
|
+
|
|
12
|
+
## When to Use This Skill
|
|
13
|
+
|
|
14
|
+
- The orchestrator is about to wrap up a cycle
|
|
15
|
+
- A phase transition is happening (a major milestone reached)
|
|
16
|
+
- The user asks "what's the todo list?" or "clean up the todos"
|
|
17
|
+
- Several items have completed since the last update
|
|
18
|
+
- New items were discovered during the cycle that need to be tracked
|
|
19
|
+
|
|
20
|
+
## The File Convention
|
|
21
|
+
|
|
22
|
+
`TASKS.md` has this structure. The updater preserves the structure; it does not impose it on a project that uses a different convention.
|
|
23
|
+
|
|
24
|
+
```markdown
|
|
25
|
+
# <Project> Tasks
|
|
26
|
+
|
|
27
|
+
## Overview
|
|
28
|
+
<one paragraph: what this project is, current status, link to roadmap>
|
|
29
|
+
|
|
30
|
+
## Current Phase: <phase name>
|
|
31
|
+
### Active
|
|
32
|
+
- [ ] **T-001** · <task title> — <status badge, e.g. 🔄 running> — <one-line context>
|
|
33
|
+
- [ ] **T-002** · <task title> — 🔲 ready — <one-line context>
|
|
34
|
+
- [ ] **T-003** · <task title> — 🚫 blocked — <one-line context, see reason>
|
|
35
|
+
|
|
36
|
+
### Pending (queued, not yet started)
|
|
37
|
+
- [ ] **T-004** · <task title> — <reason for queueing>
|
|
38
|
+
|
|
39
|
+
### Completed This Phase
|
|
40
|
+
- [x] **T-005** · <task title> — <one-line summary, link to wrap-up>
|
|
41
|
+
- [x] **T-006** · <task title> — <one-line summary, link to wrap-up>
|
|
42
|
+
|
|
43
|
+
## Next Phase: <phase name>
|
|
44
|
+
<bullet list of tasks, not yet started>
|
|
45
|
+
|
|
46
|
+
## Backlog / Future Phases
|
|
47
|
+
<bullet list of tasks for phases beyond Next>
|
|
48
|
+
|
|
49
|
+
## Completed (all phases, historical)
|
|
50
|
+
- [x] **T-000** · <task title> — <phase X.Y, date, link to wrap-up>
|
|
51
|
+
|
|
52
|
+
## Reference
|
|
53
|
+
- Roadmap: `docs/roadmap-<proj>.md`
|
|
54
|
+
- Kanban board: this file (TASKS.md)
|
|
55
|
+
- Memory: memoryManager memory ids for session summaries
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
The "Current Phase" section is the **headline** of the file. It should be scannable in 30 seconds.
|
|
59
|
+
|
|
60
|
+
## Operations
|
|
61
|
+
|
|
62
|
+
### refresh_from_board()
|
|
63
|
+
|
|
64
|
+
The default entry point. Reads the kanban board (TASKS.md kanban section or, if missing, the card-level format) and rebuilds the Current Phase section. The result is sorted: blocked → running → ready → pending.
|
|
65
|
+
|
|
66
|
+
### mark_done(card_id, summary)
|
|
67
|
+
|
|
68
|
+
Moves a card from Active to Completed This Phase. The summary is the worker's wrap-up closeout. The full wrap-up is in the kanban card; the todo list gets a one-liner plus a link to the card.
|
|
69
|
+
|
|
70
|
+
### mark_blocked(card_id, reason)
|
|
71
|
+
|
|
72
|
+
Moves a card from Active to a "Blocked" subsection with the reason. Stays visible (does not move to Pending) so the user sees it on every refresh.
|
|
73
|
+
|
|
74
|
+
### add_discovered(item, source)
|
|
75
|
+
|
|
76
|
+
Adds a new item that was discovered during the cycle. The source is a citation (e.g. "discovered during T-007: error handling for malformed messages was missing"). New items go to Active or Pending depending on whether they have dependencies.
|
|
77
|
+
|
|
78
|
+
### drop(card_id, reason)
|
|
79
|
+
|
|
80
|
+
Removes a card from the todo list entirely. Used for items that were discovered to be out of scope, duplicates, or absorbed into another card. The original card is moved to `archived` in the kanban board; the todo list entry is removed with a note in the changelog at the bottom of the file.
|
|
81
|
+
|
|
82
|
+
### transition_to_next_phase()
|
|
83
|
+
|
|
84
|
+
When the Current Phase is fully Done (all cards in `done` or `archived`), this operation:
|
|
85
|
+
1. Renames the current section to "Completed (<phase name>)" with a date stamp
|
|
86
|
+
2. Promotes Next Phase → Current Phase
|
|
87
|
+
3. Promotes Backlog → Next Phase
|
|
88
|
+
4. Stamps the new Current Phase header with today's date
|
|
89
|
+
|
|
90
|
+
### sync_to_memory()
|
|
91
|
+
|
|
92
|
+
Optional. Saves the current todo list to memoryManager with `project` metadata. The orchestrator does this on handoff. The skill does not run this automatically; it is invoked on demand.
|
|
93
|
+
|
|
94
|
+
## Rules
|
|
95
|
+
|
|
96
|
+
- **The todo list is a summary, not the source of truth.** The kanban board (TASKS.md kanban section) has the full card content. The todo list has scannable one-liners.
|
|
97
|
+
- **Never duplicate content.** If a card's full details are in the kanban section, the todo list entry is a one-liner with a reference.
|
|
98
|
+
- **The current phase is always at the top.** Historical completed phases are below.
|
|
99
|
+
- **No "in progress" items that aren't being worked on.** If a card is `running` but no worker is active, the orchestrator must either re-claim it or move it to `blocked`.
|
|
100
|
+
- **Use status badges** for scannability: 🔄 running, 🔲 ready, 🚫 blocked, ✅ done, 📦 archived, ❓ triage.
|
|
101
|
+
|
|
102
|
+
## Anti-Patterns
|
|
103
|
+
|
|
104
|
+
- **Do not** create todo items without a roadmap link (except for items discovered mid-cycle, which cite the source).
|
|
105
|
+
- **Do not** keep items in the Active section that have been "stuck" for more than 7 days. They are stale; move them to Blocked with a reason.
|
|
106
|
+
- **Do not** let the todo list grow unbounded. After 50+ items, archive the oldest 20% to a separate "Archive" file.
|
|
107
|
+
- **Do not** rewrite the file from scratch each time. The updater should make targeted edits and preserve the structure.
|
|
108
|
+
|
|
109
|
+
## Model
|
|
110
|
+
|
|
111
|
+
Use **Gemini** for routine refreshes. Use a higher-reasoning model (e.g. `kimi-k2.6:cloud` for Boomerang) for `transition_to_next_phase` since that involves a structural reorganization.
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: update-gh-docs
|
|
3
|
+
description: Updates GitHub-flavored documentation (README, CHANGELOG, release notes) so they are consistent, well-formatted, and validated to render correctly on github.com. Invoked as part of the release-card workflow, before tagging a release. Generic prompts for any GitHub-hosted project, with neuralgentics-specific tailoring (hero copy from Session 22, fish-shell user, podman-only, no docker, repo at Veedubin/neuralgentics).
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Update GitHub Docs
|
|
7
|
+
|
|
8
|
+
## Description
|
|
9
|
+
|
|
10
|
+
When the orchestrator is about to tag a release, this skill updates the GitHub-visible documentation files (`README.md`, `CHANGELOG.md`, GitHub release notes, and any repo-root `.md` files visitors see first) so they are:
|
|
11
|
+
- **Consistent** — version numbers, dates, links all match
|
|
12
|
+
- **Complete** — every public-facing file has accurate content
|
|
13
|
+
- **Formatted correctly** — renders cleanly on github.com (no broken markdown, no mermaid — use Unicode box-drawing per neuralgentics house style)
|
|
14
|
+
- **Validated** — links resolve, code blocks have correct language tags, table-of-contents works
|
|
15
|
+
|
|
16
|
+
The skill is **generic by design** but with neuralgentics-specific tailoring at the bottom. It can be adapted to other projects by changing the project-specific block.
|
|
17
|
+
|
|
18
|
+
## When to Use This Skill
|
|
19
|
+
|
|
20
|
+
- The orchestrator is about to tag a release (`v*` tag push) and needs the public docs ready.
|
|
21
|
+
- The user asks to "update the docs" or "make the README better."
|
|
22
|
+
- A major new feature is shipped and the public-facing docs need an update.
|
|
23
|
+
- The release-card workflow says `T-DOCS-NNN` is the next ready card.
|
|
24
|
+
|
|
25
|
+
## Generic Flow (any GitHub project)
|
|
26
|
+
|
|
27
|
+
### Step 1: Identify the docs to update
|
|
28
|
+
Common files in order of visibility:
|
|
29
|
+
1. `README.md` — the landing page visitors see first
|
|
30
|
+
2. `CHANGELOG.md` — version history
|
|
31
|
+
3. `docs/index.md` or similar — extended docs landing
|
|
32
|
+
4. Any `ROADMAP.md`, `CONTRIBUTING.md`, `LICENSE` in repo root
|
|
33
|
+
5. GitHub release notes (auto-generated from the tag push, but can be customized)
|
|
34
|
+
|
|
35
|
+
### Step 1.5: Ensure external skills snapshot is fresh (release-time only)
|
|
36
|
+
|
|
37
|
+
When tagging a release, the external skills snapshot must be bundled into the tarball so offline installs still get the curated set. The release script handles this automatically via `scripts/external-skills-fetcher.sh` (called from `release.sh` before `build_dist`).
|
|
38
|
+
|
|
39
|
+
Verify the snapshot exists and is recent:
|
|
40
|
+
- Check `~/.neuralgentics/external_skills/MANIFEST.json` exists
|
|
41
|
+
- Check `MANIFEST.json` has entries for both `ai-research-skills` and `ui-ux-pro-max-skill`
|
|
42
|
+
- Check the `commit_sha` fields are populated (not empty)
|
|
43
|
+
|
|
44
|
+
If the snapshot is missing, run `./scripts/external-skills-fetcher.sh` to create it (or use `--skip-external-skills` to bundle a lean tarball without external skills).
|
|
45
|
+
|
|
46
|
+
After build, verify `build/dist/share/external_skills/` contains:
|
|
47
|
+
- `MANIFEST.json`
|
|
48
|
+
- `ai-research-skills/` with at least one `SKILL.md`
|
|
49
|
+
- `ui-ux-pro-max-skill/` with at least one `SKILL.md`
|
|
50
|
+
- NO `.git/` directories
|
|
51
|
+
|
|
52
|
+
### Step 2: Read each file and check
|
|
53
|
+
- **Version numbers** — match the upcoming release tag (e.g., `v0.1.1`).
|
|
54
|
+
- **Date stamps** — today's date in `YYYY-MM-DD` format.
|
|
55
|
+
- **Code blocks** — every `\`\`\`` has a language tag (`\`\`\`bash`, `\`\`\`go`, `\`\`\`typescript`).
|
|
56
|
+
- **Links** — relative links use folder-form (no `.md` extension — github.com resolves these automatically).
|
|
57
|
+
- **Internal links** — broken anchors are the #1 GH-docs bug. Use `grep -rn "](#" .` to find anchors and verify they match headings.
|
|
58
|
+
- **External links** — `curl -sIL <url>` to verify not 404.
|
|
59
|
+
- **Mermaid** — replace with Unicode box-drawing per house style (or use `\`\`\`mermaid` blocks if the project wants them).
|
|
60
|
+
- **Markdown flavor** — github.com uses GFM (GitHub Flavored Markdown). Tables, task lists, autolinks, strikethrough all work. HTML is allowed but discouraged.
|
|
61
|
+
|
|
62
|
+
### Step 3: Update the changelog
|
|
63
|
+
- Add a new top section for the new version.
|
|
64
|
+
- Sections in this order: `Added`, `Changed`, `Fixed`, `Removed`, `Deprecated`, `Notes`.
|
|
65
|
+
- Be specific — name the file, the function, the commit. Don't be vague.
|
|
66
|
+
- Reference issue/PR numbers if they exist.
|
|
67
|
+
- For a patch release (v0.1.0 → v0.1.1), the "Changed" section is usually empty.
|
|
68
|
+
- For a minor release (v0.1.x → v0.2.0), the "Added" section is usually longest.
|
|
69
|
+
|
|
70
|
+
### Step 4: Update the README
|
|
71
|
+
- Verify the hero copy still matches the product reality.
|
|
72
|
+
- Verify the install command actually works (curl the URL, verify the script exists).
|
|
73
|
+
- Verify the "Quickstart" example actually runs end-to-end.
|
|
74
|
+
- Verify all `[link](path)` references resolve.
|
|
75
|
+
- Verify the badges (if any) point to live URLs.
|
|
76
|
+
|
|
77
|
+
### Step 5: Validate on github.com (or local equivalent)
|
|
78
|
+
- If you can push to a test branch, push and check the rendered page.
|
|
79
|
+
- If not, use `markdownlint` or `markdown-link-check` if installed.
|
|
80
|
+
- The minimum validation:
|
|
81
|
+
```bash
|
|
82
|
+
# All internal .md links resolve
|
|
83
|
+
for f in $(find . -name "*.md" -not -path "*/node_modules/*" -not -path "*/.git/*" -not -path "*/site/*"); do
|
|
84
|
+
grep -oE '\]\([^)]+\.md\)' "$f" | while read link; do
|
|
85
|
+
target=$(echo "$link" | sed 's/^](\(.*\))/\1/')
|
|
86
|
+
test -f "$target" || echo "BROKEN: $f -> $target"
|
|
87
|
+
done
|
|
88
|
+
done
|
|
89
|
+
```
|
|
90
|
+
- Manual check: open each file in a markdown preview (VS Code, Obsidian, etc.) and skim.
|
|
91
|
+
|
|
92
|
+
### Step 6: Commit the docs updates
|
|
93
|
+
- ONE commit per file (or one combined commit if all changes are small).
|
|
94
|
+
- Message format: `docs(readme): update hero + install URL for v0.1.1 — Refs: T-DOCS-NNN`
|
|
95
|
+
- Push to the same branch the release will tag from.
|
|
96
|
+
|
|
97
|
+
## Neuralgentics-Specific Tailoring
|
|
98
|
+
|
|
99
|
+
### House style (from Session 22)
|
|
100
|
+
- **No mermaid diagrams in docs.** Use Unicode box-drawing characters (`┌─┐│└┘├┤┬┴┼─╭╮╰╯`). The user explicitly rejected mermaid.
|
|
101
|
+
- **Hero copy is a flat feature list**, not clever marketing. Format:
|
|
102
|
+
> "Multi-Agent Orchestration, Permissions-based MCP Server Broker, Context Continuity Across Sessions"
|
|
103
|
+
Sub-headline: "An open-source agent runtime, built for engineers who ship."
|
|
104
|
+
- **Honest comparison tables.** Cells with no data marked `(needs research)` rather than fabricated.
|
|
105
|
+
- **No source builds for end users** — GH builds all release artifacts. The release workflow is at `.github/workflows/release.yml`.
|
|
106
|
+
- **5 release targets only:** linux/amd64, linux/arm64, darwin/arm64 (Apple Silicon), windows/amd64, windows/arm64.
|
|
107
|
+
|
|
108
|
+
### Project facts (verify before publishing)
|
|
109
|
+
- **Repo URL:** `https://github.com/Veedubin/neuralgentics` (NOT `neuralgentics/neuralgentics` — that org does not exist).
|
|
110
|
+
- **Latest tag:** check `git tag --sort=-version:refname | head -1` and `curl -s https://api.github.com/repos/Veedubin/neuralgentics/releases/latest | jq -r .tag_name`.
|
|
111
|
+
- **Install command:**
|
|
112
|
+
```bash
|
|
113
|
+
curl -fsSL https://raw.githubusercontent.com/Veedubin/neuralgentics/main/scripts/install.sh | bash
|
|
114
|
+
```
|
|
115
|
+
(NOT `releases/latest/download/install.sh` — install.sh is not in release assets, it's served from `main`.)
|
|
116
|
+
- **Container option:** `podman-compose up` (podman only, no docker).
|
|
117
|
+
- **Test commands:**
|
|
118
|
+
- Go: `cd packages/<module> && GOWORK=off go test -short -timeout 60s ./...`
|
|
119
|
+
- TS: `cd packages/tui && bun test`
|
|
120
|
+
- **5 platform builds:** linux-amd64, linux-arm64, darwin-arm64, windows-amd64, windows-arm64.
|
|
121
|
+
|
|
122
|
+
### Files that MUST be updated per release (neuralgentics-specific)
|
|
123
|
+
- `README.md` — install command, version badge, quickstart
|
|
124
|
+
- `CHANGELOG.md` — new top section
|
|
125
|
+
- `docs/index.md` — hero copy, latest features
|
|
126
|
+
- `mkdocs.yml` — `site_url`, `repo_url`, version, any new pages
|
|
127
|
+
- `package.json` — `version` field (root + `packages/tui`, `packages/opencode`)
|
|
128
|
+
- `packages/backend-go/cmd/backend/main.go` — add `var version = ""` and assign to `serverInfo.Version` so ldflag works (TODO from v0.1.0)
|
|
129
|
+
- `.github/workflows/release.yml` — verify Go version, build matrix, container job status
|
|
130
|
+
|
|
131
|
+
### Files that MUST NOT be in the public repo
|
|
132
|
+
- `HANDOFF.md`, `CONTEXT.md`, `TASKS.md` (gitignored, kept on disk for orchestrator state)
|
|
133
|
+
- `certs/` (self-signed TLS, gitignored)
|
|
134
|
+
- `.venv/`, `node_modules/`, `build/`, `dist/`, `site/` (build artifacts)
|
|
135
|
+
- `opencode-base/` (legacy vendoring, removed in Session 21)
|
|
136
|
+
- `docs/design/session-*.md` and `docs/design/*-plan*.md` (internal session artifacts, local-only)
|
|
137
|
+
|
|
138
|
+
### Verifying the docs actually load
|
|
139
|
+
- The mkdocs site is at `https://veedubin.github.io/neuralgentics/`. After pushing changes to `main`, the docs workflow (`.github/workflows/docs.yml`) re-deploys.
|
|
140
|
+
- Validate: `curl -sIL https://veedubin.github.io/neuralgentics/ | head -5` (expect 200).
|
|
141
|
+
- Validate: `curl -s https://veedubin.github.io/neuralgentics/getting-started/installation/ | grep -c "raw.githubusercontent"` (expect ≥1 — confirms the install URL fix from Session 22 is still in place).
|
|
142
|
+
- Validate: open the GH release page after tagging and verify the rendered release notes look right.
|
|
143
|
+
|
|
144
|
+
## Kanban Rule: Release Card MUST Spawn a T-DOCS Card
|
|
145
|
+
|
|
146
|
+
Per AGENTS.md R6 (added Session 23): every release card (T-REL-NNN) MUST include a child `T-DOCS-NNN` card that invokes this skill before the tag is pushed. The release card is not "done" until the docs card is done.
|
|
147
|
+
|
|
148
|
+
Release card template:
|
|
149
|
+
|
|
150
|
+
```markdown
|
|
151
|
+
### T-REL-001 · Tag v0.1.1 release
|
|
152
|
+
- **Status:** ready
|
|
153
|
+
- **Assignee:** boomerang-release
|
|
154
|
+
- **Goal:** Tag v0.1.1 with all Session 23 bug fixes and push to GH.
|
|
155
|
+
- **Acceptance:**
|
|
156
|
+
- [ ] All quality gates green (T-069 done)
|
|
157
|
+
- [ ] T-DOCS-XXX docs update done (invoke update-gh-docs skill)
|
|
158
|
+
- [ ] Tag v0.1.1 pushed to origin
|
|
159
|
+
- [ ] GH Actions release workflow green
|
|
160
|
+
- [ ] Release assets all uploaded (5 platforms + checksums.txt)
|
|
161
|
+
- [ ] Live docs site serves correctly
|
|
162
|
+
- **Depends on:** T-069, T-DOCS-XXX
|
|
163
|
+
- **Scope IN:** version bump, CHANGELOG, tag push, release verification
|
|
164
|
+
- **Scope OUT:** code changes (those are separate cards)
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
The T-DOCS-XXX card:
|
|
168
|
+
|
|
169
|
+
```markdown
|
|
170
|
+
### T-DOCS-001 · Update GitHub docs for v0.1.1
|
|
171
|
+
- **Status:** ready
|
|
172
|
+
- **Assignee:** boomerang-writer
|
|
173
|
+
- **Skill:** update-gh-docs
|
|
174
|
+
- **Goal:** Update README, CHANGELOG, docs/index.md, mkdocs.yml, package.json versions for v0.1.1.
|
|
175
|
+
- **Acceptance:**
|
|
176
|
+
- [ ] All version numbers match v0.1.1
|
|
177
|
+
- [ ] All internal links resolve
|
|
178
|
+
- [ ] Hero copy still accurate
|
|
179
|
+
- [ ] Install command still works (curl-tested)
|
|
180
|
+
- [ ] Hero copy is the flat feature list (not clever marketing)
|
|
181
|
+
- [ ] No mermaid in any doc file
|
|
182
|
+
- [ ] One commit per file
|
|
183
|
+
- **Depends on:** T-REL-001 (for version target)
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
## Anti-Patterns
|
|
187
|
+
|
|
188
|
+
- **Don't** auto-generate docs from code. They're for humans. Use code for the data, write the prose.
|
|
189
|
+
- **Don't** put `WIP` or `TODO` in public docs. Either finish it or don't include it.
|
|
190
|
+
- **Don't** link to local files with `.md` extensions — github.com doesn't render these as anchors. Use folder-form: `[link](path/to/page/)` not `[link](path/to/page.md)`.
|
|
191
|
+
- **Don't** include comparison cells with fabricated data. Mark `(needs research)` instead.
|
|
192
|
+
- **Don't** update docs in the same commit as code changes. Separate them for clean rollback.
|
|
193
|
+
- **Don't** push docs changes directly to main. Open a PR unless the project is single-maintainer and that's the norm.
|
|
194
|
+
- **Don't** add emojis to docs unless the user explicitly asks. (User preference: no emojis in docs.)
|
|
195
|
+
|
|
196
|
+
## Model
|
|
197
|
+
|
|
198
|
+
Use **Gemma** for routine doc updates (formatting, link checks, version bumps). Use **DeepSeek** for any doc that requires careful judgment (hero copy, comparison tables, hero sections).
|
|
199
|
+
|
|
200
|
+
## Owner
|
|
201
|
+
|
|
202
|
+
- `boomerang-writer` is the primary agent for this skill.
|
|
203
|
+
- The orchestrator invokes it as part of the release-card workflow.
|
|
204
|
+
- The skill can also be invoked manually when the user says "update the docs" or "/boomerang-handoff" if a release is imminent.
|
|
205
|
+
|
|
206
|
+
*(Added 2026-06-05 Session 23. Prior to this, doc updates were ad-hoc. This skill formalizes the checklist and ties it to the release-card workflow so docs are NEVER out of sync with the code at tag time.)*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/neuralgentics/init.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/neuralgentics/init.ts"],"names":[],"mappings":"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"}
|