@fro.bot/systematic 1.14.0 → 1.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/skills/agent-browser/SKILL.md +1 -0
- package/skills/agent-native-architecture/SKILL.md +4 -4
- package/skills/agent-native-architecture/references/files-universal-interface.md +1 -1
- package/skills/agent-native-architecture/references/product-implications.md +1 -1
- package/skills/brainstorming/SKILL.md +1 -0
- package/skills/compound-docs/SKILL.md +14 -13
- package/skills/compound-docs/assets/critical-pattern-template.md +1 -1
- package/skills/compound-docs/assets/resolution-template.md +3 -3
- package/skills/compound-docs/references/yaml-schema.md +2 -2
- package/skills/create-agent-skills/SKILL.md +169 -192
- package/skills/create-agent-skills/references/api-security.md +24 -24
- package/skills/create-agent-skills/references/executable-code.md +1 -1
- package/skills/create-agent-skills/references/official-spec.md +74 -125
- package/skills/create-agent-skills/references/skill-structure.md +109 -329
- package/skills/create-agent-skills/workflows/add-reference.md +3 -3
- package/skills/create-agent-skills/workflows/add-script.md +2 -2
- package/skills/create-agent-skills/workflows/add-template.md +1 -1
- package/skills/create-agent-skills/workflows/add-workflow.md +5 -5
- package/skills/create-agent-skills/workflows/audit-skill.md +6 -6
- package/skills/create-agent-skills/workflows/create-domain-expertise-skill.md +8 -8
- package/skills/create-agent-skills/workflows/create-new-skill.md +8 -8
- package/skills/create-agent-skills/workflows/upgrade-to-router.md +5 -5
- package/skills/create-agent-skills/workflows/verify-skill.md +4 -4
- package/skills/document-review/SKILL.md +88 -0
- package/skills/file-todos/SKILL.md +3 -2
- package/skills/file-todos/assets/todo-template.md +1 -1
- package/skills/frontend-design/SKILL.md +43 -0
- package/skills/git-worktree/SKILL.md +23 -22
- package/skills/git-worktree/scripts/worktree-manager.sh +2 -10
- package/skills/orchestrating-swarms/SKILL.md +1718 -0
|
@@ -14,23 +14,23 @@ When Claude executes this, the full command with expanded `$API_KEY` appears in
|
|
|
14
14
|
</the_problem>
|
|
15
15
|
|
|
16
16
|
<the_solution>
|
|
17
|
-
Use `~/.
|
|
17
|
+
Use `~/.config/opencode/scripts/secure-api.sh` - a wrapper that loads credentials internally.
|
|
18
18
|
|
|
19
19
|
<for_supported_services>
|
|
20
20
|
```bash
|
|
21
21
|
# ✅ GOOD - No credentials visible
|
|
22
|
-
~/.
|
|
22
|
+
~/.config/opencode/scripts/secure-api.sh <service> <operation> [args]
|
|
23
23
|
|
|
24
24
|
# Examples:
|
|
25
|
-
~/.
|
|
26
|
-
~/.
|
|
25
|
+
~/.config/opencode/scripts/secure-api.sh facebook list-campaigns
|
|
26
|
+
~/.config/opencode/scripts/secure-api.sh ghl search-contact "email@example.com"
|
|
27
27
|
```
|
|
28
28
|
</for_supported_services>
|
|
29
29
|
|
|
30
30
|
<adding_new_services>
|
|
31
31
|
When building a new skill that requires API calls:
|
|
32
32
|
|
|
33
|
-
1. **Add operations to the wrapper** (`~/.
|
|
33
|
+
1. **Add operations to the wrapper** (`~/.config/opencode/scripts/secure-api.sh`):
|
|
34
34
|
|
|
35
35
|
```bash
|
|
36
36
|
case "$SERVICE" in
|
|
@@ -67,14 +67,14 @@ yourservice)
|
|
|
67
67
|
;;
|
|
68
68
|
```
|
|
69
69
|
|
|
70
|
-
3. **Add credential placeholders to `~/.
|
|
70
|
+
3. **Add credential placeholders to `~/.config/opencode/.env`** using profile naming:
|
|
71
71
|
|
|
72
72
|
```bash
|
|
73
73
|
# Check if entries already exist
|
|
74
|
-
grep -q "YOURSERVICE_MAIN_API_KEY=" ~/.
|
|
75
|
-
echo -e "\n# Your Service - Main profile\nYOURSERVICE_MAIN_API_KEY=\nYOURSERVICE_MAIN_ACCOUNT_ID=" >> ~/.
|
|
74
|
+
grep -q "YOURSERVICE_MAIN_API_KEY=" ~/.config/opencode/.env 2>/dev/null || \
|
|
75
|
+
echo -e "\n# Your Service - Main profile\nYOURSERVICE_MAIN_API_KEY=\nYOURSERVICE_MAIN_ACCOUNT_ID=" >> ~/.config/opencode/.env
|
|
76
76
|
|
|
77
|
-
echo "Added credential placeholders to ~/.
|
|
77
|
+
echo "Added credential placeholders to ~/.config/opencode/.env - user needs to fill them in"
|
|
78
78
|
```
|
|
79
79
|
|
|
80
80
|
4. **Document profile workflow in your SKILL.md**:
|
|
@@ -88,12 +88,12 @@ echo "Added credential placeholders to ~/.claude/.env - user needs to fill them
|
|
|
88
88
|
|
|
89
89
|
1. **Check for saved profile:**
|
|
90
90
|
```bash
|
|
91
|
-
~/.
|
|
91
|
+
~/.config/opencode/scripts/profile-state get yourservice
|
|
92
92
|
```
|
|
93
93
|
|
|
94
94
|
2. **If no profile saved, discover available profiles:**
|
|
95
95
|
```bash
|
|
96
|
-
~/.
|
|
96
|
+
~/.config/opencode/scripts/list-profiles yourservice
|
|
97
97
|
```
|
|
98
98
|
|
|
99
99
|
3. **If only ONE profile:** Use it automatically and announce:
|
|
@@ -108,7 +108,7 @@ echo "Added credential placeholders to ~/.claude/.env - user needs to fill them
|
|
|
108
108
|
|
|
109
109
|
5. **Save user's selection:**
|
|
110
110
|
```bash
|
|
111
|
-
~/.
|
|
111
|
+
~/.config/opencode/scripts/profile-state set yourservice <selected_profile>
|
|
112
112
|
```
|
|
113
113
|
|
|
114
114
|
6. **Always announce which profile before calling API:**
|
|
@@ -118,7 +118,7 @@ echo "Added credential placeholders to ~/.claude/.env - user needs to fill them
|
|
|
118
118
|
|
|
119
119
|
7. **Make API call with profile:**
|
|
120
120
|
```bash
|
|
121
|
-
~/.
|
|
121
|
+
~/.config/opencode/scripts/secure-api.sh yourservice:<profile> list-items
|
|
122
122
|
```
|
|
123
123
|
|
|
124
124
|
## Secure API Calls
|
|
@@ -126,11 +126,11 @@ echo "Added credential placeholders to ~/.claude/.env - user needs to fill them
|
|
|
126
126
|
All API calls use profile syntax:
|
|
127
127
|
|
|
128
128
|
```bash
|
|
129
|
-
~/.
|
|
129
|
+
~/.config/opencode/scripts/secure-api.sh yourservice:<profile> <operation> [args]
|
|
130
130
|
|
|
131
131
|
# Examples:
|
|
132
|
-
~/.
|
|
133
|
-
~/.
|
|
132
|
+
~/.config/opencode/scripts/secure-api.sh yourservice:main list-items
|
|
133
|
+
~/.config/opencode/scripts/secure-api.sh yourservice:main get-item <ITEM_ID>
|
|
134
134
|
```
|
|
135
135
|
|
|
136
136
|
**Profile persists for session:** Once selected, use same profile for subsequent operations unless user explicitly changes it.
|
|
@@ -159,7 +159,7 @@ curl -s -X POST \
|
|
|
159
159
|
|
|
160
160
|
Usage:
|
|
161
161
|
```bash
|
|
162
|
-
echo '{"name":"value"}' | ~/.
|
|
162
|
+
echo '{"name":"value"}' | ~/.config/opencode/scripts/secure-api.sh service create-item
|
|
163
163
|
```
|
|
164
164
|
</post_with_json_body>
|
|
165
165
|
|
|
@@ -175,7 +175,7 @@ curl -s -X POST \
|
|
|
175
175
|
</pattern_guidelines>
|
|
176
176
|
|
|
177
177
|
<credential_storage>
|
|
178
|
-
**Location:** `~/.
|
|
178
|
+
**Location:** `~/.config/opencode/.env` (global for all skills, accessible from any directory)
|
|
179
179
|
|
|
180
180
|
**Format:**
|
|
181
181
|
```bash
|
|
@@ -191,7 +191,7 @@ OTHER_BASE_URL=https://api.other.com
|
|
|
191
191
|
**Loading in script:**
|
|
192
192
|
```bash
|
|
193
193
|
set -a
|
|
194
|
-
source ~/.
|
|
194
|
+
source ~/.config/opencode/.env 2>/dev/null || { echo "Error: ~/.config/opencode/.env not found" >&2; exit 1; }
|
|
195
195
|
set +a
|
|
196
196
|
```
|
|
197
197
|
</credential_storage>
|
|
@@ -199,8 +199,8 @@ set +a
|
|
|
199
199
|
<best_practices>
|
|
200
200
|
1. **Never use raw curl with `$VARIABLE` in skill examples** - always use the wrapper
|
|
201
201
|
2. **Add all operations to the wrapper** - don't make users figure out curl syntax
|
|
202
|
-
3. **Auto-create credential placeholders** - add empty fields to `~/.
|
|
203
|
-
4. **Keep credentials in `~/.
|
|
202
|
+
3. **Auto-create credential placeholders** - add empty fields to `~/.config/opencode/.env` immediately when creating the skill
|
|
203
|
+
4. **Keep credentials in `~/.config/opencode/.env`** - one central location, works everywhere
|
|
204
204
|
5. **Document each operation** - show examples in SKILL.md
|
|
205
205
|
6. **Handle errors gracefully** - check for missing env vars, show helpful error messages
|
|
206
206
|
</best_practices>
|
|
@@ -210,7 +210,7 @@ Test the wrapper without exposing credentials:
|
|
|
210
210
|
|
|
211
211
|
```bash
|
|
212
212
|
# This command appears in chat
|
|
213
|
-
~/.
|
|
213
|
+
~/.config/opencode/scripts/secure-api.sh facebook list-campaigns
|
|
214
214
|
|
|
215
215
|
# But API keys never appear - they're loaded inside the script
|
|
216
216
|
```
|
|
@@ -218,9 +218,9 @@ Test the wrapper without exposing credentials:
|
|
|
218
218
|
Verify credentials are loaded:
|
|
219
219
|
```bash
|
|
220
220
|
# Check .env exists
|
|
221
|
-
ls -la ~/.
|
|
221
|
+
ls -la ~/.config/opencode/.env
|
|
222
222
|
|
|
223
223
|
# Check specific variables (without showing values)
|
|
224
|
-
grep -q "YOUR_API_KEY=" ~/.
|
|
224
|
+
grep -q "YOUR_API_KEY=" ~/.config/opencode/.env && echo "API key configured" || echo "API key missing"
|
|
225
225
|
```
|
|
226
226
|
</testing>
|
|
@@ -45,7 +45,7 @@ skill-name/
|
|
|
45
45
|
**Reference pattern**: In SKILL.md, reference scripts using the `scripts/` path:
|
|
46
46
|
|
|
47
47
|
```bash
|
|
48
|
-
python ~/.
|
|
48
|
+
python ~/.config/opencode/skills/skill-name/scripts/analyze.py input.har
|
|
49
49
|
```
|
|
50
50
|
</scripts_directory>
|
|
51
51
|
</file_organization>
|
|
@@ -1,36 +1,56 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Official Skill Specification (2026)
|
|
2
2
|
|
|
3
3
|
Source: [code.claude.com/docs/en/skills](https://code.claude.com/docs/en/skills)
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## Commands and Skills Are Merged
|
|
6
|
+
|
|
7
|
+
Custom slash commands have been merged into skills. A file at `.opencode/commands/review.md` and a skill at `.opencode/skills/review/SKILL.md` both create `/review` and work the same way. Existing `.opencode/commands/` files keep working. Skills add optional features: a directory for supporting files, frontmatter to control invocation, and automatic context loading.
|
|
6
8
|
|
|
7
|
-
|
|
9
|
+
If a skill and a command share the same name, the skill takes precedence.
|
|
10
|
+
|
|
11
|
+
## SKILL.md File Structure
|
|
8
12
|
|
|
9
|
-
|
|
13
|
+
Every skill requires a `SKILL.md` file with YAML frontmatter followed by standard markdown instructions.
|
|
10
14
|
|
|
11
15
|
```markdown
|
|
12
16
|
---
|
|
13
17
|
name: your-skill-name
|
|
14
|
-
description:
|
|
18
|
+
description: What it does and when to use it
|
|
15
19
|
---
|
|
16
20
|
|
|
17
21
|
# Your Skill Name
|
|
18
22
|
|
|
19
23
|
## Instructions
|
|
20
|
-
|
|
24
|
+
Clear, step-by-step guidance.
|
|
21
25
|
|
|
22
26
|
## Examples
|
|
23
|
-
|
|
27
|
+
Concrete examples of using this skill.
|
|
24
28
|
```
|
|
25
29
|
|
|
26
|
-
##
|
|
30
|
+
## Complete Frontmatter Reference
|
|
31
|
+
|
|
32
|
+
All fields are optional. Only `description` is recommended.
|
|
27
33
|
|
|
28
34
|
| Field | Required | Description |
|
|
29
35
|
|-------|----------|-------------|
|
|
30
|
-
| `name` |
|
|
31
|
-
| `description` |
|
|
32
|
-
| `
|
|
33
|
-
| `model` | No |
|
|
36
|
+
| `name` | No | Display name. Lowercase letters, numbers, hyphens only (max 64 chars). Defaults to directory name if omitted. |
|
|
37
|
+
| `description` | Recommended | What it does AND when to use it (max 1024 chars). Claude uses this to decide when to apply the skill. |
|
|
38
|
+
| `argument-hint` | No | Hint shown during autocomplete. Example: `[issue-number]` or `[filename] [format]` |
|
|
39
|
+
| `disable-model-invocation` | No | Set `true` to prevent Claude from auto-loading. Use for manual workflows. Default: `false` |
|
|
40
|
+
| `user-invocable` | No | Set `false` to hide from `/` menu. Use for background knowledge. Default: `true` |
|
|
41
|
+
| `allowed-tools` | No | Tools Claude can use without permission prompts. Example: `Read, Bash(git *)` |
|
|
42
|
+
| `model` | No | Model to use: `haiku`, `sonnet`, or `opus` |
|
|
43
|
+
| `context` | No | Set `fork` to run in isolated subagent context |
|
|
44
|
+
| `agent` | No | Subagent type when `context: fork`. Options: `Explore`, `Plan`, `general-purpose`, or custom agent name |
|
|
45
|
+
| `hooks` | No | Hooks scoped to this skill's lifecycle |
|
|
46
|
+
|
|
47
|
+
## Invocation Control
|
|
48
|
+
|
|
49
|
+
| Frontmatter | User can invoke | Claude can invoke | When loaded into context |
|
|
50
|
+
|-------------|----------------|-------------------|--------------------------|
|
|
51
|
+
| (default) | Yes | Yes | Description always in context, full skill loads when invoked |
|
|
52
|
+
| `disable-model-invocation: true` | Yes | No | Description not in context, full skill loads when you invoke |
|
|
53
|
+
| `user-invocable: false` | No | Yes | Description always in context, full skill loads when invoked |
|
|
34
54
|
|
|
35
55
|
## Skill Locations & Priority
|
|
36
56
|
|
|
@@ -40,146 +60,75 @@ Enterprise (highest priority) → Personal → Project → Plugin (lowest priori
|
|
|
40
60
|
|
|
41
61
|
| Type | Path | Applies to |
|
|
42
62
|
|------|------|-----------|
|
|
43
|
-
|
|
|
44
|
-
|
|
|
45
|
-
|
|
|
46
|
-
|
|
|
63
|
+
| Enterprise | See managed settings | All users in organization |
|
|
64
|
+
| Personal | `~/.config/opencode/skills/<name>/SKILL.md` | You, across all projects |
|
|
65
|
+
| Project | `.opencode/skills/<name>/SKILL.md` | Anyone working in repository |
|
|
66
|
+
| Plugin | `<plugin>/skills/<name>/SKILL.md` | Where plugin is enabled |
|
|
67
|
+
|
|
68
|
+
Plugin skills use a `plugin-name:skill-name` namespace, so they cannot conflict with other levels.
|
|
47
69
|
|
|
48
70
|
## How Skills Work
|
|
49
71
|
|
|
50
|
-
1. **Discovery**: Claude loads only name and description at startup
|
|
51
|
-
2. **Activation**: When your request matches a
|
|
52
|
-
3. **Execution**: Claude follows the
|
|
72
|
+
1. **Discovery**: Claude loads only name and description at startup (2% of context window budget)
|
|
73
|
+
2. **Activation**: When your request matches a skill's description, Claude loads the full content
|
|
74
|
+
3. **Execution**: Claude follows the skill's instructions
|
|
53
75
|
|
|
54
|
-
|
|
76
|
+
## String Substitutions
|
|
55
77
|
|
|
56
|
-
|
|
78
|
+
| Variable | Description |
|
|
79
|
+
|----------|-------------|
|
|
80
|
+
| `$ARGUMENTS` | All arguments passed when invoking |
|
|
81
|
+
| `$ARGUMENTS[N]` | Specific argument by 0-based index |
|
|
82
|
+
| `$N` | Shorthand for `$ARGUMENTS[N]` |
|
|
83
|
+
| `${CLAUDE_SESSION_ID}` | Current session ID |
|
|
57
84
|
|
|
58
|
-
|
|
85
|
+
## Dynamic Context Injection
|
|
59
86
|
|
|
60
|
-
|
|
61
|
-
my-skill/
|
|
62
|
-
├── SKILL.md (required - overview and navigation)
|
|
63
|
-
├── reference.md (detailed API docs - loaded when needed)
|
|
64
|
-
├── examples.md (usage examples - loaded when needed)
|
|
65
|
-
└── scripts/
|
|
66
|
-
└── helper.py (utility script - executed, not loaded)
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
### Example SKILL.md with References
|
|
87
|
+
The `` !`command` `` syntax runs shell commands before content is sent to Claude:
|
|
70
88
|
|
|
71
89
|
```markdown
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
allowed-tools: Read, Bash(python:*)
|
|
76
|
-
---
|
|
77
|
-
|
|
78
|
-
# PDF Processing
|
|
79
|
-
|
|
80
|
-
## Quick start
|
|
81
|
-
|
|
82
|
-
Extract text:
|
|
83
|
-
```python
|
|
84
|
-
import pdfplumber
|
|
85
|
-
with pdfplumber.open("doc.pdf") as pdf:
|
|
86
|
-
text = pdf.pages[0].extract_text()
|
|
90
|
+
## Context
|
|
91
|
+
- Current branch: !`git branch --show-current`
|
|
92
|
+
- PR diff: !`gh pr diff`
|
|
87
93
|
```
|
|
88
94
|
|
|
89
|
-
|
|
90
|
-
For detailed API reference, see [REFERENCE.md](REFERENCE.md).
|
|
95
|
+
Commands execute immediately and their output replaces the placeholder. Claude only sees the final result.
|
|
91
96
|
|
|
92
|
-
##
|
|
97
|
+
## Progressive Disclosure
|
|
93
98
|
|
|
94
|
-
Packages must be installed:
|
|
95
|
-
```bash
|
|
96
|
-
pip install pypdf pdfplumber
|
|
97
99
|
```
|
|
100
|
+
my-skill/
|
|
101
|
+
├── SKILL.md # Entry point (required)
|
|
102
|
+
├── reference.md # Detailed docs (loaded when needed)
|
|
103
|
+
├── examples.md # Usage examples (loaded when needed)
|
|
104
|
+
└── scripts/
|
|
105
|
+
└── helper.py # Utility script (executed, not loaded)
|
|
98
106
|
```
|
|
99
107
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
---
|
|
104
|
-
name: reading-files-safely
|
|
105
|
-
description: Read files without making changes. Use when you need read-only file access.
|
|
106
|
-
allowed-tools: Read, Grep, Glob
|
|
107
|
-
---
|
|
108
|
+
Keep SKILL.md under 500 lines. Link to supporting files:
|
|
109
|
+
```markdown
|
|
110
|
+
For API details, see [reference.md](reference.md).
|
|
108
111
|
```
|
|
109
112
|
|
|
110
|
-
|
|
111
|
-
- Read-only Skills that shouldn't modify files
|
|
112
|
-
- Limited scope for specific tasks
|
|
113
|
-
- Security-sensitive workflows
|
|
114
|
-
|
|
115
|
-
## Writing Effective Descriptions
|
|
116
|
-
|
|
117
|
-
The `description` field enables Skill discovery and should include both what the Skill does and when to use it.
|
|
113
|
+
## Running in a Subagent
|
|
118
114
|
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
- **Good:** "Processes Excel files and generates reports"
|
|
122
|
-
- **Avoid:** "I can help you process Excel files"
|
|
123
|
-
- **Avoid:** "You can use this to process Excel files"
|
|
124
|
-
|
|
125
|
-
**Be specific and include key terms:**
|
|
126
|
-
|
|
127
|
-
```yaml
|
|
128
|
-
description: Extract text and tables from PDF files, fill forms, merge documents. Use when working with PDF files or when the user mentions PDFs, forms, or document extraction.
|
|
129
|
-
```
|
|
130
|
-
|
|
131
|
-
**Avoid vague descriptions:**
|
|
115
|
+
Add `context: fork` to run in isolation:
|
|
132
116
|
|
|
133
117
|
```yaml
|
|
134
|
-
description: Helps with documents # Too vague!
|
|
135
|
-
```
|
|
136
|
-
|
|
137
|
-
## Complete Example: Commit Message Generator
|
|
138
|
-
|
|
139
|
-
```markdown
|
|
140
118
|
---
|
|
141
|
-
name:
|
|
142
|
-
description:
|
|
119
|
+
name: deep-research
|
|
120
|
+
description: Research a topic thoroughly
|
|
121
|
+
context: fork
|
|
122
|
+
agent: Explore
|
|
143
123
|
---
|
|
144
124
|
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
## Instructions
|
|
148
|
-
|
|
149
|
-
1. Run `git diff --staged` to see changes
|
|
150
|
-
2. I'll suggest a commit message with:
|
|
151
|
-
- Summary under 50 characters
|
|
152
|
-
- Detailed description
|
|
153
|
-
- Affected components
|
|
154
|
-
|
|
155
|
-
## Best practices
|
|
156
|
-
|
|
157
|
-
- Use present tense
|
|
158
|
-
- Explain what and why, not how
|
|
125
|
+
Research $ARGUMENTS thoroughly...
|
|
159
126
|
```
|
|
160
127
|
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
```markdown
|
|
164
|
-
---
|
|
165
|
-
name: explaining-code
|
|
166
|
-
description: Explains code with visual diagrams and analogies. Use when explaining how code works, teaching about a codebase, or when the user asks "how does this work?"
|
|
167
|
-
---
|
|
168
|
-
|
|
169
|
-
# Explaining Code
|
|
170
|
-
|
|
171
|
-
When explaining code, always include:
|
|
172
|
-
|
|
173
|
-
1. **Start with an analogy**: Compare the code to something from everyday life
|
|
174
|
-
2. **Draw a diagram**: Use ASCII art to show the flow, structure, or relationships
|
|
175
|
-
3. **Walk through the code**: Explain step-by-step what happens
|
|
176
|
-
4. **Highlight a gotcha**: What's a common misconception?
|
|
177
|
-
|
|
178
|
-
Keep explanations conversational. For complex concepts, use multiple analogies.
|
|
179
|
-
```
|
|
128
|
+
The skill content becomes the subagent's prompt. It won't have access to conversation history.
|
|
180
129
|
|
|
181
130
|
## Distribution
|
|
182
131
|
|
|
183
|
-
- **Project
|
|
184
|
-
- **Plugins**: Add `skills/` directory to plugin
|
|
132
|
+
- **Project skills**: Commit `.opencode/skills/` to version control
|
|
133
|
+
- **Plugins**: Add `skills/` directory to plugin
|
|
185
134
|
- **Enterprise**: Deploy organization-wide through managed settings
|