@soleri/forge 5.14.9 → 7.0.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.
Files changed (66) hide show
  1. package/dist/agent-schema.d.ts +323 -0
  2. package/dist/agent-schema.js +151 -0
  3. package/dist/agent-schema.js.map +1 -0
  4. package/dist/compose-claude-md.d.ts +24 -0
  5. package/dist/compose-claude-md.js +197 -0
  6. package/dist/compose-claude-md.js.map +1 -0
  7. package/dist/index.js +0 -0
  8. package/dist/lib.d.ts +12 -1
  9. package/dist/lib.js +10 -1
  10. package/dist/lib.js.map +1 -1
  11. package/dist/scaffold-filetree.d.ts +22 -0
  12. package/dist/scaffold-filetree.js +349 -0
  13. package/dist/scaffold-filetree.js.map +1 -0
  14. package/dist/scaffolder.js +261 -11
  15. package/dist/scaffolder.js.map +1 -1
  16. package/dist/templates/activate.d.ts +5 -2
  17. package/dist/templates/activate.js +136 -35
  18. package/dist/templates/activate.js.map +1 -1
  19. package/dist/templates/agents-md.d.ts +10 -1
  20. package/dist/templates/agents-md.js +76 -16
  21. package/dist/templates/agents-md.js.map +1 -1
  22. package/dist/templates/claude-md-template.js +25 -4
  23. package/dist/templates/claude-md-template.js.map +1 -1
  24. package/dist/templates/entry-point.js +84 -7
  25. package/dist/templates/entry-point.js.map +1 -1
  26. package/dist/templates/inject-claude-md.js +53 -0
  27. package/dist/templates/inject-claude-md.js.map +1 -1
  28. package/dist/templates/package-json.js +4 -1
  29. package/dist/templates/package-json.js.map +1 -1
  30. package/dist/templates/readme.js +4 -3
  31. package/dist/templates/readme.js.map +1 -1
  32. package/dist/templates/setup-script.js +109 -3
  33. package/dist/templates/setup-script.js.map +1 -1
  34. package/dist/templates/shared-rules.js +54 -17
  35. package/dist/templates/shared-rules.js.map +1 -1
  36. package/dist/templates/test-facades.js +151 -6
  37. package/dist/templates/test-facades.js.map +1 -1
  38. package/dist/types.d.ts +75 -10
  39. package/dist/types.js +40 -2
  40. package/dist/types.js.map +1 -1
  41. package/dist/utils/detect-domain-packs.d.ts +25 -0
  42. package/dist/utils/detect-domain-packs.js +104 -0
  43. package/dist/utils/detect-domain-packs.js.map +1 -0
  44. package/package.json +2 -1
  45. package/src/__tests__/detect-domain-packs.test.ts +178 -0
  46. package/src/__tests__/scaffold-filetree.test.ts +243 -0
  47. package/src/__tests__/scaffolder.test.ts +5 -3
  48. package/src/agent-schema.ts +184 -0
  49. package/src/compose-claude-md.ts +252 -0
  50. package/src/lib.ts +14 -1
  51. package/src/scaffold-filetree.ts +409 -0
  52. package/src/scaffolder.ts +299 -15
  53. package/src/templates/activate.ts +137 -39
  54. package/src/templates/agents-md.ts +78 -16
  55. package/src/templates/claude-md-template.ts +29 -4
  56. package/src/templates/entry-point.ts +91 -7
  57. package/src/templates/inject-claude-md.ts +53 -0
  58. package/src/templates/package-json.ts +4 -1
  59. package/src/templates/readme.ts +4 -3
  60. package/src/templates/setup-script.ts +110 -4
  61. package/src/templates/shared-rules.ts +55 -17
  62. package/src/templates/test-facades.ts +156 -6
  63. package/src/types.ts +45 -2
  64. package/src/utils/detect-domain-packs.ts +129 -0
  65. package/tsconfig.json +0 -1
  66. package/vitest.config.ts +1 -2
