@soleri/forge 9.3.1 → 9.4.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/compose-claude-md.js +118 -7
- package/dist/compose-claude-md.js.map +1 -1
- package/dist/scaffolder.js +39 -1
- package/dist/scaffolder.js.map +1 -1
- package/dist/skills/agent-dev/SKILL.md +122 -0
- package/dist/skills/agent-guide/SKILL.md +116 -0
- package/dist/skills/agent-issues/SKILL.md +268 -0
- package/dist/skills/agent-persona/SKILL.md +66 -0
- package/dist/skills/deep-review/SKILL.md +12 -0
- package/dist/skills/deliver-and-ship/SKILL.md +123 -0
- package/dist/skills/discovery-phase/SKILL.md +69 -0
- package/dist/skills/env-setup/SKILL.md +151 -0
- package/dist/skills/executing-plans/SKILL.md +12 -0
- package/dist/skills/finishing-a-development-branch/SKILL.md +76 -0
- package/dist/skills/fix-and-learn/SKILL.md +12 -0
- package/dist/skills/mcp-doctor/SKILL.md +154 -0
- package/dist/skills/subagent-driven-development/SKILL.md +77 -0
- package/dist/skills/using-git-worktrees/SKILL.md +80 -0
- package/dist/skills/vault-curate/SKILL.md +99 -0
- package/dist/skills/verification-before-completion/SKILL.md +12 -0
- package/dist/skills/yolo-mode/SKILL.md +80 -0
- package/dist/templates/clean-worktrees.d.ts +5 -0
- package/dist/templates/clean-worktrees.js +59 -0
- package/dist/templates/clean-worktrees.js.map +1 -0
- package/dist/templates/setup-script.js +26 -1
- package/dist/templates/setup-script.js.map +1 -1
- package/dist/templates/shared-rules.js +128 -5
- package/dist/templates/shared-rules.js.map +1 -1
- package/dist/templates/skills.js +3 -29
- package/dist/templates/skills.js.map +1 -1
- package/dist/templates/vitest-config.js +1 -0
- package/dist/templates/vitest-config.js.map +1 -1
- package/package.json +1 -1
- package/src/compose-claude-md.ts +126 -9
- package/src/scaffolder.ts +41 -1
- package/src/skills/agent-dev/SKILL.md +122 -0
- package/src/skills/agent-guide/SKILL.md +116 -0
- package/src/skills/agent-issues/SKILL.md +268 -0
- package/src/skills/agent-persona/SKILL.md +66 -0
- package/src/skills/deep-review/SKILL.md +12 -0
- package/src/skills/deliver-and-ship/SKILL.md +123 -0
- package/src/skills/discovery-phase/SKILL.md +69 -0
- package/src/skills/env-setup/SKILL.md +151 -0
- package/src/skills/executing-plans/SKILL.md +12 -0
- package/src/skills/finishing-a-development-branch/SKILL.md +76 -0
- package/src/skills/fix-and-learn/SKILL.md +12 -0
- package/src/skills/mcp-doctor/SKILL.md +154 -0
- package/src/skills/subagent-driven-development/SKILL.md +77 -0
- package/src/skills/using-git-worktrees/SKILL.md +80 -0
- package/src/skills/vault-curate/SKILL.md +99 -0
- package/src/skills/verification-before-completion/SKILL.md +12 -0
- package/src/skills/yolo-mode/SKILL.md +80 -0
- package/src/templates/clean-worktrees.ts +58 -0
- package/src/templates/setup-script.ts +26 -1
- package/src/templates/shared-rules.ts +130 -5
- package/src/templates/skills.ts +3 -29
- package/src/templates/vitest-config.ts +1 -0
- package/vitest.config.ts +1 -0
package/src/scaffolder.ts
CHANGED
|
@@ -28,6 +28,7 @@ import { generateInjectClaudeMd } from './templates/inject-claude-md.js';
|
|
|
28
28
|
import { generateActivate } from './templates/activate.js';
|
|
29
29
|
import { generateReadme } from './templates/readme.js';
|
|
30
30
|
import { generateSetupScript } from './templates/setup-script.js';
|
|
31
|
+
import { generateCleanWorktreesScript } from './templates/clean-worktrees.js';
|
|
31
32
|
import { generateAgentsMd } from './templates/agents-md.js';
|
|
32
33
|
import { generateSkills } from './templates/skills.js';
|
|
33
34
|
import { generateExtensionsIndex, generateExampleOp } from './templates/extensions.js';
|
|
@@ -354,6 +355,7 @@ export function scaffold(config: AgentConfig): ScaffoldResult {
|
|
|
354
355
|
['scripts/copy-assets.js', generateCopyAssetsScript()],
|
|
355
356
|
['README.md', generateReadme(config)],
|
|
356
357
|
['scripts/setup.sh', generateSetupScript(config)],
|
|
358
|
+
['scripts/clean-worktrees.sh', generateCleanWorktreesScript()],
|
|
357
359
|
];
|
|
358
360
|
|
|
359
361
|
if (opencodeSetup) {
|
|
@@ -394,8 +396,9 @@ export function scaffold(config: AgentConfig): ScaffoldResult {
|
|
|
394
396
|
filesCreated.push(path);
|
|
395
397
|
}
|
|
396
398
|
|
|
397
|
-
// Make
|
|
399
|
+
// Make scripts executable
|
|
398
400
|
chmodSync(join(agentDir, 'scripts', 'setup.sh'), 0o755);
|
|
401
|
+
chmodSync(join(agentDir, 'scripts', 'clean-worktrees.sh'), 0o755);
|
|
399
402
|
|
|
400
403
|
// Write source files
|
|
401
404
|
const sourceFiles: Array<[string, string]> = [
|
|
@@ -617,6 +620,43 @@ export function listAgents(parentDir: string): AgentInfo[] {
|
|
|
617
620
|
|
|
618
621
|
for (const name of entries) {
|
|
619
622
|
const dir = join(parentDir, name);
|
|
623
|
+
|
|
624
|
+
// File-tree (v7) agents have agent.yaml
|
|
625
|
+
const agentYamlPath = join(dir, 'agent.yaml');
|
|
626
|
+
if (existsSync(agentYamlPath)) {
|
|
627
|
+
try {
|
|
628
|
+
const yamlContent = readFileSync(agentYamlPath, 'utf-8');
|
|
629
|
+
// Simple YAML parsing for id/name/role — avoid adding a dependency
|
|
630
|
+
const idMatch = yamlContent.match(/^id:\s*(.+)$/m);
|
|
631
|
+
const nameMatch = yamlContent.match(/^name:\s*(.+)$/m);
|
|
632
|
+
const roleMatch = yamlContent.match(/^role:\s*(.+)$/m);
|
|
633
|
+
|
|
634
|
+
const knowledgeDir = join(dir, 'knowledge');
|
|
635
|
+
let domains: string[] = [];
|
|
636
|
+
try {
|
|
637
|
+
domains = readdirSync(knowledgeDir)
|
|
638
|
+
.filter((f) => f.endsWith('.json'))
|
|
639
|
+
.map((f) => f.replace('.json', ''));
|
|
640
|
+
} catch {
|
|
641
|
+
/* no knowledge dir */
|
|
642
|
+
}
|
|
643
|
+
|
|
644
|
+
agents.push({
|
|
645
|
+
id: idMatch?.[1]?.trim() ?? name,
|
|
646
|
+
name: nameMatch?.[1]?.trim() ?? name,
|
|
647
|
+
role: roleMatch?.[1]?.trim() ?? '',
|
|
648
|
+
path: dir,
|
|
649
|
+
domains,
|
|
650
|
+
hasNodeModules: false,
|
|
651
|
+
hasDistDir: false,
|
|
652
|
+
});
|
|
653
|
+
continue;
|
|
654
|
+
} catch {
|
|
655
|
+
/* skip malformed agent.yaml */
|
|
656
|
+
}
|
|
657
|
+
}
|
|
658
|
+
|
|
659
|
+
// Legacy (v6) agents have package.json
|
|
620
660
|
const pkgPath = join(dir, 'package.json');
|
|
621
661
|
if (!existsSync(pkgPath)) continue;
|
|
622
662
|
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: agent-dev
|
|
3
|
+
description: >
|
|
4
|
+
Use when extending the agent itself — adding facades, tools, vault operations,
|
|
5
|
+
brain features, new skills, or modifying agent internals. Triggers on "add a facade",
|
|
6
|
+
"new tool", "extend vault", "add brain feature", "new skill", "add operation",
|
|
7
|
+
"extend agent", or when the work target is the agent's own codebase rather than
|
|
8
|
+
a project the agent assists with. Enforces vault-first knowledge gathering before
|
|
9
|
+
any code reading or planning.
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Agent Dev — Vault-First Internal Development
|
|
13
|
+
|
|
14
|
+
Develop the agent's own internals with the vault as the primary source of truth. The vault knows more about the agent than any code scan or model training data. Always search the vault first, extract maximum context, and only then touch code.
|
|
15
|
+
|
|
16
|
+
## When to Use
|
|
17
|
+
|
|
18
|
+
Any time the work target is the agent's own codebase: adding tools, extending facades, modifying vault operations, brain features, skills, or transport. Not for projects that merely _use_ the agent.
|
|
19
|
+
|
|
20
|
+
## Core Principle
|
|
21
|
+
|
|
22
|
+
**Vault first. Before code. Before training data. Always.**
|
|
23
|
+
|
|
24
|
+
The vault is the authoritative source for how the agent works. Do not rely on general knowledge from training data — it is outdated and lacks project-specific decisions. Do not scan the codebase to understand architecture — the vault already has it.
|
|
25
|
+
|
|
26
|
+
## Orchestration Sequence
|
|
27
|
+
|
|
28
|
+
### Step 1: Search the Vault (MANDATORY — before anything else)
|
|
29
|
+
|
|
30
|
+
Before reading any source file, before making any plan, before offering any advice:
|
|
31
|
+
|
|
32
|
+
```
|
|
33
|
+
YOUR_AGENT_core op:search_vault_intelligent
|
|
34
|
+
params: { query: "<description of planned work>", options: { intent: "pattern" } }
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Search again with architecture-specific terms: the facade name, tool name, or subsystem being modified.
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
YOUR_AGENT_core op:query_vault_knowledge
|
|
41
|
+
params: { type: "workflow", category: "<relevant category>" }
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
If initial results are sparse, search again with broader terms — synonyms, related subsystem names, parent concepts. Exhaust the vault before moving on.
|
|
45
|
+
|
|
46
|
+
Review all results. Extract file paths, module names, function references, conventions, and constraints. These become the foundation for every step that follows.
|
|
47
|
+
|
|
48
|
+
### Step 2: Check Brain for Proven Patterns
|
|
49
|
+
|
|
50
|
+
```
|
|
51
|
+
YOUR_AGENT_core op:strengths
|
|
52
|
+
params: { days: 30, minStrength: 60 }
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
```
|
|
56
|
+
YOUR_AGENT_core op:recommend
|
|
57
|
+
params: { projectPath: "." }
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Check if the brain has learned anything relevant from recent sessions.
|
|
61
|
+
|
|
62
|
+
### Step 3: Targeted Code Reading (Only What Vault Pointed To)
|
|
63
|
+
|
|
64
|
+
By now the vault has provided architecture context, file paths, and module references. Only read code when the vault describes the subsystem but lacks implementation detail (e.g., method signatures, exact line numbers).
|
|
65
|
+
|
|
66
|
+
**Read only what the vault pointed to.** Open the specific files referenced in vault results — not the surrounding codebase, not the parent directory, not "let me explore the project structure."
|
|
67
|
+
|
|
68
|
+
**Fallback: Codebase scan.** Only when vault search returned zero relevant results for the subsystem — meaning the vault genuinely has no knowledge about it — fall back to `Grep` with targeted terms. This is the last resort, not the default.
|
|
69
|
+
|
|
70
|
+
### Step 4: Plan with Vault Context
|
|
71
|
+
|
|
72
|
+
Create the implementation plan referencing vault findings explicitly:
|
|
73
|
+
|
|
74
|
+
- Which patterns apply (cite vault entry titles)
|
|
75
|
+
- Which anti-patterns to avoid (cite the specific anti-pattern)
|
|
76
|
+
- Which conventions to follow (naming, facade structure, tool registration)
|
|
77
|
+
|
|
78
|
+
Every plan must trace its decisions back to vault knowledge. If a decision has no vault backing, flag it as a new architectural choice that should be captured after implementation (Step 7).
|
|
79
|
+
|
|
80
|
+
### Step 5: Implement
|
|
81
|
+
|
|
82
|
+
Follow the plan. Key conventions for agent internals:
|
|
83
|
+
|
|
84
|
+
- **Facades**: Thin routing layer — delegate to domain modules. No business logic in facades.
|
|
85
|
+
- **Tools**: Follow `op:operation_name` naming, return structured responses.
|
|
86
|
+
- **Vault writes**: All writes go through the vault intelligence layer.
|
|
87
|
+
- **Tests**: Colocated test files. Run with vitest.
|
|
88
|
+
- **Build**: Must compile without errors before considering done.
|
|
89
|
+
|
|
90
|
+
### Step 6: Validate and Self-Correct
|
|
91
|
+
|
|
92
|
+
Run the relevant test suite. Rebuild — must complete without errors.
|
|
93
|
+
|
|
94
|
+
**Self-correction loop:** If tests fail or build breaks, do NOT ask the user what to do. Read the error, trace the cause in the code just written, fix it, and re-run. Repeat until green. The agent owns the code it wrote — if something fails, the agent fixes its own implementation. Only escalate to the user when the failure is outside the agent's control (missing infrastructure, permissions, unclear requirements).
|
|
95
|
+
|
|
96
|
+
### Step 7: Capture What Was Learned
|
|
97
|
+
|
|
98
|
+
If this work revealed new architectural knowledge, a useful pattern, or a surprising anti-pattern:
|
|
99
|
+
|
|
100
|
+
```
|
|
101
|
+
YOUR_AGENT_core op:capture_knowledge
|
|
102
|
+
params: {
|
|
103
|
+
title: "<what was learned>",
|
|
104
|
+
description: "<the pattern or anti-pattern>",
|
|
105
|
+
type: "pattern",
|
|
106
|
+
tags: ["<relevant-tags>"]
|
|
107
|
+
}
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
This ensures future sessions benefit from today's discovery — making the vault smarter for the next developer.
|
|
111
|
+
|
|
112
|
+
## Anti-Patterns to Avoid
|
|
113
|
+
|
|
114
|
+
- **Code-first exploration**: Reading source files before searching the vault. The vault already has the architecture — scanning code is slower and gives less context.
|
|
115
|
+
- **Training-data advice**: Offering general guidance from model training data instead of searching the vault for project-specific knowledge.
|
|
116
|
+
- **Skipping vault search**: The vault contains all architecture knowledge. Not searching it means reinventing knowledge that already exists.
|
|
117
|
+
- **Planning without vault context**: Plans created without vault knowledge miss conventions, duplicate existing patterns, or violate architectural boundaries.
|
|
118
|
+
- **Broad codebase scanning**: Exploring directories and reading files "to understand the project" instead of using vault results as a targeted map.
|
|
119
|
+
|
|
120
|
+
## Exit Criteria
|
|
121
|
+
|
|
122
|
+
Development is complete when: vault was searched exhaustively first (Step 1), implementation follows discovered patterns, tests pass, build succeeds, and any new learning is captured back to vault (Step 7).
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: agent-guide
|
|
3
|
+
description: >
|
|
4
|
+
Use when the user asks "what can you do", "help me", "how do I use this",
|
|
5
|
+
"what features do you have", "what tools are available", "how does this work",
|
|
6
|
+
"show me your capabilities", "what are you", "who are you", or any question
|
|
7
|
+
about the agent's identity, capabilities, available tools, or how to use them.
|
|
8
|
+
Not needed for proactive tool suggestions — those are handled by engine rules.
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Agent Guide — Capability Discovery
|
|
12
|
+
|
|
13
|
+
Help users understand what this agent can do, how to use it effectively, and what makes it different from a raw LLM. This skill handles the deep discovery flow — proactive tool suggestions during normal work are handled by the engine rules (Tool Advocacy section).
|
|
14
|
+
|
|
15
|
+
## When to Use
|
|
16
|
+
|
|
17
|
+
- "What can you do?" / "What are your capabilities?"
|
|
18
|
+
- "How do I search for X?" / "How do I capture knowledge?"
|
|
19
|
+
- "What tools do you have?" / "Show me your features"
|
|
20
|
+
- "Who are you?" / "What is this agent?"
|
|
21
|
+
- "Help" / "I'm stuck" / "How does this work?"
|
|
22
|
+
- First-time users, onboarding, or anyone unfamiliar with the agent
|
|
23
|
+
|
|
24
|
+
## Capability Discovery Sequence
|
|
25
|
+
|
|
26
|
+
### Step 1: Identity
|
|
27
|
+
|
|
28
|
+
```
|
|
29
|
+
YOUR_AGENT_core op:activate
|
|
30
|
+
params: { projectPath: "." }
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
This returns the agent's persona: name, role, description, tone, principles, and domains. Present the identity first — who the agent is and what it specializes in.
|
|
34
|
+
|
|
35
|
+
### Step 2: Health & Status
|
|
36
|
+
|
|
37
|
+
```
|
|
38
|
+
YOUR_AGENT_core op:admin_health
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Shows what subsystems are active: vault (how many entries), brain (vocabulary size), LLM availability, cognee status. This tells the user what the agent currently has to work with.
|
|
42
|
+
|
|
43
|
+
### Step 3: Available Tools
|
|
44
|
+
|
|
45
|
+
```
|
|
46
|
+
YOUR_AGENT_core op:admin_tool_list
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Lists all facades and operations. Present them grouped by category with plain-language descriptions.
|
|
50
|
+
|
|
51
|
+
### Step 4: Present by What Users Can DO
|
|
52
|
+
|
|
53
|
+
Organize capabilities by user goals, not technical names:
|
|
54
|
+
|
|
55
|
+
**Knowledge & Memory**
|
|
56
|
+
|
|
57
|
+
- Search the vault for patterns, anti-patterns, and architectural decisions
|
|
58
|
+
- Capture new knowledge from the current session
|
|
59
|
+
- Search across sessions and projects for relevant context
|
|
60
|
+
- Curate: deduplicate, groom, resolve contradictions
|
|
61
|
+
|
|
62
|
+
**Planning & Execution**
|
|
63
|
+
|
|
64
|
+
- Create structured plans with vault context and brain recommendations
|
|
65
|
+
- Split plans into tasks with complexity estimates
|
|
66
|
+
- Track execution with drift detection
|
|
67
|
+
- Complete with knowledge capture and session recording
|
|
68
|
+
|
|
69
|
+
**Intelligence & Learning**
|
|
70
|
+
|
|
71
|
+
- Brain learns from every session — patterns get stronger with use
|
|
72
|
+
- Recommendations based on similar past work
|
|
73
|
+
- Strength tracking: which patterns are proven vs experimental
|
|
74
|
+
- Feedback loop: brain improves based on what works
|
|
75
|
+
|
|
76
|
+
**Quality & Validation**
|
|
77
|
+
|
|
78
|
+
- Health checks across all subsystems
|
|
79
|
+
- Iterative validation loops with configurable targets
|
|
80
|
+
- Governance: policies, proposals, quotas
|
|
81
|
+
|
|
82
|
+
**Identity & Control**
|
|
83
|
+
|
|
84
|
+
- Persona activation and deactivation
|
|
85
|
+
- Intent routing: the agent classifies what you want and routes to the right workflow
|
|
86
|
+
- Project registration and cross-project linking
|
|
87
|
+
|
|
88
|
+
**Domain Knowledge** (varies by agent)
|
|
89
|
+
|
|
90
|
+
- Each domain has: `get_patterns`, `search`, `get_entry`, `capture`, `remove`
|
|
91
|
+
- Call `op:activate` to discover which domains are configured
|
|
92
|
+
|
|
93
|
+
## Common Questions
|
|
94
|
+
|
|
95
|
+
### "What makes you different from regular Claude?"
|
|
96
|
+
|
|
97
|
+
You have persistent knowledge (vault), learned patterns (brain), structured planning with grading, iterative validation loops, and domain-specific intelligence. Regular Claude starts fresh every conversation — this agent accumulates knowledge and gets smarter over time.
|
|
98
|
+
|
|
99
|
+
### "How do I get the most out of you?"
|
|
100
|
+
|
|
101
|
+
1. **Use the vault** — search before deciding, capture after learning
|
|
102
|
+
2. **Use planning** — structured plans beat ad-hoc work for anything non-trivial
|
|
103
|
+
3. **Trust the brain** — pattern recommendations come from real usage data
|
|
104
|
+
4. **Capture everything** — every bug fix, every pattern, every anti-pattern. The vault grows smarter with use.
|
|
105
|
+
5. **Use loops for quality** — iterative validation catches issues that single-pass work misses
|
|
106
|
+
|
|
107
|
+
### "How do I add new capabilities?"
|
|
108
|
+
|
|
109
|
+
Extensions can add new ops, facades, middleware, and hooks. Domain packs add domain-specific knowledge and validation. Use `soleri pack install <name>` or `soleri extend add-op <name>`.
|
|
110
|
+
|
|
111
|
+
## Anti-Patterns
|
|
112
|
+
|
|
113
|
+
- **Listing raw op names without context** — always explain what the op does in plain language
|
|
114
|
+
- **Claiming capabilities that do not exist** — only reference ops the agent actually has. When unsure, call `op:admin_tool_list` first
|
|
115
|
+
- **Dumping the entire tool catalog** — answer the specific question, show relevant tools, not all tools
|
|
116
|
+
- **Repeating what the user already knows** — if they ask about a specific feature, answer that, don't give the full tour
|
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: agent-issues
|
|
3
|
+
description: >
|
|
4
|
+
Use when creating GitHub issues, bugs, tasks, or milestones that will be
|
|
5
|
+
worked on by AI coding agents. Triggers on: "create issue", "file bug",
|
|
6
|
+
"gh issue", "add milestone", "create task", "report bug", "gh tasks",
|
|
7
|
+
"create tasks", "create tickets", "file tickets", or when generating
|
|
8
|
+
structured work items from conversation context.
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
# Agent-Optimized Issue Creation
|
|
13
|
+
|
|
14
|
+
Create GitHub issues that AI agents can parse, execute, and verify without ambiguity. Every issue is a self-contained work order — an agent reading it has everything needed to start, execute, and prove completion.
|
|
15
|
+
|
|
16
|
+
## Core Principle
|
|
17
|
+
|
|
18
|
+
**Human issues describe problems. Agent issues describe solutions as testable outcomes.**
|
|
19
|
+
|
|
20
|
+
An agent cannot act on "improve avatar handling." It can act on: "Add PNG upload to `POST /v1/avatar` in `apps/api/src/routes/avatar.ts`, return `{ avatarUrl }`, reject files > 2MB with 413."
|
|
21
|
+
|
|
22
|
+
## When to Use
|
|
23
|
+
|
|
24
|
+
- Creating any GitHub issue via `gh issue create`
|
|
25
|
+
- Filing bugs from conversation context or error logs
|
|
26
|
+
- Breaking plans into trackable work items
|
|
27
|
+
- Creating milestones with sub-issues
|
|
28
|
+
- Converting vault patterns or anti-patterns into actionable fixes
|
|
29
|
+
|
|
30
|
+
## Issue Template by Type
|
|
31
|
+
|
|
32
|
+
### Bug
|
|
33
|
+
|
|
34
|
+
```markdown
|
|
35
|
+
# Objective
|
|
36
|
+
<one sentence: what's broken and what "fixed" looks like>
|
|
37
|
+
|
|
38
|
+
## Type: bug
|
|
39
|
+
## Component: <package or module name>
|
|
40
|
+
## Priority: P0 | P1 | P2 | P3
|
|
41
|
+
|
|
42
|
+
## Context
|
|
43
|
+
- Impact: <who/what is affected>
|
|
44
|
+
- Related: <links to issues, PRs, vault entries>
|
|
45
|
+
- First seen: <date or commit>
|
|
46
|
+
|
|
47
|
+
## Steps to Reproduce
|
|
48
|
+
1. <exact command or action>
|
|
49
|
+
2. <exact command or action>
|
|
50
|
+
3. Observe: <what happens>
|
|
51
|
+
|
|
52
|
+
## Expected vs Actual
|
|
53
|
+
| | Behavior |
|
|
54
|
+
|--|----------|
|
|
55
|
+
| **Expected** | <correct behavior> |
|
|
56
|
+
| **Actual** | <broken behavior> |
|
|
57
|
+
|
|
58
|
+
## Error Output
|
|
59
|
+
```
|
|
60
|
+
<paste exact error, stack trace, or log output>
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## Root Cause (if known)
|
|
64
|
+
- File: `path/to/file.ts` — `functionName()` or line reference
|
|
65
|
+
- Why: <brief technical explanation>
|
|
66
|
+
|
|
67
|
+
## Scope
|
|
68
|
+
| In | Out |
|
|
69
|
+
|----|-----|
|
|
70
|
+
| Fix the specific bug | Refactoring surrounding code |
|
|
71
|
+
| Add regression test | Performance optimization |
|
|
72
|
+
|
|
73
|
+
## Code Locations
|
|
74
|
+
- Bug site: `path/to/file.ts` — `symbolName`
|
|
75
|
+
- Test file: `path/to/file.test.ts`
|
|
76
|
+
- Related: `path/to/related.ts` — `relatedSymbol`
|
|
77
|
+
|
|
78
|
+
## Acceptance Criteria
|
|
79
|
+
- [ ] Bug no longer reproduces with steps above
|
|
80
|
+
- [ ] Regression test added that fails without fix, passes with fix
|
|
81
|
+
- [ ] No new lint/type errors
|
|
82
|
+
- [ ] Existing tests pass
|
|
83
|
+
|
|
84
|
+
## Verification
|
|
85
|
+
```bash
|
|
86
|
+
<exact test command>
|
|
87
|
+
<exact build/lint command>
|
|
88
|
+
```
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### Feature
|
|
92
|
+
|
|
93
|
+
```markdown
|
|
94
|
+
# Objective
|
|
95
|
+
<one sentence: what capability is added and why>
|
|
96
|
+
|
|
97
|
+
## Type: feature
|
|
98
|
+
## Component: <package or module name>
|
|
99
|
+
## Priority: P0 | P1 | P2 | P3
|
|
100
|
+
|
|
101
|
+
## Context
|
|
102
|
+
- Why: <user need or business reason>
|
|
103
|
+
- Related: <links to issues, PRs, vault entries, specs>
|
|
104
|
+
|
|
105
|
+
## Scope
|
|
106
|
+
| In | Out |
|
|
107
|
+
|----|-----|
|
|
108
|
+
| <specific deliverable> | <what NOT to touch> |
|
|
109
|
+
|
|
110
|
+
## Constraints
|
|
111
|
+
- Backward compatibility: <requirements>
|
|
112
|
+
- Dependencies: <allowed/forbidden>
|
|
113
|
+
- Performance: <budgets if any>
|
|
114
|
+
- Security: <requirements if any>
|
|
115
|
+
|
|
116
|
+
## Code Locations
|
|
117
|
+
- Entry point: `path/to/file.ts` — `functionOrClass`
|
|
118
|
+
- Integration point: `path/to/other.ts` — `symbol`
|
|
119
|
+
- Test location: `path/to/test.ts`
|
|
120
|
+
|
|
121
|
+
## Proposed Approach (optional)
|
|
122
|
+
1. <step>
|
|
123
|
+
2. <step>
|
|
124
|
+
|
|
125
|
+
## Acceptance Criteria
|
|
126
|
+
- [ ] Given <precondition>, when <action>, then <result>
|
|
127
|
+
- [ ] Given <precondition>, when <action>, then <result>
|
|
128
|
+
- [ ] Tests added for new behavior
|
|
129
|
+
- [ ] Types exported if public API
|
|
130
|
+
|
|
131
|
+
## Verification
|
|
132
|
+
```bash
|
|
133
|
+
<exact test command>
|
|
134
|
+
<exact build command>
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
## Definition of Done
|
|
138
|
+
- [ ] Acceptance criteria satisfied
|
|
139
|
+
- [ ] `npm test` passes
|
|
140
|
+
- [ ] `npm run typecheck` passes
|
|
141
|
+
- [ ] Changes scoped to "In Scope" only
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
### Milestone
|
|
145
|
+
|
|
146
|
+
```markdown
|
|
147
|
+
# Milestone: <short title>
|
|
148
|
+
|
|
149
|
+
## Objective
|
|
150
|
+
<one sentence: what this milestone achieves>
|
|
151
|
+
|
|
152
|
+
## Timeline
|
|
153
|
+
- Target: <date>
|
|
154
|
+
- Depends on: <blocking milestones or external factors>
|
|
155
|
+
|
|
156
|
+
## Sub-Issues
|
|
157
|
+
|
|
158
|
+
| # | Type | Title | Priority | Depends On |
|
|
159
|
+
|---|------|-------|----------|------------|
|
|
160
|
+
| 1 | feature | <title> | P1 | — |
|
|
161
|
+
| 2 | feature | <title> | P1 | #1 |
|
|
162
|
+
| 3 | bug | <title> | P2 | — |
|
|
163
|
+
|
|
164
|
+
## Completion Criteria
|
|
165
|
+
- [ ] All sub-issues closed
|
|
166
|
+
- [ ] Integration test passes end-to-end
|
|
167
|
+
- [ ] <milestone-level verification>
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
## Field Guide
|
|
171
|
+
|
|
172
|
+
### Writing Good Objectives
|
|
173
|
+
|
|
174
|
+
| Bad | Good |
|
|
175
|
+
|-----|------|
|
|
176
|
+
| "Fix the login" | "Login returns 401 instead of session token when OAuth callback has valid code" |
|
|
177
|
+
| "Add dark mode" | "Add `prefers-color-scheme` media query support to all semantic color tokens" |
|
|
178
|
+
| "Improve performance" | "Reduce cold-start vault search from 800ms to <200ms by lazy-loading FTS index" |
|
|
179
|
+
|
|
180
|
+
### Writing Good Acceptance Criteria
|
|
181
|
+
|
|
182
|
+
Use Given/When/Then for behavioral criteria. Use plain checkboxes for structural criteria.
|
|
183
|
+
|
|
184
|
+
**Behavioral:**
|
|
185
|
+
- [ ] Given a user with valid OAuth code, when POST /auth/callback, then returns 200 with session token
|
|
186
|
+
|
|
187
|
+
**Structural:**
|
|
188
|
+
- [ ] Unit test covers happy path + error case
|
|
189
|
+
- [ ] No new `any` types introduced
|
|
190
|
+
- [ ] Public API documented in JSDoc
|
|
191
|
+
|
|
192
|
+
### Writing Good Code Locations
|
|
193
|
+
|
|
194
|
+
Always include:
|
|
195
|
+
1. **File path** — repo-root relative
|
|
196
|
+
2. **Anchor** — function name, class name, route, or config key
|
|
197
|
+
3. **Context** — what the agent should look at there
|
|
198
|
+
|
|
199
|
+
```
|
|
200
|
+
- Handler: `packages/core/src/auth/callback.ts` — `handleOAuthCallback()`
|
|
201
|
+
- Token logic: `packages/core/src/auth/session.ts` — `createSession()`
|
|
202
|
+
- Test: `packages/core/src/__tests__/auth.test.ts` — "OAuth callback" describe block
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
### Constraints That Prevent Agent Overreach
|
|
206
|
+
|
|
207
|
+
Be explicit about boundaries. Agents optimize globally unless told not to.
|
|
208
|
+
|
|
209
|
+
```
|
|
210
|
+
## Constraints
|
|
211
|
+
- Do NOT modify the public API surface of `@soleri/core`
|
|
212
|
+
- Do NOT add new npm dependencies
|
|
213
|
+
- Do NOT refactor surrounding code — fix only the bug
|
|
214
|
+
- Backward compatible: existing agent.yaml files must still work
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
## Workflow
|
|
218
|
+
|
|
219
|
+
1. **Gather context** — search vault, read error logs, check git blame
|
|
220
|
+
2. **Identify code locations** — grep codebase for relevant symbols
|
|
221
|
+
3. **Choose template** — bug, feature, or milestone
|
|
222
|
+
4. **Fill template** — every field. Skip none.
|
|
223
|
+
5. **Create issue** — `gh issue create --title "..." --body "..." --label "..."`
|
|
224
|
+
|
|
225
|
+
## Integration with Planning
|
|
226
|
+
|
|
227
|
+
When creating issues from a plan, the plan is the source of truth — GitHub issues are the projection. Each task becomes a lean issue pointing back to the plan.
|
|
228
|
+
|
|
229
|
+
### Plan-Sourced Task Template
|
|
230
|
+
|
|
231
|
+
```markdown
|
|
232
|
+
# Objective
|
|
233
|
+
<one sentence: what this task delivers>
|
|
234
|
+
|
|
235
|
+
## Plan: `<plan-id>` | Task <N> of <total>
|
|
236
|
+
## Parent: #<epic-issue-number>
|
|
237
|
+
## Complexity: Low | Medium | High
|
|
238
|
+
## Depends on: <task dependencies or "nothing">
|
|
239
|
+
|
|
240
|
+
## Code Locations
|
|
241
|
+
- `path/to/file.ts` — `symbolOrFunction`
|
|
242
|
+
|
|
243
|
+
## Acceptance Criteria
|
|
244
|
+
- [ ] <testable outcome>
|
|
245
|
+
- [ ] <testable outcome>
|
|
246
|
+
- [ ] Tests pass
|
|
247
|
+
|
|
248
|
+
## Verification
|
|
249
|
+
```bash
|
|
250
|
+
<exact command>
|
|
251
|
+
```
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
### Rules for Plan-Sourced Issues
|
|
255
|
+
|
|
256
|
+
1. **Plan ID is mandatory** — every task issue must include `## Plan: \`<plan-id>\`` so the full plan is one API call away
|
|
257
|
+
2. **Keep issues lean** — task description + code locations + acceptance criteria
|
|
258
|
+
3. **One issue per task** — don't bundle multiple plan tasks into one issue
|
|
259
|
+
4. **Parent/epic issue** — create a parent issue that lists all task issues
|
|
260
|
+
5. **Map complexity to priority** — High → P1, Medium → P2, Low → P3
|
|
261
|
+
6. **Include task number** — "Task 3 of 11" helps track progress
|
|
262
|
+
|
|
263
|
+
## Labels
|
|
264
|
+
|
|
265
|
+
Always apply at least:
|
|
266
|
+
- Type: `bug`, `feature`, `refactor`, `chore`
|
|
267
|
+
- Priority: `P0`, `P1`, `P2`, `P3` (if using priority labels)
|
|
268
|
+
- Component: package or module name (if using component labels)
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: agent-persona
|
|
3
|
+
description: >
|
|
4
|
+
Use when the user activates the agent's persona via its greeting phrase, or says
|
|
5
|
+
"activate persona", "be yourself", "stay in character", or any activation phrase
|
|
6
|
+
defined in the agent's persona configuration. Reinforces character persistence
|
|
7
|
+
through the session and survives context compaction.
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Agent Persona — Stay in Character
|
|
11
|
+
|
|
12
|
+
This skill reinforces persona persistence. The MCP activation loads the runtime payload — this skill ensures the character sticks across the full session, including after context compaction.
|
|
13
|
+
|
|
14
|
+
## How It Works
|
|
15
|
+
|
|
16
|
+
Every agent has a persona defined in `agent.yaml`. The persona contains:
|
|
17
|
+
|
|
18
|
+
- **name** — the agent's display name
|
|
19
|
+
- **role** — what the agent does
|
|
20
|
+
- **tone** — `precise`, `mentor`, or `pragmatic`
|
|
21
|
+
- **greeting** — the activation response
|
|
22
|
+
- **principles** — core values that guide behavior
|
|
23
|
+
|
|
24
|
+
## Activation
|
|
25
|
+
|
|
26
|
+
When the user triggers activation (greeting phrase or explicit request):
|
|
27
|
+
|
|
28
|
+
```
|
|
29
|
+
YOUR_AGENT_core op:activate
|
|
30
|
+
params: { projectPath: "." }
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
The activation response contains the full persona payload. Adopt it immediately.
|
|
34
|
+
|
|
35
|
+
## Rules
|
|
36
|
+
|
|
37
|
+
1. **Stay in character for EVERY response** until the user explicitly deactivates
|
|
38
|
+
2. **Technical accuracy is the priority** — persona is the wrapper, not a replacement for correctness
|
|
39
|
+
3. **Tone consistency** — match the configured tone (`precise` = concise and exact, `mentor` = educational and encouraging, `pragmatic` = direct and practical)
|
|
40
|
+
4. If character drifts after context compaction, the persona information in the compacted summary should restore it — follow it
|
|
41
|
+
|
|
42
|
+
## Context Compaction Survival
|
|
43
|
+
|
|
44
|
+
Long sessions trigger context compaction. To survive:
|
|
45
|
+
|
|
46
|
+
- The persona activation state is included in compaction summaries
|
|
47
|
+
- After compaction, check if persona was active and re-adopt the character
|
|
48
|
+
- Never break character just because the conversation was compacted
|
|
49
|
+
|
|
50
|
+
## Deactivation
|
|
51
|
+
|
|
52
|
+
When the user says "deactivate", "stop persona", "be normal", or uses the agent's deactivation phrase:
|
|
53
|
+
|
|
54
|
+
```
|
|
55
|
+
YOUR_AGENT_core op:activate
|
|
56
|
+
params: { deactivate: true }
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Return to neutral assistant mode.
|
|
60
|
+
|
|
61
|
+
## Anti-Patterns
|
|
62
|
+
|
|
63
|
+
- **Dropping character mid-session** — if activated, stay activated
|
|
64
|
+
- **Over-persona, under-substance** — character adds flavor, not replaces technical depth
|
|
65
|
+
- **Forcing persona on unwilling users** — only activate when explicitly triggered
|
|
66
|
+
- **Ignoring tone setting** — a `precise` agent should not use flowery language; a `mentor` agent should not be terse
|
|
@@ -188,6 +188,18 @@ Only capture if genuinely reusable — not every review finding is vault-worthy.
|
|
|
188
188
|
- Skipping git history (temporal smells are the most actionable)
|
|
189
189
|
- Treating all smells as equal severity (prioritize by impact)
|
|
190
190
|
|
|
191
|
+
## Rationalization Prevention
|
|
192
|
+
|
|
193
|
+
Do NOT rationalize away findings. If a smell or issue is detected, report it honestly.
|
|
194
|
+
|
|
195
|
+
- **HARD-GATE: All three passes must complete before presenting the report. Do not skip a pass.**
|
|
196
|
+
- **HARD-GATE: Critical (red) findings must be flagged -- never downgrade severity to avoid difficult conversations.**
|
|
197
|
+
- Do not say "this is probably fine" to dismiss a code smell you detected.
|
|
198
|
+
- Do not omit findings because "the code works" -- working code can still be poorly architected.
|
|
199
|
+
- Do not soften severity because the code is recent or written by the user.
|
|
200
|
+
- If git history shows high churn, report it. Do not skip temporal smells for convenience.
|
|
201
|
+
- Present the full picture. A review that hides problems is worse than no review.
|
|
202
|
+
|
|
191
203
|
## Quick Reference
|
|
192
204
|
|
|
193
205
|
| Pass | Focus | Key Activities |
|