opencodekit 0.12.6 → 0.12.7

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 (44) hide show
  1. package/dist/index.js +5 -17
  2. package/dist/template/.opencode/agent/build.md +32 -21
  3. package/dist/template/.opencode/agent/explore.md +27 -16
  4. package/dist/template/.opencode/agent/planner.md +103 -63
  5. package/dist/template/.opencode/agent/review.md +31 -23
  6. package/dist/template/.opencode/agent/rush.md +27 -19
  7. package/dist/template/.opencode/agent/scout.md +27 -19
  8. package/dist/template/.opencode/agent/vision.md +29 -19
  9. package/dist/template/.opencode/command/accessibility-check.md +1 -0
  10. package/dist/template/.opencode/command/analyze-mockup.md +1 -0
  11. package/dist/template/.opencode/command/analyze-project.md +2 -1
  12. package/dist/template/.opencode/command/brainstorm.md +2 -1
  13. package/dist/template/.opencode/command/design-audit.md +1 -0
  14. package/dist/template/.opencode/command/finish.md +39 -4
  15. package/dist/template/.opencode/command/implement.md +26 -6
  16. package/dist/template/.opencode/command/init.md +1 -0
  17. package/dist/template/.opencode/command/pr.md +28 -1
  18. package/dist/template/.opencode/command/research-ui.md +1 -0
  19. package/dist/template/.opencode/command/research.md +1 -0
  20. package/dist/template/.opencode/command/review-codebase.md +1 -0
  21. package/dist/template/.opencode/command/status.md +3 -2
  22. package/dist/template/.opencode/command/summarize.md +2 -1
  23. package/dist/template/.opencode/command/ui-review.md +1 -0
  24. package/dist/template/.opencode/memory/project/architecture.md +59 -6
  25. package/dist/template/.opencode/memory/project/commands.md +20 -164
  26. package/dist/template/.opencode/memory/user.md +24 -7
  27. package/dist/template/.opencode/opencode.json +496 -496
  28. package/dist/template/.opencode/package.json +1 -1
  29. package/dist/template/.opencode/skill/condition-based-waiting/example.ts +71 -65
  30. package/dist/template/.opencode/tool/memory-read.ts +57 -57
  31. package/dist/template/.opencode/tool/memory-update.ts +53 -53
  32. package/dist/template/.opencode/tsconfig.json +19 -19
  33. package/package.json +4 -16
  34. package/dist/template/.opencode/command.backup/analyze-project.md +0 -465
  35. package/dist/template/.opencode/command.backup/finish.md +0 -167
  36. package/dist/template/.opencode/command.backup/implement.md +0 -143
  37. package/dist/template/.opencode/command.backup/pr.md +0 -252
  38. package/dist/template/.opencode/command.backup/status.md +0 -376
  39. package/dist/template/.opencode/lib/lsp/client.ts +0 -614
  40. package/dist/template/.opencode/lib/lsp/config.ts +0 -199
  41. package/dist/template/.opencode/lib/lsp/constants.ts +0 -339
  42. package/dist/template/.opencode/lib/lsp/types.ts +0 -138
  43. package/dist/template/.opencode/lib/lsp/utils.ts +0 -190
  44. package/dist/template/.opencode/memory/project/SHELL_OUTPUT_MIGRATION_PLAN.md +0 -551
@@ -3,6 +3,7 @@ description: Analyze UI mockup or screenshot with structured output
3
3
  argument-hint: "<image-path> [focus: layout|colors|components|typography|a11y|all] [--quick|--deep] [--compare <file>]"
4
4
  agent: vision
5
5
  model: proxypal/gemini-3-flash-preview
6
+ subtask: true
6
7
  ---
7
8
 
8
9
  # Analyze Mockup: $ARGUMENTS
@@ -1,7 +1,8 @@
1
1
  ---
2
2
  description: Analyze project health, status, and ready work with metrics
3
3
  argument-hint: "[--quick|--deep|--health|--security]"
4
- agent: planner
4
+ agent: explore
5
+ subtask: true
5
6
  ---
6
7
 
7
8
  # Analyze Project
@@ -1,7 +1,8 @@
1
1
  ---
2
2
  description: Brainstorm and explore ideas with structured ideation
3
3
  argument-hint: "<topic or bead-id> [--quick]"
4
- agent: build
4
+ agent: planner
5
+ subtask: true
5
6
  ---
