opencode-knowledge 0.3.4-next.1 → 0.3.4

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/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2026 msegoviadev
3
+ Copyright (c) 2025 zenobi.us
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
package/README.md CHANGED
@@ -1,438 +1,87 @@
1
1
  # opencode-knowledge
2
2
 
3
- A comprehensive knowledge management system for OpenCode that provides:
4
- - **Role-based AI personalities** - Customize OpenCode's communication style
5
- - **Knowledge vault** - Organize coding standards, patterns, and best practices
6
- - **Tag-based search** - Quickly find relevant knowledge packages
7
- - **Session management** - Track loaded packages and optimize token usage
3
+ An OpenCode plugin
8
4
 
9
- ## Features
10
-
11
- ### 🎭 Personality System
12
- Choose from different AI personas (staff engineer, frontend specialist, cthulhu, etc.) that influence how OpenCode communicates and approaches problems.
13
-
14
- ### 📚 Knowledge Vault
15
- Create a structured library of markdown-based knowledge packages with frontmatter metadata for easy discovery and loading.
16
-
17
- ### 🔍 Smart Search
18
- Tag-based search system finds relevant knowledge packages based on your current task.
19
-
20
- ### 💾 Session Persistence
21
- Tracks loaded packages across sessions and provides token-optimized context injection.
22
-
23
- ---
24
-
25
- ## Installation
26
-
27
- Add the plugin to your OpenCode config:
28
-
29
- **Global config** (`~/.config/opencode/opencode.json` or `opencode.jsonc`):
30
-
31
- ```json
32
- {
33
- "plugin": ["opencode-knowledge"]
34
- }
35
- ```
36
-
37
- **Or per-project** (`opencode.json` or `opencode.jsonc` in your project root):
38
-
39
- ```json
40
- {
41
- "plugin": ["opencode-knowledge"]
42
- }
43
- ```
44
-
45
- ---
46
-
47
- ## Quick Start
48
-
49
- ### 1. Create Settings File
50
-
51
- Create `.opencode/knowledge/settings.json` in your project:
52
-
53
- ```json
54
- {
55
- "role": "staff_engineer"
56
- }
57
- ```
58
-
59
- ### 2. Create Knowledge Vault (Optional)
60
-
61
- If you want to use the knowledge management features, create a vault structure:
62
-
63
- ```bash
64
- mkdir -p .opencode/knowledge/vault/standards
65
- ```
66
-
67
- ### 3. Create Your First Knowledge Package
68
-
69
- Create `.opencode/knowledge/vault/standards/code-conventions.md`:
70
-
71
- ```markdown
72
- ---
73
- tags:
74
- - standards
75
- - typescript
76
- - conventions
77
- description: Core code conventions and style guide
78
- category: standards
79
- ---
80
-
81
- # Code Conventions
82
-
83
- ## Naming
84
- - Use camelCase for variables and functions
85
- - Use PascalCase for classes and types
86
-
87
- ## Formatting
88
- - Use single quotes for strings
89
- - Line width: 100 characters
90
- - Always use semicolons
91
- ```
92
-
93
- ### 4. Start OpenCode Session
94
-
95
- The knowledge catalog is **automatically built on session start**. Just start a new session and the plugin will:
96
- - Scan your vault for packages
97
- - Build the searchable catalog
98
- - Inject knowledge map on first message
99
-
100
- ### 5. Search and Load Knowledge
101
-
102
- Search for packages by tags:
103
-
104
- ```
105
- knowledge_search [tags=typescript,conventions]
106
- ```
107
-
108
- Load packages into your session:
109
-
110
- ```
111
- knowledge_load [paths=standards/code-conventions.md]
112
- ```
113
-
114
- ---
115
-
116
- ## Available Personalities
117
-
118
- ### staff_engineer
119
-
120
- Skeptical, pragmatic Staff Engineer focused on architecture, coupling, operational risk, and maintainability.
121
-
122
- **Best for**: Code reviews, architecture decisions, production systems
123
-
124
- ### cthulhu
125
-
126
- Ancient cosmic entity providing technical guidance with existential dread and cosmic perspective.
127
-
128
- **Best for**: When you need technical help but also want to contemplate the meaninglessness of time
129
-
130
- ---
131
-
132
- ## Tools
133
-
134
- ### knowledge_search
135
-
136
- Search for knowledge packages by tags.
137
-
138
- ```
139
- knowledge_search [tags=typescript,react,testing]
140
- ```
141
-
142
- **Parameters**: Comma-separated list of tags
143
-
144
- **Output**: Ranked list of matching packages with relevance scores
145
-
146
- **Example**:
147
- ```
148
- Found 5 packages matching [typescript, react]:
149
-
150
- - **frontend/react-patterns.md** (75%)
151
- Tags: typescript, react, patterns
152
- Common React patterns and best practices
153
-
154
- - **standards/typescript-conventions.md** (50%)
155
- Tags: typescript, conventions
156
- TypeScript coding standards
157
- ```
5
+ > An OpenCode plugin created from the [opencode-plugin-template](https://github.com/zenobi-us/opencode-plugin-template)
158
6
 
159
- ---
160
-
161
- ### knowledge_load
162
-
163
- Load knowledge packages into the current session.
164
-
165
- ```
166
- knowledge_load [paths=standards/code-conventions.md,frontend/react-patterns.md]
167
- ```
168
-
169
- **Parameters**: Comma-separated list of package paths (relative to vault/)
170
-
171
- **Output**: Package content injected into context
172
-
173
- **Features**:
174
- - Deduplication (won't load same package twice)
175
- - Session tracking (remembers what's loaded)
176
- - Error handling (warns about missing packages)
177
-
178
- ---
179
-
180
- ### knowledge_index
181
-
182
- Manually rebuild the knowledge catalog from your vault.
183
-
184
- ```
185
- knowledge_index
186
- ```
187
-
188
- **Output**: Summary of categories and packages indexed.
189
-
190
- **Note**: The catalog is **automatically built on session start**, so you rarely need this tool.
191
-
192
- **When to use**:
193
- - After adding packages mid-session
194
- - If auto-build failed during session start
195
- - To verify catalog contents
196
-
197
- ---
198
-
199
- ## Knowledge Package Format
200
-
201
- Knowledge packages are markdown files with YAML frontmatter:
202
-
203
- ```markdown
204
- ---
205
- tags:
206
- - tag1
207
- - tag2
208
- - tag3
209
- description: Brief description of this package
210
- category: category-name
211
- required_knowledge:
212
- - other-package-1
213
- - other-package-2
214
- file_patterns:
215
- - "*.tsx"
216
- - "*.test.ts"
217
- ---
218
-
219
- # Package Title
220
-
221
- Your knowledge content here...
222
- ```
223
-
224
- ### Frontmatter Fields
225
-
226
- | Field | Required | Description |
227
- |-------|----------|-------------|
228
- | `tags` | Yes | Array of searchable tags |
229
- | `description` | Yes | Brief summary (used in search results) |
230
- | `category` | Yes | Category for organization (e.g., `frontend`, `backend`, `standards`) |
231
- | `required_knowledge` | No | Other packages that should be loaded first |
232
- | `file_patterns` | No | File patterns where this knowledge applies |
233
-
234
- ---
235
-
236
- ## Directory Structure
237
-
238
- ```
239
- your-project/
240
- └── .opencode/
241
- └── knowledge/
242
- ├── settings.json # Plugin configuration
243
- ├── knowledge.json # Auto-generated catalog (gitignored)
244
- ├── vault/ # Your knowledge packages
245
- │ ├── frontend/
246
- │ │ ├── react-patterns.md
247
- │ │ └── state-management.md
248
- │ ├── backend/
249
- │ │ └── api-design.md
250
- │ └── standards/
251
- │ ├── code-conventions.md
252
- │ └── testing-guide.md
253
- └── tracker/ # Session state (gitignored)
254
- ├── session-state.jsonl
255
- └── knowledge-reads.jsonl
256
- ```
257
-
258
- ---
259
-
260
- ## Token Optimization
261
-
262
- The plugin uses a single-phase approach for optimal token usage:
263
-
264
- ### First Message Only
265
- - Shows full category-tag map (~500-1000 tokens depending on vault size)
266
- - Injects personality
267
- - Documents available tools with examples
268
- - Creates session state
269
-
270
- ### Subsequent Messages
271
- - No knowledge context injected
272
- - LLM uses memory of first message
273
- - **100% token savings** on subsequent messages
274
-
275
- This approach provides significant token savings while ensuring the LLM has all the context it needs from the initial session setup.
276
-
277
- ---
278
-
279
- ## Example Vault Structure
280
-
281
- Here's a recommended organization pattern:
282
-
283
- ```
284
- vault/
285
- ├── frontend/
286
- │ ├── react-patterns.md # React best practices
287
- │ ├── state-management.md # Redux, Context, etc.
288
- │ ├── component-testing.md # Testing components
289
- │ └── accessibility.md # A11y guidelines
290
- ├── backend/
291
- │ ├── api-design.md # REST/GraphQL patterns
292
- │ ├── database-patterns.md # ORM, migrations
293
- │ └── error-handling.md # Error handling strategies
294
- ├── standards/
295
- │ ├── code-conventions.md # General coding standards
296
- │ ├── git-workflow.md # Branch strategy, commits
297
- │ └── code-review.md # Review guidelines
298
- └── infrastructure/
299
- ├── docker-patterns.md # Container best practices
300
- ├── ci-cd.md # Pipeline patterns
301
- └── monitoring.md # Observability
302
- ```
7
+ ## Features
303
8
 
304
- ---
9
+ - 🏗️ TypeScript-based plugin architecture
10
+ - 🔧 Mise task runner integration
11
+ - 📦 Bun/npm build tooling
12
+ - ✨ ESLint + Prettier formatting
13
+ - 🧪 Vitest testing setup
14
+ - 🚀 GitHub Actions CI/CD
15
+ - 📝 Release automation with release-please
305
16
 
306
- ## Advanced Usage
17
+ ## Getting Started
307
18
 
308
- ### Creating Cross-Referenced Packages
19
+ 1. **Clone this template:**
309
20
 
310
- Use `required_knowledge` to create dependency chains:
21
+ ```bash
22
+ cp -r opencode-plugin-template your-plugin-name
23
+ cd your-plugin-name
24
+ ```
311
25
 
312
- ```markdown
313
- ---
314
- tags:
315
- - react
316
- - advanced
317
- - performance
318
- description: Advanced React performance optimization
319
- category: frontend
320
- required_knowledge:
321
- - frontend/react-patterns
322
- - standards/code-conventions
323
- ---
26
+ 2. **Update package.json:**
27
+ - Change `name` to your plugin name
28
+ - Update `description`
29
+ - Update `repository.url`
324
30
 
325
- # Advanced React Performance
31
+ 3. **Install dependencies:**
326
32
 
327
- This builds on basic patterns...
328
- ```
33
+ ```bash
34
+ bun install
35
+ ```
329
36
 
330
- ### File Pattern Targeting
37
+ 4. **Implement your plugin in `src/index.ts`:**
331
38
 
332
- Specify when knowledge applies:
39
+ ```typescript
40
+ import type { Plugin } from '@opencode-ai/plugin';
333
41
 
334
- ```markdown
335
- ---
336
- tags:
337
- - testing
338
- - jest
339
- description: Jest testing patterns
340
- category: frontend
341
- file_patterns:
342
- - "*.test.ts"
343
- - "*.test.tsx"
344
- - "*.spec.ts"
345
- ---
42
+ export const YourPlugin: Plugin = async (ctx) => {
43
+ return {
44
+ tool: {
45
+ // Your plugin tools here
46
+ },
47
+ };
48
+ };
49
+ ```
346
50
 
347
- # Jest Testing Guide
348
- ```
51
+ 5. **Test your plugin:**
52
+ ```bash
53
+ mise run test
54
+ ```
349
55
 
350
- ---
56
+ ## Development
351
57
 
352
- ## Troubleshooting
58
+ - `mise run build` - Build the plugin
59
+ - `mise run test` - Run tests
60
+ - `mise run lint` - Lint code
61
+ - `mise run lint:fix` - Fix linting issues
62
+ - `mise run format` - Format code with Prettier
353
63
 
354
- ### Settings file not found
64
+ ## Installation in OpenCode
355
65
 
356
- **Error**: `CONFIGURATION ERROR: Settings file not found`
66
+ Create or edit `~/.config/opencode/config.json`:
357
67
 
358
- **Solution**: Create `.opencode/knowledge/settings.json` with:
359
68
  ```json
360
69
  {
361
- "role": "staff_engineer"
70
+ "plugins": ["opencode-knowledge"]
362
71
  }
363
72
  ```
364
73
 
365
- ### Personality not loading
366
-
367
- **Error**: `CONFIGURATION ERROR: Personality file not found`
368
-
369
- **Solution**: Verify the role name in `settings.json` matches an available personality (`staff_engineer` or `cthulhu`)
370
-
371
- ### Catalog not found
372
-
373
- **Error**: `Knowledge catalog not found. Run knowledge_index first.`
374
-
375
- **Solution**: Run `knowledge_index` to build the catalog from your vault
376
-
377
- ### Search returns no results
378
-
379
- **Possible causes**:
380
- 1. Catalog is outdated → Run `knowledge_index`
381
- 2. Tags don't match → Check tag spelling
382
- 3. No packages with those tags → Add packages or adjust search
383
-
384
- ---
385
-
386
- ## Development
387
-
388
- ### Building
389
-
390
- ```bash
391
- mise run build
392
- ```
393
-
394
- Or directly with Bun:
395
-
396
- ```bash
397
- bun build ./src/index.ts --outdir dist --target bun
398
- ```
399
-
400
- ### Linting
401
-
402
- ```bash
403
- mise run lint # Check for issues
404
- mise run lint:fix # Auto-fix issues
405
- ```
74
+ ## Author
406
75
 
407
- ### Formatting
408
-
409
- ```bash
410
- mise run format
411
- ```
76
+ msegoviadev <marcos@msegovia.dev>
412
77
 
413
- ---
78
+ ## Repository
414
79
 
415
- ## Roadmap
416
-
417
- - [ ] Auto-load packages based on file patterns
418
- - [ ] Knowledge package dependencies resolution
419
- - [ ] Usage analytics and metrics
420
- - [ ] Export/import vault bundles
421
- - [ ] Knowledge package templates
422
- - [ ] VSCode extension for vault management
423
-
424
- ---
80
+ https://github.com/msegoviadev/opencode-knowledge
425
81
 
426
82
  ## Contributing
427
83
 
428
- Contributions welcome! Please:
429
-
430
- 1. Follow the code conventions in `AGENTS.md`
431
- 2. Run `mise run lint` before committing
432
- 3. Update documentation for new features
433
- 4. Add tests for new functionality
434
-
435
- ---
84
+ Contributions are welcome! Please file issues or submit pull requests on the GitHub repository.
436
85
 
437
86
  ## License
438
87
 
File without changes
package/dist/index.js ADDED
@@ -0,0 +1,221 @@
1
+ // @bun
2
+ // src/index.ts
3
+ import path from "path";
4
+ import { fileURLToPath } from "url";
5
+ import { readFile as readFile2 } from "fs/promises";
6
+ import { existsSync as existsSync2 } from "fs";
7
+
8
+ // src/lib/session-state.ts
9
+ import { readFile } from "fs/promises";
10
+ import { existsSync } from "fs";
11
+ var sessionStates = new Map;
12
+ async function createSessionState(sessionId) {
13
+ if (sessionStates.has(sessionId)) {
14
+ throw new Error(`Session state already exists for session: ${sessionId}`);
15
+ }
16
+ const settingsPath = ".opencode/knowledge/settings.json";
17
+ if (!existsSync(settingsPath)) {
18
+ throw new Error(`CONFIGURATION ERROR: Cannot create session state - settings file not found at ${settingsPath}`);
19
+ }
20
+ let role;
21
+ try {
22
+ const settingsContent = await readFile(settingsPath, "utf-8");
23
+ const settings = JSON.parse(settingsContent);
24
+ if (!settings.role) {
25
+ throw new Error(`CONFIGURATION ERROR: Cannot create session state - missing 'role' field in ${settingsPath}`);
26
+ }
27
+ role = settings.role;
28
+ } catch (error) {
29
+ if (error instanceof Error && error.message.includes("CONFIGURATION ERROR")) {
30
+ throw error;
31
+ }
32
+ throw new Error(`Error reading settings.json: ${error}`);
33
+ }
34
+ const state = {
35
+ role,
36
+ isFirstPrompt: true,
37
+ loadedPackages: new Set,
38
+ createdAt: new Date
39
+ };
40
+ sessionStates.set(sessionId, state);
41
+ }
42
+ function getSessionState(sessionId) {
43
+ const state = sessionStates.get(sessionId);
44
+ if (!state) {
45
+ throw new Error(`Session state not found for session: ${sessionId}`);
46
+ }
47
+ return state;
48
+ }
49
+ function updateSessionState(sessionId, updates) {
50
+ const state = getSessionState(sessionId);
51
+ Object.assign(state, updates);
52
+ }
53
+
54
+ // src/index.ts
55
+ var logToFile = async (message) => {
56
+ try {
57
+ const logEntry = `${new Date().toISOString()}: ${message}
58
+ `;
59
+ let existing = "";
60
+ try {
61
+ existing = await Bun.file("/tmp/opencode-knowledge-debug.log").text();
62
+ } catch {}
63
+ await Bun.write("/tmp/opencode-knowledge-debug.log", existing + logEntry);
64
+ } catch (e) {}
65
+ };
66
+ function parseFrontmatter(content) {
67
+ const frontmatterRegex = /^---\n([\s\S]*?)\n---\n([\s\S]*)$/;
68
+ const match = content.match(frontmatterRegex);
69
+ if (!match) {
70
+ return { frontmatter: {}, body: content.trim() };
71
+ }
72
+ const [, yamlContent, body] = match;
73
+ const frontmatter = {};
74
+ for (const line of yamlContent.split(`
75
+ `)) {
76
+ const colonIndex = line.indexOf(":");
77
+ if (colonIndex === -1)
78
+ continue;
79
+ const key = line.slice(0, colonIndex).trim();
80
+ const value = line.slice(colonIndex + 1).trim();
81
+ if (key === "description")
82
+ frontmatter.description = value;
83
+ if (key === "agent")
84
+ frontmatter.agent = value;
85
+ if (key === "model")
86
+ frontmatter.model = value;
87
+ if (key === "subtask")
88
+ frontmatter.subtask = value === "true";
89
+ }
90
+ return { frontmatter, body: body.trim() };
91
+ }
92
+ async function loadCommands() {
93
+ const commands = [];
94
+ const __dirname2 = path.dirname(fileURLToPath(import.meta.url));
95
+ const commandDir = path.join(__dirname2, "command");
96
+ if (!existsSync2(commandDir)) {
97
+ return commands;
98
+ }
99
+ const glob = new Bun.Glob("**/*.md");
100
+ for await (const file of glob.scan({ cwd: commandDir, absolute: true })) {
101
+ const content = await Bun.file(file).text();
102
+ const { frontmatter, body } = parseFrontmatter(content);
103
+ const relativePath = path.relative(commandDir, file);
104
+ const name = relativePath.replace(/\.md$/, "").replace(/\//g, "-");
105
+ commands.push({
106
+ name,
107
+ frontmatter,
108
+ template: body
109
+ });
110
+ }
111
+ return commands;
112
+ }
113
+ async function loadPersonality() {
114
+ const settingsPath = ".opencode/knowledge/settings.json";
115
+ if (!existsSync2(settingsPath)) {
116
+ const errorMsg = `\u274C CONFIGURATION ERROR: Settings file not found at ${settingsPath}. Please create this file with {"role": "your_role"}`;
117
+ await logToFile(errorMsg);
118
+ throw new Error(errorMsg);
119
+ }
120
+ let role;
121
+ try {
122
+ const settingsContent = await readFile2(settingsPath, "utf-8");
123
+ const settings = JSON.parse(settingsContent);
124
+ if (!settings.role) {
125
+ const errorMsg = `\u274C CONFIGURATION ERROR: Settings file exists but missing 'role' field. Please add {"role": "your_role"} to ${settingsPath}`;
126
+ await logToFile(errorMsg);
127
+ throw new Error(errorMsg);
128
+ }
129
+ role = settings.role;
130
+ await logToFile(`\u2705 Settings loaded: role="${role}" from ${settingsPath}`);
131
+ } catch (error) {
132
+ if (error instanceof Error && error.message.includes("CONFIGURATION ERROR")) {
133
+ throw error;
134
+ }
135
+ const errorMsg = `\u274C Error parsing settings.json: ${error}`;
136
+ await logToFile(errorMsg);
137
+ throw new Error(errorMsg);
138
+ }
139
+ const __dirname2 = path.dirname(fileURLToPath(import.meta.url));
140
+ let personalityPath = path.join(__dirname2, "..", "templates", "personalities", `${role}.txt`);
141
+ if (!existsSync2(personalityPath)) {
142
+ personalityPath = path.join(__dirname2, "templates", "personalities", `${role}.txt`);
143
+ }
144
+ if (!existsSync2(personalityPath)) {
145
+ const errorMsg = `\u274C CONFIGURATION ERROR: Personality file not found at ${personalityPath}. Available roles should have a corresponding .txt file in templates/personalities/`;
146
+ await logToFile(errorMsg);
147
+ throw new Error(errorMsg);
148
+ }
149
+ const content = await readFile2(personalityPath, "utf-8");
150
+ await logToFile(`\u2705 Personality loaded from: ${personalityPath}`);
151
+ return content.trim();
152
+ }
153
+ var opencodeKnowledge = async (ctx) => {
154
+ await logToFile("Plugin initialized");
155
+ const commands = await loadCommands();
156
+ return {
157
+ async config(config) {
158
+ config.command = config.command ?? {};
159
+ for (const cmd of commands) {
160
+ let template = cmd.template;
161
+ template = template.replace("{{CURRENT_TIME}}", new Date().toISOString());
162
+ config.command[cmd.name] = {
163
+ template,
164
+ description: cmd.frontmatter.description,
165
+ agent: cmd.frontmatter.agent,
166
+ model: cmd.frontmatter.model,
167
+ subtask: cmd.frontmatter.subtask
168
+ };
169
+ }
170
+ },
171
+ "chat.message": async (input, output) => {
172
+ try {
173
+ const state = getSessionState(input.sessionID);
174
+ if (state.isFirstPrompt) {
175
+ await logToFile(`\uD83C\uDFAF First message in session ${input.sessionID} - injecting personality`);
176
+ const personality = await loadPersonality();
177
+ const personalityPart = {
178
+ type: "text",
179
+ text: `## Role Context
180
+
181
+ ${personality}`,
182
+ id: `personality-${Date.now()}`,
183
+ sessionID: input.sessionID,
184
+ messageID: input.messageID || ""
185
+ };
186
+ output.parts.push(personalityPart);
187
+ updateSessionState(input.sessionID, { isFirstPrompt: false });
188
+ await logToFile("\u2705 Personality injected on first message!");
189
+ } else {
190
+ await logToFile(`\u23ED\uFE0F Subsequent message - skipping personality injection`);
191
+ }
192
+ } catch (error) {
193
+ await logToFile(`\u274C Error in chat.message: ${error}`);
194
+ }
195
+ },
196
+ event: async ({ event }) => {
197
+ try {
198
+ if (event.type === "session.created") {
199
+ await logToFile("\uD83D\uDE80 session.created event");
200
+ const eventData = event;
201
+ const sessionId = eventData.properties?.info?.id;
202
+ if (!sessionId) {
203
+ const errorMsg = `\u274C Could not extract session ID from session.created event`;
204
+ await logToFile(errorMsg);
205
+ await logToFile(`Event structure: ${JSON.stringify(eventData)}`);
206
+ throw new Error(errorMsg);
207
+ }
208
+ await logToFile(`\u2705 Extracted session ID: ${sessionId}`);
209
+ await createSessionState(sessionId);
210
+ const state = getSessionState(sessionId);
211
+ await logToFile(`\u2705 Session state created for session ${sessionId} with role: ${state.role}`);
212
+ }
213
+ } catch (error) {
214
+ await logToFile(`\u274C Error in event: ${error}`);
215
+ }
216
+ }
217
+ };
218
+ };
219
+ export {
220
+ opencodeKnowledge
221
+ };
@@ -0,0 +1,8 @@
1
+ ## Knowledge Context
2
+
3
+ You have access to an engineering knowledge base. Core areas include **{{CORE_TAGS}}** and key packages: **{{CORE_PACKAGES}}**.
4
+
5
+ ### Your Task
6
+ {{USER_PROMPT}}
7
+
8
+ Use knowledge_load and knowledge_search tools to access relevant information as needed.
@@ -9,22 +9,10 @@ You have access to a comprehensive knowledge base containing {{CATEGORIES_COUNT}
9
9
  **Packages:**
10
10
  {{CORE_PACKAGES_LIST}}
11
11
 
12
- ### Available Knowledge Tools
12
+ ### Your Task
13
+ {{USER_PROMPT}}
13
14
 
14
- You have access to the following tools for working with the knowledge vault:
15
+ ### Knowledge Loading
16
+ You can load specific knowledge packages using the knowledge_load tool when relevant to the task at hand. Focus on packages that match the technical domain or problem you're solving.
15
17
 
16
- **knowledge_search** - Search for packages by tags
17
- - Use this to discover relevant knowledge packages
18
- - Provide comma-separated tags (e.g., "typescript,react,testing")
19
- - Returns ranked list of matching packages with relevance scores
20
-
21
- **knowledge_load** - Load packages into context
22
- - Use this to inject knowledge package content into the session
23
- - Provide comma-separated paths (e.g., "standards/code-conventions.md")
24
- - Returns package content and metadata for your reference
25
-
26
- **knowledge_index** - Rebuild catalog (rarely needed)
27
- - Use this if search results seem outdated or after adding packages
28
- - Automatically runs on session start
29
-
30
- Use these tools proactively when you need domain-specific guidance or best practices.
18
+ Available knowledge packages can be discovered by searching for specific tags, technologies, or domains using the knowledge_search tool.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opencode-knowledge",
3
- "version": "0.3.4-next.1",
3
+ "version": "0.3.4",
4
4
  "description": "An OpenCode plugin",
5
5
  "author": {
6
6
  "name": "msegoviadev",