@@ -1,21 +1,14 @@
1
1
  /**
2
2
  * Generates src/activation/activate.ts for a new agent.
3
- * Provides the activate/deactivate system that returns full context
4
- * to Claudepersona, guidelines, tool recommendations, setup status.
3
+ *
4
+ * Activation is ADAPTIVE it discovers current capabilities at runtime
5
+ * (vault domains, installed packs, identity changes) rather than returning
6
+ * a frozen snapshot from scaffold time. PERSONA is the birth config;
7
+ * the activation response reflects what the agent has become.
5
8
  *
6
9
  * Uses array-joined pattern because generated code contains template literals.
7
10
  */
8
11
  export function generateActivate(config) {
9
- const toolPrefix = config.id; // keep hyphens — matches MCP tool registration
10
- const _marker = `${config.id}:mode`;
11
- // Build tool recommendations from config domains
12
- const toolRecLines = [];
13
- for (const d of config.domains) {
14
- const toolName = `${toolPrefix}_${d.replace(/-/g, '_')}`;
15
- toolRecLines.push(` { intent: 'search ${d}', facade: '${toolName}', op: 'search' },`);
16
- toolRecLines.push(` { intent: '${d} patterns', facade: '${toolName}', op: 'get_patterns' },`);
17
- toolRecLines.push(` { intent: 'capture ${d}', facade: '${toolName}', op: 'capture' },`);
18
- }
19
12
  // Build behavioral guidelines from config principles
20
13
  const guidelineLines = config.principles
21
14
  .map((p) => {
@@ -23,23 +16,33 @@ export function generateActivate(config) {
23
16
  return ` '${escaped}',`;
24
17
  })
25
18
  .join('\n');
19
+ // Static domain list (from scaffold time) — used as baseline
20
+ const configDomains = JSON.stringify(config.domains);
26
21
  return [
27
22
  "import { join } from 'node:path';",
23
+ "import { existsSync, readFileSync } from 'node:fs';",
28
24
  "import { homedir } from 'node:os';",
29
25
  "import { PERSONA } from '../identity/persona.js';",
30
26
  "import { hasAgentMarker, removeClaudeMdGlobal } from './inject-claude-md.js';",
31
- "import type { Vault, Planner, Plan } from '@soleri/core';",
27
+ "import type { AgentRuntime } from '@soleri/core';",
32
28
  '',
33
29
  'export interface ActivationResult {',
34
30
  ' activated: boolean;',
35
- ' persona: {',
31
+ ' origin: {',
36
32
  ' name: string;',
37
33
  ' role: string;',
38
34
  ' description: string;',
35
+ ' };',
36
+ ' current: {',
37
+ ' role: string;',
39
38
  ' greeting: string;',
39
+ ' domains: string[];',
40
+ ' capabilities: Array<{ domain: string; entries: number }>;',
41
+ ' installed_packs: Array<{ id: string; type: string }>;',
42
+ ' what_you_can_do: string[];',
43
+ ' growth_suggestions: string[];',
40
44
  ' };',
41
45
  ' guidelines: string[];',
42
- ' tool_recommendations: Array<{ intent: string; facade: string; op: string }>;',
43
46
  ' session_instruction: string;',
44
47
  ' setup_status: {',
45
48
  ' claude_md_injected: boolean;',
@@ -60,20 +63,115 @@ export function generateActivate(config) {
60
63
  '}',
61
64
  '',
62
65
  '/**',
63
- ` * Activate ${config.name} — returns full context for Claude to adopt the persona.`,
66
+ ` * Activate ${config.name} — discovers current capabilities and returns adaptive context.`,
67
+ ' *',
68
+ ' * PERSONA is the birth config. The activation response reflects what the agent',
69
+ ' * has become through installed packs, captured knowledge, and identity updates.',
64
70
  ' */',
65
- 'export function activateAgent(vault: Vault, projectPath: string, planner?: Planner): ActivationResult {',
66
- ' // Check CLAUDE.md injection status (project-level and global)',
71
+ 'export function activateAgent(runtime: AgentRuntime, projectPath: string): ActivationResult {',
72
+ ' const { vault, planner, identityManager } = runtime;',
73
+ '',
74
+ ' // ─── Setup status ──────────────────────────────────────────',
67
75
  " const projectClaudeMd = join(projectPath, 'CLAUDE.md');",
68
76
  " const globalClaudeMd = join(homedir(), '.claude', 'CLAUDE.md');",
69
77
  ' const claudeMdInjected = hasAgentMarker(projectClaudeMd);',
70
78
  ' const globalClaudeMdInjected = hasAgentMarker(globalClaudeMd);',
71
79
  '',
72
- ' // Check vault status',
80
+ ' // ─── Vault stats — what the agent actually knows ──────────',
73
81
  ' const stats = vault.stats();',
74
82
  ' const vaultHasEntries = stats.totalEntries > 0;',
75
83
  '',
76
- " // Build next steps based on what's missing",
84
+ ' // ─── Discover domains ─────────────────────────────────────',
85
+ ` const configuredDomains: string[] = ${configDomains};`,
86
+ ' const vaultDomains = Object.keys(stats.byDomain);',
87
+ '',
88
+ ' // Merge configured + vault-discovered domains (dedup)',
89
+ ' const allDomains = [...new Set([...configuredDomains, ...vaultDomains])];',
90
+ '',
91
+ ' // Build capability map — entries per domain',
92
+ ' const capabilities = allDomains.map((d) => ({',
93
+ ' domain: d,',
94
+ ' entries: stats.byDomain[d] ?? 0,',
95
+ ' }));',
96
+ '',
97
+ ' // ─── Discover installed packs ─────────────────────────────',
98
+ ' const installedPacks: Array<{ id: string; type: string }> = [];',
99
+ ' try {',
100
+ " const lockPath = join(projectPath, 'soleri.lock');",
101
+ ' if (existsSync(lockPath)) {',
102
+ " const lockData = JSON.parse(readFileSync(lockPath, 'utf-8'));",
103
+ ' if (lockData.packs) {',
104
+ ' for (const [id, entry] of Object.entries(lockData.packs)) {',
105
+ ' installedPacks.push({ id, type: (entry as Record<string, string>).type ?? "unknown" });',
106
+ ' }',
107
+ ' }',
108
+ ' }',
109
+ ' } catch {',
110
+ ' // Lock file missing or corrupt — proceed without pack info',
111
+ ' }',
112
+ '',
113
+ ' // ─── Dynamic role — based on what the agent actually covers ─',
114
+ " const currentIdentity = identityManager.getIdentity('" + config.id + "');",
115
+ ' const newDomains = allDomains.filter((d) => !configuredDomains.includes(d));',
116
+ ' let currentRole = currentIdentity?.role ?? PERSONA.role;',
117
+ '',
118
+ ' // If the agent has grown beyond its birth domains, reflect that',
119
+ ' if (newDomains.length > 0) {',
120
+ ' const formatted = newDomains.map((d) => d.replace(/-/g, " ")).join(", ");',
121
+ ' currentRole = `${PERSONA.role} (also covering ${formatted})`;',
122
+ ' }',
123
+ '',
124
+ ' // ─── Dynamic greeting ─────────────────────────────────────',
125
+ " let greeting = `Hello! I'm ${PERSONA.name}.`;",
126
+ ' if (allDomains.length > configuredDomains.length) {',
127
+ " greeting += ` I started as a ${PERSONA.role} and have expanded to also cover ${newDomains.map((d) => d.replace(/-/g, ' ')).join(', ')}.`;",
128
+ ' } else {',
129
+ ' greeting += ` ${PERSONA.role} ready to help.`;',
130
+ ' }',
131
+ ' if (stats.totalEntries > 0) {',
132
+ ' const domainSummary = capabilities',
133
+ ' .filter((c) => c.entries > 0)',
134
+ ' .map((c) => `${c.entries} ${c.domain.replace(/-/g, " ")}`)',
135
+ ' .join(", ");',
136
+ ' greeting += ` Vault: ${stats.totalEntries} entries (${domainSummary}).`;',
137
+ ' }',
138
+ '',
139
+ ' // ─── Capability self-awareness ────────────────────────────',
140
+ ' const whatYouCanDo: string[] = [',
141
+ ' "Search and traverse a connected knowledge graph (vault) before every decision",',
142
+ ' "Create structured plans with approval gates and drift reconciliation",',
143
+ ' "Learn from sessions — brain tracks pattern strengths and recommends approaches",',
144
+ ' "Remember across conversations and projects (cross-project memory)",',
145
+ ' "Capture knowledge as typed entries with Zettelkasten links",',
146
+ ' "Run iterative validation loops until quality targets are met",',
147
+ ' "Orchestrate multi-step workflows: plan → execute → capture",',
148
+ ' ];',
149
+ '',
150
+ ' // Add domain-specific capabilities',
151
+ ' for (const cap of capabilities) {',
152
+ ' if (cap.entries > 0) {',
153
+ ' whatYouCanDo.push(`${cap.domain.replace(/-/g, " ")}: ${cap.entries} patterns and knowledge entries`);',
154
+ ' }',
155
+ ' }',
156
+ '',
157
+ ' // Add pack-specific capabilities',
158
+ ' for (const pack of installedPacks) {',
159
+ ' whatYouCanDo.push(`Pack "${pack.id}" (${pack.type}) installed — provides domain-specific intelligence`);',
160
+ ' }',
161
+ '',
162
+ ' const growthSuggestions: string[] = [];',
163
+ ' if (stats.totalEntries < 10) {',
164
+ ' growthSuggestions.push("Vault has few entries — start capturing patterns to build your knowledge base");',
165
+ ' }',
166
+ ' if (installedPacks.length === 0) {',
167
+ ' growthSuggestions.push("No packs installed — try: soleri pack install <name> to add domain intelligence");',
168
+ ' growthSuggestions.push("Available starter packs: soleri pack available");',
169
+ ' }',
170
+ ' if (allDomains.length <= 1) {',
171
+ ' growthSuggestions.push("Only one domain configured — add more with: soleri add-domain <name>");',
172
+ ' }',
173
+ '',
174
+ ' // ─── Next steps ───────────────────────────────────────────',
77
175
  ' const nextSteps: string[] = [];',
78
176
  ' if (!globalClaudeMdInjected && !claudeMdInjected) {',
79
177
  ` nextSteps.push('No CLAUDE.md configured — run inject_claude_md with global: true for all projects, or without for this project only');`,
@@ -81,10 +179,7 @@ export function generateActivate(config) {
81
179
  ` nextSteps.push('Global CLAUDE.md not configured — run inject_claude_md with global: true to enable activation in all projects');`,
82
180
  ' }',
83
181
  ' if (!vaultHasEntries) {',
84
- " nextSteps.push('Vault is empty — start capturing knowledge with the domain capture ops');",
85
- ' }',
86
- ' if (nextSteps.length === 0) {',
87
- ` nextSteps.push('All set! ${config.name} is fully integrated.');`,
182
+ " nextSteps.push('Vault is empty — start capturing knowledge with the domain capture ops, or install a knowledge pack with soleri pack install');",
88
183
  ' }',
89
184
  '',
90
185
  ' // Check for executing plans',
@@ -98,25 +193,32 @@ export function generateActivate(config) {
98
193
  ' nextSteps.unshift(`${executingPlans.length} plan(s) in progress — use get_plan to review`);',
99
194
  ' }',
100
195
  '',
196
+ ' if (nextSteps.length === 0) {',
197
+ ` nextSteps.push('All set! ${config.name} is ready.');`,
198
+ ' }',
199
+ '',
101
200
  ' return {',
102
201
  ' activated: true,',
103
- ' persona: {',
202
+ ' origin: {',
104
203
  ' name: PERSONA.name,',
105
204
  ' role: PERSONA.role,',
106
205
  ' description: PERSONA.description,',
107
- ' greeting: PERSONA.greeting,',
206
+ ' },',
207
+ ' current: {',
208
+ ' role: currentRole,',
209
+ ' greeting,',
210
+ ' domains: allDomains,',
211
+ ' capabilities,',
212
+ ' installed_packs: installedPacks,',
213
+ ' what_you_can_do: whatYouCanDo,',
214
+ ' growth_suggestions: growthSuggestions,',
108
215
  ' },',
109
216
  ' guidelines: [',
110
217
  guidelineLines,
111
218
  ' ],',
112
- ' tool_recommendations: [',
113
- ` { intent: 'health check', facade: '${toolPrefix}_core', op: 'health' },`,
114
- ` { intent: 'search all', facade: '${toolPrefix}_core', op: 'search' },`,
115
- ` { intent: 'vault stats', facade: '${toolPrefix}_core', op: 'vault_stats' },`,
116
- ...toolRecLines,
117
- ' ],',
118
- ` session_instruction: 'You are now ' + PERSONA.name + ', a ' + PERSONA.role + '. Stay in character for the ENTIRE session. ' +`,
119
- ` 'Reference patterns from the knowledge vault. Provide concrete examples. Flag anti-patterns with severity.',`,
219
+ " session_instruction: `You are ${PERSONA.name}. Your origin role is ${PERSONA.role}, but you have grown — your current capabilities span: ${allDomains.join(', ')}. ` +",
220
+ " 'Adapt your expertise to match your actual knowledge. ' +",
221
+ " 'Reference patterns from the knowledge vault. Provide concrete examples. Flag anti-patterns with severity.',",
120
222
  ' setup_status: {',
121
223
  ' claude_md_injected: claudeMdInjected,',
122
224
  ' global_claude_md_injected: globalClaudeMdInjected,',
@@ -132,7 +234,6 @@ export function generateActivate(config) {
132
234
  ` * Deactivate ${config.name} — drops persona and cleans up CLAUDE.md sections.`,
133
235
  ' */',
134
236
  'export function deactivateAgent(): DeactivationResult {',
135
- ' // Remove agent sections from global CLAUDE.md on deactivation',
136
237
  ' const globalResult = removeClaudeMdGlobal();',
137
238
  ' return {',
138
239
  ' deactivated: true,',
@@ -1 +1 @@
1
- {"version":3,"file":"activate.js","sourceRoot":"","sources":["../../src/templates/activate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"activate.js","sourceRoot":"","sources":["../../src/templates/activate.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,14 @@
1
1
  import type { AgentConfig } from '../types.js';
2
2
  /**
3
- * Generate AGENTS.md content for Codex sessions.
3
+ * Generate AGENTS.md content for OpenCode (primary host).
4
+ *
5
+ * This is the full instruction file — equivalent to what CLAUDE.md gets
6
+ * via claude-md-template.ts + shared-rules.ts. OpenCode reads AGENTS.md
7
+ * as its primary instruction file, so it must contain:
8
+ * 1. Persistent identity (always-on, no activation needed)
9
+ * 2. Full facade table (all 13+ semantic facades + domains)
10
+ * 3. Engine rules (vault-first, planning, output formatting, etc.)
11
+ * 4. Session start protocol
12
+ * 5. Skills reference
4
13
  */
5
14
  export declare function generateAgentsMd(config: AgentConfig): string;
@@ -1,33 +1,93 @@
1
+ import { getEngineRulesContent } from './shared-rules.js';
1
2
  /**
2
- * Generate AGENTS.md content for Codex sessions.
3
+ * Generate AGENTS.md content for OpenCode (primary host).
4
+ *
5
+ * This is the full instruction file — equivalent to what CLAUDE.md gets
6
+ * via claude-md-template.ts + shared-rules.ts. OpenCode reads AGENTS.md
7
+ * as its primary instruction file, so it must contain:
8
+ * 1. Persistent identity (always-on, no activation needed)
9
+ * 2. Full facade table (all 13+ semantic facades + domains)
10
+ * 3. Engine rules (vault-first, planning, output formatting, etc.)
11
+ * 4. Session start protocol
12
+ * 5. Skills reference
3
13
  */
4
14
  export function generateAgentsMd(config) {
15
+ const bt = '`';
16
+ const tp = config.id; // tool prefix
5
17
  const principles = config.principles.map((p) => `- ${p}`).join('\n');
6
18
  const domains = config.domains.map((d) => `- ${d}`).join('\n');
7
- return `# AGENTS.md instructions for this project
19
+ // ─── Domain facade rows ───────────────────────────────────
20
+ const domainRows = config.domains
21
+ .map((d) => {
22
+ const toolName = `${tp}_${d.replace(/-/g, '_')}`;
23
+ return `| ${bt}${toolName}${bt} | ${bt}get_patterns${bt}, ${bt}search${bt}, ${bt}capture${bt} |`;
24
+ })
25
+ .join('\n');
26
+ // ─── Engine rules (strip markers — AGENTS.md embeds them inline) ───
27
+ const engineRules = getEngineRulesContent()
28
+ .replace(/<!-- soleri:engine-rules -->\n?/, '')
29
+ .replace(/<!-- \/soleri:engine-rules -->\n?/, '')
30
+ .trim();
31
+ return `# ${config.name}
8
32
 
9
- ## Agent Identity
10
- - Name: ${config.name}
11
- - Role: ${config.role}
12
- - Agent MCP prefix: \`${config.id}\`
33
+ ## Identity
13
34
 
14
- ## Activation
15
- - Say "Hello, ${config.name}!" to activate persona behavior via \`${config.id}_core\`.
16
- - Say "Goodbye, ${config.name}!" to deactivate.
35
+ You ARE **${config.name}**. ${config.role}.
17
36
 
18
- ## Domains
37
+ ${config.description}
38
+
39
+ This identity is permanent — not activated by greeting, not deactivated by farewell.
40
+ Adopt this persona for every message. Your MCP tool prefix is ${bt}${tp}${bt}.
41
+
42
+ **Tone:** ${config.tone ?? 'pragmatic'}
43
+
44
+ **Domains:**
19
45
  ${domains}
20
46
 
21
- ## Principles
47
+ **Principles:**
22
48
  ${principles}
23
49
 
50
+ ## Adaptive Identity
51
+
52
+ ${config.name} is not a fixed-role agent. The role above is a starting point — the agent evolves as knowledge is added.
53
+
54
+ When the user asks about your capabilities or you need to check what you've learned, use ${bt}${tp}_core op:activate${bt} to discover evolved capabilities.
55
+
56
+ ## Session Start
57
+
58
+ Do NOT call any tools automatically on session start. Just greet the user in character.
59
+ Only call ${bt}${tp}_orchestrate op:register${bt} or ${bt}${tp}_core op:activate${bt} when you actually need project context or capability discovery — not on every message.
60
+
61
+ ## Essential Tools
62
+
63
+ | Facade | Key Ops |
64
+ |--------|---------|
65
+ | ${bt}${tp}_core${bt} | ${bt}health${bt}, ${bt}search${bt}, ${bt}identity${bt}, ${bt}register${bt}, ${bt}activate${bt} |
66
+ ${domainRows}
67
+ | ${bt}${tp}_vault${bt} | ${bt}search_intelligent${bt}, ${bt}capture_knowledge${bt}, ${bt}capture_quick${bt}, ${bt}search_feedback${bt} |
68
+ | ${bt}${tp}_vault${bt} (keeper) | ${bt}knowledge_audit${bt}, ${bt}knowledge_health${bt}, ${bt}knowledge_merge${bt}, ${bt}knowledge_reorganize${bt} |
69
+ | ${bt}${tp}_vault${bt} (mgmt) | ${bt}vault_get${bt}, ${bt}vault_update${bt}, ${bt}vault_remove${bt}, ${bt}vault_tags${bt}, ${bt}vault_domains${bt}, ${bt}vault_recent${bt} |
70
+ | ${bt}${tp}_curator${bt} | ${bt}curator_status${bt}, ${bt}curator_detect_duplicates${bt}, ${bt}curator_contradictions${bt}, ${bt}curator_groom_all${bt}, ${bt}curator_consolidate${bt}, ${bt}curator_health_audit${bt} |
71
+ | ${bt}${tp}_curator${bt} (advanced) | ${bt}curator_enrich${bt}, ${bt}curator_hybrid_contradictions${bt}, ${bt}curator_entry_history${bt}, ${bt}curator_queue_stats${bt} |
72
+ | ${bt}${tp}_plan${bt} | ${bt}create_plan${bt}, ${bt}approve_plan${bt}, ${bt}plan_split${bt}, ${bt}plan_reconcile${bt}, ${bt}plan_complete_lifecycle${bt} |
73
+ | ${bt}${tp}_orchestrate${bt} | ${bt}orchestrate_plan${bt}, ${bt}orchestrate_execute${bt}, ${bt}orchestrate_complete${bt} |
74
+ | ${bt}${tp}_brain${bt} | ${bt}brain_stats${bt}, ${bt}brain_feedback${bt}, ${bt}rebuild_vocabulary${bt}, ${bt}brain_strengths${bt}, ${bt}brain_recommend${bt} |
75
+ | ${bt}${tp}_memory${bt} | ${bt}memory_search${bt}, ${bt}memory_capture${bt}, ${bt}session_capture${bt} |
76
+ | ${bt}${tp}_control${bt} | ${bt}route_intent${bt}, ${bt}morph${bt}, ${bt}get_behavior_rules${bt}, ${bt}governance_dashboard${bt}, ${bt}governance_policy${bt} |
77
+ | ${bt}${tp}_loop${bt} | ${bt}loop_start${bt}, ${bt}loop_iterate${bt}, ${bt}loop_status${bt}, ${bt}loop_cancel${bt} |
78
+ | ${bt}${tp}_cognee${bt} | ${bt}cognee_search${bt}, ${bt}cognee_graph_stats${bt}, ${bt}cognee_export_status${bt} |
79
+ | ${bt}${tp}_context${bt} | ${bt}context_extract_entities${bt}, ${bt}context_retrieve_knowledge${bt}, ${bt}context_analyze${bt} |
80
+ | ${bt}${tp}_agency${bt} | ${bt}agency_enable${bt}, ${bt}agency_status${bt}, ${bt}agency_surface_patterns${bt}, ${bt}agency_warnings${bt}, ${bt}agency_clarify${bt} |
81
+ | ${bt}${tp}_admin${bt} | ${bt}admin_health${bt}, ${bt}admin_tool_list${bt}, ${bt}admin_diagnostic${bt} |
82
+
83
+ > Full list: ${bt}${tp}_admin op:admin_tool_list${bt}
84
+
24
85
  ## Skills
25
- - Local skills live in \`skills/<skill>/SKILL.md\`.
26
- - If a user explicitly names a skill, open that \`SKILL.md\` and follow it for that turn.
27
86
 
28
- ## Setup Notes
29
- - This repository was scaffolded with Codex support.
30
- - Session model/reasoning is selected at session start and does not auto-switch per prompt.
87
+ - Local skills live in ${bt}skills/<skill>/SKILL.md${bt}.
88
+ - If a user explicitly names a skill, open that ${bt}SKILL.md${bt} and follow it for that turn.
89
+
90
+ ${engineRules}
31
91
  `;
32
92
  }
33
93
  //# sourceMappingURL=agents-md.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"agents-md.js","sourceRoot":"","sources":["../../src/templates/agents-md.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAmB;IAClD,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrE,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE/D,OAAO;;;UAGC,MAAM,CAAC,IAAI;UACX,MAAM,CAAC,IAAI;wBACG,MAAM,CAAC,EAAE;;;gBAGjB,MAAM,CAAC,IAAI,yCAAyC,MAAM,CAAC,EAAE;kBAC3D,MAAM,CAAC,IAAI;;;EAG3B,OAAO;;;EAGP,UAAU;;;;;;;;;CASX,CAAC;AACF,CAAC"}
1
+ {"version":3,"file":"agents-md.js","sourceRoot":"","sources":["../../src/templates/agents-md.ts"],"names":[],"mappings":"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"}
@@ -25,27 +25,41 @@ export function generateClaudeMdTemplate(config) {
25
25
  // ─── Identity ──────────────────────────────────────────
26
26
  `## ${config.name}`,
27
27
  '',
28
- `**Role:** ${config.role}`,
29
- `**Domains:** ${config.domains.join(', ')}`,
28
+ `**Origin role:** ${config.role}`,
29
+ `**Initial domains:** ${config.domains.join(', ')}`,
30
30
  `**Tone:** ${config.tone ?? 'pragmatic'}`,
31
+ ...(config.sharedVaultPath ? [`**Shared vault:** \`${config.sharedVaultPath}\``] : []),
31
32
  '',
32
33
  config.description,
33
34
  '',
34
35
  '**Principles:**',
35
36
  ...config.principles.map((p) => `- ${p}`),
36
37
  '',
38
+ // ─── Adaptive Identity ──────────────────────────────────
39
+ '## Adaptive Identity',
40
+ '',
41
+ `${config.name} is not a fixed-role agent. The origin role above is a starting point — the agent evolves as knowledge is added.`,
42
+ '',
43
+ '**On activation**, the agent discovers its current capabilities by checking:',
44
+ '- Vault domains (what knowledge actually exists)',
45
+ '- Installed packs (what was added after creation)',
46
+ '- Identity updates (any role changes via `op:update_identity`)',
47
+ '',
48
+ '**Use the `current` field** from the activation response — not `origin` — to determine how to present yourself.',
49
+ 'If you have grown beyond your origin role, say so. Your greeting and expertise should reflect what you actually know.',
50
+ '',
37
51
  // ─── Activation ────────────────────────────────────────
38
52
  '## Activation',
39
53
  '',
40
54
  `**Activate:** "Hello, ${config.name}!" → ${bt}${toolPrefix}_core op:activate params:{ projectPath: "." }${bt}`,
41
55
  `**Deactivate:** "Goodbye, ${config.name}!" → ${bt}${toolPrefix}_core op:activate params:{ deactivate: true }${bt}`,
42
56
  '',
43
- 'On activation, adopt the returned persona. Stay in character until deactivated.',
57
+ 'On activation, read the `current` field to discover your evolved role, then adopt that persona for the session.',
44
58
  '',
45
59
  // ─── Session Start ─────────────────────────────────────
46
60
  '## Session Start',
47
61
  '',
48
- `On every new session: ${bt}${toolPrefix}_core op:register params:{ projectPath: "." }${bt}`,
62
+ `On every new session: ${bt}${toolPrefix}_orchestrate op:register params:{ projectPath: "." }${bt}`,
49
63
  '',
50
64
  ];
51
65
  // ─── Compact Facade Table ───────────────────────────────
@@ -55,6 +69,13 @@ export function generateClaudeMdTemplate(config) {
55
69
  const toolName = `${toolPrefix}_${d.replace(/-/g, '_')}`;
56
70
  mdLines.push(`| ${bt}${toolName}${bt} | ${bt}get_patterns${bt}, ${bt}search${bt}, ${bt}capture${bt} |`);
57
71
  }
72
+ // Domain pack facades (if any)
73
+ if (config.domainPacks?.length) {
74
+ mdLines.push('', '**Domain Pack Facades:**', '');
75
+ for (const ref of config.domainPacks) {
76
+ mdLines.push(`| ${bt}${ref.name}${bt} (pack: ${bt}${ref.package}${bt}) | *custom ops — see ${bt}admin_tool_list${bt}* |`);
77
+ }
78
+ }
58
79
  // Engine facades — use actual tool names (standalone facades, NOT _core sub-groups)
59
80
  mdLines.push(
60
81
  // Vault — knowledge lifecycle, capture, search, management
@@ -1 +1 @@
1
- {"version":3,"file":"claude-md-template.js","sourceRoot":"","sources":["../../src/templates/claude-md-template.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"claude-md-template.js","sourceRoot":"","sources":["../../src/templates/claude-md-template.ts"],"names":[],"mappings":"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"}