6
7
 
7
8
  # Brainstorm: $ARGUMENTS
@@ -3,6 +3,7 @@ description: Audit design system from screenshots or codebase
3
3
  argument-hint: "<screenshots-path|codebase|both> [output: tokens|report|both] [--quick|--deep]"
4
4
  agent: vision
5
5
  model: proxypal/gemini-3-pro-preview
6
+ subtask: true
6
7
  ---
7
8
 
8
9
  # Design Audit: $ARGUMENTS
@@ -76,11 +76,38 @@ Read the spec and check each criterion:
76
76
 
77
77
  For each success criterion listed, run its verification. All must pass. If something's missing, go back and implement it.
78
78
 
79
- ## Commit Everything
79
+ ## Review Changes (Ask Before Commit)
80
+
81
+ Show what would be committed:
80
82
 
81
83
  ```bash
82
84
  git add -A
83
85
  git status
86
+ git diff --cached --stat
87
+ ```
88
+
89
+ **Present the changes to the user:**
90
+
91
+ ```
92
+ Ready to Commit
93
+ ━━━━━━━━━━━━━━
94
+
95
+ Files changed:
96
+ [list from git status]
97
+
98
+ Summary: $ARGUMENTS - [what was done]
99
+
100
+ Would you like me to:
101
+ 1. Commit these changes
102
+ 2. Show full diff first
103
+ 3. Skip commit (I'll review manually)
104
+ ```
105
+
106
+ **Wait for user confirmation before proceeding.**
107
+
108
+ If user confirms commit:
109
+
110
+ ```bash
84
111
  git commit -m "$ARGUMENTS: [what was done]
85
112
 
86
113
  - [change 1]
@@ -89,14 +116,22 @@ git commit -m "$ARGUMENTS: [what was done]
89
116
  Closes: $ARGUMENTS"
90
117
  ```
91
118
 
92
- ## Close The Task
119
+ ## Close The Task (Ask First)
120
+
121
+ **Ask the user:**
122
+
123
+ ```
124
+ Close bead $ARGUMENTS?
125
+ - Yes, close it
126
+ - No, keep it open for now
127
+ ```
128
+
129
+ If user confirms:
93
130
 
94
131
  ```bash
95
132
  bd close $ARGUMENTS --reason "Completed: [1-line summary]"
96
133
  ```
97
134
 
98
- This closes the task. Sync separately if needed.
99
-
100
135
  ## Create Review (Optional But Recommended)
101
136
 
102
137
  If this was non-trivial work, document what happened:
@@ -112,21 +112,41 @@ npm test && npm run type-check
112
112
 
113
113
  ## Complete
114
114
 
115
- If all gates pass:
115
+ If all gates pass, show what was done:
116
116
 
117
117
  ```bash
118
118
  git add -A
119
- git commit -m "$ARGUMENTS: [summary]"
120
- bd sync
119
+ git status
120
+ git diff --cached --stat
121
121
  ```
122
122
 
123
- Report what was done and suggest next step:
123
+ **Present to user:**
124
124
 
125
125
  ```
126
- Done: $ARGUMENTS
126
+ Implementation Complete: $ARGUMENTS
127
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
127
128
 
129
+ Tests: Pass ✓
128
130
  Changes: [files modified]
129
- Tests: Pass
131
+
132
+ Would you like me to:
133
+ 1. Commit these changes
134
+ 2. Show full diff first
135
+ 3. Skip commit (I'll review manually)
136
+ ```
137
+
138
+ **Wait for user confirmation before committing.**
139
+
140
+ If user confirms:
141
+
142
+ ```bash
143
+ git commit -m "$ARGUMENTS: [summary]"
144
+ bd sync
145
+ ```
146
+
147
+ Suggest next step:
148
+
149
+ ```
130
150
  Next: /finish $ARGUMENTS
131
151
  ```
132
152
 
@@ -2,6 +2,7 @@
2
2
  description: Initialize project for AI-assisted development (creates AGENTS.md + memory files)
3
3
  argument-hint: "[--deep] [--skip-questions]"
4
4
  agent: planner
5
+ subtask: true
5
6
  ---
6
7
 
7
8
  # Init: $ARGUMENTS
@@ -111,7 +111,34 @@ Extract from artifacts:
111
111
  - **Estimation Accuracy** from review.md
