wolli 0.0.1 → 0.0.2

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/docs/skills.md ADDED
@@ -0,0 +1,206 @@
1
+ # Skills
2
+
3
+ Skills are self-contained capability packages that the agent loads on-demand. A skill provides specialized workflows, setup instructions, helper scripts, and reference documentation for specific tasks.
4
+
5
+ Wolli implements the [Agent Skills standard](https://agentskills.io/specification), warning about most violations but remaining lenient. Wolli allows skill names to differ from their parent directory even though the standard disallows it; that rule is suboptimal for shared skill directories used across multiple agent harnesses.
6
+
7
+ ## Table of Contents
8
+
9
+ - [Locations](#locations)
10
+ - [How Skills Work](#how-skills-work)
11
+ - [Skill Commands](#skill-commands)
12
+ - [Skill Structure](#skill-structure)
13
+ - [Frontmatter](#frontmatter)
14
+ - [Validation](#validation)
15
+ - [Example](#example)
16
+ - [Skill Repositories](#skill-repositories)
17
+
18
+ ## Locations
19
+
20
+ > **Security:** Skills can instruct the model to perform any action and may include executable code the model invokes. Review skill content before use.
21
+
22
+ Wolli scopes skills to each agent. It loads skills from:
23
+
24
+ - The agent's home: `~/.wolli/agents/<name>/skills/`
25
+ - Project-local (under the agent's home): `.wolli/skills/`
26
+ - Settings: `skills` array with files or directories
27
+ - CLI: `--skill <path>` (repeatable, additive even with `--no-skills`)
28
+
29
+ Discovery rules:
30
+ - In the agent's `skills/` and `.wolli/skills/`, direct root `.md` files are discovered as individual skills
31
+ - In all skill locations, directories containing `SKILL.md` are discovered recursively
32
+
33
+ Disable discovery with `--no-skills` (explicit `--skill` paths still load).
34
+
35
+ ### Using Skills from Other Harnesses
36
+
37
+ To use skills from Claude Code or OpenAI Codex, add their directories to settings:
38
+
39
+ ```json
40
+ {
41
+ "skills": [
42
+ "~/.claude/skills",
43
+ "~/.codex/skills"
44
+ ]
45
+ }
46
+ ```
47
+
48
+ ## How Skills Work
49
+
50
+ 1. At startup, Wolli scans skill locations and extracts names and descriptions
51
+ 2. The system prompt includes available skills in XML format per the [specification](https://agentskills.io/integrate-skills)
52
+ 3. When a task matches, the agent uses `read` to load the full SKILL.md (models don't always do this; use prompting or `/skill:name` to force it)
53
+ 4. The agent follows the instructions, using relative paths to reference scripts and assets
54
+
55
+ This is progressive disclosure: only descriptions are always in context, full instructions load on-demand.
56
+
57
+ ## Skill Commands
58
+
59
+ Skills register as `/skill:name` commands:
60
+
61
+ ```bash
62
+ /skill:brave-search # Load and execute the skill
63
+ /skill:pdf-tools extract # Load skill with arguments
64
+ ```
65
+
66
+ Arguments after the command are appended to the skill content as `User: <args>`.
67
+
68
+ ## Skill Structure
69
+
70
+ A skill is a directory with a `SKILL.md` file. Everything else is freeform.
71
+
72
+ ```
73
+ my-skill/
74
+ ├── SKILL.md # Required: frontmatter + instructions
75
+ ├── scripts/ # Helper scripts
76
+ │ └── process.sh
77
+ ├── references/ # Detailed docs loaded on-demand
78
+ │ └── api-reference.md
79
+ └── assets/
80
+ └── template.json
81
+ ```
82
+
83
+ ### SKILL.md Format
84
+
85
+ ````markdown
86
+ ---
87
+ name: my-skill
88
+ description: What this skill does and when to use it. Be specific.
89
+ ---
90
+
91
+ # My Skill
92
+
93
+ ## Setup
94
+
95
+ Run once before first use:
96
+ ```bash
97
+ cd /path/to/skill && npm install
98
+ ```
99
+
100
+ ## Usage
101
+
102
+ ```bash
103
+ ./scripts/process.sh <input>
104
+ ```
105
+ ````
106
+
107
+ Use relative paths from the skill directory:
108
+
109
+ ```markdown
110
+ See [the reference guide](references/REFERENCE.md) for details.
111
+ ```
112
+
113
+ ## Frontmatter
114
+
115
+ Per the [Agent Skills specification](https://agentskills.io/specification#frontmatter-required):
116
+
117
+ | Field | Required | Description |
118
+ |-------|----------|-------------|
119
+ | `name` | Yes | Max 64 chars. Lowercase a-z, 0-9, hyphens. Unlike the standard, Wolli does not require this to match the parent directory because that standard requirement is suboptimal for shared skill directories. |
120
+ | `description` | Yes | Max 1024 chars. What the skill does and when to use it. |
121
+ | `license` | No | License name or reference to bundled file. |
122
+ | `compatibility` | No | Max 500 chars. Environment requirements. |
123
+ | `metadata` | No | Arbitrary key-value mapping. |
124
+ | `allowed-tools` | No | Space-delimited list of pre-approved tools (experimental). |
125
+ | `disable-model-invocation` | No | When `true`, skill is hidden from system prompt. Users must use `/skill:name`. |
126
+
127
+ ### Name Rules
128
+
129
+ - 1-64 characters
130
+ - Lowercase letters, numbers, hyphens only
131
+ - No leading/trailing hyphens
132
+ - No consecutive hyphens
133
+ Wolli does not require the name to match the parent directory. The Agent Skills standard does, but that requirement is suboptimal for shared skill directories used by multiple tools.
134
+
135
+ Valid: `pdf-processing`, `data-analysis`, `code-review`
136
+ Invalid: `PDF-Processing`, `-pdf`, `pdf--processing`
137
+
138
+ ### Description Best Practices
139
+
140
+ The description determines when the agent loads the skill. Be specific.
141
+
142
+ Good:
143
+ ```yaml
144
+ description: Extracts text and tables from PDF files, fills PDF forms, and merges multiple PDFs. Use when working with PDF documents.
145
+ ```
146
+
147
+ Poor:
148
+ ```yaml
149
+ description: Helps with PDFs.
150
+ ```
151
+
152
+ ## Validation
153
+
154
+ Wolli validates skills against the Agent Skills standard. Most issues produce warnings but still load the skill:
155
+
156
+ - Name exceeds 64 characters or contains invalid characters
157
+ - Name starts/ends with hyphen or has consecutive hyphens
158
+ - Description exceeds 1024 characters
159
+
160
+ Unknown frontmatter fields are ignored.
161
+
162
+ **Exception:** Skills with missing description are not loaded.
163
+
164
+ Name collisions (same name from different locations) warn and keep the first skill found.
165
+
166
+ ## Example
167
+
168
+ ```
169
+ brave-search/
170
+ ├── SKILL.md
171
+ ├── search.js
172
+ └── content.js
173
+ ```
174
+
175
+ **SKILL.md:**
176
+ ````markdown
177
+ ---
178
+ name: brave-search
179
+ description: Web search and content extraction via Brave Search API. Use for searching documentation, facts, or any web content.
180
+ ---
181
+
182
+ # Brave Search
183
+
184
+ ## Setup
185
+
186
+ ```bash
187
+ cd /path/to/brave-search && npm install
188
+ ```
189
+
190
+ ## Search
191
+
192
+ ```bash
193
+ ./search.js "query" # Basic search
194
+ ./search.js "query" --content # Include page content
195
+ ```
196
+
197
+ ## Extract Page Content
198
+
199
+ ```bash
200
+ ./content.js https://example.com
201
+ ```
202
+ ````
203
+
204
+ ## Skill Repositories
205
+
206
+ - [Anthropic Skills](https://github.com/anthropics/skills) - Document processing (docx, pdf, pptx, xlsx), web development
package/docs/themes.md ADDED
@@ -0,0 +1,274 @@
1
+ # Themes
2
+
3
+ Themes are JSON files that define colors for the TUI.
4
+
5
+ ## Table of Contents
6
+
7
+ - [Locations](#locations)
8
+ - [Selecting a Theme](#selecting-a-theme)
9
+ - [Creating a Custom Theme](#creating-a-custom-theme)
10
+ - [Theme Format](#theme-format)
11
+ - [Color Tokens](#color-tokens)
12
+ - [Color Values](#color-values)
13
+ - [Tips](#tips)
14
+
15
+ ## Locations
16
+
17
+ Wolli loads themes from:
18
+
19
+ - Built-in: `dark`, `light`
20
+ - Per-agent: `~/.wolli/agents/<name>/themes/*.json`
21
+ - Shared: `~/.wolli/agent/themes/*.json`
22
+ - Settings: `themes` array with files or directories
23
+ - CLI: `--theme <path>` (repeatable)
24
+
25
+ Disable discovery with `--no-themes`.
26
+
27
+ ## Selecting a Theme
28
+
29
+ Select a theme via `/settings` or in `settings.json`:
30
+
31
+ ```json
32
+ {
33
+ "theme": "my-theme"
34
+ }
35
+ ```
36
+
37
+ On first run, Wolli detects your terminal background and defaults to `dark` or `light`.
38
+
39
+ ## Creating a Custom Theme
40
+
41
+ 1. Create a theme file:
42
+
43
+ ```bash
44
+ mkdir -p ~/.wolli/agent/themes
45
+ vim ~/.wolli/agent/themes/my-theme.json
46
+ ```
47
+
48
+ 2. Define the theme with all required colors (see [Color Tokens](#color-tokens)):
49
+
50
+ ```json
51
+ {
52
+ "name": "my-theme",
53
+ "vars": {
54
+ "primary": "#00aaff",
55
+ "secondary": 242
56
+ },
57
+ "colors": {
58
+ "accent": "primary",
59
+ "border": "primary",
60
+ "borderAccent": "#00ffff",
61
+ "borderMuted": "secondary",
62
+ "success": "#00ff00",
63
+ "error": "#ff0000",
64
+ "warning": "#ffff00",
65
+ "muted": "secondary",
66
+ "dim": 240,
67
+ "text": "",
68
+ "thinkingText": "secondary",
69
+ "selectedBg": "#2d2d30",
70
+ "userMessageBg": "#2d2d30",
71
+ "userMessageText": "",
72
+ "customMessageBg": "#2d2d30",
73
+ "customMessageText": "",
74
+ "customMessageLabel": "primary",
75
+ "toolPendingBg": "#1e1e2e",
76
+ "toolSuccessBg": "#1e2e1e",
77
+ "toolErrorBg": "#2e1e1e",
78
+ "toolTitle": "primary",
79
+ "toolOutput": "",
80
+ "mdHeading": "#ffaa00",
81
+ "mdLink": "primary",
82
+ "mdLinkUrl": "secondary",
83
+ "mdCode": "#00ffff",
84
+ "mdCodeBlock": "",
85
+ "mdCodeBlockBorder": "secondary",
86
+ "mdQuote": "secondary",
87
+ "mdQuoteBorder": "secondary",
88
+ "mdHr": "secondary",
89
+ "mdListBullet": "#00ffff",
90
+ "toolDiffAdded": "#00ff00",
91
+ "toolDiffRemoved": "#ff0000",
92
+ "toolDiffContext": "secondary",
93
+ "syntaxComment": "secondary",
94
+ "syntaxKeyword": "primary",
95
+ "syntaxFunction": "#00aaff",
96
+ "syntaxVariable": "#ffaa00",
97
+ "syntaxString": "#00ff00",
98
+ "syntaxNumber": "#ff00ff",
99
+ "syntaxType": "#00aaff",
100
+ "syntaxOperator": "primary",
101
+ "syntaxPunctuation": "secondary",
102
+ "thinkingOff": "secondary",
103
+ "thinkingMinimal": "primary",
104
+ "thinkingLow": "#00aaff",
105
+ "thinkingMedium": "#00ffff",
106
+ "thinkingHigh": "#ff00ff",
107
+ "thinkingXhigh": "#ff0000",
108
+ "bashMode": "#ffaa00"
109
+ }
110
+ }
111
+ ```
112
+
113
+ 3. Select the theme via `/settings`.
114
+
115
+ **Hot reload:** When you edit the currently active custom theme file, Wolli reloads it automatically for immediate visual feedback.
116
+
117
+ ## Theme Format
118
+
119
+ ```json
120
+ {
121
+ "name": "my-theme",
122
+ "vars": {
123
+ "blue": "#0066cc",
124
+ "gray": 242
125
+ },
126
+ "colors": {
127
+ "accent": "blue",
128
+ "muted": "gray",
129
+ "text": "",
130
+ ...
131
+ }
132
+ }
133
+ ```
134
+
135
+ - `name` is required and must be unique.
136
+ - `vars` is optional. Define reusable colors here, then reference them in `colors`.
137
+ - `colors` must define all 51 required tokens.
138
+
139
+ ## Color Tokens
140
+
141
+ Every theme must define all 51 color tokens. There are no optional colors.
142
+
143
+ ### Core UI (11 colors)
144
+
145
+ | Token | Purpose |
146
+ |-------|---------|
147
+ | `accent` | Primary accent (logo, selected items, cursor) |
148
+ | `border` | Normal borders |
149
+ | `borderAccent` | Highlighted borders |
150
+ | `borderMuted` | Subtle borders (editor) |
151
+ | `success` | Success states |
152
+ | `error` | Error states |
153
+ | `warning` | Warning states |
154
+ | `muted` | Secondary text |
155
+ | `dim` | Tertiary text |
156
+ | `text` | Default text (usually `""`) |
157
+ | `thinkingText` | Thinking block text |
158
+
159
+ ### Backgrounds & Content (11 colors)
160
+
161
+ | Token | Purpose |
162
+ |-------|---------|
163
+ | `selectedBg` | Selected line background |
164
+ | `userMessageBg` | User message background |
165
+ | `userMessageText` | User message text |
166
+ | `customMessageBg` | Extension message background |
167
+ | `customMessageText` | Extension message text |
168
+ | `customMessageLabel` | Extension message label |
169
+ | `toolPendingBg` | Tool box (pending) |
170
+ | `toolSuccessBg` | Tool box (success) |
171
+ | `toolErrorBg` | Tool box (error) |
172
+ | `toolTitle` | Tool title |
173
+ | `toolOutput` | Tool output text |
174
+
175
+ ### Markdown (10 colors)
176
+
177
+ | Token | Purpose |
178
+ |-------|---------|
179
+ | `mdHeading` | Headings |
180
+ | `mdLink` | Link text |
181
+ | `mdLinkUrl` | Link URL |
182
+ | `mdCode` | Inline code |
183
+ | `mdCodeBlock` | Code block content |
184
+ | `mdCodeBlockBorder` | Code block fences |
185
+ | `mdQuote` | Blockquote text |
186
+ | `mdQuoteBorder` | Blockquote border |
187
+ | `mdHr` | Horizontal rule |
188
+ | `mdListBullet` | List bullets |
189
+
190
+ ### Tool Diffs (3 colors)
191
+
192
+ | Token | Purpose |
193
+ |-------|---------|
194
+ | `toolDiffAdded` | Added lines |
195
+ | `toolDiffRemoved` | Removed lines |
196
+ | `toolDiffContext` | Context lines |
197
+
198
+ ### Syntax Highlighting (9 colors)
199
+
200
+ | Token | Purpose |
201
+ |-------|---------|
202
+ | `syntaxComment` | Comments |
203
+ | `syntaxKeyword` | Keywords |
204
+ | `syntaxFunction` | Function names |
205
+ | `syntaxVariable` | Variables |
206
+ | `syntaxString` | Strings |
207
+ | `syntaxNumber` | Numbers |
208
+ | `syntaxType` | Types |
209
+ | `syntaxOperator` | Operators |
210
+ | `syntaxPunctuation` | Punctuation |
211
+
212
+ ### Thinking Level Borders (6 colors)
213
+
214
+ Editor border colors indicating thinking level (visual hierarchy from subtle to prominent):
215
+
216
+ | Token | Purpose |
217
+ |-------|---------|
218
+ | `thinkingOff` | Thinking off |
219
+ | `thinkingMinimal` | Minimal thinking |
220
+ | `thinkingLow` | Low thinking |
221
+ | `thinkingMedium` | Medium thinking |
222
+ | `thinkingHigh` | High thinking |
223
+ | `thinkingXhigh` | Extra high thinking |
224
+
225
+ ### Bash Mode (1 color)
226
+
227
+ | Token | Purpose |
228
+ |-------|---------|
229
+ | `bashMode` | Editor border in bash mode (`!` prefix) |
230
+
231
+ ## Color Values
232
+
233
+ Four formats are supported:
234
+
235
+ | Format | Example | Description |
236
+ |--------|---------|-------------|
237
+ | Hex | `"#ff0000"` | 6-digit hex RGB |
238
+ | 256-color | `39` | xterm 256-color palette index (0-255) |
239
+ | Variable | `"primary"` | Reference to a `vars` entry |
240
+ | Default | `""` | Terminal's default color |
241
+
242
+ ### 256-Color Palette
243
+
244
+ - `0-15`: Basic ANSI colors (terminal-dependent)
245
+ - `16-231`: 6×6×6 RGB cube (`16 + 36×R + 6×G + B` where R,G,B are 0-5)
246
+ - `232-255`: Grayscale ramp
247
+
248
+ ### Terminal Compatibility
249
+
250
+ Wolli uses 24-bit RGB colors. Most modern terminals support this (iTerm2, Kitty, WezTerm, Windows Terminal, VS Code). For older terminals with only 256-color support, Wolli falls back to the nearest approximation.
251
+
252
+ Check truecolor support:
253
+
254
+ ```bash
255
+ echo $COLORTERM # Should output "truecolor" or "24bit"
256
+ ```
257
+
258
+ ## Tips
259
+
260
+ **Dark terminals:** Use bright, saturated colors with higher contrast.
261
+
262
+ **Light terminals:** Use darker, muted colors with lower contrast.
263
+
264
+ **Color harmony:** Start with a base palette (Nord, Gruvbox, Tokyo Night), define it in `vars`, and reference consistently.
265
+
266
+ **Testing:** Check your theme with different message types, tool states, markdown content, and long wrapped text.
267
+
268
+ **VS Code:** Set `terminal.integrated.minimumContrastRatio` to `1` for accurate colors.
269
+
270
+ ## Examples
271
+
272
+ See the built-in themes shipped with the package under `src/modes/interactive/theme/`:
273
+ - `dark.json`
274
+ - `light.json`
package/package.json CHANGED
@@ -1,11 +1,42 @@
1
1
  {
2
- "name": "wolli",
3
- "version": "0.0.1",
4
- "description": "Reserved work in progress.",
5
- "main": "index.js",
6
- "license": "MIT",
7
- "keywords": [],
8
- "scripts": {
9
- "test": "echo \"no tests yet\" && exit 0"
10
- }
2
+ "name": "wolli",
3
+ "version": "0.0.2",
4
+ "description": "Persistent, purposeful agent CLI with memory and identity",
5
+ "type": "module",
6
+ "piConfig": {
7
+ "name": "wolli",
8
+ "configDir": ".wolli"
9
+ },
10
+ "bin": {
11
+ "wolli": "dist/cli.js"
12
+ },
13
+ "files": [
14
+ "dist",
15
+ "plugins",
16
+ "docs",
17
+ "native"
18
+ ],
19
+ "keywords": [
20
+ "agent",
21
+ "agents",
22
+ "ai",
23
+ "llm",
24
+ "cli",
25
+ "tui",
26
+ "memory",
27
+ "autonomous",
28
+ "assistant"
29
+ ],
30
+ "license": "Apache-2.0",
31
+ "homepage": "https://github.com/opsyhq/wolli#readme",
32
+ "repository": {
33
+ "type": "git",
34
+ "url": "git+https://github.com/opsyhq/wolli.git"
35
+ },
36
+ "bugs": {
37
+ "url": "https://github.com/opsyhq/wolli/issues"
38
+ },
39
+ "engines": {
40
+ "node": ">=22.19.0"
41
+ }
11
42
  }