@soleri/forge 5.2.0 → 5.5.0
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/scaffolder.js +166 -3
- package/dist/scaffolder.js.map +1 -1
- package/dist/skills/brain-debrief.md +186 -0
- package/dist/skills/brainstorming.md +170 -0
- package/dist/skills/code-patrol.md +176 -0
- package/dist/skills/context-resume.md +143 -0
- package/dist/skills/executing-plans.md +201 -0
- package/dist/skills/fix-and-learn.md +164 -0
- package/dist/skills/health-check.md +225 -0
- package/dist/skills/knowledge-harvest.md +178 -0
- package/dist/skills/onboard-me.md +197 -0
- package/dist/skills/retrospective.md +189 -0
- package/dist/skills/second-opinion.md +142 -0
- package/dist/skills/systematic-debugging.md +230 -0
- package/dist/skills/test-driven-development.md +266 -0
- package/dist/skills/vault-capture.md +154 -0
- package/dist/skills/vault-navigator.md +129 -0
- package/dist/skills/verification-before-completion.md +170 -0
- package/dist/skills/writing-plans.md +207 -0
- package/dist/templates/claude-md-template.js +90 -1
- package/dist/templates/claude-md-template.js.map +1 -1
- package/dist/templates/domain-facade.d.ts +4 -0
- package/dist/templates/domain-facade.js +4 -0
- package/dist/templates/domain-facade.js.map +1 -1
- package/dist/templates/entry-point.js +32 -0
- package/dist/templates/entry-point.js.map +1 -1
- package/dist/templates/readme.js +38 -0
- package/dist/templates/readme.js.map +1 -1
- package/dist/templates/setup-script.js +52 -1
- package/dist/templates/setup-script.js.map +1 -1
- package/dist/templates/skills.d.ts +16 -0
- package/dist/templates/skills.js +73 -0
- package/dist/templates/skills.js.map +1 -0
- package/dist/templates/test-facades.js +173 -3
- package/dist/templates/test-facades.js.map +1 -1
- package/package.json +2 -2
- package/src/__tests__/scaffolder.test.ts +115 -2
- package/src/scaffolder.ts +171 -3
- package/src/skills/brain-debrief.md +186 -0
- package/src/skills/brainstorming.md +170 -0
- package/src/skills/code-patrol.md +176 -0
- package/src/skills/context-resume.md +143 -0
- package/src/skills/executing-plans.md +201 -0
- package/src/skills/fix-and-learn.md +164 -0
- package/src/skills/health-check.md +225 -0
- package/src/skills/knowledge-harvest.md +178 -0
- package/src/skills/onboard-me.md +197 -0
- package/src/skills/retrospective.md +189 -0
- package/src/skills/second-opinion.md +142 -0
- package/src/skills/systematic-debugging.md +230 -0
- package/src/skills/test-driven-development.md +266 -0
- package/src/skills/vault-capture.md +154 -0
- package/src/skills/vault-navigator.md +129 -0
- package/src/skills/verification-before-completion.md +170 -0
- package/src/skills/writing-plans.md +207 -0
- package/src/templates/claude-md-template.ts +181 -0
- package/src/templates/domain-facade.ts +4 -0
- package/src/templates/entry-point.ts +32 -0
- package/src/templates/readme.ts +38 -0
- package/src/templates/setup-script.ts +54 -1
- package/src/templates/skills.ts +82 -0
- package/src/templates/test-facades.ts +173 -3
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: verification-before-completion
|
|
3
|
+
description: Use when about to claim work is complete, fixed, or passing, before committing or creating PRs - requires running verification commands and confirming output before making any success claims; evidence before assertions always
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
<!-- Adapted from superpowers (MIT License) -->
|
|
7
|
+
|
|
8
|
+
# Verification Before Completion
|
|
9
|
+
|
|
10
|
+
## Overview
|
|
11
|
+
|
|
12
|
+
Claiming work is complete without verification is dishonesty, not efficiency.
|
|
13
|
+
|
|
14
|
+
**Core principle:** Evidence before claims, always.
|
|
15
|
+
|
|
16
|
+
**Violating the letter of this rule is violating the spirit of this rule.**
|
|
17
|
+
|
|
18
|
+
## The Iron Law
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
NO COMPLETION CLAIMS WITHOUT FRESH VERIFICATION EVIDENCE
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
If you haven't run the verification command in this message, you cannot claim it passes.
|
|
25
|
+
|
|
26
|
+
## The Gate Function
|
|
27
|
+
|
|
28
|
+
```
|
|
29
|
+
BEFORE claiming any status or expressing satisfaction:
|
|
30
|
+
|
|
31
|
+
1. IDENTIFY: What command proves this claim?
|
|
32
|
+
2. RUN: Execute the FULL command (fresh, complete)
|
|
33
|
+
3. READ: Full output, check exit code, count failures
|
|
34
|
+
4. VERIFY: Does output confirm the claim?
|
|
35
|
+
- If NO: State actual status with evidence
|
|
36
|
+
- If YES: State claim WITH evidence
|
|
37
|
+
5. AGENT CHECK: Run system diagnostics
|
|
38
|
+
6. ONLY THEN: Make the claim
|
|
39
|
+
|
|
40
|
+
Skip any step = lying, not verifying
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Agent System Checks
|
|
44
|
+
|
|
45
|
+
After passing all verification commands, run system diagnostics:
|
|
46
|
+
|
|
47
|
+
### Health Check
|
|
48
|
+
```
|
|
49
|
+
YOUR_AGENT_core op:admin_health
|
|
50
|
+
```
|
|
51
|
+
Catches issues tests might miss — vault corruption, stale caches, configuration drift.
|
|
52
|
+
|
|
53
|
+
### Full Diagnostic
|
|
54
|
+
```
|
|
55
|
+
YOUR_AGENT_core op:admin_diagnostic
|
|
56
|
+
```
|
|
57
|
+
Comprehensive system check — module status, database integrity, cache health, configuration validity.
|
|
58
|
+
|
|
59
|
+
### Vault Analytics
|
|
60
|
+
```
|
|
61
|
+
YOUR_AGENT_core op:admin_vault_analytics
|
|
62
|
+
```
|
|
63
|
+
Verify knowledge quality metrics — are capture rates healthy? Any degradation?
|
|
64
|
+
|
|
65
|
+
If any check reports problems, address them before claiming completion.
|
|
66
|
+
|
|
67
|
+
## Common Failures
|
|
68
|
+
|
|
69
|
+
| Claim | Requires | Not Sufficient |
|
|
70
|
+
|-------|----------|----------------|
|
|
71
|
+
| Tests pass | Test command output: 0 failures | Previous run, "should pass" |
|
|
72
|
+
| Linter clean | Linter output: 0 errors | Partial check, extrapolation |
|
|
73
|
+
| Build succeeds | Build command: exit 0 | Linter passing, logs look good |
|
|
74
|
+
| Bug fixed | Test original symptom: passes | Code changed, assumed fixed |
|
|
75
|
+
| Regression test works | Red-green cycle verified | Test passes once |
|
|
76
|
+
| Agent completed | VCS diff shows changes | Agent reports "success" |
|
|
77
|
+
| Requirements met | Line-by-line checklist | Tests passing |
|
|
78
|
+
| Agent healthy | `admin_diagnostic` clean | "No errors in logs" |
|
|
79
|
+
|
|
80
|
+
## Red Flags - STOP
|
|
81
|
+
|
|
82
|
+
- Using "should", "probably", "seems to"
|
|
83
|
+
- Expressing satisfaction before verification ("Great!", "Perfect!", "Done!", etc.)
|
|
84
|
+
- About to commit/push/PR without verification
|
|
85
|
+
- Trusting agent success reports
|
|
86
|
+
- Relying on partial verification
|
|
87
|
+
- Thinking "just this once"
|
|
88
|
+
- Tired and wanting work over
|
|
89
|
+
- ANY wording implying success without having run verification
|
|
90
|
+
|
|
91
|
+
## Rationalization Prevention
|
|
92
|
+
|
|
93
|
+
| Excuse | Reality |
|
|
94
|
+
|--------|---------|
|
|
95
|
+
| "Should work now" | RUN the verification |
|
|
96
|
+
| "I'm confident" | Confidence ≠ evidence |
|
|
97
|
+
| "Just this once" | No exceptions |
|
|
98
|
+
| "Linter passed" | Linter ≠ compiler |
|
|
99
|
+
| "Agent said success" | Verify independently |
|
|
100
|
+
| "I'm tired" | Exhaustion ≠ excuse |
|
|
101
|
+
| "Partial check is enough" | Partial proves nothing |
|
|
102
|
+
| "Different words so rule doesn't apply" | Spirit over letter |
|
|
103
|
+
|
|
104
|
+
## Key Patterns
|
|
105
|
+
|
|
106
|
+
**Tests:**
|
|
107
|
+
```
|
|
108
|
+
[Run test command] [See: 34/34 pass] "All tests pass"
|
|
109
|
+
NOT: "Should pass now" / "Looks correct"
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
**Regression tests (TDD Red-Green):**
|
|
113
|
+
```
|
|
114
|
+
Write -> Run (pass) -> Revert fix -> Run (MUST FAIL) -> Restore -> Run (pass)
|
|
115
|
+
NOT: "I've written a regression test" (without red-green verification)
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
**Build:**
|
|
119
|
+
```
|
|
120
|
+
[Run build] [See: exit 0] "Build passes"
|
|
121
|
+
NOT: "Linter passed" (linter doesn't check compilation)
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
**Requirements:**
|
|
125
|
+
```
|
|
126
|
+
Re-read plan -> Create checklist -> Verify each -> Report gaps or completion
|
|
127
|
+
NOT: "Tests pass, phase complete"
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
**Agent delegation:**
|
|
131
|
+
```
|
|
132
|
+
Agent reports success -> Check VCS diff -> Verify changes -> Report actual state
|
|
133
|
+
NOT: Trust agent report
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
## After Verification — Capture Session
|
|
137
|
+
|
|
138
|
+
Once work is verified complete, capture a session summary so context persists:
|
|
139
|
+
|
|
140
|
+
```
|
|
141
|
+
YOUR_AGENT_core op:session_capture
|
|
142
|
+
params: {
|
|
143
|
+
summary: "<what was accomplished, files modified, key decisions>"
|
|
144
|
+
}
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
This ensures the next session has context about what was verified and completed.
|
|
148
|
+
|
|
149
|
+
## When To Apply
|
|
150
|
+
|
|
151
|
+
**ALWAYS before:**
|
|
152
|
+
- ANY variation of success/completion claims
|
|
153
|
+
- ANY expression of satisfaction
|
|
154
|
+
- ANY positive statement about work state
|
|
155
|
+
- Committing, PR creation, task completion
|
|
156
|
+
- Moving to next task
|
|
157
|
+
- Delegating to agents
|
|
158
|
+
|
|
159
|
+
## The Bottom Line
|
|
160
|
+
|
|
161
|
+
Run the command. Read the output. THEN claim the result. This is non-negotiable.
|
|
162
|
+
|
|
163
|
+
## Agent Tools Reference
|
|
164
|
+
|
|
165
|
+
| Op | When to Use |
|
|
166
|
+
|----|-------------|
|
|
167
|
+
| `admin_health` | Quick system health check |
|
|
168
|
+
| `admin_diagnostic` | Comprehensive system diagnostic |
|
|
169
|
+
| `admin_vault_analytics` | Knowledge quality metrics |
|
|
170
|
+
| `session_capture` | Persist verified completion context |
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: writing-plans
|
|
3
|
+
description: Use when you have a spec or requirements for a multi-step task, before touching code
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
<!-- Adapted from superpowers (MIT License) -->
|
|
7
|
+
|
|
8
|
+
# Writing Plans
|
|
9
|
+
|
|
10
|
+
## Overview
|
|
11
|
+
|
|
12
|
+
Write comprehensive implementation plans assuming the engineer has zero context for our codebase and questionable taste. Document everything they need to know: which files to touch for each task, code, testing, docs they might need to check, how to test it. Give them the whole plan as bite-sized tasks. DRY. YAGNI. TDD. Frequent commits.
|
|
13
|
+
|
|
14
|
+
Assume they are a skilled developer, but know almost nothing about our toolset or problem domain. Assume they don't know good test design very well.
|
|
15
|
+
|
|
16
|
+
**Announce at start:** "I'm using the writing-plans skill to create the implementation plan."
|
|
17
|
+
|
|
18
|
+
**Save plans to:** `docs/plans/YYYY-MM-DD-<feature-name>.md`
|
|
19
|
+
|
|
20
|
+
## Before Writing — Search First, Plan Second
|
|
21
|
+
|
|
22
|
+
**Never write a plan from scratch.** Always search for existing knowledge first.
|
|
23
|
+
|
|
24
|
+
### 1. Vault First
|
|
25
|
+
Check the vault for relevant implementation patterns:
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
YOUR_AGENT_core op:search_intelligent
|
|
29
|
+
params: { query: "<feature being planned>" }
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Look for:
|
|
33
|
+
- **Implementation patterns** — proven approaches for similar features
|
|
34
|
+
- **Anti-patterns** — approaches that failed and should be avoided
|
|
35
|
+
- **Testing patterns** — how similar features were tested
|
|
36
|
+
|
|
37
|
+
Also check brain strengths for what's worked:
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
YOUR_AGENT_core op:brain_strengths
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Browse related knowledge domains for additional context:
|
|
44
|
+
|
|
45
|
+
```
|
|
46
|
+
YOUR_AGENT_core op:vault_domains
|
|
47
|
+
YOUR_AGENT_core op:vault_tags
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### 2. Web Search Second
|
|
51
|
+
If the vault doesn't have implementation guidance, search the web:
|
|
52
|
+
- **Libraries and tools** — is there a package that does this already?
|
|
53
|
+
- **Reference implementations** — how did other projects solve this?
|
|
54
|
+
- **API documentation** — official docs for libraries you'll use
|
|
55
|
+
- **Known issues** — pitfalls others ran into
|
|
56
|
+
|
|
57
|
+
### 3. Then Write the Plan
|
|
58
|
+
Incorporate vault insights and web findings into the plan. Reference specific vault entries and documentation links when they inform a step. A plan informed by existing knowledge is dramatically better than one written from first principles.
|
|
59
|
+
|
|
60
|
+
## Create a Tracked Plan
|
|
61
|
+
|
|
62
|
+
Use the agent's planning system to create a tracked, resumable plan:
|
|
63
|
+
|
|
64
|
+
```
|
|
65
|
+
YOUR_AGENT_core op:create_plan
|
|
66
|
+
params: {
|
|
67
|
+
objective: "<one-sentence goal>",
|
|
68
|
+
scope: { included: [...], excluded: [...] },
|
|
69
|
+
steps: [
|
|
70
|
+
{ title: "Step 1 title", description: "details" },
|
|
71
|
+
...
|
|
72
|
+
]
|
|
73
|
+
}
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
This makes the plan persistent across sessions — if context compacts or sessions change, the plan survives.
|
|
77
|
+
|
|
78
|
+
## Grade the Plan
|
|
79
|
+
|
|
80
|
+
After drafting, grade the plan for quality before presenting to the user:
|
|
81
|
+
|
|
82
|
+
```
|
|
83
|
+
YOUR_AGENT_core op:plan_grade
|
|
84
|
+
params: { planId: "<id from create_plan>" }
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
If the grade is below target, auto-improve:
|
|
88
|
+
|
|
89
|
+
```
|
|
90
|
+
YOUR_AGENT_core op:plan_auto_improve
|
|
91
|
+
params: { planId: "<id>" }
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
This iterates on the plan — filling gaps, adding missing test steps, clarifying ambiguous instructions. Repeat until the grade meets the target:
|
|
95
|
+
|
|
96
|
+
```
|
|
97
|
+
YOUR_AGENT_core op:plan_meets_grade
|
|
98
|
+
params: { planId: "<id>", targetGrade: "A" }
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
### Iterate on Drafts
|
|
102
|
+
|
|
103
|
+
For complex plans, iterate before finalizing:
|
|
104
|
+
|
|
105
|
+
```
|
|
106
|
+
YOUR_AGENT_core op:plan_iterate
|
|
107
|
+
params: { planId: "<id>", feedback: "<what needs improvement>" }
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
This creates a new version of the plan incorporating the feedback, preserving version history.
|
|
111
|
+
|
|
112
|
+
## Split into Tasks
|
|
113
|
+
|
|
114
|
+
Once the plan is approved, split it into trackable tasks:
|
|
115
|
+
|
|
116
|
+
```
|
|
117
|
+
YOUR_AGENT_core op:plan_split
|
|
118
|
+
params: { planId: "<id>" }
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
This generates individual tasks from the plan steps, ready for execution tracking.
|
|
122
|
+
|
|
123
|
+
## Bite-Sized Task Granularity
|
|
124
|
+
|
|
125
|
+
**Each step is one action (2-5 minutes):**
|
|
126
|
+
- "Write the failing test" - step
|
|
127
|
+
- "Run it to make sure it fails" - step
|
|
128
|
+
- "Implement the minimal code to make the test pass" - step
|
|
129
|
+
- "Run the tests and make sure they pass" - step
|
|
130
|
+
- "Commit" - step
|
|
131
|
+
|
|
132
|
+
## Plan Document Header
|
|
133
|
+
|
|
134
|
+
**Every plan MUST start with this header:**
|
|
135
|
+
|
|
136
|
+
```markdown
|
|
137
|
+
# [Feature Name] Implementation Plan
|
|
138
|
+
|
|
139
|
+
> **For Claude:** REQUIRED SUB-SKILL: Use executing-plans to implement this plan task-by-task.
|
|
140
|
+
|
|
141
|
+
**Goal:** [One sentence describing what this builds]
|
|
142
|
+
|
|
143
|
+
**Architecture:** [2-3 sentences about approach]
|
|
144
|
+
|
|
145
|
+
**Tech Stack:** [Key technologies/libraries]
|
|
146
|
+
|
|
147
|
+
---
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
## Task Structure
|
|
151
|
+
|
|
152
|
+
Each task uses this format:
|
|
153
|
+
- Files: Create / Modify / Test paths
|
|
154
|
+
- Step 1: Write the failing test (with code)
|
|
155
|
+
- Step 2: Run test to verify it fails (with expected output)
|
|
156
|
+
- Step 3: Write minimal implementation (with code)
|
|
157
|
+
- Step 4: Run test to verify it passes (with expected output)
|
|
158
|
+
- Step 5: Commit (with exact git commands)
|
|
159
|
+
|
|
160
|
+
## Remember
|
|
161
|
+
- Exact file paths always
|
|
162
|
+
- Complete code in plan (not "add validation")
|
|
163
|
+
- Exact commands with expected output
|
|
164
|
+
- DRY, YAGNI, TDD, frequent commits
|
|
165
|
+
|
|
166
|
+
## After Plan Approval
|
|
167
|
+
|
|
168
|
+
Once the user approves the plan, register it for tracking:
|
|
169
|
+
|
|
170
|
+
```
|
|
171
|
+
YOUR_AGENT_core op:approve_plan
|
|
172
|
+
params: { planId: "<id from create_plan>" }
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
Check plan stats for an overview:
|
|
176
|
+
|
|
177
|
+
```
|
|
178
|
+
YOUR_AGENT_core op:plan_stats
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
## Execution Handoff
|
|
182
|
+
|
|
183
|
+
After saving the plan, offer execution choice:
|
|
184
|
+
|
|
185
|
+
"Plan complete and saved to `docs/plans/<filename>.md`. Two execution options:
|
|
186
|
+
|
|
187
|
+
**1. Subagent-Driven (this session)** - I dispatch fresh subagent per task, review between tasks, fast iteration
|
|
188
|
+
|
|
189
|
+
**2. Parallel Session (separate)** - Open new session with executing-plans, batch execution with checkpoints
|
|
190
|
+
|
|
191
|
+
Which approach?"
|
|
192
|
+
|
|
193
|
+
## Agent Tools Reference
|
|
194
|
+
|
|
195
|
+
| Op | When to Use |
|
|
196
|
+
|----|-------------|
|
|
197
|
+
| `search_intelligent` | Find relevant patterns before planning |
|
|
198
|
+
| `brain_strengths` | Check proven approaches |
|
|
199
|
+
| `vault_domains` / `vault_tags` | Browse knowledge landscape |
|
|
200
|
+
| `create_plan` | Create tracked, persistent plan |
|
|
201
|
+
| `plan_grade` | Grade plan quality |
|
|
202
|
+
| `plan_auto_improve` | Auto-fix plan weaknesses |
|
|
203
|
+
| `plan_meets_grade` | Verify grade target reached |
|
|
204
|
+
| `plan_iterate` | Iterate on draft with feedback |
|
|
205
|
+
| `plan_split` | Split plan into trackable tasks |
|
|
206
|
+
| `approve_plan` | Lock in approved plan |
|
|
207
|
+
| `plan_stats` | Overview of plan metrics |
|
|
@@ -57,6 +57,9 @@ export function generateClaudeMdTemplate(config: AgentConfig): string {
|
|
|
57
57
|
`| Session capture | ${bt}${toolPrefix}_core${bt} | ${bt}session_capture${bt} |`,
|
|
58
58
|
`| Export knowledge | ${bt}${toolPrefix}_core${bt} | ${bt}export${bt} |`,
|
|
59
59
|
`| Record feedback | ${bt}${toolPrefix}_core${bt} | ${bt}record_feedback${bt} |`,
|
|
60
|
+
`| Enhanced feedback | ${bt}${toolPrefix}_core${bt} | ${bt}brain_feedback${bt} |`,
|
|
61
|
+
`| Feedback stats | ${bt}${toolPrefix}_core${bt} | ${bt}brain_feedback_stats${bt} |`,
|
|
62
|
+
`| Reset extracted | ${bt}${toolPrefix}_core${bt} | ${bt}brain_reset_extracted${bt} |`,
|
|
60
63
|
`| Rebuild vocabulary | ${bt}${toolPrefix}_core${bt} | ${bt}rebuild_vocabulary${bt} |`,
|
|
61
64
|
`| Brain stats | ${bt}${toolPrefix}_core${bt} | ${bt}brain_stats${bt} |`,
|
|
62
65
|
`| LLM status | ${bt}${toolPrefix}_core${bt} | ${bt}llm_status${bt} |`,
|
|
@@ -73,6 +76,117 @@ export function generateClaudeMdTemplate(config: AgentConfig): string {
|
|
|
73
76
|
`| Add guideline | ${bt}${toolPrefix}_core${bt} | ${bt}add_guideline${bt} |`,
|
|
74
77
|
`| Remove guideline | ${bt}${toolPrefix}_core${bt} | ${bt}remove_guideline${bt} |`,
|
|
75
78
|
`| Rollback identity | ${bt}${toolPrefix}_core${bt} | ${bt}rollback_identity${bt} |`,
|
|
79
|
+
`| Cognee status | ${bt}${toolPrefix}_core${bt} | ${bt}cognee_status${bt} |`,
|
|
80
|
+
`| Cognee search | ${bt}${toolPrefix}_core${bt} | ${bt}cognee_search${bt} |`,
|
|
81
|
+
`| Cognee add | ${bt}${toolPrefix}_core${bt} | ${bt}cognee_add${bt} |`,
|
|
82
|
+
`| Cognee cognify | ${bt}${toolPrefix}_core${bt} | ${bt}cognee_cognify${bt} |`,
|
|
83
|
+
`| Cognee config | ${bt}${toolPrefix}_core${bt} | ${bt}cognee_config${bt} |`,
|
|
84
|
+
`| LLM rotate key | ${bt}${toolPrefix}_core${bt} | ${bt}llm_rotate${bt} |`,
|
|
85
|
+
`| LLM call | ${bt}${toolPrefix}_core${bt} | ${bt}llm_call${bt} |`,
|
|
86
|
+
`| Governance policy | ${bt}${toolPrefix}_core${bt} | ${bt}governance_policy${bt} |`,
|
|
87
|
+
`| Governance proposals | ${bt}${toolPrefix}_core${bt} | ${bt}governance_proposals${bt} |`,
|
|
88
|
+
`| Governance stats | ${bt}${toolPrefix}_core${bt} | ${bt}governance_stats${bt} |`,
|
|
89
|
+
`| Expire proposals | ${bt}${toolPrefix}_core${bt} | ${bt}governance_expire${bt} |`,
|
|
90
|
+
`| Governance dashboard | ${bt}${toolPrefix}_core${bt} | ${bt}governance_dashboard${bt} |`,
|
|
91
|
+
// Planning Extra ops
|
|
92
|
+
`| Iterate plan | ${bt}${toolPrefix}_core${bt} | ${bt}plan_iterate${bt} |`,
|
|
93
|
+
`| Split plan tasks | ${bt}${toolPrefix}_core${bt} | ${bt}plan_split${bt} |`,
|
|
94
|
+
`| Reconcile plan | ${bt}${toolPrefix}_core${bt} | ${bt}plan_reconcile${bt} |`,
|
|
95
|
+
`| Complete lifecycle | ${bt}${toolPrefix}_core${bt} | ${bt}plan_complete_lifecycle${bt} |`,
|
|
96
|
+
`| Dispatch tasks | ${bt}${toolPrefix}_core${bt} | ${bt}plan_dispatch${bt} |`,
|
|
97
|
+
`| Review plan | ${bt}${toolPrefix}_core${bt} | ${bt}plan_review${bt} |`,
|
|
98
|
+
`| Archive plan | ${bt}${toolPrefix}_core${bt} | ${bt}plan_archive${bt} |`,
|
|
99
|
+
`| List plan tasks | ${bt}${toolPrefix}_core${bt} | ${bt}plan_list_tasks${bt} |`,
|
|
100
|
+
`| Plan stats | ${bt}${toolPrefix}_core${bt} | ${bt}plan_stats${bt} |`,
|
|
101
|
+
// Memory Extra ops
|
|
102
|
+
`| Delete memory | ${bt}${toolPrefix}_core${bt} | ${bt}memory_delete${bt} |`,
|
|
103
|
+
`| Memory stats | ${bt}${toolPrefix}_core${bt} | ${bt}memory_stats${bt} |`,
|
|
104
|
+
`| Export memories | ${bt}${toolPrefix}_core${bt} | ${bt}memory_export${bt} |`,
|
|
105
|
+
`| Import memories | ${bt}${toolPrefix}_core${bt} | ${bt}memory_import${bt} |`,
|
|
106
|
+
`| Prune memories | ${bt}${toolPrefix}_core${bt} | ${bt}memory_prune${bt} |`,
|
|
107
|
+
`| Deduplicate memories | ${bt}${toolPrefix}_core${bt} | ${bt}memory_deduplicate${bt} |`,
|
|
108
|
+
`| Memory topics | ${bt}${toolPrefix}_core${bt} | ${bt}memory_topics${bt} |`,
|
|
109
|
+
`| Memories by project | ${bt}${toolPrefix}_core${bt} | ${bt}memory_by_project${bt} |`,
|
|
110
|
+
// Vault Extra ops
|
|
111
|
+
`| Get vault entry | ${bt}${toolPrefix}_core${bt} | ${bt}vault_get${bt} |`,
|
|
112
|
+
`| Update entry | ${bt}${toolPrefix}_core${bt} | ${bt}vault_update${bt} |`,
|
|
113
|
+
`| Remove entry | ${bt}${toolPrefix}_core${bt} | ${bt}vault_remove${bt} |`,
|
|
114
|
+
`| Bulk add | ${bt}${toolPrefix}_core${bt} | ${bt}vault_bulk_add${bt} |`,
|
|
115
|
+
`| Bulk remove | ${bt}${toolPrefix}_core${bt} | ${bt}vault_bulk_remove${bt} |`,
|
|
116
|
+
`| Vault tags | ${bt}${toolPrefix}_core${bt} | ${bt}vault_tags${bt} |`,
|
|
117
|
+
`| Vault domains | ${bt}${toolPrefix}_core${bt} | ${bt}vault_domains${bt} |`,
|
|
118
|
+
`| Recent entries | ${bt}${toolPrefix}_core${bt} | ${bt}vault_recent${bt} |`,
|
|
119
|
+
`| Import entries | ${bt}${toolPrefix}_core${bt} | ${bt}vault_import${bt} |`,
|
|
120
|
+
`| Seed entries | ${bt}${toolPrefix}_core${bt} | ${bt}vault_seed${bt} |`,
|
|
121
|
+
`| Backup vault | ${bt}${toolPrefix}_core${bt} | ${bt}vault_backup${bt} |`,
|
|
122
|
+
`| Vault age report | ${bt}${toolPrefix}_core${bt} | ${bt}vault_age_report${bt} |`,
|
|
123
|
+
// Admin ops
|
|
124
|
+
`| Admin health | ${bt}${toolPrefix}_core${bt} | ${bt}admin_health${bt} |`,
|
|
125
|
+
`| Tool list | ${bt}${toolPrefix}_core${bt} | ${bt}admin_tool_list${bt} |`,
|
|
126
|
+
`| Config | ${bt}${toolPrefix}_core${bt} | ${bt}admin_config${bt} |`,
|
|
127
|
+
`| Vault size | ${bt}${toolPrefix}_core${bt} | ${bt}admin_vault_size${bt} |`,
|
|
128
|
+
`| Uptime | ${bt}${toolPrefix}_core${bt} | ${bt}admin_uptime${bt} |`,
|
|
129
|
+
`| Version | ${bt}${toolPrefix}_core${bt} | ${bt}admin_version${bt} |`,
|
|
130
|
+
`| Reset cache | ${bt}${toolPrefix}_core${bt} | ${bt}admin_reset_cache${bt} |`,
|
|
131
|
+
`| Diagnostic | ${bt}${toolPrefix}_core${bt} | ${bt}admin_diagnostic${bt} |`,
|
|
132
|
+
// Loop ops
|
|
133
|
+
`| Start loop | ${bt}${toolPrefix}_core${bt} | ${bt}loop_start${bt} |`,
|
|
134
|
+
`| Loop iterate | ${bt}${toolPrefix}_core${bt} | ${bt}loop_iterate${bt} |`,
|
|
135
|
+
`| Loop status | ${bt}${toolPrefix}_core${bt} | ${bt}loop_status${bt} |`,
|
|
136
|
+
`| Cancel loop | ${bt}${toolPrefix}_core${bt} | ${bt}loop_cancel${bt} |`,
|
|
137
|
+
`| Loop history | ${bt}${toolPrefix}_core${bt} | ${bt}loop_history${bt} |`,
|
|
138
|
+
`| Loop active | ${bt}${toolPrefix}_core${bt} | ${bt}loop_is_active${bt} |`,
|
|
139
|
+
`| Complete loop | ${bt}${toolPrefix}_core${bt} | ${bt}loop_complete${bt} |`,
|
|
140
|
+
// Orchestrate ops
|
|
141
|
+
`| Orchestrate plan | ${bt}${toolPrefix}_core${bt} | ${bt}orchestrate_plan${bt} |`,
|
|
142
|
+
`| Orchestrate execute | ${bt}${toolPrefix}_core${bt} | ${bt}orchestrate_execute${bt} |`,
|
|
143
|
+
`| Orchestrate complete | ${bt}${toolPrefix}_core${bt} | ${bt}orchestrate_complete${bt} |`,
|
|
144
|
+
`| Orchestrate status | ${bt}${toolPrefix}_core${bt} | ${bt}orchestrate_status${bt} |`,
|
|
145
|
+
`| Quick capture | ${bt}${toolPrefix}_core${bt} | ${bt}orchestrate_quick_capture${bt} |`,
|
|
146
|
+
// Capture ops
|
|
147
|
+
`| Capture knowledge | ${bt}${toolPrefix}_core${bt} | ${bt}capture_knowledge${bt} |`,
|
|
148
|
+
`| Quick capture entry | ${bt}${toolPrefix}_core${bt} | ${bt}capture_quick${bt} |`,
|
|
149
|
+
`| Intelligent search | ${bt}${toolPrefix}_core${bt} | ${bt}search_intelligent${bt} |`,
|
|
150
|
+
`| Search feedback | ${bt}${toolPrefix}_core${bt} | ${bt}search_feedback${bt} |`,
|
|
151
|
+
// Grading ops
|
|
152
|
+
`| Grade plan | ${bt}${toolPrefix}_core${bt} | ${bt}plan_grade${bt} |`,
|
|
153
|
+
`| Check history | ${bt}${toolPrefix}_core${bt} | ${bt}plan_check_history${bt} |`,
|
|
154
|
+
`| Latest check | ${bt}${toolPrefix}_core${bt} | ${bt}plan_latest_check${bt} |`,
|
|
155
|
+
`| Meets grade | ${bt}${toolPrefix}_core${bt} | ${bt}plan_meets_grade${bt} |`,
|
|
156
|
+
`| Auto improve plan | ${bt}${toolPrefix}_core${bt} | ${bt}plan_auto_improve${bt} |`,
|
|
157
|
+
// Admin Extra ops
|
|
158
|
+
`| Telemetry stats | ${bt}${toolPrefix}_core${bt} | ${bt}admin_telemetry${bt} |`,
|
|
159
|
+
`| Recent calls | ${bt}${toolPrefix}_core${bt} | ${bt}admin_telemetry_recent${bt} |`,
|
|
160
|
+
`| Reset telemetry | ${bt}${toolPrefix}_core${bt} | ${bt}admin_telemetry_reset${bt} |`,
|
|
161
|
+
`| Permissions | ${bt}${toolPrefix}_core${bt} | ${bt}admin_permissions${bt} |`,
|
|
162
|
+
`| Vault analytics | ${bt}${toolPrefix}_core${bt} | ${bt}admin_vault_analytics${bt} |`,
|
|
163
|
+
`| Search insights | ${bt}${toolPrefix}_core${bt} | ${bt}admin_search_insights${bt} |`,
|
|
164
|
+
`| Module status | ${bt}${toolPrefix}_core${bt} | ${bt}admin_module_status${bt} |`,
|
|
165
|
+
`| Environment | ${bt}${toolPrefix}_core${bt} | ${bt}admin_env${bt} |`,
|
|
166
|
+
`| Garbage collect | ${bt}${toolPrefix}_core${bt} | ${bt}admin_gc${bt} |`,
|
|
167
|
+
`| Export config | ${bt}${toolPrefix}_core${bt} | ${bt}admin_export_config${bt} |`,
|
|
168
|
+
// Curator Extra ops
|
|
169
|
+
`| Entry history | ${bt}${toolPrefix}_core${bt} | ${bt}curator_entry_history${bt} |`,
|
|
170
|
+
`| Record snapshot | ${bt}${toolPrefix}_core${bt} | ${bt}curator_record_snapshot${bt} |`,
|
|
171
|
+
`| Queue stats | ${bt}${toolPrefix}_core${bt} | ${bt}curator_queue_stats${bt} |`,
|
|
172
|
+
`| Enrich metadata | ${bt}${toolPrefix}_core${bt} | ${bt}curator_enrich${bt} |`,
|
|
173
|
+
// Project ops
|
|
174
|
+
`| Get project | ${bt}${toolPrefix}_core${bt} | ${bt}project_get${bt} |`,
|
|
175
|
+
`| List projects | ${bt}${toolPrefix}_core${bt} | ${bt}project_list${bt} |`,
|
|
176
|
+
`| Unregister project | ${bt}${toolPrefix}_core${bt} | ${bt}project_unregister${bt} |`,
|
|
177
|
+
`| Project rules | ${bt}${toolPrefix}_core${bt} | ${bt}project_get_rules${bt} |`,
|
|
178
|
+
`| All project rules | ${bt}${toolPrefix}_core${bt} | ${bt}project_list_rules${bt} |`,
|
|
179
|
+
`| Add rule | ${bt}${toolPrefix}_core${bt} | ${bt}project_add_rule${bt} |`,
|
|
180
|
+
`| Remove rule | ${bt}${toolPrefix}_core${bt} | ${bt}project_remove_rule${bt} |`,
|
|
181
|
+
`| Link projects | ${bt}${toolPrefix}_core${bt} | ${bt}project_link${bt} |`,
|
|
182
|
+
`| Unlink projects | ${bt}${toolPrefix}_core${bt} | ${bt}project_unlink${bt} |`,
|
|
183
|
+
`| Project links | ${bt}${toolPrefix}_core${bt} | ${bt}project_get_links${bt} |`,
|
|
184
|
+
`| Linked projects | ${bt}${toolPrefix}_core${bt} | ${bt}project_linked_projects${bt} |`,
|
|
185
|
+
`| Touch project | ${bt}${toolPrefix}_core${bt} | ${bt}project_touch${bt} |`,
|
|
186
|
+
// Cross-project memory ops
|
|
187
|
+
`| Promote to global | ${bt}${toolPrefix}_core${bt} | ${bt}memory_promote_to_global${bt} |`,
|
|
188
|
+
`| Configure memory | ${bt}${toolPrefix}_core${bt} | ${bt}memory_configure${bt} |`,
|
|
189
|
+
`| Cross-project search | ${bt}${toolPrefix}_core${bt} | ${bt}memory_cross_project_search${bt} |`,
|
|
76
190
|
);
|
|
77
191
|
|
|
78
192
|
mdLines.push(
|
|
@@ -130,6 +244,73 @@ export function generateClaudeMdTemplate(config: AgentConfig): string {
|
|
|
130
244
|
`<!-- /${marker} -->`,
|
|
131
245
|
);
|
|
132
246
|
|
|
247
|
+
// ─── Hook Packs section (when configured) ─────────────────────
|
|
248
|
+
if (config.hookPacks?.length) {
|
|
249
|
+
const PACK_INFO: Record<string, { description: string; hooks: Record<string, string> }> = {
|
|
250
|
+
'typescript-safety': {
|
|
251
|
+
description: 'Block unsafe TypeScript patterns',
|
|
252
|
+
hooks: {
|
|
253
|
+
'no-any-types': '`:any`, `as any`, `<any>`, `Record<string, any>`',
|
|
254
|
+
'no-console-log': '`console.log` in committed code',
|
|
255
|
+
},
|
|
256
|
+
},
|
|
257
|
+
a11y: {
|
|
258
|
+
description: 'Accessibility enforcement',
|
|
259
|
+
hooks: {
|
|
260
|
+
'semantic-html': 'Generic divs where semantic HTML should be used',
|
|
261
|
+
'focus-ring-required': 'Missing visible focus indicators',
|
|
262
|
+
'ux-touch-targets': 'Touch targets smaller than 44px',
|
|
263
|
+
},
|
|
264
|
+
},
|
|
265
|
+
'css-discipline': {
|
|
266
|
+
description: 'CSS best practices',
|
|
267
|
+
hooks: {
|
|
268
|
+
'no-important': '`!important` in CSS',
|
|
269
|
+
'no-inline-styles': 'Inline style attributes',
|
|
270
|
+
},
|
|
271
|
+
},
|
|
272
|
+
'clean-commits': {
|
|
273
|
+
description: 'Clean git history',
|
|
274
|
+
hooks: {
|
|
275
|
+
'no-ai-attribution': 'AI attribution in commits',
|
|
276
|
+
},
|
|
277
|
+
},
|
|
278
|
+
};
|
|
279
|
+
|
|
280
|
+
// Build rows — expand 'full' to constituent packs
|
|
281
|
+
const rows: Array<{ pack: string; hook: string; blocks: string }> = [];
|
|
282
|
+
for (const packName of config.hookPacks) {
|
|
283
|
+
if (packName === 'full') {
|
|
284
|
+
// Composed pack — expand all constituent packs
|
|
285
|
+
for (const [subPack, info] of Object.entries(PACK_INFO)) {
|
|
286
|
+
for (const [hook, blocks] of Object.entries(info.hooks)) {
|
|
287
|
+
rows.push({ pack: subPack, hook, blocks });
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
} else if (PACK_INFO[packName]) {
|
|
291
|
+
for (const [hook, blocks] of Object.entries(PACK_INFO[packName].hooks)) {
|
|
292
|
+
rows.push({ pack: packName, hook, blocks });
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
if (rows.length > 0) {
|
|
298
|
+
// Insert before the closing marker
|
|
299
|
+
const closingMarkerIndex = mdLines.length - 1;
|
|
300
|
+
const hookLines = [
|
|
301
|
+
'',
|
|
302
|
+
'## Hook Packs',
|
|
303
|
+
'',
|
|
304
|
+
'Quality gates installed in `.claude/`. Run `scripts/setup.sh` to install globally.',
|
|
305
|
+
'',
|
|
306
|
+
'| Pack | Hook | Blocks |',
|
|
307
|
+
'|------|------|--------|',
|
|
308
|
+
...rows.map((r) => `| ${r.pack} | ${r.hook} | ${r.blocks} |`),
|
|
309
|
+
];
|
|
310
|
+
mdLines.splice(closingMarkerIndex, 0, ...hookLines);
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
|
|
133
314
|
// Escape each markdown line for use in a single-quoted TS string literal
|
|
134
315
|
const quotedLines = mdLines.map((line) => {
|
|
135
316
|
const escaped = line.replace(/\\/g, '\\\\').replace(/'/g, "\\'");
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Generate a domain-specific facade for the agent.
|
|
3
3
|
* Each domain gets a facade with search, get_patterns, and list ops.
|
|
4
|
+
*
|
|
5
|
+
* @deprecated v4 legacy only — v5 agents use createDomainFacade() from
|
|
6
|
+
* @soleri/core which includes governance gating. This template is only
|
|
7
|
+
* used by domain-manager.ts for pre-v5 agents.
|
|
4
8
|
*/
|
|
5
9
|
export function generateDomainFacade(agentId: string, domain: string): string {
|
|
6
10
|
const facadeName = `${agentId}_${domain.replace(/-/g, '_')}`;
|
|
@@ -143,6 +143,37 @@ async function main(): Promise<void> {
|
|
|
143
143
|
if (s.totalEntries === 0) {
|
|
144
144
|
recommendations.push('Vault is empty — add intelligence data or capture knowledge via domain facades');
|
|
145
145
|
}
|
|
146
|
+
|
|
147
|
+
// Check hook status
|
|
148
|
+
const { readdirSync } = await import('node:fs');
|
|
149
|
+
const agentClaudeDir = joinPath(__dirname, '..', '.claude');
|
|
150
|
+
const globalClaudeDir = joinPath(homedir(), '.claude');
|
|
151
|
+
|
|
152
|
+
const hookStatus = { agent: [] as string[], global: [] as string[], missing: [] as string[] };
|
|
153
|
+
|
|
154
|
+
if (existsSync(agentClaudeDir)) {
|
|
155
|
+
try {
|
|
156
|
+
const agentHooks = readdirSync(agentClaudeDir)
|
|
157
|
+
.filter((f: string) => f.startsWith('hookify.') && f.endsWith('.local.md'))
|
|
158
|
+
.map((f: string) => f.replace('hookify.', '').replace('.local.md', ''));
|
|
159
|
+
hookStatus.agent = agentHooks;
|
|
160
|
+
|
|
161
|
+
for (const hook of agentHooks) {
|
|
162
|
+
if (existsSync(joinPath(globalClaudeDir, \`hookify.\${hook}.local.md\`))) {
|
|
163
|
+
hookStatus.global.push(hook);
|
|
164
|
+
} else {
|
|
165
|
+
hookStatus.missing.push(hook);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
} catch {
|
|
169
|
+
// ignore read errors
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
if (hookStatus.missing.length > 0) {
|
|
174
|
+
recommendations.push(\`\${hookStatus.missing.length} hook(s) not installed globally — run scripts/setup.sh\`);
|
|
175
|
+
}
|
|
176
|
+
|
|
146
177
|
if (recommendations.length === 0) {
|
|
147
178
|
recommendations.push('${config.name} is fully set up and ready!');
|
|
148
179
|
}
|
|
@@ -154,6 +185,7 @@ async function main(): Promise<void> {
|
|
|
154
185
|
global: { exists: globalExists, has_agent_section: globalHasAgent },
|
|
155
186
|
},
|
|
156
187
|
vault: { entries: s.totalEntries, domains: Object.keys(s.byDomain) },
|
|
188
|
+
hooks: hookStatus,
|
|
157
189
|
recommendations,
|
|
158
190
|
};
|
|
159
191
|
},
|
package/src/templates/readme.ts
CHANGED
|
@@ -84,6 +84,44 @@ ${domainRows}
|
|
|
84
84
|
|
|
85
85
|
${principleLines}
|
|
86
86
|
|
|
87
|
+
## Built-in Skills
|
|
88
|
+
|
|
89
|
+
${config.name} ships with 17 structured workflow skills, invocable via \`/<skill-name>\` in Claude Code:
|
|
90
|
+
|
|
91
|
+
**Development Workflows:**
|
|
92
|
+
|
|
93
|
+
| Skill | Description |
|
|
94
|
+
|-------|-------------|
|
|
95
|
+
| \`/test-driven-development\` | Red-green-refactor TDD workflow with vault-informed test patterns |
|
|
96
|
+
| \`/systematic-debugging\` | Root cause investigation — vault search, web search, then diagnose |
|
|
97
|
+
| \`/verification-before-completion\` | Evidence-based completion claims with system diagnostics |
|
|
98
|
+
| \`/brainstorming\` | Collaborative design exploration with vault + web research first |
|
|
99
|
+
| \`/writing-plans\` | Implementation plans with quality grading and auto-improvement |
|
|
100
|
+
| \`/executing-plans\` | Batch execution with loop tracking and plan reconciliation |
|
|
101
|
+
| \`/fix-and-learn\` | Fix bugs and capture root cause — vault search before any fix |
|
|
102
|
+
| \`/code-patrol\` | Review code against YOUR vault patterns, not generic lint rules |
|
|
103
|
+
|
|
104
|
+
**Knowledge Management:**
|
|
105
|
+
|
|
106
|
+
| Skill | Description |
|
|
107
|
+
|-------|-------------|
|
|
108
|
+
| \`/vault-navigator\` | Intelligent vault search — tags, domains, age reports, cross-project |
|
|
109
|
+
| \`/vault-capture\` | Persist knowledge with curator grooming and governance |
|
|
110
|
+
| \`/knowledge-harvest\` | Point at any doc/code — auto-extract patterns into vault |
|
|
111
|
+
| \`/brain-debrief\` | Intelligence report — strengths, gaps, cross-project insights |
|
|
112
|
+
|
|
113
|
+
**Magic UX:**
|
|
114
|
+
|
|
115
|
+
| Skill | Description |
|
|
116
|
+
|-------|-------------|
|
|
117
|
+
| \`/context-resume\` | "What was I working on?" — full context reconstruction |
|
|
118
|
+
| \`/second-opinion\` | Decision support from vault + brain + web combined |
|
|
119
|
+
| \`/retrospective\` | Data-driven sprint/week retro from actual metrics |
|
|
120
|
+
| \`/onboard-me\` | Instant project knowledge tour for newcomers |
|
|
121
|
+
| \`/health-check\` | Vault maintenance — duplicates, contradictions, stale entries |
|
|
122
|
+
|
|
123
|
+
Skills are installed to \`~/.claude/commands/\` during setup. Run \`./scripts/setup.sh\` to install or reinstall.
|
|
124
|
+
|
|
87
125
|
## Features
|
|
88
126
|
|
|
89
127
|
### Knowledge Vault
|