112
112
  - **Success Criteria** verification
113
113
 
114
- ## Phase 4: Push Branch
114
+ ## Phase 4: Review Before Push
115
+
116
+ Show what will be pushed:
117
+
118
+ ```bash
119
+ git log origin/$(git branch --show-current)..HEAD --oneline 2>/dev/null || git log --oneline -5
120
+ git diff --stat origin/$(git branch --show-current)..HEAD 2>/dev/null || git diff --stat HEAD~3..HEAD
121
+ ```
122
+
123
+ **Present to user:**
124
+
125
+ ```
126
+ Ready to Push & Create PR
127
+ ━━━━━━━━━━━━━━━━━━━━━━━━━
128
+
129
+ Branch: [current branch]
130
+ Commits: [N commits ahead of origin]
131
+
132
+ Would you like me to:
133
+ 1. Push and create PR
134
+ 2. Push and create draft PR
135
+ 3. Show full diff first
136
+ 4. Skip (I'll push manually)
137
+ ```
138
+
139
+ **Wait for user confirmation before proceeding.**
140
+
141
+ If user confirms, push:
115
142
 
116
143
  ```bash
117
144
  git push -u origin $(git branch --show-current)
@@ -3,6 +3,7 @@ description: Research UI/UX patterns, design systems, and component implementati
3
3
  argument-hint: "<topic-or-path> [bead-id] [--audit] [--compare]"
4
4
  agent: vision
5
5
  model: proxypal/gemini-3-flash-preview
6
+ subtask: true
6
7
  ---
7
8
 
8
9
  # Research UI: $ARGUMENTS
@@ -2,6 +2,7 @@
2
2
  description: Research a topic or bead before implementation
3
3
  argument-hint: "<bead-id> [--quick|--thorough]"
4
4
  agent: scout
5
+ subtask: true
5
6
  ---
6
7
 
7
8
  # Research: $ARGUMENTS
@@ -2,6 +2,7 @@
2
2
  description: Review code for quality, security, and compliance
3
3
  argument-hint: "[path|bead-id|pr-number|'all'] [--quick|--thorough]"
4
4
  agent: review
5
+ subtask: true
5
6
  ---
6
7
 
7
8
  # Review: $ARGUMENTS
@@ -2,6 +2,7 @@
2
2
  description: Comprehensive project and session status dashboard
3
3
  argument-hint: "[--full] [--health] [--sessions] [--git]"
4
4
  agent: explore
5
+ subtask: true
5
6
  ---
6
7
 
7
8
  # Status Dashboard
@@ -32,8 +33,8 @@ Run all status checks simultaneously:
32
33
 
33
34
  ```typescript
34
35
  // Custom tools (message inbox, locks)
35
- bd-inbox({ n: 5, unread: true, to: "all" });
36
- bd-release(); // Lists active locks when called with no args
36
+ bd - inbox({ n: 5, unread: true, to: "all" });
37
+ bd - release(); // Lists active locks when called with no args
37
38
 
38
39
  // Built-in tools
39
40
  list_sessions({ project: "current", since: "today", limit: 5 });
@@ -1,7 +1,8 @@
1
1
  ---
2
2
  description: Generate AI summary of sessions for quick context recovery
3
3
  argument-hint: "[session_reference] [--compare] [--focus=<topic>]"
4
- agent: build
4
+ agent: explore
5
+ subtask: true
5
6
  ---
6
7
 
7
8
  # Summarize
@@ -3,6 +3,7 @@ description: Review UI/UX design for quality, aesthetics, and best practices
3
3
  argument-hint: "<image-or-component-path> [--bead=<id>] [--responsive] [--dark-mode]"
4
4
  agent: vision
5
5
  model: proxypal/gemini-3-pro-preview
6
+ subtask: true
6
7
  ---
7
8
 
8
9
  # UI Review: $ARGUMENTS
@@ -1,26 +1,79 @@
1
1
  ---
2
2
  purpose: Key modules, directory structure, architectural decisions
3
- updated: 2024-12-21
3
+ updated: 2025-01-06
4
4
  ---
5
5
 
6
6
  # Project Architecture
7
7
 
8
8
  ## Directory Structure
9
9
 
