wispy-cli 2.7.4 → 2.7.6

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/README.md CHANGED
@@ -1,571 +1,486 @@
1
- # 🌿 Wispy CLI
1
+ # Wispy CLI
2
2
 
3
- > Your personal AI assistant chat, automate, and orchestrate from the terminal.
3
+ Wispy CLI is a terminal-first AI workspace assistant for operators who want one place to chat, delegate, automate, audit, remember, and hand work across local and remote sessions.
4
4
 
5
- [![npm version](https://img.shields.io/npm/v/wispy-cli.svg)](https://www.npmjs.com/package/wispy-cli)
6
- [![Node.js >= 18](https://img.shields.io/badge/node-%3E%3D18-brightgreen)](https://nodejs.org)
7
- [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
5
+ Version `2.7.4` centers the product around an interactive workflow: onboarding, setup, and operator-facing commands guide you through menus instead of dropping you into brittle flag-heavy flows. The chat stack combines a REPL, a six-view TUI workspace, long-term memory, sub-agent orchestration, MCP, multi-channel messaging, scheduling, and a trust model built for real execution.
8
6
 
9
- Wispy is a powerful terminal AI assistant that talks to your files, runs commands, orchestrates sub-agents, sends messages to Telegram/Discord/Slack, and remembers things across sessions — all from a single `wispy` command.
7
+ ## Highlights
10
8
 
11
- ## Features
9
+ | Area | What ships in v2.7.4 |
10
+ | --- | --- |
11
+ | Model access | 29 AI providers across hosted, aggregator, OAuth, and local/self-hosted routes, including Google, Anthropic, OpenAI, Groq, DeepSeek, Ollama, OpenRouter, Mistral, Cohere, Perplexity, Together, Fireworks, Replicate, Anyscale, and GitHub Copilot |
12
+ | Auth | API key flows plus OAuth-based auth, including GitHub Copilot support introduced in `v2.6.0` |
13
+ | Interaction | Interactive command flows since `v2.7.0`; no-arg command entry routes into menus instead of dead-ending |
14
+ | Terminal UX | REPL with autocomplete and inline preview hints, plus shell completion auto-installed during setup |
15
+ | TUI | Multi-panel workspace OS with 6 views: `chat`, `overview`, `agents`, `memory`, `audit`, `settings` |
16
+ | Trust | `careful`, `balanced`, `yolo`, dry-run previews, receipts, approval prompts, permissions, audit trail, replay |
17
+ | Continuity | `where`, `handoff`, `sync` for local/remote awareness and state transfer |
18
+ | Memory | `remember`, `recall`, `forget`, `memories` plus persistent memory files |
19
+ | Skills | `teach`, `improve`, skill loading, reusable learned workflows |
20
+ | Orchestration | Agents, sub-agents, pipeline-style delegation, MCP integration, 18+ built-in tools |
21
+ | Channels | Telegram, Discord, Slack, WhatsApp, Signal, Email |
22
+ | Scheduling | Cron-based task scheduling with persisted jobs and history |
23
+ | Quality | Test suite passing: `91/91` |
12
24
 
13
- - 💬 **Interactive REPL + TUI** — chat mode, slash commands, streaming responses
14
- - 🤖 **7 AI providers** — Gemini, Claude, OpenAI, Groq, DeepSeek, Ollama, OpenRouter
15
- - 🔧 **18+ built-in tools** — files, shell commands, git, web search, and more
16
- - 🔌 **MCP server integration** — connect any Model Context Protocol server
17
- - 📱 **Multi-channel bot** — Telegram, Discord, Slack with session isolation
18
- - 🧠 **Long-term memory** — persistent facts, daily logs, project notes
19
- - ⏰ **Cron scheduler** — scheduled tasks with channel delivery
20
- - 🤝 **Sub-agent orchestration** — spawn parallel agents, steer them, collect results
21
- - 📂 **Workstream isolation** — separate contexts per project
25
+ ## Installation
22
26
 
23
- ---
27
+ ### Requirements
28
+
29
+ | Requirement | Version |
30
+ | --- | --- |
31
+ | Node.js | `>= 18` |
32
+ | Package manager | `npm` |
24
33
 
25
- ## 🚀 Quick Start
34
+ ### Install globally
26
35
 
27
36
  ```bash
28
- # Install globally
29
37
  npm install -g wispy-cli
38
+ ```
30
39
 
31
- # Set your API key (any of these)
32
- export GOOGLE_AI_KEY=your_key # Gemini (recommended, has free tier)
33
- export ANTHROPIC_API_KEY=your_key # Claude
34
- export OPENAI_API_KEY=your_key # OpenAI / GPT
40
+ ### Run
35
41
 
36
- # Start chatting
42
+ ```bash
37
43
  wispy
38
44
  ```
39
45
 
40
- Wispy auto-detects your API key and starts the REPL immediately.
46
+ On first run, Wispy launches guided setup, helps configure a provider, and installs shell completion automatically for supported shells.
41
47
 
42
- ---
48
+ ## Quick Start
43
49
 
44
- ## 📦 Installation
50
+ ### Start the main REPL
45
51
 
46
- ### Requirements
47
- - **Node.js >= 18** (ESM modules required)
48
-
49
- ### Global install
50
52
  ```bash
51
- npm install -g wispy-cli
53
+ wispy
52
54
  ```
53
55
 
54
- ### Local install
56
+ ### Send a one-shot message
57
+
55
58
  ```bash
56
- npm install wispy-cli
57
- npx wispy
59
+ wispy "Summarize the current repository and suggest next steps."
58
60
  ```
59
61
 
60
- ---
62
+ ### Open a specific workstream
61
63
 
62
- ## 🗣️ Chat Modes
63
-
64
- ### REPL (default)
65
64
  ```bash
66
- wispy # start interactive chat
67
- wispy -w myproject # start in a specific workstream
68
- wispy --session my-ses # resume a named session
65
+ wispy -w infra
69
66
  ```
70
67
 
71
- **REPL slash commands:**
72
- ```
73
- /help — show all slash commands
74
- /clear — reset conversation history
75
- /sessions — list recent sessions
76
- /memory — show memory files
77
- /tools — list available tools
78
- /model — show current AI model
79
- /workstream — show active workstream
80
- /exit — exit Wispy
81
- ```
68
+ ### Launch the full terminal UI
82
69
 
83
- ### TUI (Ink-based)
84
70
  ```bash
85
- wispy-tui # full terminal UI with scrollable history
86
- wispy-tui -w myproject # workstream-specific TUI
71
+ wispy-tui
87
72
  ```
88
73
 
89
- ### One-shot (non-interactive)
90
- ```bash
91
- wispy ask "What files are in the current directory?"
92
- wispy exec "summarize README.md"
93
- ```
74
+ ### Check current execution context
94
75
 
95
- ### Overview
96
76
  ```bash
97
- wispy overview # show all workstreams and recent activity
77
+ wispy where
98
78
  ```
99
79
 
100
- ---
80
+ ### Inspect configuration
101
81
 
102
- ## 🤖 AI Providers
103
-
104
- Wispy detects your configured provider automatically. Priority order:
105
-
106
- | Provider | Env Var | Default Model |
107
- |----------|---------|---------------|
108
- | **Google AI** (Gemini) | `GOOGLE_AI_KEY` or `GEMINI_API_KEY` | `gemini-2.5-flash` |
109
- | **Anthropic** (Claude) | `ANTHROPIC_API_KEY` | `claude-sonnet-4-20250514` |
110
- | **OpenAI** | `OPENAI_API_KEY` | `gpt-4o` |
111
- | **OpenRouter** | `OPENROUTER_API_KEY` | `anthropic/claude-sonnet-4` |
112
- | **Groq** | `GROQ_API_KEY` | `llama-3.3-70b-versatile` |
113
- | **DeepSeek** | `DEEPSEEK_API_KEY` | `deepseek-chat` |
114
- | **Ollama** (local) | `OLLAMA_HOST` | `llama3.2` |
115
-
116
- ### Override provider
117
82
  ```bash
118
- WISPY_PROVIDER=anthropic wispy
119
- WISPY_MODEL=claude-3-5-haiku wispy
83
+ wispy config show
84
+ wispy config get provider
85
+ wispy config set provider openai
86
+ wispy config delete apiKey
87
+ wispy config reset
88
+ wispy config path
89
+ wispy config edit
120
90
  ```
121
91
 
122
- ### Config file
123
- ```json
124
- // ~/.wispy/config.json
125
- {
126
- "provider": "google",
127
- "model": "gemini-2.5-flash",
128
- "apiKey": "optional-if-not-in-env"
129
- }
130
- ```
92
+ ## Provider Support
131
93
 
132
- ---
94
+ Wispy v2.7.4 is positioned as a multi-provider workspace client with support spanning hosted APIs, local runtimes, aggregators, and OAuth-backed access.
133
95
 
134
- ## 🔧 Built-in Tools
96
+ | Category | Examples |
97
+ | --- | --- |
98
+ | Hosted frontier APIs | Google, Anthropic, OpenAI, xAI, Mistral, Cohere, Perplexity |
99
+ | Fast and cost-focused | Groq, DeepSeek, Together, Fireworks, Replicate, Anyscale |
100
+ | Aggregators and gateways | OpenRouter, Vercel AI Gateway |
101
+ | Regional and specialist providers | Kimi, MiniMax, Z.AI/GLM, DashScope, Volcengine, BytePlus, Xiaomi |
102
+ | Local and self-hosted | Ollama, vLLM, SGLang, LiteLLM |
103
+ | OAuth-backed access | GitHub Copilot |
135
104
 
136
- Wispy gives the AI access to these tools automatically:
105
+ ### Authentication
137
106
 
138
- | Tool | Description |
139
- |------|-------------|
140
- | `read_file` | Read any file's contents |
141
- | `write_file` | Write or create files |
142
- | `file_edit` | Edit files with find-and-replace |
143
- | `file_search` | Search files with regex (like grep) |
144
- | `list_directory` | List directory contents |
145
- | `run_command` | Execute shell commands |
146
- | `git_status` / `git_diff` / `git_log` | Git operations |
147
- | `web_search` | Search the web |
148
- | `memory_save` | Save facts to persistent memory |
149
- | `memory_get` | Retrieve a memory by key |
150
- | `memory_search` | Full-text search across all memories |
151
- | `memory_list` | List all memory files |
152
- | `memory_append` | Append to a memory file |
153
- | `memory_delete` | Delete a memory file |
154
- | `spawn_subagent` | Launch a parallel sub-agent |
155
- | `list_subagents` | List running sub-agents |
156
- | `get_subagent_result` | Get a sub-agent's result |
157
- | `kill_subagent` | Cancel a sub-agent |
107
+ | Mode | Notes |
108
+ | --- | --- |
109
+ | API keys | Standard provider key flow |
110
+ | OAuth | Device flow support, including GitHub Copilot |
111
+ | Local runtimes | Host/base URL driven for local inference stacks |
158
112
 
159
- ---
113
+ Examples:
160
114
 
161
- ## 📱 Channel Setup
162
-
163
- Run Wispy as a multi-platform bot that responds to messages in Telegram, Discord, or Slack.
164
-
165
- ### Start the bot server
166
115
  ```bash
167
- wispy channels start # start all configured channels
168
- wispy channels start --telegram # start only Telegram
116
+ export GOOGLE_AI_KEY=...
117
+ wispy
169
118
  ```
170
119
 
171
- ### Telegram
172
- 1. Create a bot via [@BotFather](https://t.me/BotFather)
173
- 2. Copy the bot token
174
- 3. Configure:
175
120
  ```bash
176
- # Option 1: env var
177
- export WISPY_TELEGRAM_TOKEN=your_bot_token
178
-
179
- # Option 2: config file
180
- # ~/.wispy/channels.json
181
- {
182
- "telegram": {
183
- "enabled": true,
184
- "token": "your_bot_token"
185
- }
186
- }
121
+ wispy auth github-copilot
122
+ wispy
187
123
  ```
188
124
 
189
- ### Discord
190
- 1. Create a bot at [discord.com/developers](https://discord.com/developers/applications)
191
- 2. Install peer dependency: `npm install -g discord.js`
192
- 3. Configure:
193
- ```json
194
- {
195
- "discord": {
196
- "enabled": true,
197
- "token": "your_discord_token",
198
- "clientId": "your_client_id",
199
- "guildId": "optional_guild_id"
200
- }
201
- }
125
+ ```bash
126
+ export OLLAMA_HOST=http://localhost:11434
127
+ wispy
202
128
  ```
203
129
 
204
- ### Slack
205
- 1. Create a Slack app at [api.slack.com](https://api.slack.com/apps)
206
- 2. Install peer dependency: `npm install -g @slack/bolt`
207
- 3. Configure:
208
- ```json
209
- {
210
- "slack": {
211
- "enabled": true,
212
- "botToken": "xoxb-your-token",
213
- "appToken": "xapp-your-token",
214
- "signingSecret": "your-signing-secret"
215
- }
216
- }
217
- ```
130
+ ## Interfaces
218
131
 
219
- Each chat/user gets an isolated session — Wispy remembers context per conversation.
132
+ ### REPL
220
133
 
221
- ---
134
+ The default `wispy` interface is a conversational REPL with:
222
135
 
223
- ## 🧠 Memory System
136
+ - slash commands
137
+ - command autocomplete
138
+ - inline preview hints
139
+ - one-shot and persistent workstream usage
140
+ - token and cost visibility
224
141
 
225
- Wispy has a file-based long-term memory stored in `~/.wispy/memory/`.
142
+ Examples:
226
143
 
227
- ### Using memory in chat
228
- Just ask Wispy to remember things:
229
- ```
230
- You: Remember that my project uses TypeScript and Next.js 15
231
- Wispy: Got it! I'll remember that. 🌿
144
+ ```bash
145
+ wispy
146
+ wispy -w product
147
+ wispy "Search this repo for sync-related code paths."
232
148
  ```
233
149
 
234
- Or use memory tools explicitly:
235
- ```
236
- You: Save this to memory: the deployment command is `vercel --prod`
237
- ```
150
+ ### TUI Workspace OS
238
151
 
239
- ### Memory structure
240
- ```
241
- ~/.wispy/memory/
242
- ├── MEMORY.md — main persistent memory (auto-included in every chat)
243
- ├── user.md — user preferences
244
- ├── daily/
245
- │ └── 2026-04-03.md — daily logs
246
- └── projects/
247
- └── myapp.md — project-specific notes
248
- ```
152
+ `wispy-tui` is a multi-panel terminal workspace with six built-in views.
249
153
 
250
- ### Memory CLI
251
- ```bash
252
- wispy memory list # list all memory files
253
- wispy memory get MEMORY # show main memory
254
- wispy memory save user "I prefer TypeScript"
255
- wispy memory search "deployment" # full-text search
256
- wispy memory delete daily/old-date
257
- ```
154
+ | View | Purpose |
155
+ | --- | --- |
156
+ | `chat` | Main conversation and tool execution surface |
157
+ | `overview` | Cross-workstream status and recent activity |
158
+ | `agents` | Running and recent agent/sub-agent activity |
159
+ | `memory` | Search and inspect persistent memories |
160
+ | `audit` | Execution timeline, approvals, and receipts |
161
+ | `settings` | Model, provider, and runtime status surface |
162
+
163
+ ## Trust and Execution Model
258
164
 
259
- ---
165
+ Wispy is built around trustworthy execution rather than blind automation.
260
166
 
261
- ## Cron Scheduler
167
+ | Capability | Description |
168
+ | --- | --- |
169
+ | Trust modes | `careful`, `balanced`, `yolo` |
170
+ | Dry-run | Preview actions before execution |
171
+ | Receipts | Inspect recent execution details |
172
+ | Approval prompts | Human-in-the-loop confirmation for sensitive actions |
173
+ | Audit trail | Persisted audit log and replayable session history |
174
+ | Permissions | Per-tool policy visibility and overrides |
262
175
 
263
- Schedule tasks to run automatically and optionally deliver results to a channel.
176
+ Examples:
264
177
 
265
- ### Add a scheduled job
266
178
  ```bash
267
- # Every morning briefing
268
- wispy cron add \
269
- --name "Morning Briefing" \
270
- --schedule "0 9 * * *" \
271
- --task "Summarize my pending tasks and give me a morning overview" \
272
- --channel "telegram:YOUR_CHAT_ID"
273
-
274
- # Every 30 minutes
275
- wispy cron add \
276
- --name "Price Check" \
277
- --schedule every:1800000 \
278
- --task "Check the current price of BTC and ETH"
279
-
280
- # One-shot at specific time
281
- wispy cron add \
282
- --name "Reminder" \
283
- --schedule "at:2026-12-31T09:00:00Z" \
284
- --task "Remind me it's New Year's Eve!"
179
+ wispy trust
180
+ wispy trust level careful
181
+ wispy trust log --today
182
+ wispy trust receipt <session-id>
183
+ wispy trust replay <session-id>
285
184
  ```
286
185
 
287
- ### Schedule formats
288
- | Format | Example | Description |
289
- |--------|---------|-------------|
290
- | Cron expression | `0 9 * * *` | Standard 5-field cron (daily at 9am) |
291
- | Interval | `every:1800000` | Every N milliseconds (30 min) |
292
- | One-shot | `at:2026-12-31T09:00:00Z` | Specific ISO timestamp |
186
+ ## Continuity
293
187
 
294
- ### Manage jobs
295
- ```bash
296
- wispy cron list # list all jobs
297
- wispy cron run <id> # run a job immediately
298
- wispy cron remove <id> # delete a job
299
- wispy cron history <id> # view execution history
300
- ```
188
+ Wispy keeps workspace state portable across local and remote environments.
189
+
190
+ | Command | Purpose |
191
+ | --- | --- |
192
+ | `where` | Show current mode, provider, workstream, sync, memory, and session context |
193
+ | `handoff` | Push or pull state and generate a handoff summary |
194
+ | `sync` | Sync sessions, memory, workstreams, cron metadata, and permissions |
195
+
196
+ Examples:
301
197
 
302
- ### Start the scheduler
303
198
  ```bash
304
- wispy cron start # start the cron scheduler daemon
199
+ wispy where
200
+ wispy handoff cloud
201
+ wispy handoff local
202
+ wispy sync
305
203
  ```
306
204
 
307
- ---
205
+ ## Memory, Skills, and Agents
308
206
 
309
- ## 🤝 Sub-agents
207
+ ### Memory
310
208
 
311
- Delegate complex tasks to parallel sub-agents and collect results.
209
+ Wispy stores long-term memory under `~/.wispy/memory/` and exposes both natural-language and command-driven memory operations.
312
210
 
313
- ### From chat
314
- ```
315
- You: Spawn a sub-agent to analyze all TypeScript files in src/ and report issues
316
- Wispy: Spawning sub-agent 'code-review'... 🌿
317
- ```
211
+ | Command | Purpose |
212
+ | --- | --- |
213
+ | `remember` | Save something important |
214
+ | `recall` | Search memories |
215
+ | `memories` | List saved memories |
216
+ | `forget` | Remove a memory |
318
217
 
319
- ### Sub-agent tools (available to Wispy in chat)
320
- - `spawn_subagent` — start a sub-agent with a task
321
- - `list_subagents` — see all active/recent sub-agents
322
- - `get_subagent_result` — wait for and retrieve results
323
- - `kill_subagent` — cancel a running sub-agent
324
- - `steer_subagent` — send mid-task guidance
218
+ Examples:
325
219
 
326
- ### Sub-agent lifecycle
327
- ```
328
- pending running → completed
329
- ↘ failed
330
- killed
331
- ↘ timeout
220
+ ```text
221
+ /remember The staging server runs on port 8090.
222
+ /recall staging server
223
+ /memories
224
+ /forget old-note
332
225
  ```
333
226
 
334
- Sub-agent results persist to `~/.wispy/subagents/` for later retrieval.
335
-
336
- ---
337
-
338
- ## 🔌 MCP Integration
339
-
340
- Connect any [Model Context Protocol](https://modelcontextprotocol.io) server and Wispy will automatically use its tools.
341
-
342
- ### Configuration
343
- ```json
344
- // ~/.wispy/mcp.json
345
- {
346
- "servers": {
347
- "filesystem": {
348
- "command": "npx",
349
- "args": ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/dir"]
350
- },
351
- "github": {
352
- "command": "npx",
353
- "args": ["-y", "@modelcontextprotocol/server-github"],
354
- "env": { "GITHUB_TOKEN": "your_token" }
355
- }
356
- }
357
- }
358
- ```
227
+ ### Skills
228
+
229
+ Skills turn successful workflows into reusable commands.
230
+
231
+ | Command | Purpose |
232
+ | --- | --- |
233
+ | `skills` | List learned skills |
234
+ | `teach` | Create a skill from recent conversation context |
235
+ | `improve` | Refine an existing skill |
236
+
237
+ Examples:
359
238
 
360
- ### MCP CLI
361
239
  ```bash
362
- wispy mcp list # list configured servers
363
- wispy mcp status # show connected servers and their tools
364
- wispy mcp add # interactive server setup
240
+ wispy skill
241
+ wispy teach release-checklist
242
+ wispy improve release-checklist "Make it verify cron and channel health."
365
243
  ```
366
244
 
367
- ---
245
+ ### Agents and sub-agents
368
246
 
369
- ## ⚙️ Configuration
247
+ Wispy supports delegated execution through agent and sub-agent orchestration.
370
248
 
371
- All configuration lives in `~/.wispy/`:
249
+ | Capability | Description |
250
+ | --- | --- |
251
+ | Agent listing | Inspect active and recent workers |
252
+ | Agent detail | Pull status and results |
253
+ | Agent termination | Kill a running task |
254
+ | Parallel delegation | Spawn task-specific workers |
255
+ | Pipelines | Chain role-based execution stages |
372
256
 
373
- ```
374
- ~/.wispy/
375
- ├── config.json — main config (provider, model, apiKey)
376
- ├── channels.json — channel bot configuration
377
- ├── mcp.json — MCP server configuration
378
- ├── sessions/ — conversation history
379
- ├── memory/ — long-term memory files
380
- ├── cron/ — scheduler jobs and history
381
- ├── subagents/ — sub-agent results
382
- └── audit/ — audit log (JSONL per day)
383
- ```
257
+ Examples:
384
258
 
385
- ### config.json reference
386
- ```json
387
- {
388
- "provider": "google", // auto-detected if omitted
389
- "model": "gemini-2.5-flash", // defaults to provider's default
390
- "apiKey": "...", // env var takes precedence
391
- "workstream": "default" // default workstream
392
- }
259
+ ```text
260
+ /agents
261
+ /agent agent-123
262
+ /kill agent-123
393
263
  ```
394
264
 
395
- ### Environment variables
396
- ```bash
397
- WISPY_PROVIDER=google # force provider
398
- WISPY_MODEL=gemini-2.5-flash # force model
399
- WISPY_WORKSTREAM=myproject # set active workstream
400
- WISPY_DEBUG=1 # enable debug output
401
- ```
402
-
403
- ---
265
+ ## MCP and Built-in Tools
404
266
 
405
- ## 📂 Workstream Isolation
267
+ Wispy can merge Model Context Protocol tools with its own built-in tool registry.
406
268
 
407
- Workstreams let you maintain separate AI contexts for different projects.
269
+ ### MCP
408
270
 
409
271
  ```bash
410
- wispy -w frontend # chat in "frontend" workstream
411
- wispy -w backend # completely separate context
412
- wispy overview # see all workstreams
272
+ wispy mcp
273
+ wispy mcp list
274
+ wispy mcp connect
275
+ wispy mcp disconnect
276
+ wispy mcp reload
277
+ wispy mcp config
413
278
  ```
414
279
 
415
- Each workstream has its own:
416
- - Conversation sessions
417
- - Context/memory scope
418
- - Sub-agent history
280
+ ### Built-in tools
419
281
 
420
- ---
282
+ Wispy ships with 18+ built-in tools across file operations, shell execution, git, web access, memory, planning, and delegation.
421
283
 
422
- ## 🏗️ Architecture
284
+ | Tool family | Examples |
285
+ | --- | --- |
286
+ | Files | `read_file`, `write_file`, `file_edit`, `file_search`, `list_directory` |
287
+ | Execution | `run_command`, `git`, `web_search`, `web_fetch` |
288
+ | System | `keychain`, `clipboard` |
289
+ | Planning | `update_plan`, `pipeline`, `ralph_loop` |
290
+ | Agents | `spawn_agent`, `spawn_async_agent`, `spawn_subagent`, `list_agents`, `list_subagents`, `get_agent_result`, `get_subagent_result`, `kill_subagent` |
423
291
 
424
- ```
425
- ┌─────────────────────────────┐
426
- │ WispyEngine │
427
- │ core/engine.mjs │
428
- │ processMessage() ─────────┐│
429
- └─────────────────────────────┘│
430
- │ │
431
- ┌──────────────────────────┼──────────┐ │
432
- │ │ │ │ │
433
- REPL TUI channels server.mjs │
434
- (bin/wispy) (bin/wispy-tui) (lib/channels/) │
435
-
436
- ┌─────────────────────────┘
437
-
438
- ┌───────────────────┼──────────────────────────┐
439
- │ │ │
440
- ProviderRegistry ToolRegistry SessionManager
441
- core/providers.mjs core/tools.mjs core/session.mjs
442
- (Gemini/Claude/ (18+ built-in + (file-based,
443
- OpenAI/Groq/ MCP tools) per-channel)
444
- DeepSeek/Ollama/
445
- OpenRouter)
446
-
447
- └── MemoryManager CronManager SubAgentManager
448
- core/memory.mjs core/cron.mjs core/subagents.mjs
449
- (~/.wispy/ (~/.wispy/ (~/.wispy/
450
- memory/) cron/) subagents/)
451
- ```
292
+ ## Channels and Scheduling
452
293
 
453
- All surfaces (REPL, TUI, channels) call `WispyEngine.processMessage()` — one core, many interfaces.
294
+ ### Messaging channels
454
295
 
455
- ---
296
+ | Channel | Status in repo |
297
+ | --- | --- |
298
+ | Telegram | Built-in adapter |
299
+ | Discord | Built-in adapter |
300
+ | Slack | Built-in adapter |
301
+ | WhatsApp | Built-in adapter |
302
+ | Signal | Built-in adapter |
303
+ | Email | Built-in adapter |
456
304
 
457
- ## 🛠️ Development
305
+ Example setup paths:
458
306
 
459
307
  ```bash
460
- # Clone
461
- git clone https://github.com/mindsurf0176-ui/poropo-workspace
462
- cd wispy-cli
308
+ wispy channel setup telegram
309
+ wispy channel setup discord
310
+ wispy channel setup slack
311
+ ```
463
312
 
464
- # Install
465
- npm install
313
+ ### Cron scheduler
466
314
 
467
- # Run tests (91 integration tests)
468
- npm test
315
+ Use Wispy as an operator that wakes itself up and delivers work on schedule.
469
316
 
470
- # Development REPL
471
- node bin/wispy.mjs
472
- ```
473
-
474
- ### Running tests
475
317
  ```bash
476
- npm test # run all integration tests
477
- npm run test:verbose # run with spec reporter
478
- npm run test:basic # run basic smoke tests only
479
- ```
480
-
481
- ### Project structure
482
- ```
318
+ wispy cron add
319
+ wispy cron list
320
+ wispy cron run <job-id>
321
+ wispy cron remove <job-id>
322
+ wispy cron history <job-id>
323
+ wispy cron start
324
+ ```
325
+
326
+ ## Slash Commands
327
+
328
+ The shared command registry powers REPL completion, the TUI command palette, and shell completion.
329
+
330
+ ### By category
331
+
332
+ | Category | Commands |
333
+ | --- | --- |
334
+ | Workstream | `/ws`, `/ws new <name>`, `/ws <name>`, `/ws status`, `/ws search <query>`, `/ws archive <name>`, `/ws delete <name>` |
335
+ | Trust | `/trust`, `/trust <level>`, `/trust log`, `/dry`, `/receipt`, `/replay`, `/permissions`, `/permit <tool> <level>`, `/audit` |
336
+ | Continuity | `/where`, `/handoff`, `/sync` |
337
+ | Skills | `/skills`, `/teach <name>`, `/improve <name>` |
338
+ | Session | `/clear`, `/model`, `/cost`, `/compact`, `/sessions`, `/history` |
339
+ | Memory | `/remember <text>`, `/recall <query>`, `/memories`, `/forget <key>` |
340
+ | Agents | `/agents`, `/agent <id>`, `/kill <id>` |
341
+ | MCP | `/mcp`, `/mcp list`, `/mcp connect`, `/mcp disconnect`, `/mcp reload`, `/mcp config` |
342
+ | Quick aliases | `/o`, `/w`, `/a`, `/m`, `/t`, `/s`, `/d` |
343
+ | Meta | `/help`, `/quit`, `/exit`, `/provider`, `/overview`, `/search <keyword>` |
344
+
345
+ ### Full scan list
346
+
347
+ ```text
348
+ /ws
349
+ /trust
350
+ /dry
351
+ /receipt
352
+ /replay
353
+ /where
354
+ /handoff
355
+ /sync
356
+ /skills
357
+ /teach
358
+ /improve
359
+ /clear
360
+ /model
361
+ /cost
362
+ /compact
363
+ /sessions
364
+ /history
365
+ /remember
366
+ /recall
367
+ /memories
368
+ /forget
369
+ /agents
370
+ /agent
371
+ /kill
372
+ /mcp
373
+ /permissions
374
+ /permit
375
+ /audit
376
+ /o
377
+ /w
378
+ /a
379
+ /m
380
+ /t
381
+ /s
382
+ /d
383
+ /help
384
+ /quit
385
+ /exit
386
+ /provider
387
+ /overview
388
+ /search
389
+ ```
390
+
391
+ ## Architecture
392
+
393
+ The repository is organized around two entrypoints, a core runtime, user-facing command modules, channel adapters, and a focused test suite.
394
+
395
+ ```text
483
396
  wispy-cli/
484
397
  ├── bin/
485
- │ ├── wispy.mjs — main CLI entry point
486
- └── wispy-tui.mjs — TUI entry point (Ink)
398
+ │ ├── wispy.mjs
399
+ ├── wispy-tui.mjs
487
400
  ├── core/
488
- │ ├── engine.mjs — WispyEngine (main chat loop)
489
- │ ├── session.mjs — SessionManager
490
- │ ├── providers.mjs — ProviderRegistry (7 AI providers)
491
- │ ├── tools.mjs — ToolRegistry (18+ built-in tools)
492
- │ ├── memory.mjs — MemoryManager
493
- │ ├── cron.mjs — CronManager (scheduler)
494
- │ ├── subagents.mjs — SubAgentManager
495
- │ ├── mcp.mjs — MCP client/manager
496
- │ ├── config.mjs — config loader + provider detection
497
- └── index.mjs — public API exports
401
+ │ ├── engine.mjs
402
+ │ ├── providers.mjs
403
+ │ ├── auth.mjs
404
+ │ ├── config.mjs
405
+ │ ├── permissions.mjs
406
+ │ ├── audit.mjs
407
+ │ ├── session.mjs
408
+ │ ├── memory.mjs
409
+ │ ├── skills.mjs
410
+ ├── subagents.mjs
411
+ │ ├── mcp.mjs
412
+ │ ├── cron.mjs
413
+ │ ├── sync.mjs
414
+ │ ├── onboarding.mjs
415
+ │ └── ...
498
416
  ├── lib/
499
- │ ├── wispy-repl.mjs — REPL implementation
500
- │ ├── wispy-tui.mjs — TUI implementation (Ink/React)
501
- └── channels/
502
- ├── index.mjs — ChannelManager
503
- ├── telegram.mjs — Telegram adapter (grammY)
504
- ├── discord.mjs — Discord adapter (discord.js)
505
- ├── slack.mjs — Slack adapter (@slack/bolt)
506
- └── base.mjs — ChannelAdapter base class
417
+ │ ├── wispy-repl.mjs
418
+ │ ├── wispy-tui.mjs
419
+ ├── command-registry.mjs
420
+ ├── channels/
421
+ ├── index.mjs
422
+ ├── telegram.mjs
423
+ ├── discord.mjs
424
+ │ ├── slack.mjs
425
+ │ │ ├── whatsapp.mjs
426
+ │ │ ├── signal.mjs
427
+ │ │ ├── email.mjs
428
+ │ │ └── base.mjs
429
+ │ └── commands/
430
+ │ ├── ws.mjs
431
+ │ ├── trust.mjs
432
+ │ ├── continuity.mjs
433
+ │ ├── skills-cmd.mjs
434
+ │ └── ws-interactive-enhancement.js
507
435
  └── tests/
436
+ ├── channels.test.mjs
508
437
  ├── core-engine.test.mjs
509
- ├── core-session.test.mjs
438
+ ├── core-tools.test.mjs
510
439
  ├── core-memory.test.mjs
511
- ├── core-cron.test.mjs
440
+ ├── core-session.test.mjs
512
441
  ├── core-subagents.test.mjs
513
- ├── core-tools.test.mjs
514
- └── channels.test.mjs
442
+ └── core-cron.test.mjs
515
443
  ```
516
444
 
517
- ---
445
+ ### Runtime flow
518
446
 
519
- ## 📋 CLI Reference
447
+ ```text
448
+ bin/wispy.mjs
449
+ -> lib/wispy-repl.mjs
450
+ -> core/engine.mjs
451
+ -> core/providers.mjs
452
+ -> core/tools.mjs
453
+ -> core/session.mjs
454
+ -> core/memory.mjs
455
+ -> core/subagents.mjs
456
+ -> core/mcp.mjs
457
+ -> core/audit.mjs
458
+ -> core/permissions.mjs
520
459
 
460
+ bin/wispy-tui.mjs
461
+ -> lib/wispy-tui.mjs
462
+ -> core/engine.mjs
521
463
  ```
522
- Usage: wispy [options] [command]
523
-
524
- Commands:
525
- wispy — start interactive REPL
526
- wispy ask <message> — one-shot chat
527
- wispy exec <message> — one-shot execution
528
- wispy overview — show workstream overview
529
- wispy sessions — list recent sessions
530
- wispy memory <cmd> — manage long-term memory
531
- wispy cron <cmd> — manage scheduled jobs
532
- wispy channels <cmd> — manage channel bots
533
- wispy mcp <cmd> — manage MCP servers
534
- wispy server <cmd> — start/stop HTTP/WS server
535
- wispy audit <cmd> — view audit log
536
-
537
- Options:
538
- -w, --workstream <name> — set active workstream
539
- --session <id> — resume a specific session
540
- --model <name> — override AI model
541
- --provider <name> — override AI provider
542
- --help — show help
543
- --version — show version
544
- ```
545
-
546
- ---
547
464
 
548
- ## 🔑 API Keys
465
+ ## Development
549
466
 
550
- Get free/paid API keys from:
551
- - **Google AI (Gemini)** — [aistudio.google.com/apikey](https://aistudio.google.com/apikey) *(free tier available)*
552
- - **Anthropic (Claude)** — [console.anthropic.com/settings/keys](https://console.anthropic.com/settings/keys)
553
- - **OpenAI** — [platform.openai.com/api-keys](https://platform.openai.com/api-keys)
554
- - **OpenRouter** — [openrouter.ai/keys](https://openrouter.ai/keys) *(free credits)*
555
- - **Groq** — [console.groq.com/keys](https://console.groq.com/keys) *(free tier)*
556
- - **DeepSeek** — [platform.deepseek.com/api_keys](https://platform.deepseek.com/api_keys)
557
- - **Ollama** — [ollama.ai](https://ollama.ai) *(fully local, no key needed)*
467
+ ### Tests
558
468
 
559
- ---
469
+ ```bash
470
+ npm test
471
+ ```
560
472
 
561
- ## 📝 License
473
+ Current status:
562
474
 
563
- MIT see [LICENSE](LICENSE)
475
+ | Metric | Value |
476
+ | --- | --- |
477
+ | Test suites | `8` |
478
+ | Tests | `91` |
479
+ | Passing | `91` |
480
+ | Failing | `0` |
564
481
 
565
- ---
482
+ ## License
566
483
 
567
- ## 🙌 Credits
484
+ MIT
568
485
 
569
486
  Built by Minseo & Poropo 🫧
570
-
571
- *Wispy is a small ghost that lives in terminals — floating between code, files, and servers.*