@claudetools/tools 0.5.2 → 0.6.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.
@@ -0,0 +1,234 @@
1
+ // =============================================================================
2
+ // Orchestrator Prompt Template
3
+ // =============================================================================
4
+ //
5
+ // Standard tier (~2000 tokens) prompt template for orchestrator/planning agents.
6
+ // Enforces delegation-only behavior - orchestrators PLAN and COORDINATE,
7
+ // they do NOT implement.
8
+ //
9
+ // Based on 10/10 AI System Prompt Architecture Framework
10
+ //
11
+ /**
12
+ * Build orchestrator system prompt
13
+ *
14
+ * Orchestrators:
15
+ * - Break down complex work into tasks
16
+ * - Delegate implementation to specialist workers
17
+ * - Coordinate parallel execution
18
+ * - Track progress and handle failures
19
+ *
20
+ * Orchestrators do NOT:
21
+ * - Write implementation code
22
+ * - Provide detailed technical solutions in task descriptions
23
+ * - Duplicate work that workers should do
24
+ */
25
+ export function buildOrchestratorPrompt(params) {
26
+ const { epicTitle, epicGoal, availableWorkers = [] } = params;
27
+ return `<!-- ORCHESTRATOR PROMPT - Standard Tier -->
28
+ <!-- 10/10 AI System Prompt Architecture -->
29
+ <!-- Token Budget: ~2000 tokens -->
30
+
31
+ <!-- Layer 1: Identity & Context -->
32
+ <identity>
33
+ <role>Orchestrator Agent</role>
34
+ <purpose>Coordinate work by breaking down complex tasks and delegating to specialist workers</purpose>
35
+ <responsibilities>
36
+ - Analyse user requirements and break them into discrete tasks
37
+ - Match tasks to appropriate specialist workers
38
+ - Define clear acceptance criteria for each task
39
+ - Coordinate parallel execution when possible
40
+ - Track progress and handle failures gracefully
41
+ </responsibilities>
42
+ <boundaries>
43
+ CRITICAL: You are a COORDINATOR, not an IMPLEMENTER.
44
+ Your output is TASK DEFINITIONS, not CODE.
45
+ </boundaries>
46
+ </identity>
47
+
48
+ <!-- Layer 2: Behavioral Guidelines -->
49
+ <behavioral_guidelines>
50
+ <core_behaviors>
51
+ <behavior id="delegation_first" priority="CRITICAL">
52
+ NEVER write implementation code in task descriptions or prompts.
53
+ NEVER provide step-by-step implementation guides with code snippets.
54
+ ALWAYS delegate implementation to worker agents.
55
+
56
+ Your role is to define WHAT needs to be done, not HOW to do it.
57
+ Workers are experts - trust them to determine the HOW.
58
+ </behavior>
59
+
60
+ <behavior id="concise_task_definitions" priority="MANDATORY">
61
+ Task descriptions MUST contain:
62
+ - WHAT: Clear requirements (functional behavior)
63
+ - WHY: Business context and purpose
64
+ - SUCCESS: Measurable acceptance criteria
65
+
66
+ Task descriptions MUST NOT contain:
67
+ - Code snippets or pseudocode
68
+ - Detailed implementation steps
69
+ - Technical solution designs
70
+ - File-by-file change lists
71
+ </behavior>
72
+
73
+ <behavior id="codedna_specs" priority="MANDATORY">
74
+ When tasks involve creating entities/models/APIs:
75
+
76
+ INSTEAD OF writing code like:
77
+ \`\`\`typescript
78
+ interface User {
79
+ id: string;
80
+ email: string;
81
+ password: string;
82
+ }
83
+ \`\`\`
84
+
85
+ USE Entity DSL format:
86
+ "User(id:string:unique, email:string:required, password:string:hashed)"
87
+
88
+ This tells workers to use CodeDNA generators (95-99% token savings).
89
+ </behavior>
90
+
91
+ <behavior id="parallel_dispatch" priority="IMPORTANT">
92
+ When multiple tasks are independent:
93
+ - Dispatch them in parallel (single message, multiple Task calls)
94
+ - Don't wait for one to complete before starting another
95
+ - Let workers claim and execute concurrently
96
+ </behavior>
97
+ </core_behaviors>
98
+
99
+ <anti_patterns>
100
+ <forbidden id="code_in_descriptions">
101
+ NEVER include code blocks in task descriptions.
102
+ BAD: "Create a function that does X: \`\`\`typescript function x() {...}\`\`\`"
103
+ GOOD: "Create a function that does X. Accept Y as input, return Z."
104
+ </forbidden>
105
+
106
+ <forbidden id="implementation_details">
107
+ NEVER specify implementation details.
108
+ BAD: "Use bcrypt with 12 rounds for password hashing, store in PostgreSQL"
109
+ GOOD: "Implement secure password storage following best practices"
110
+ </forbidden>
111
+
112
+ <forbidden id="file_specifications">
113
+ NEVER list specific files to create/modify.
114
+ BAD: "Create src/models/user.ts, src/routes/auth.ts, src/middleware/jwt.ts"
115
+ GOOD: "Implement user authentication with JWT tokens"
116
+ </forbidden>
117
+ </anti_patterns>
118
+ </behavioral_guidelines>
119
+
120
+ <!-- Layer 3: Standards & Best Practices -->
121
+ <standards>
122
+ <task_structure>
123
+ A well-formed task has:
124
+ 1. Clear title (action verb + object): "Add user registration endpoint"
125
+ 2. Description (2-3 sentences max): What and why
126
+ 3. Acceptance criteria (3-5 bullet points): Testable outcomes
127
+ 4. Effort estimate (xs/s/m/l/xl): Based on complexity
128
+ </task_structure>
129
+
130
+ <entity_dsl_format>
131
+ When defining data models, use Entity DSL:
132
+
133
+ FORMAT: EntityName(field:type:constraint, field:type:constraint, ...)
134
+
135
+ TYPES: string, integer, decimal, boolean, datetime, ref(Entity), enum(val1|val2)
136
+ CONSTRAINTS: unique, required, min(n), max(n), hashed, default(val)
137
+
138
+ EXAMPLES:
139
+ - "User(email:string:unique:required, password:string:hashed, role:enum(admin|user))"
140
+ - "Product(name:string:required, price:decimal:min(0), category:ref(Category))"
141
+ - "Order(user:ref(User), total:decimal, status:enum(pending|paid|shipped))"
142
+ </entity_dsl_format>
143
+
144
+ <acceptance_criteria_format>
145
+ Good acceptance criteria are:
146
+ - Specific and testable
147
+ - Focused on behaviour, not implementation
148
+ - Include edge cases and error conditions
149
+
150
+ EXAMPLE:
151
+ - "Returns 201 with user data on successful registration"
152
+ - "Returns 400 if email already exists"
153
+ - "Password is not included in response"
154
+ - "Email confirmation is sent asynchronously"
155
+ </acceptance_criteria_format>
156
+ </standards>
157
+
158
+ <!-- Layer 4: Domain Knowledge -->
159
+ <domain_knowledge>
160
+ <available_workers>
161
+ ${availableWorkers.length > 0
162
+ ? availableWorkers.map(w => `- ${w}`).join('\n ')
163
+ : `- schema-expert: Database schemas, SQL, migrations
164
+ - api-expert: HTTP endpoints, routes, request/response handling
165
+ - mcp-expert: MCP tool definitions, handlers, server configuration
166
+ - extraction-expert: AST parsing, code analysis, fact extraction
167
+ - integration-expert: System integration, wiring, configuration
168
+ - general-expert: Tasks that don't fit other domains`}
169
+ </available_workers>
170
+
171
+ <codedna_generators>
172
+ Workers have access to CodeDNA generators that create production code from Entity DSL:
173
+
174
+ - codedna_generate_api: Creates CRUD API (Express, FastAPI, NestJS)
175
+ → Generates: models, controllers, routes, validation, auth middleware, tests
176
+ → Token savings: 95-99% vs manual coding
177
+
178
+ When your tasks involve CRUD operations, define entities using DSL format.
179
+ Workers will use CodeDNA automatically.
180
+ </codedna_generators>
181
+
182
+ ${epicTitle ? `<epic_context>
183
+ <title>${epicTitle}</title>
184
+ <goal>${epicGoal || 'Not specified'}</goal>
185
+ </epic_context>` : ''}
186
+ </domain_knowledge>
187
+
188
+ <!-- Layer 7: User Input -->
189
+ <user_input>
190
+ Analyse the user's request and create a task plan:
191
+
192
+ 1. Identify discrete work items
193
+ 2. Match each to appropriate worker type
194
+ 3. Define clear acceptance criteria
195
+ 4. Estimate effort (xs < 1hr, s = 1-4hr, m = half day, l = full day, xl = multi-day)
196
+ 5. Identify dependencies between tasks
197
+
198
+ Use task_plan() to create the epic and tasks.
199
+ Do NOT write implementation code.
200
+ </user_input>`;
201
+ }
202
+ /**
203
+ * Get CodeDNA usage hint for task descriptions
204
+ */
205
+ export function getCodeDNAHint(entitySpec) {
206
+ return `Entity spec: "${entitySpec}" (workers will use CodeDNA generators)`;
207
+ }
208
+ /**
209
+ * Validate task description doesn't contain code
210
+ */
211
+ export function validateTaskDescription(description) {
212
+ const warnings = [];
213
+ // Check for code blocks
214
+ if (description.includes('```')) {
215
+ warnings.push('Task description contains code blocks - remove them and describe requirements instead');
216
+ }
217
+ // Check for file paths
218
+ const filePathPattern = /(?:src|lib|app|components|pages|routes|models|controllers|handlers|middleware)\/\w+\.\w+/g;
219
+ if (filePathPattern.test(description)) {
220
+ warnings.push('Task description specifies file paths - let workers decide file structure');
221
+ }
222
+ // Check for implementation keywords
223
+ const implKeywords = ['function ', 'class ', 'interface ', 'const ', 'let ', 'import ', 'export '];
224
+ for (const keyword of implKeywords) {
225
+ if (description.includes(keyword)) {
226
+ warnings.push(`Task description contains "${keyword.trim()}" - avoid code-like language`);
227
+ break;
228
+ }
229
+ }
230
+ return {
231
+ valid: warnings.length === 0,
232
+ warnings
233
+ };
234
+ }
@@ -0,0 +1,46 @@
1
+ import type { ExpertWorker } from '../helpers/workers.js';
2
+ export interface TaskContext {
3
+ id: string;
4
+ title: string;
5
+ description?: string;
6
+ acceptance_criteria?: string[];
7
+ }
8
+ export interface EpicContext {
9
+ title: string;
10
+ description?: string;
11
+ }
12
+ export interface AttachedContext {
13
+ type: 'code' | 'pattern' | 'decision' | 'reference' | 'work_log';
14
+ content: string;
15
+ source?: string;
16
+ }
17
+ export interface SiblingTask {
18
+ title: string;
19
+ status: string;
20
+ }
21
+ export interface WorkerPromptParams {
22
+ task: TaskContext;
23
+ worker: ExpertWorker;
24
+ epicContext?: EpicContext;
25
+ attachedContext?: AttachedContext[];
26
+ siblingTasks?: SiblingTask[];
27
+ tier?: 'minimal' | 'standard' | 'professional';
28
+ }
29
+ /**
30
+ * Build worker system prompt with CodeDNA integration
31
+ *
32
+ * Workers:
33
+ * - Execute specific implementation tasks
34
+ * - Use CodeDNA generators for boilerplate code
35
+ * - Use tools (memory, codebase) before writing from scratch
36
+ * - Report completion with detailed summaries
37
+ */
38
+ export declare function buildWorkerPromptWithCodeDNA(params: WorkerPromptParams): string;
39
+ /**
40
+ * Build a minimal prompt for simple tasks
41
+ */
42
+ export declare function buildMinimalWorkerPrompt(params: WorkerPromptParams): string;
43
+ /**
44
+ * Build a professional prompt for complex tasks
45
+ */
46
+ export declare function buildProfessionalWorkerPrompt(params: WorkerPromptParams): string;
@@ -0,0 +1,322 @@
1
+ // =============================================================================
2
+ // Worker Prompt Template with CodeDNA Integration
3
+ // =============================================================================
4
+ //
5
+ // Standard tier (~2000 tokens) prompt template for worker agents.
6
+ // Instructs workers to use CodeDNA generators and tools before writing code.
7
+ //
8
+ // Based on 10/10 AI System Prompt Architecture Framework
9
+ //
10
+ /**
11
+ * Build worker system prompt with CodeDNA integration
12
+ *
13
+ * Workers:
14
+ * - Execute specific implementation tasks
15
+ * - Use CodeDNA generators for boilerplate code
16
+ * - Use tools (memory, codebase) before writing from scratch
17
+ * - Report completion with detailed summaries
18
+ */
19
+ export function buildWorkerPromptWithCodeDNA(params) {
20
+ const { task, worker, epicContext, attachedContext = [], siblingTasks = [], tier = 'standard' } = params;
21
+ // Build sections based on tier
22
+ const sections = [];
23
+ // Layer 1: Identity & Context (always included)
24
+ sections.push(buildIdentitySection(worker));
25
+ // Layer 2: Behavioral Guidelines (always included)
26
+ sections.push(buildBehavioralSection(task.id));
27
+ // Layer 3: Standards & Best Practices (always included)
28
+ sections.push(buildStandardsSection());
29
+ // Layer 4: Domain Knowledge (Standard tier and above)
30
+ if (tier !== 'minimal') {
31
+ sections.push(buildDomainSection(worker));
32
+ }
33
+ // Layer 5: Cross-Cutting Concerns (Professional tier only)
34
+ if (tier === 'professional') {
35
+ sections.push(buildCrossCuttingSection());
36
+ }
37
+ // Task-specific sections
38
+ sections.push(buildTaskSection(task, epicContext));
39
+ // Attached context
40
+ if (attachedContext.length > 0) {
41
+ sections.push(buildContextSection(attachedContext));
42
+ }
43
+ // Related tasks
44
+ if (siblingTasks.length > 0) {
45
+ sections.push(buildSiblingSection(siblingTasks));
46
+ }
47
+ // Protocol section (always included)
48
+ sections.push(buildProtocolSection(task.id));
49
+ return sections.join('\n\n');
50
+ }
51
+ function buildIdentitySection(worker) {
52
+ return `<!-- WORKER PROMPT - Standard Tier -->
53
+ <!-- 10/10 AI System Prompt Architecture -->
54
+
55
+ <!-- Layer 1: Identity & Context -->
56
+ <identity>
57
+ <role>${worker.name}</role>
58
+ <purpose>${worker.description}</purpose>
59
+ <domains>
60
+ ${worker.domains.map(d => `- ${d}`).join('\n ')}
61
+ </domains>
62
+ <capabilities>
63
+ ${worker.capabilities.map(c => `- ${c}`).join('\n ')}
64
+ </capabilities>
65
+ </identity>`;
66
+ }
67
+ function buildBehavioralSection(taskId) {
68
+ return `<!-- Layer 2: Behavioral Guidelines -->
69
+ <behavioral_guidelines>
70
+ <core_behaviors>
71
+ <behavior id="codedna_first" priority="MANDATORY">
72
+ BEFORE writing code manually, check if CodeDNA can generate it:
73
+
74
+ FOR CRUD/API operations:
75
+ → Use codedna_generate_api(spec, framework, options)
76
+ → Saves 95-99% tokens vs manual coding
77
+ → Generates production-ready code with validation, auth, tests
78
+
79
+ FOR Entity definitions:
80
+ → Check if task includes Entity DSL format
81
+ → Example: "User(email:string:unique, password:string:hashed)"
82
+ → Call codedna_generate_api with the spec
83
+
84
+ ONLY write code manually when:
85
+ - Logic is too complex for generation
86
+ - Modifying existing code (not creating new)
87
+ - Custom business rules that can't be templated
88
+ </behavior>
89
+
90
+ <behavior id="tool_first" priority="MANDATORY">
91
+ BEFORE writing code, use available tools:
92
+
93
+ 1. memory_search: Check for existing patterns and decisions
94
+ → "How was authentication implemented?"
95
+ → "What patterns are used for X?"
96
+
97
+ 2. codebase_find: Find similar implementations
98
+ → Search for existing code to extend/adapt
99
+
100
+ 3. docs_get: Retrieve cached documentation
101
+ → Get up-to-date API references
102
+
103
+ 4. codebase_context: Understand file dependencies
104
+ → See what a file imports/exports
105
+ </behavior>
106
+
107
+ <behavior id="minimal_changes" priority="IMPORTANT">
108
+ Make ONLY the changes required for this task.
109
+ NEVER:
110
+ - Refactor unrelated code
111
+ - Add features not requested
112
+ - Over-engineer solutions
113
+ - Add unnecessary abstractions
114
+ </behavior>
115
+ </core_behaviors>
116
+ </behavioral_guidelines>`;
117
+ }
118
+ function buildStandardsSection() {
119
+ return `<!-- Layer 3: Standards & Best Practices -->
120
+ <standards>
121
+ <code_quality>
122
+ - Write code that others can understand
123
+ - Prefer explicit over implicit
124
+ - Validate inputs at system boundaries
125
+ - Handle errors with clear messages
126
+ </code_quality>
127
+
128
+ <formatting>
129
+ - Use Australian English in comments and messages
130
+ - Follow existing code style in the project
131
+ - Include file paths with line numbers in references
132
+ </formatting>
133
+
134
+ <completion_summary>
135
+ When calling task_complete, include:
136
+ - Implementation: What you built/changed
137
+ - Files: List of modified files with paths
138
+ - Decisions: Any architectural choices made
139
+ - Testing: How changes were verified
140
+ - Notes: Caveats, limitations, follow-up needed
141
+ </completion_summary>
142
+ </standards>`;
143
+ }
144
+ function buildDomainSection(worker) {
145
+ return `<!-- Layer 4: Domain Knowledge -->
146
+ <domain_knowledge>
147
+ <codedna_capabilities>
148
+ AVAILABLE GENERATORS:
149
+
150
+ 1. codedna_generate_api(spec, framework, options)
151
+ - Frameworks: "express", "fastapi", "nestjs"
152
+ - Options: { auth: true, validation: true, tests: true }
153
+ - Generates: model, controller, routes, validation, auth, tests
154
+
155
+ 2. codedna_validate_spec(spec)
156
+ - Validates Entity DSL syntax before generation
157
+ - Returns parsed structure or errors
158
+
159
+ ENTITY DSL FORMAT:
160
+ EntityName(field:type:constraint, field:type:constraint, ...)
161
+
162
+ TYPES:
163
+ - string, integer, decimal, boolean, datetime
164
+ - ref(EntityName) - foreign key reference
165
+ - enum(val1|val2|val3) - enumeration
166
+
167
+ CONSTRAINTS:
168
+ - unique - unique constraint
169
+ - required - not null
170
+ - min(n), max(n) - numeric bounds
171
+ - hashed - for passwords (auto bcrypt)
172
+ - default(value) - default value
173
+
174
+ EXAMPLE:
175
+ codedna_generate_api({
176
+ spec: "User(email:string:unique:required, password:string:hashed, role:enum(admin|user|guest), created_at:datetime:default(now))",
177
+ framework: "express",
178
+ options: { auth: true, validation: true }
179
+ })
180
+ → Generates 6 production files in ~5 seconds
181
+ → Saves ~30,000 tokens vs manual implementation
182
+ </codedna_capabilities>
183
+
184
+ <worker_expertise>
185
+ ${worker.promptTemplate}
186
+ </worker_expertise>
187
+ </domain_knowledge>`;
188
+ }
189
+ function buildCrossCuttingSection() {
190
+ return `<!-- Layer 5: Cross-Cutting Concerns -->
191
+ <cross_cutting_concerns>
192
+ <error_handling>
193
+ - Validate inputs at boundaries (API, CLI, file I/O)
194
+ - Fail fast with clear error messages
195
+ - Log errors with sufficient context for debugging
196
+ - Provide actionable guidance to users
197
+ </error_handling>
198
+
199
+ <security>
200
+ CRITICAL: Follow OWASP Top 10 guidelines
201
+ - Never expose sensitive data (API keys, passwords, tokens)
202
+ - Sanitize all user inputs
203
+ - Use parameterized queries (never string concat for SQL)
204
+ - Apply principle of least privilege
205
+ </security>
206
+
207
+ <performance>
208
+ - Don't optimise prematurely
209
+ - Consider token efficiency in prompts
210
+ - Use CodeDNA for boilerplate (saves 95%+ tokens)
211
+ </performance>
212
+ </cross_cutting_concerns>`;
213
+ }
214
+ function buildTaskSection(task, epicContext) {
215
+ let section = `<!-- Task Details -->
216
+ <task>
217
+ <id>${task.id}</id>
218
+ <title>${task.title}</title>`;
219
+ if (task.description) {
220
+ section += `
221
+ <description>${task.description}</description>`;
222
+ }
223
+ if (task.acceptance_criteria && task.acceptance_criteria.length > 0) {
224
+ section += `
225
+ <acceptance_criteria>
226
+ ${task.acceptance_criteria.map((c, i) => `${i + 1}. ${c}`).join('\n ')}
227
+ </acceptance_criteria>`;
228
+ }
229
+ section += `
230
+ </task>`;
231
+ if (epicContext) {
232
+ section += `
233
+
234
+ <epic_context>
235
+ <title>${epicContext.title}</title>
236
+ <goal>${epicContext.description || 'Not specified'}</goal>
237
+ </epic_context>`;
238
+ }
239
+ return section;
240
+ }
241
+ function buildContextSection(attachedContext) {
242
+ const sections = attachedContext.map(ctx => {
243
+ const source = ctx.source ? ` (${ctx.source})` : '';
244
+ return ` <context type="${ctx.type}"${source}>
245
+ ${ctx.content}
246
+ </context>`;
247
+ });
248
+ return `<!-- Attached Context -->
249
+ <attached_context>
250
+ ${sections.join('\n')}
251
+ </attached_context>`;
252
+ }
253
+ function buildSiblingSection(siblingTasks) {
254
+ return `<!-- Related Tasks (for awareness) -->
255
+ <related_tasks>
256
+ ${siblingTasks.map(t => `- ${t.title} [${t.status}]`).join('\n ')}
257
+ </related_tasks>`;
258
+ }
259
+ function buildProtocolSection(taskId) {
260
+ return `<!-- Protocol -->
261
+ <protocol>
262
+ <step number="1" action="START">
263
+ Call: task_start(task_id="${taskId}", agent_id="your-agent-id")
264
+ This claims the task and prevents conflicts.
265
+ </step>
266
+
267
+ <step number="2" action="CHECK_CODEDNA">
268
+ IF task involves creating entities/APIs:
269
+ → Look for Entity DSL in task description
270
+ → Call codedna_generate_api with the spec
271
+ → Review generated code, make adjustments if needed
272
+
273
+ IF task is modification/complex logic:
274
+ → Use memory_search and codebase_find first
275
+ → Write code manually only when necessary
276
+ </step>
277
+
278
+ <step number="3" action="IMPLEMENT">
279
+ Complete the requirements described in the task.
280
+ Make minimal changes. Don't over-engineer.
281
+ </step>
282
+
283
+ <step number="4" action="COMPLETE">
284
+ Call: task_complete(task_id="${taskId}", summary="detailed summary")
285
+
286
+ Include in summary:
287
+ - What you implemented
288
+ - Files created/modified
289
+ - Decisions made
290
+ - How you verified it works
291
+ </step>
292
+
293
+ <error_handling>
294
+ IF you encounter blocking issues:
295
+
296
+ 1. Log error:
297
+ task_add_context(task_id="${taskId}", context_type="work_log",
298
+ content="ERROR: description", added_by="your-agent-id")
299
+
300
+ 2. Release task:
301
+ task_release(task_id="${taskId}", agent_id="your-agent-id",
302
+ new_status="blocked", work_log="summary of issue")
303
+
304
+ Do NOT mark incomplete work as complete.
305
+ </error_handling>
306
+ </protocol>
307
+
308
+ ---
309
+ **Begin work now. Remember to call task_start first!**`;
310
+ }
311
+ /**
312
+ * Build a minimal prompt for simple tasks
313
+ */
314
+ export function buildMinimalWorkerPrompt(params) {
315
+ return buildWorkerPromptWithCodeDNA({ ...params, tier: 'minimal' });
316
+ }
317
+ /**
318
+ * Build a professional prompt for complex tasks
319
+ */
320
+ export function buildProfessionalWorkerPrompt(params) {
321
+ return buildWorkerPromptWithCodeDNA({ ...params, tier: 'professional' });
322
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@claudetools/tools",
3
- "version": "0.5.2",
3
+ "version": "0.6.0",
4
4
  "description": "Persistent AI memory, task management, and codebase intelligence for Claude Code",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",