10
- <!-- Key directories and their purpose -->
10
+ ```
11
+ src/
12
+ index.ts # CLI entry point (cac-based)
13
+ commands/
14
+ init.ts # ock init - scaffolds .opencode/
15
+ agent.ts # ock agent - manage agents
16
+ skill.ts # ock skill - manage skills
17
+ config.ts # ock config - edit opencode.json
18
+ upgrade.ts # ock upgrade - update templates
19
+ menu.ts # Interactive menu, doctor, status
20
+ completion.ts # Shell completions
21
+ utils/
22
+ logger.ts # Logging utilities
23
+ errors.ts # Error handling
24
+ safe-prompts.ts # @clack/prompts wrappers
25
+
26
+ dist/
27
+ index.js # Built CLI bundle
28
+ template/.opencode/ # Template files copied during init
29
+
30
+ .opencode/ # OpenCode configuration (source of truth)
31
+ agent/ # Agent definitions
32
+ command/ # Workflow commands
33
+ skills/ # Skills library
34
+ tool/ # Custom tools (memory-*, bd-*)
35
+ plugin/ # OpenCode plugins
36
+ memory/ # Persistent knowledge
37
+
38
+ .beads/ # Task tracking database
39
+ ```
11
40
 
12
41
  ## Key Modules
13
42
 
14
- <!-- Core files/modules and what they do -->
43
+ ### CLI (src/index.ts)
44
+
45
+ Entry point using `cac` library. Registers commands, parses args, handles errors.
46
+
47
+ ### Init Command (src/commands/init.ts)
48
+
49
+ Core command - copies `.opencode/` template from dist to target project.
50
+
51
+ ### Build Process
52
+
53
+ 1. `bun build` bundles src/index.ts → dist/index.js
54
+ 2. rsync copies .opencode/ → dist/template/.opencode/
55
+ 3. Published package includes dist/ only
15
56
 
16
57
  ## Data Flow
17
58
 
18
- <!-- How data moves through the system -->
59
+ ```
60
+ User runs: npx opencodekit init
61
+ → dist/index.js executes
62
+ → init command copies dist/template/.opencode/ to ./.opencode/
63
+ → User has full OpenCode setup
64
+ ```
19
65
 
20
66
  ## External Dependencies
21
67
 
22
- <!-- Critical third-party services, APIs -->
68
+ - **cac**: CLI framework
69
+ - **@clack/prompts**: Interactive prompts
70
+ - **zod**: Schema validation
71
+ - **beads-village**: Task tracking integration
72
+ - **@opencode-ai/plugin**: Plugin SDK
23
73
 
24
74
  ## Architectural Decisions
25
75
 
26
- <!-- Why things are structured this way -->
76
+ 1. **Bun-first**: Uses Bun for speed, but builds to Node-compatible output
77
+ 2. **Template bundling**: .opencode/ copied at build time, not runtime
78
+ 3. **No transpilation**: TypeScript bundled directly by Bun
79
+ 4. **Colocated tests**: Tests live next to source files (*.test.ts)
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  purpose: Build, test, lint, deploy commands discovered for this project
3
- updated: 2025-01-05
3
+ updated: 2025-01-06
4
4
  ---
5
5
 
6
6
  # Project Commands
@@ -8,190 +8,46 @@ updated: 2025-01-05
8
8
  ## Build
9
9
 
10
10
  ```bash
11
- npm run type-check # TypeScript type checking only (no emit)
11
+ npm run build # Bundles src/index.ts + copies .opencode/ to dist/template/
12
+ npm run typecheck # TypeScript type checking only (no emit)
12
13
  ```
13
14
 
14
15
  ## Test
15
16
 
16
17
  ```bash
17
- pytest tests/ -v # Run all Python tests
18
- pytest tests/test_specific.py -v # Run single test file
19
- pytest tests/ --cov=. --cov-report=html # Coverage report
18
+ bun test # Run all tests
19
+ bun test src/commands/init.ts # Run single test file
20
+ bun test --watch # Watch mode
20
21
  ```
21
22
 
22
23
  ## Lint
23
24
 
24
- <!-- npm run lint, ruff check, etc. -->
25
-
26
- ## Deploy
27
-
28
- <!-- Deployment commands if applicable -->
29
-
30
- ## OpenCode Configuration
31
-
32
- ### Environment Variables
33
-
34
25
  ```bash
35
- OPENCODE_EXPERIMENTAL=true # Enable experimental features (LSP, batch)
36
- OPENCODE_EXPERIMENTAL_LSP_TOOL=true # Enable built-in LSP navigation tool
37
- OPENCODE_DISABLE_LSP_DOWNLOAD=true # Skip auto-downloading LSP servers
38
- OPENCODE_DISABLE_AUTOCOMPACT=true # Disable automatic session compaction
39
- OPENCODE_DISABLE_PRUNE=true # Disable DCP pruning
26
+ npm run lint # Check with Biome
27
+ npm run lint:fix # Auto-fix issues
40
28
  ```
41
29
 
42
- ### Configuration File Priorities
43
-
44
- 1. Global: `~/.config/opencode/opencode.json` or `dcp.jsonc`
45
- 2. Config Dir: `$OPENCODE_CONFIG_DIR/opencode.json`
46
- 3. Project: `.opencode/opencode.json` (highest priority)
30
+ ## Development
47
31
 
48
- ### DCP Nudge Tuning
49
-
50
- ```jsonc
51
- // Lower nudgeFrequency = more aggressive pruning suggestions
52
- "nudgeFrequency": 8 // LLM nudged every 8 tool calls (default: 10)
32
+ ```bash
33
+ bun run src/index.ts # Run CLI directly
34
+ npm run dev # Same as above
35
+ bun build src/index.ts --compile --outfile ock # Compile to binary
53
36
  ```
54
37
 
55
- ## Beads CLI (Core)
56
-
57
- The `bd` command is your issue tracker. JSONL is source of truth, SQLite is cache.
58
-
59
- ### Essential Commands
38
+ ## Beads (Task Tracking)
60
39
 
61
40
  ```bash
62
- bd ready # Unblocked tasks (use this to find work)
41
+ bd ready # Find unblocked tasks
63
42
  bd list --status=open # All open issues
64
43
  bd show <id> # Full details
65
- bd create "Title" -t task -p 2 # Create (type: task/bug/feature/epic, priority: 0-4)
44
+ bd create "Title" -t task -p 2 # Create task
66
45
  bd update <id> --status in_progress # Claim work
67
46
  bd close <id> --reason "Done" # Complete
68
- bd sync # Export/commit/push (always run at session end)
69
- ```
70
-
71
- ### Dependencies
72
-
73
- ```bash
74
- bd dep add <child> <parent> --type blocks # Child blocked until parent closes
75
- bd dep tree <id> # Visualize dependency chain
76
- bd blocked # Show all blocked issues
47
+ bd sync # Sync with git (always run at session end)
77
48
  ```
78
49
 
79
- ### Coordination
80
-
81
- ```bash
82
- bd list --status in_progress # See what's claimed by others
83
- git pull && bd import # Get latest from team
84
- bd sync # Push your changes
85
- ```
86
-
87
- ### Priority Levels
88
-
89
- - **P0** - Critical (security, data loss)
90
- - **P1** - High (major features, important bugs)
91
- - **P2** - Medium (default)
92
- - **P3** - Low
93
- - **P4** - Backlog
94
-
95
- ### Sandbox Mode
96
-
97
- If running in restricted environment (Claude Code, etc.):
98
-
99
- ```bash
100
- bd --sandbox ready
101
- # Or: bd --no-daemon --no-auto-flush --no-auto-import list
102
- ```
103
-
104
- ## Beads Plugin Tools (For OpenCode Agents)
105
-
106
- This project's plugin (`.opencode/plugin/beads.ts`) provides typed tools that wrap the CLI.
107
-
108
- ### Session Lifecycle
109
-
110
- ```typescript
111
- bd_init({ role: "build" }); // Join workspace - MUST call first
112
- bd_claim(); // Get next ready task, mark in_progress
113
- bd_reserve({ paths: ["src/foo.ts"] }); // Lock files before editing
114
- // ... do work ...
115
- bd_done({ id: "bd-xxx", msg: "Done" }); // Close + release locks + sync
116
- ```
117
-
118
- ### Task Management
119
-
120
- ```typescript
121
- bd_add({ title: "Task", pri: 2, type: "task" }); // Create issue
122
- bd_show({ id: "bd-xxx" }); // Get full details
123
- bd_ls({ status: "open", limit: 10 }); // List issues
124
- bd_ready(); // Ready-to-work tasks
125
- bd_update({ id: "bd-xxx", status: "in_progress" }); // Update issue
126
- bd_search({ query: "auth" }); // Search issues
127
- ```
128
-
129
- ### File Locking (Plugin-Only)
130
-
131
- ```typescript
132
- bd_reserve({ paths: ["src/a.ts", "src/b.ts"], ttl: 600 }); // Lock files
133
- bd_reservations(); // List active locks
134
- bd_release({ paths: ["src/a.ts"] }); // Release specific
135
- bd_release(); // Release all
136
- ```
137
-
138
- ### Messaging (Plugin-Only)
139
-
140
- ```typescript
141
- bd_msg({ subj: "Done", to: "all", global: true }); // Broadcast
142
- bd_inbox({ n: 5, unread: true }); // Check messages
143
- bd_ack({ ids: ["msg-abc", "msg-def"] }); // Mark messages as read
144
- ```
145
-
146
- ### Agent Coordination (Plugin-Only)
147
-
148
- ```typescript
149
- bd_whois(); // See all agents and their current work
150
- bd_whois({ agent: "build-abc" }); // Lookup specific agent
151
- ```
152
-
153
- ### Maintenance
154
-
155
- ```typescript
156
- bd_sync(); // Sync with git
157
- bd_status({ include_agents: true }); // Workspace overview
158
- bd_doctor(); // Check database health
159
- bd_cleanup({ days: 7 }); // Remove old closed issues
160
- ```
161
-
162
- ## Beads Workflow
163
-
164
- ### Start Work
165
-
166
- ```bash
167
- bd ready # Find unblocked task
168
- bd update bd-xxx --status in_progress # Claim it
169
- git checkout -b bd-xxx # Create branch
170
- ```
171
-
172
- ### During Work
173
-
174
- ```bash
175
- git commit -m "WIP: bd-xxx - [progress]" # Checkpoint commits
176
- bd sync # Sync beads state
177
- ```
178
-
179
- ### End Session
180
-
181
- ```bash
182
- git add -A && git commit -m "bd-xxx: [summary]"
183
- bd close bd-xxx --reason "Completed: [what]"
184
- bd sync
185
- git push
186
- ```
187
-
188
- ### Handoff (If Not Finishing)
189
-
190
- ```bash
191
- git commit -m "WIP: bd-xxx - [where stopped]"
192
- # Create handoff in .beads/artifacts/bd-xxx/handoffs/
193
- bd sync
194
- git push
195
- ```
50
+ ## CI/CD
196
51
 
197
- Resume later with: `/resume bd-xxx`
52
+ - GitHub Actions workflow at `.github/workflows/opencode.yml`
53
+ - Triggered by `/oc` or `/opencode` comments on issues/PRs
@@ -1,21 +1,38 @@
1
1
  ---
2
2
  purpose: User identity, preferences, communication style
3
- updated: 2024-12-21
3
+ updated: 2025-01-06
4
4
  ---
5
5
 
6
6
  # User Profile
7
7
 
8
8
  ## Identity
9
- <!-- Name, role, git contributor identity -->
9
+
10
+ - Name: huynhgiabuu
11
+ - Git email: buub1309120@gmail.com
10
12
 
11
13
  ## Communication Preferences
12
- <!-- Concise vs detailed, tone preferences -->
14
+
15
+ - Style: Detailed responses preferred
16
+ - Explanations welcome when helpful
13
17
 
14
18
  ## Workflow Preferences
15
- <!-- Preferred tools, testing habits, review style -->
19
+
20
+ - Git commits: Ask first before committing
21
+ - Beads updates: Ask first before modifying task state
22
+ - Auto-actions: Disabled - always confirm before state changes
16
23
 
17
24
  ## Technical Preferences
18
- <!-- Languages, frameworks, patterns they favor -->
19
25
 
20
- ## Things to Remember
21
- <!-- Personal quirks, pet peeves, preferences learned -->
26
+ - Runtime: Bun
27
+ - Language: TypeScript
28
+ - Linter: Biome
29
+
30
+ ## Rules to Always Follow
31
+
32
+ - Run `npm run lint:fix` before any commit
33
+ - Validate changes with `npm run typecheck`
34
+ - Don't modify dist/ directly (it's built output)
35
+ - Ask before adding new dependencies
36
+ - Ask before changing .opencode/ structure
37
+ - Never commit secrets or .env files
38
+ - Never force push to main