wrosecode 1.0.0 → 1.0.1

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 (2) hide show
  1. package/README.md +143 -603
  2. package/package.json +1 -1
package/README.md CHANGED
@@ -1,693 +1,233 @@
1
- # WROSECODE
1
+ <p align="center">
2
+ <img src="docs/assets/wrosecode-logo.webp" alt="WROSECODE neon rose terminal logo" width="160">
3
+ </p>
4
+
5
+ <h1 align="center">WROSECODE</h1>
6
+
7
+ <p align="center">
8
+ <strong>A native Rust AI coding agent for your terminal.</strong><br>
9
+ <em>Build software. Explore code. Solve authorized CTF labs. Document security findings.</em>
10
+ </p>
11
+
12
+ <p align="center">
13
+ <a href="https://github.com/whiterose717/WROSECODE-CLI/actions/workflows/ci.yml"><img src="https://github.com/whiterose717/WROSECODE-CLI/actions/workflows/ci.yml/badge.svg" alt="GitHub Actions CI status"></a>
14
+ <a href="https://www.npmjs.com/package/wrosecode"><img src="https://img.shields.io/npm/v/wrosecode?logo=npm&amp;label=npm" alt="Published npm version"></a>
15
+ <a href="LICENSE"><img src="https://img.shields.io/badge/License-MIT-16a34a.svg" alt="MIT license"></a>
16
+ <a href="https://www.rust-lang.org/"><img src="https://img.shields.io/badge/Built%20with-Rust-orange?logo=rust" alt="Built with Rust"></a>
17
+ <img src="https://img.shields.io/badge/platforms-Linux%20%7C%20macOS%20%7C%20Windows-4063d8" alt="Linux, macOS and Windows">
18
+ </p>
19
+
20
+ <p align="center">
21
+ <a href="#installation"><strong>Get started</strong></a> ·
22
+ <a href="#screenshots">Screenshots</a> ·
23
+ <a href="#features">Features</a> ·
24
+ <a href="#security-research-workflows">CTF &amp; VAPT</a> ·
25
+ <a href="#documentation">Documentation</a>
26
+ </p>
2
27
 
3
- A terminal coding agent written in Rust. Build with `cargo install --path .` or `cargo build --release`. Run `wrosecode` from a project directory, or `wrosecode 'your task'` for one turn. Set `ANTHROPIC_API_KEY` for the Anthropic provider. For an OpenAI-compatible server, set `WROSECODE_OPENAI_URL` and run `wrosecode --provider openai-compat --model MODEL`.
4
-
5
- ## Install and run
6
-
7
- ```bash
8
- cargo build --release
9
- install -Dm755 target/release/wrosecode "$HOME/.local/bin/wrosecode"
10
- wrosecode --permission yolo
11
- ```
12
-
13
- For a fully static Linux binary with no glibc dependency, run
14
- `./scripts/build-musl.sh` (it needs `rustup target add
15
- x86_64-unknown-linux-musl` and `musl-tools` for `musl-gcc`) and install
16
- `target/x86_64-unknown-linux-musl/release/wrosecode` instead.
17
-
18
- ## Install from npm
19
-
20
- Install globally:
21
-
22
- ```bash
23
- npm install -g wrosecode
24
- ```
28
+ ---
25
29
 
26
- Run the CLI:
30
+ WROSECODE combines a streaming, keyboard-driven **terminal UI** with repository-aware tools, configurable AI providers, persistent sessions, optional MCP integrations, built-in checks, and controlled execution. It is designed for everyday development and for **permissioned** CTF, VAPT, and bug-bounty workflows.
27
31
 
28
- ```bash
29
- wrosecode
30
- ```
32
+ > [!NOTE]
33
+ > The `main` branch contains the v1.0.1 source update. The public npm version is shown by the npm badge above and may be older until the corresponding native GitHub Release is published.
31
34
 
32
- Run without a permanent installation:
35
+ ## Screenshots
33
36
 
34
- ```bash
35
- npx wrosecode
36
- ```
37
+ ### Native Rust terminal UI
37
38
 
38
- Update:
39
+ Real screenshots captured from the WROSECODE executable using an isolated demo workspace, without account credentials or real target data.
39
40
 
40
- ```bash
41
- npm install -g wrosecode@latest
42
- ```
41
+ <div align="center">
42
+ <a href="docs/assets/terminal-start.png"><img src="docs/assets/terminal-start.png" alt="Native WROSECODE terminal start screen with cyan wordmark and status footer" width="900"></a>
43
+ <sub>Start screen · provider and mode overview · compact status footer</sub>
44
+ </div>
43
45
 
44
- Uninstall:
46
+ <br>
45
47
 
46
- ```bash
47
- npm uninstall -g wrosecode
48
- ```
48
+ <div align="center">
49
+ <a href="docs/assets/terminal-commands.png"><img src="docs/assets/terminal-commands.png" alt="Native WROSECODE CLI displaying the built-in slash command help" width="900"></a>
50
+ <sub>Built-in command help and keyboard-first navigation</sub>
51
+ </div>
49
52
 
50
- The npm package is a small launcher; it downloads the matching native binary
51
- from the [GitHub Releases](https://github.com/whiterose717/WROSECODE-CLI/releases)
52
- for this package version and verifies the binary against its SHA-256 sidecar
53
- before installation. Supported targets are Linux x86_64/aarch64, macOS
54
- x86_64/aarch64, and Windows x86_64/aarch64. Node.js 18 or newer is required
55
- for the npm installer; Rust and Cargo are not required for npm users.
53
+ ### Optional companion Web Console
56
54
 
57
- Source: <https://github.com/whiterose717/WROSECODE-CLI>
55
+ These are previews of the **separate companion Web Console**, not the native CLI window. Connecting a device and configuring a backend may be required to use them.
58
56
 
59
- ### Maintainer release process
57
+ | Web chat | CTF workbench |
58
+ |:--:|:--:|
59
+ | <a href="docs/assets/web-console-chat.png"><img src="docs/assets/web-console-chat.png" alt="WROSECODE companion Web Console chat with device pairing and agent mode selection" width="460"></a> | <a href="docs/assets/web-console-ctf.png"><img src="docs/assets/web-console-ctf.png" alt="WROSECODE companion Web Console CTF challenge configuration and flag results panel" width="460"></a> |
60
+ | Paired-device chat and agent mode selection | Local challenge input, analysis workflow and results panel |
60
61
 
61
- Push a version-matched tag such as `v1.0.0`. The GitHub Actions release
62
- workflow builds all six supported native targets, creates a SHA-256 sidecar
63
- for each binary, validates the full set, then creates or updates the GitHub
64
- Release. Publish to npm only after that workflow succeeds and all twelve
65
- assets are visible on the release page.
62
+ ## Installation
66
63
 
67
- Rust was chosen for low input latency, predictable memory use, a single native binary, and direct terminal control. The architecture combines a differential TUI, streamed provider adapters, durable sessions, MCP tools, repository maps, skills, permission tiers, and parallel tool execution.
64
+ ### Option 1 — npm (recommended for end users)
68
65
 
69
- ## Quick start
66
+ Requires **Node.js 18+** and network access on the first installation/run to download the native executable.
70
67
 
71
68
  ```bash
72
- export ANTHROPIC_API_KEY=sk-ant-... # or a local server: WROSECODE_OPENAI_URL + --provider openai-compat
73
- wrosecode # interactive session in the current directory
74
- wrosecode 'inventory the attack surface' # one turn, then exit
75
- wrosecode --permission yolo # skip approval prompts (see Permissions)
76
- ```
77
-
78
- Worth touching in the first session:
79
-
80
- ```text
81
- /ctf point the agent at a challenge file, URL, or CTFd task
82
- /providers add, key, and health-check models without editing files
83
- Ctrl+T cycle thinking levels (off → max) Ctrl+D eight-panel dashboard
84
- /help every command, every keybinding
85
- /resume pick a past session (the start screen lists the three most recent)
86
- ```
87
-
88
- Sessions persist under `~/.wrosecode/sessions`; model profiles and keys live
89
- in `~/.wrosecode/providers.toml` (keys display as `••••last4` and are typed
90
- through a masked prompt).
91
-
92
- ## CTF dashboard
93
-
94
- The first view is an opencode-style start screen: a large `WROSECODE` wordmark
95
- with a smooth colour gradient (truecolor where the terminal advertises it, 256
96
- or 16 colours otherwise, plain text under `NO_COLOR`/`--no-color`), carrying the
97
- live spinner, the session ID, the challenge category, and the speed tier the
98
- current thinking level maps to. Under it an info panel shows the provider and
99
- model, thinking level and resource budget, sandbox and approval modes, working
100
- directory, mode, harness, git branch, and MCP and skill counts — followed by
101
- provider health with a `/providers` hint, a rotating tip (`/` commands, `@`
102
- files, `ctrl+t` thinking, `ctrl+d` dashboard, `ctrl+o` output), the three most
103
- recent sessions with one-line `resume` suggestions, and a `/ctf` hint. It only
104
- draws while the transcript is still empty — as soon as you type or a turn
105
- produces output it folds back into a slim `WROSECODE v…` header so the
106
- conversation gets the screen. Below 80 columns the block art collapses to a
107
- single `WROSECODE v…` line.
108
-
109
- Example terminal view at 110×36 (session ID and project path anonymized):
110
-
111
- ```
112
- ╦ ╦╔╗ ╭─╮╔═╗╔═╗╭─╮╭─╮╔═╗╔═╗ ⠇ session ses_<session-id> · [misc] · paint 13ms
113
- ║ ║╠╩╗│ │╠═╝╠═╗│ │ │║ ║╠═╗
114
- ╚═╝╚═╝╰─╯╚═╝╚═╝╰─╯╰─╯╚═╝╚═╝ WROSECODE v1.0.0 · FAST
115
- anthropic / claude-sonnet-5 · think medium · up to 3 agents · sandbox none · ask · /path/to/project
116
- BUILD · claude · [misc] · git master* · 0 mcp · 636 skills
117
- 2 connected · 10 need setup · /providers
118
- tip · @ files
119
- ctf wrosecode ctf <file|dir|url> · or /ctf here
120
- ──────────────────────────────────────────────────────────────────────────────────────────────────────────────
121
- TRANSCRIPT 1 entry
122
- INFO WROSECODE v1.0.0 · session ses_<session-id>
123
- Type a request · /help commands · Ctrl+P palette
124
- Tab build/plan · [ ] thinking · PgUp/PgDn scroll · /clear
125
-
126
-
127
-
128
-
129
-
130
-
131
-
132
-
133
-
134
-
135
-
136
-
137
-
138
-
139
-
140
-
141
-
142
-
143
-
144
-
145
- Ready · session ses_<session-id> · claude-sonnet-5 · think:medium · tok 0/0 · cache 0% · 4s · step 0
146
- ┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────
147
- │ >
69
+ npm install -g wrosecode
70
+ wrosecode --version
71
+ wrosecode
148
72
  ```
149
73
 
150
- The rows above the rule are the start screen — wordmark, info panel, provider
151
- health, rotating tip, recent sessions, and the `/ctf` hint — and they are what
152
- the spinner animates in. The wordmark carries `TURBO` / `FAST` / `SMART` /
153
- `DEEP` plus the worker count that tier actually allows (1 / 3 / 5 / 10).
154
-
155
- The transcript owns the full terminal width: there is no always-on token or
156
- timeline panel. Token, latency, and cost counters are still tracked
157
- internally and surface in the status line, in `/stats` on demand, in
158
- `~/.wrosecode/live.json`, and in the closing `── RESULT ─` receipt. The
159
- bottom pane shows the subagent tree — only in-flight work, newest last, with
160
- `+N more running` when it overflows — and finished subagents collapse to one
161
- `✓ N subagents done` line. The bottom status
162
- line leads with the run state, session ID, model, and `think:` label (the level name, or
163
- `auto→medium` while the auto controller drives it), then tokens, cache
164
- hit rate, elapsed time, tool step, sandbox and approval, speed tier and
165
- workers, cost, and tool counts — for example
166
- ` Ready · session ses_1791153855-1574184-0 · claude-sonnet-5 · think:medium · tok 0/0 · cache 0% · 4s · step 0 ·
167
- none/ask · FAST · 3w · cost n/a · tools 0:0`. During a turn it swaps in an
168
- animated spinner, the queue note, and the live timeout and tool progress. The
169
- input box below it is an open-bottomed `┌──` / `│ >` frame that grows with
170
- the draft.
171
-
172
- File magic and extensions categorize common web, pwn, crypto, reverse
173
- engineering, and forensics tasks.
174
-
175
- A found flag raises a `🚩 FLAG ALERT` banner under the header and survives until
176
- the next turn or `/clear`. It also emits a terminal bell (`\x07`, disabled with
177
- `alert_bell = false`) and a desktop notification when `notify-send` is available,
178
- so a flag found in a background pane is not missed.
179
-
180
- Every model response and tool result is scanned for `flag{...}`, `CTF{...}`, `picoCTF{...}`, and `HTB{...}`. The patterns live in `config.toml` under `[ctf]`; `auto_copy` controls the clipboard copy. New flags are highlighted and appended to `.ctf/flags.log`. Optional CTFd submission is enabled with `auto_submit = true` in `config.toml`, or from the environment:
74
+ Run without a permanent installation:
181
75
 
182
76
  ```bash
183
- export WROSECODE_CTFD_AUTO_SUBMIT=1 # overrides config.toml
184
- export CTFD_URL=https://ctf.example
185
- export CTFD_TOKEN=your-token
186
- export CTFD_CHALLENGE_ID=42
77
+ npx wrosecode
187
78
  ```
188
79
 
189
- CTF skills cover recon, web, pwn, crypto, reverse engineering, forensics, stego, OSINT, and network analysis. Independent model tool calls run concurrently; `delegate_task` supports provider and model routing. Identical read-only calls use the in-memory result cache, while file edits invalidate cached results.
190
-
191
- ### Keyboard controls
192
-
193
- | Key | Action |
194
- | --- | --- |
195
- | `↑` / `↓` | Scroll the transcript whenever the input box is empty |
196
- | `PageUp` / `PageDown` | Move the transcript a full viewport at a time (at the real page size, not a fixed five lines) |
197
- | `Home` / `End` | Jump to the top or bottom of the transcript when the input is empty; otherwise move the caret |
198
- | `Ctrl+Home` / `Ctrl+End` | Always jump to the top or bottom of the transcript |
199
- | `Esc`, then `j` / `k` | Enter navigation mode and scroll with the single keys; `Space`/`b` page down/up |
200
- | `Shift+Enter` | Insert a newline |
201
- | `Enter` | Submit the prompt or selected command; during a turn it queues the message for after the reply |
202
- | `Ctrl+K` | Clear input |
203
- | `Ctrl+U` | Clear input when there is text, otherwise scroll half a page up |
204
- | `Ctrl+D` | Delete the character under the caret when there is text; with an empty prompt, open the live eight-panel dashboard (`Esc` or `Ctrl+D` closes it) |
205
- | `Ctrl+W` | Delete the word before the caret |
206
- | `Ctrl+A` / `Ctrl+E` | Jump to the start / end of the line |
207
- | `Alt+←` / `Alt+→` (also `Alt+B` / `Alt+F`) | Jump a word left / right |
208
- | `Ctrl+L` | Clear the visible transcript and redraw (history and conversation context are kept; `/clear --context` drops the context too) |
209
- | `Ctrl+T` | Cycle the thinking level (`off` → `low` → `medium` → `high` → `max` → `auto`) |
210
- | `Ctrl+Shift+C` | Copy latest output |
211
- | `[` / `]` | Step the thinking level down or up (same cycle as `Ctrl+T`) |
212
- | `@` at the start of a prompt | Open the file-mention picker (`Mention files`); `Esc` closes it |
213
- | Bracketed paste | A paste of 4+ lines collapses into `[Pasted N lines]`: `Enter` inserts it, `Esc` discards it |
214
- | `Tab` | Complete the current word (paths, slash commands, tool names) when the input is not empty; otherwise switch build and plan modes |
215
- | `Ctrl+C` | With text typed: clear the input. At an empty prompt: arm a ~2s exit window (`press Ctrl+C again to exit`); a second press inside it quits. During a turn it cancels the turn instead of closing the shell (which also arms the exit window, so Ctrl+C, Ctrl+C stops a run and exits) |
216
- | Mouse wheel | Scroll the transcript (smooth scrolling follows `smooth_scroll_lines`) |
217
-
218
- While scrolled up, the transcript header shows `· ↓ N new lines (End to jump)`; each new line arriving is counted there until `End` returns to the bottom. Multi-line drafts grow the input box to four rows and then scroll with the caret. Prompt history (last 500 entries, consecutive duplicates collapsed) persists to `~/.wrosecode/history` and is recalled with `↑`/`↓`.
219
-
220
- Shell calls have a 30 second timeout and are terminated if stuck. Panics and turn errors are written to `.ctf/errors.log`; the TUI keeps provider errors visible with a recovery suggestion. One-shot runs print a computed usage report, and `--summary json` emits a machine-readable `TaskComplete` object.
221
-
222
- ### Thinking levels
223
-
224
- Six levels decide how much reasoning each provider call spends: `off`, `low`, `medium`, `high`, `max`, and `auto`. `Ctrl+T` cycles them, `[` / `]` step down and up, `/think <level>` sets one directly (bare `/think` prints the current level and the list), and `--think <level>` fixes the startup default. The mode resolves `--think` → the provider profile's `think` key in `~/.wrosecode/providers.toml` (so a model can carry its own default) → `[agent] think` in `config.toml` → the legacy numeric `[agent] thinking_level`. Each concrete level maps to the provider's native control — Anthropic extended-thinking `budget_tokens` (1024 / 2048 / 4096 / 6144 for low / medium / high / max, clamped to 8191) or an OpenAI-style `reasoning_effort` (`low` / `medium` / `high`, with `max` reported as `high`) — and a per-model `think_map` on the profile overrides that with either a string or a token count per level. A provider that rejects the parameter retries once without it, records `think control ignored` in the transcript, and marks the status bar `think:… (ignored)`.
225
-
226
- `auto` is a controller rather than a strength: it starts at `medium`, escalates one concrete level after three consecutive failing steps (the transcript shows `think: medium → high (no progress ×3)`), drops back one level once progress returns, and settles a trivial read/answer task at `low`. The status bar shows it as `auto→high` — mode plus the live level. The dashboard's Thinking panel reports the previous turn's model time and reasoning tokens (`last turn 4.2s · reasoning 1280 tok`).
227
-
228
- ## Advanced dashboard and persistence
229
-
230
- The terminal shows two live panes: the full-width transcript on top and the subagent tree below it (in-flight work only, capped, with finished work collapsed to one line). Clicking a transcript row expands or collapses its tool cell. `Ctrl+T` now cycles the thinking level; for colours `/theme` opens a picker over the palettes — dark, light, solarized, Dracula, Nord, and Mono — and `/theme NAME` applies one directly (`/theme` on an unknown name lists what exists). Your own palettes drop into `~/.wrosecode/themes/*.toml` as five hex colours (`text`, `muted`, `accent`, `status`, `background`, with an optional `name`); a file that fails to parse, has bad hex, or reuses a built-in name is skipped. `NO_COLOR` (any non-empty value) or `--no-color` turns colour off everywhere: the gradient wordmark becomes plain text and every frame renders without colour codes. The shell paints its first frame — gradient wordmark, info panel with provider, thinking, sandbox, approval, git, MCP and skill counts, provider health, a rotating tip, recent sessions, and the `/ctf` hint — before provider setup, skill discovery, MCP reconnects, and session restore, so startup never waits on the network: the measured time is stamped next to the session line (`· paint 9ms`), reported by `/debug` as `First paint`, and must stay inside a 50 ms budget. `Ctrl+P` opens fuzzy command search; `Ctrl+F` and `Ctrl+R` open the flag and prompt pickers with the same filter-as-you-type behaviour. The renderer targets 60 frames per second while writing only changed terminal rows.
231
-
232
- Sessions checkpoint to SQLite WAL every ten seconds at `~/.wrosecode/state.db`, while portable JSON session files remain available. Every session gets a stable `ses_…` ID, shown in the status line and in `/sessions` with a one-line summary and age; resuming restores conversation history, provider, and model. Resume or fork work with:
80
+ Update or uninstall:
233
81
 
234
82
  ```bash
235
- wrosecode --session SESSION_ID
236
- wrosecode -s SESSION_ID
237
- wrosecode --session SESSION_ID --fork
238
- wrosecode --session SESSION_ID --export-session session.json
239
- wrosecode --import-session session.json
83
+ npm install -g wrosecode@latest
84
+ npm uninstall -g wrosecode
240
85
  ```
241
86
 
242
- Token counts, model latency percentiles, cache traffic, and costs come from provider usage. Configure prices in `pricing.toml` or `~/.wrosecode/pricing.toml`. Press `Ctrl+E` or run `/export` to write `metrics.json`, `metrics.csv`, and `latency.csv` (a latency histogram with one row per bucket: `bucket_upper_ms,count`). Set `OTEL_EXPORTER_OTLP_ENDPOINT` to export the same counters to an OTLP HTTP collector. Pass `--trace` to log per-step timings (API latency, tool time, slow renders) as NDJSON to `~/.wrosecode/trace.log`.
87
+ The npm package is a small JavaScript launcher, not a bundled Rust binary. It downloads the **matching native release asset** from [GitHub Releases](https://github.com/whiterose717/WROSECODE-CLI/releases) and verifies its **SHA-256 checksum**. If your npm version disables lifecycle scripts by default, the launcher downloads the verified binary when first run.
243
88
 
244
- Rate-limited provider replies (HTTP 429 / quota errors) are classified separately
245
- from other failures, counted in the dashboard (`WARN 429s n`), and exported with
246
- the rest of the metrics.
89
+ Supported native release targets: **Linux x86_64 / ARM64**, **macOS x86_64 / Apple Silicon**, and **Windows x86_64 / ARM64**. Availability depends on the corresponding GitHub Release assets.
247
90
 
248
- ## Live dashboard and transcript
91
+ > Installing a version before its matching GitHub Release exists will not work. If `npm install -g` encounters a permission conflict with an older system-wide binary, use a user-owned npm prefix or back up the old binary first; do not weaken system directory permissions.
249
92
 
250
- With an empty prompt, `Ctrl+D` (or `/dashboard`) replaces the split view with
251
- the live eight-panel dashboard: Processes, Thinking, Timeline, Plan, Tokens &
252
- Cost, Files, CTF, and Budget. `←`/`→` move between panels, `↑`/`↓` (or
253
- `j`/`k`) move the selection inside Processes and Files, `Enter` opens the
254
- focused panel as full output (a selected process shows its live tail, a
255
- selected file its `git diff`), `Ctrl+C` / `Ctrl+K` send SIGINT / SIGKILL to the
256
- selected process, and `Esc` / `Ctrl+D` returns to the shell. `/stats` prints
257
- the same eight panels as plain text.
93
+ ### Option 2 — build from Rust source
258
94
 
259
- Captured at 110×36 straight from a real run:
260
-
261
- ```
262
- DASHBOARD · BUILD/anthropic/claude-sonnet-5/misc · ready
263
- ▌PROCESSES ───────────────────────────────────────────│ TOKENS & COST ──────────────────────────────────────
264
- ▌ no tracked processes │ in 0 · out 0 · reason 0
265
- │ cache 0% · read 0 · write 0
266
- │ tok ·
267
- │ cost n/a · saved ~0 tok
268
- │
269
- │
270
- │
271
- │
272
- │
273
- │ FILES ──────────────────────────────────────────────
274
- │ +0 -0 · 0 changed
275
- │
276
- THINKING ────────────────────────────────────────────│
277
- level 5/20 medium · FAST · ready · idle │
278
- thinking 0.0s · acting 0.0s · waiting 6.9s │
279
- turns 0 · last turn · │
280
- last turn 0.0s · reasoning 0 tok │
281
- TIMELINE ────────────────────────────────────────────│
282
- model 0.0s · tools 0.0s · wait 6.9s · wall 6s │
283
- parallel ×0 · steps 0 · fails 0 │ CTF ────────────────────────────────────────────────
284
- tok · │ [misc] · tools 0 (0 failed)
285
- recent: — │ coverage: 0 files · 0 searches · 0 shells
286
- PLAN ────────────────────────────────────────────────│ flags 0
287
- no plan yet (update_plan) │ checker: unverified
288
- │
289
- │
290
- │
291
- │ BUDGET ─────────────────────────────────────────────
292
- │ ░░░░░░░░░░ $? / n/a (unlimited)
293
- │ steps 0 (no cap)
294
- │ wall 6s · flags 0
295
- │ errors 0 · status ready
296
- │
297
- ←→ panel · ↑↓/jk select · Enter detail · Ctrl+C/K signal · Esc/Ctrl+D close
298
- ```
299
-
300
- Transcript rows are cells rather than raw lines: each tool shows a one-line
301
- header with its elapsed time and a preview of the first three and last two
302
- output lines, failed cells auto-expand with their exit code, nested subagent
303
- calls draw as a `├─` / `└─` tree, and reasoning opens as a dimmed
304
- `Thinking… 2.1s` cell that freezes into `Thought n.ns` when the model answers.
305
- Press `Enter` (or `Ctrl+O`) to expand the cell at the top of the viewport;
306
- explorations group under a collapsed `▸ Explored 3 files · 1 search` line.
307
- Every finished task ends with a `── RESULT ─ {status}` block: verification
308
- state, answer, proof, the model/tools/wait time split, steps, tokens, cache
309
- rate, and cost.
310
-
311
- The same dashboard runs outside the TUI:
95
+ Install a supported Rust toolchain and Cargo, then:
312
96
 
313
97
  ```bash
314
- # Attach to a running session: fresh live.json (≤10s) → /v1/status → offline
315
- wrosecode dashboard
316
-
317
- # One plain frame, no ANSI — pipe-friendly
318
- wrosecode dashboard --once --offline
319
-
320
- # Headless run whose final JSON is the dashboard snapshot
321
- wrosecode exec --json 'enumerate the challenge'
322
- ```
323
-
324
- While idle, a running TUI rewrites `~/.wrosecode/live.json` about once a
325
- second (schema `wrosecode/live-v1`) — that file is what the attach client
326
- reads when no web server is up, and `GET /v1/status` serves the identical
327
- snapshot when the session runs `--web`.
328
-
329
- ## Terminal compatibility
330
-
331
- The TUI decides how much terminal control to take from the environment instead of
332
- assuming a full xterm:
333
-
334
- | Condition | Effect |
335
- | --- | --- |
336
- | `TERM` empty or `dumb` | No alternate screen, no mouse capture |
337
- | VS Code / Cursor integrated terminal (`TERM_PROGRAM=vscode`, `VSCODE_PID`, `VSCODE_CWD`) | Mouse capture stays off so the terminal's native wheel scroll and text selection keep working |
338
- | Zellij (`ZELLIJ` set) or `WROSECODE_FULL_REDRAW=1` | Every frame repaints fully (multiplexers composite their own grid and keep stale glyphs otherwise) |
339
- | `WROSECODE_NO_ALT_SCREEN=1` | Run inline instead of switching to the alternate screen |
340
- | `NO_COLOR` set to a non-empty value, or `--no-color` on the command line | No colour anywhere: the gradient wordmark falls back to plain text and frames emit no colour codes |
341
-
342
- `mouse_capture` in `config.toml` opts into mouse handling:
343
-
344
- ```toml
345
- [ui]
346
- mouse_capture = "off" # "off" (default), "on", or "auto" (off unless WROSECODE_MOUSE=1)
347
- alert_bell = true # before flag notifications
98
+ git clone https://github.com/whiterose717/WROSECODE-CLI.git
99
+ cd WROSECODE-CLI
100
+ cargo build --release --locked
101
+ ./target/release/wrosecode --version
102
+ ./target/release/wrosecode
348
103
  ```
349
104
 
350
- The default keeps the terminal's native text selection: drag to select and
351
- copy with the terminal's own shortcut or menu, with no mouse reporting to
352
- fight it. Set `mouse_capture = "on"` (or `WROSECODE_MOUSE=1`) only if you
353
- want click-to-expand cells and wheel scrolling inside the app — every mouse
354
- gesture already has a keyboard equivalent (`Enter`/`Ctrl+O` to expand,
355
- `PageUp`/`PageDown`/`Home`/`End` to scroll, arrows + `Enter` in the
356
- dashboard).
357
-
358
- ## Advanced CTF workflow
359
-
360
- The detector loads regexes from `config.toml`, checks plain output, ROT13, hexadecimal, and Base64 variants, and uses entropy to select encoded candidates. New flags pass through a checker before optional rate limited CTFd submission. `Ctrl+F` opens flag history and `/writeup` creates a Markdown evidence report.
361
- While a picker is open, typing fuzzy-filters the list (`pdng` finds
362
- `flag{padding...}`), `↑`/`↓` move, `Enter` copies the selected flag, and `Esc`
363
- closes. `Ctrl+R` does the same for prompt history.
105
+ You can also install the checked-out source using `cargo install --path . --locked`.
364
106
 
365
- Long engagements also need to remember what has *not* been tried yet: `/coverage`
366
- opens a persistent checklist in `.wrosecode/coverage.json` — add scope items,
367
- tick them off as they are verified, and the `coverage` tool lets the agent
368
- update the same list while it works. The file survives sessions, so skipped
369
- areas stay visible instead of quietly falling out of the engagement.
370
-
371
- ```bash
372
- # CTFd operations
373
- wrosecode ctfd list
374
- wrosecode ctfd scoreboard
375
- wrosecode ctfd download 42
376
- wrosecode ctfd submit 42 'flag{answer}'
377
- wrosecode ctfd verify 42 'flag{answer}' # exit 0 verified, 2 rejected, 1 inconclusive
378
-
379
- # Race the primary model against other configured models
380
- wrosecode --provider vyce --model deepseek-v4.1 \
381
- --race openai:gpt-4o-mini --race ollama:qwen3 \
382
- 'solve this challenge and verify the flag'
383
- ```
384
-
385
- ### CTF autopilot
107
+ ## Quick start
386
108
 
387
- `wrosecode ctf <file|dir|url|description>` hands the target to an autonomous
388
- loop (headless; in the TUI it is `/ctf`, and mentioning a flag, CTF, or
389
- challenge offers it):
109
+ Open the CLI from the repository you want to work in:
390
110
 
391
111
  ```bash
392
- # Triage → category hypothesis → playbooks → verify, or a loud budget stop
393
- wrosecode ctf chal.pcap --budget 60
394
- wrosecode ctf chal.txt --flag-format 'SECRET\{[^}]+\}' --category forensics
395
- wrosecode ctf https://challenge.example --remote challenge.example:443 --parallel 2
112
+ cd /path/to/your/project
113
+ wrosecode
396
114
  ```
397
115
 
398
- Every run starts by printing the allowlist it will work inside
399
- (`SCOPE files … · hosts …`, `TOOLS installed/missing`, `GUESS <category>`),
400
- writes `ctf-notes.md` (challenge, scope, triage, assumptions, dead ends —
401
- dead ends are re-read by the stuck handler so nothing is retried), and loads
402
- the matching `skills/ctf-*` playbook. Out-of-scope writes are denied with the
403
- reason handed back to the model instead of executed. Flags are `✔ flag
404
- verified` only when the value re-derives from an artifact (or a decode chain);
405
- a model claim alone is `⚠ candidate, unverified`.
406
-
407
- The stop condition is never silent: hitting the budget prints
408
- `BUDGET EXHAUSTED (steps|tokens|seconds)` plus `Tried:` / `Learned:` /
409
- `Next:`, and every run leaves `writeups/<challenge>.md`. Exit codes are `0`
410
- verified, `2` unsolved (budget or stop), `1` error.
411
-
412
- Project playbooks load from `skills/`, `.ctf/skills/`, and `~/.wrosecode/skills/`. Delegated tasks accept stable `task_id` values and can resume completed results. Thinking levels allocate runtime concurrency as follows: 0–3 uses one worker, 4–7 uses up to three, 8–12 uses up to five, and 13–20 allows the configured swarm limit.
413
-
414
- The tool runtime includes MCP, Burp raw request import/export, optional Playwright screenshots, in-memory and Redis result caches, and an optional Qdrant writeup archive. Start the supporting services with `docker compose up -d`.
415
-
416
- ## Web and automation
116
+ Try a one-shot development task:
417
117
 
418
118
  ```bash
419
- # Local REST API and browser dashboard
420
- wrosecode --provider vyce --model deepseek-v4.1 --web
421
-
422
- # Headless automation with machine-readable completion data
423
- wrosecode --headless --summary json 'analyze the supplied challenge'
119
+ wrosecode --mode build "Review this repository and suggest a small, testable improvement."
424
120
  ```
425
121
 
426
- The web server binds to `127.0.0.1:7878` by default. See `API.md` before exposing it through a reverse proxy.
427
-
428
- `--events PATH` (or `--events -` for stdout) writes a framed NDJSON submission stream for embedding clients: a `start` frame with the session and prompt, `step` frames for tool begins/ends, thinking-level changes, plans, flag hits, and usage, `text` frames carrying streamed tokens, and a final `result` frame with the answer, verification status, usage, and model-turn count. Frames are flushed as they happen and the `result` frame is always last, so a host application can drive and render a session without parsing the transcript:
122
+ Inside the interactive UI:
429
123
 
430
- ```bash
431
- wrosecode --headless --events run.jsonl --summary json 'analyze the supplied challenge'
432
- jq -r 'select(.type == "text") | .delta' run.jsonl # live answer stream
124
+ ```text
125
+ /help Show available commands
126
+ /providers Configure, authenticate, or test model connections
127
+ /ctf Open the CTF workflow
128
+ /bugbounty Arm a scoped security assessment
129
+ /resume Continue a saved session
130
+ Ctrl+T Change thinking level
131
+ Ctrl+D Open the dashboard
433
132
  ```
434
133
 
435
- `src/events.rs` is the formatter; `docs/ref-notes.md` records it against Codex's submission/event protocol.
134
+ For provider setup, use `/providers` or the supported environment variables. **Never put API keys in Git commits, README examples, or issue screenshots.**
436
135
 
437
- ## Shell sandbox
136
+ ## Features
438
137
 
439
- `[sandbox]` in `config.toml` decides where `shell` calls run:
138
+ | Capability | What it provides |
139
+ |---|---|
140
+ | **Native Rust TUI** | Responsive, streaming, keyboard-first interface with compact resource and progress information |
141
+ | **Multiple AI backends** | Provider profiles, compatible APIs and configurable model/thinking choices |
142
+ | **Repository awareness** | File context, project instructions, repository maps, code editing and local test workflows |
143
+ | **Tool integration** | Shell tools, optional MCP providers and developer workflows with permission controls |
144
+ | **Persistent sessions** | Resumable conversations, checkpoints, exports and session diagnostics |
145
+ | **Headless execution** | CLI automation, machine-readable events, budgets and bounded run limits |
146
+ | **CTF mode** | Challenge analysis, local solver development and evidence-based flag verification |
147
+ | **VAPT / Bug Bounty** | Program allowlists, OWASP-oriented checklists, controlled authorization testing and evidence-backed reports |
440
148
 
441
- | `engine` | Behaviour |
442
- | --- | --- |
443
- | `none` (default) | Run the command on the host, exactly like before. |
444
- | `docker` | Run it inside a container. The project directory is bind-mounted at `/workspace`, so file edits made by other tools stay visible. |
149
+ Features requiring a provider account, an external app, MCP server or other optional service are **not** enabled automatically.
445
150
 
446
- ```toml
447
- [sandbox]
448
- engine = "docker"
449
- image = "wrosecode-sandbox:latest"
450
- persistent = true # one warm container reused across calls (no cold start)
451
- name = "wrosecode-sandbox"
452
- network = "bridge"
453
- memory = "2g"
454
- cpus = "2.0"
455
- auto_build = false # docker build -f Dockerfile.sandbox when the image is missing
456
- ```
151
+ ## Security research workflows
457
152
 
458
- Build the analysis image once:
153
+ WROSECODE supports **authorized research only**. Set an explicit target scope and follow the program's testing rules. Do not use production customer data, attack out-of-scope infrastructure or assume automated findings are verified.
459
154
 
460
- ```bash
461
- docker build -f Dockerfile.sandbox -t wrosecode-sandbox:latest .
462
- ```
155
+ ### CTF labs
463
156
 
464
- `engine = "docker"` never falls back silently: if the docker CLI, the daemon, or
465
- the image is missing, the tool call fails with a message that tells you which of
466
- the three to fix. `persistent = true` keeps one `sleep infinity` container alive
467
- and `docker exec`s into it, so there is no per-call cold start.
468
-
469
- Whatever the engine, `shell` is resource-boxed: the host path runs the command
470
- in its own process group, so a timeout or a cancelled turn kills the whole
471
- group — grandchildren included — stdout and stderr are tail-capped at 256 KiB
472
- while the command runs so a flooding pipe cannot pin memory, and a background
473
- daemon cannot hold the result open. The container path adds an in-container
474
- `timeout -k 5` (skipped automatically on images without coreutils) so killing
475
- the docker client on timeout cannot strand the workload inside the container.
157
+ Use the interactive `/ctf` workflow or a task with CTF mode:
476
158
 
477
159
  ```bash
478
- /sandbox # status: engine, container, image
479
- /sandbox up # warm the container now
480
- /sandbox down # stop and remove it
160
+ wrosecode --mode ctf
481
161
  ```
482
162
 
483
- `auto_build = true` runs `docker build -f Dockerfile.sandbox -t <image> .` the
484
- first time the image is missing, then falls back to `docker pull`.
485
-
486
- ### Desktop control (opt-in)
163
+ Analyze challenge material you are allowed to test, build a reproducible solver, and confirm the result with tool output. A model-generated flag alone is **not** proof of a solved challenge.
487
164
 
488
- The `computer` tool drives this machine's desktop with `screenshot`, `click`,
489
- `type`, `key`, and `scroll`, but it ships disabled — until you opt in, the
490
- schema is not even advertised to the model. Enable it for one run with
491
- `--computer`, or permanently with `[tools] computer = true` in `config.toml`.
492
- Screenshots probe `grim`, `gnome-screenshot`, `scrot`, `import`, and
493
- `screencapture` in that order; input actions go through `xdotool`. Every call
494
- is launched as a literal argument vector (never through a shell string),
495
- screenshot paths are confined to the project root, and approval follows the
496
- normal mutating-tool policy: `ask` prompts for each call, `auto-safe` and
497
- `yolo` run it, and plan mode refuses it.
165
+ ### VAPT and bug bounty
498
166
 
499
- ## Run the agent in a container
500
-
501
- Build the image that carries `wrosecode` itself plus the challenge toolchain:
167
+ Example syntax using a **placeholder domain**; replace it with the exact host authorized by your program:
502
168
 
503
169
  ```bash
504
- docker build -t wrosecode-sandbox .
505
- docker run --rm -it -v "$PWD:/workspace" \
506
- -e ANTHROPIC_API_KEY wrosecode-sandbox --permission yolo
170
+ wrosecode bugbounty https://app.example.test \
171
+ --scope app.example.test \
172
+ --program "Authorized Assessment"
507
173
  ```
508
174
 
509
- With an interactive terminal, `wrosecode` opens a full-screen chat UI showing the conversation, tool activity, status, and a persistent input box. Anthropic text appears as it streams; the OpenAI-compatible backend displays its completed response. The UI redraws only changed lines, renders just the visible slice of a long transcript, and pins itself to the bottom while new output arrives (the header shows `· ↑N lines` when you have scrolled away). Type `/` at the start of the input to open the command palette. Keep typing to filter, use the arrow keys to select, press Enter to run, or Esc to close. `Tab` switches between build and read-only plan modes. Use `PageUp`/`PageDown` to scroll, `Up`/`Down` for prompt history. Messages typed while a turn is running are kept: they are queued and sent after the reply, and `Ctrl+C` during a turn cancels just that turn (a second `Ctrl+C` within ~2s exits). One-shot calls and piped input keep plain text output. The UI displays permission requests and accepts `y` or `n`; `Ctrl+C` there denies the request and stays in the session.
510
-
511
- The `delegate_task` tool can select a different `provider` and `model` for a child task. Supported provider names are `anthropic`, `openai-compat`, `ollama`, and `lm-studio`.
175
+ The engagement workflow can create `.bugbounty/VAPT_ASSESSMENT.md`, containing an offline **OWASP WSTG / ASVS** checklist and an **API BOLA/IDOR role-object matrix** for researcher-owned test accounts. Scope guardrails, bounded HTTP behavior, response/evidence checks, and report verification support low-impact testing; they do not substitute for explicit authorization.
512
176
 
513
- Attach an MCP stdio server for one run with `--mcp-bin PATH` and repeated `--mcp-arg ARG` flags. `/mcps add` saves additional servers in `~/.wrosecode/mcps.toml`; they reconnect at startup. The same file takes remote servers over the streamable-HTTP transport: give the entry a `url = "https://…/mcp"` instead of a `bin`, plus an optional `[servers.headers]` table for `Authorization` or API keys — `/mcps add` prompts for the URL when you prefer the TUI. The client posts JSON-RPC, keeps the server's `Mcp-Session-Id`, and accepts either a JSON body or an SSE stream for replies. Tools are exposed to the model as `mcp__SERVER__TOOL`.
177
+ Findings follow an evidence-gated process:
514
178
 
515
- The standalone `install.sh` and `install.ps1` scripts accept
516
- `WROSECODE_RELEASE_BASE`; npm users do not need to set it because the npm
517
- installer derives the versioned GitHub Release URL from package metadata.
179
+ ```text
180
+ Potential → Investigating → Reproduced → Verified → Reported
181
+ ```
518
182
 
519
- ## Configuration
183
+ Verified reports can include analyst-supplied **CWE, WSTG, ASVS, CVSS vector, severity rationale**, reproduction steps and remediation. Unconfirmed scanner hits should not be presented as confirmed vulnerabilities.
520
184
 
521
- `config.toml` in the project root is the single source of truth for the tunables;
522
- `config.schema.json` describes it for editor validation. Every section and every
523
- key is optional — a missing file, a missing section, or a typo falls back to the
524
- built-in defaults rather than failing to start. CLI flags always win.
185
+ ## Permissions and responsible use
525
186
 
526
- | Section | Purpose |
527
- | --- | --- |
528
- | `[ui]` | Theme, verbosity, alternate screen, `mouse_capture`, `alert_bell`, scroll step. |
529
- | `[agent]` | Thinking mode (`think`), legacy level (`thinking_level`), worker ceiling, shell timeout, retries, permission tier, budget, planner model for `plan` mode (`planner = "provider/model"`), aider-style auto-commit of edited paths (`auto_commit`, default on). |
530
- | `[ctf]` | Flag regexes, clipboard copy, CTFd auto-submit. |
531
- | `[cache]` | `memory` or `redis`, plus Redis and Qdrant URLs. |
532
- | `[sandbox]` | Where `shell` calls run (`none` or `docker`) and the container settings. |
533
- | `[lsp]` | Language-server diagnostics appended to file edits (`enabled`, `wait_ms`, per-language `commands`). |
534
- | `[tools]` | Opt-in extra tool surfaces: `computer` enables desktop control (off by default; the `--computer` flag turns it on for one run). |
187
+ - Start with interactive approval (`ask`) or the appropriate bounded permission mode. Do not use broad `yolo` permissions on untrusted code or systems.
188
+ - Keep test data synthetic, honor target exclusions and rate limits, and stop testing when the program or service blocks requests.
189
+ - Keep credentials, CTF flags, raw request/response captures and personal data out of public issues and screenshots.
190
+ - See [sandbox implementation details](docs/CLI_REFERENCE.md#shell-sandbox) and [contribution guidance](CONTRIBUTING.md).
535
191
 
536
- `cargo test` parses the shipped `config.toml` and asserts every key lands where
537
- it should, so a section cannot silently stop being read again.
192
+ ## Development and quality checks
538
193
 
539
- ## Tests
194
+ The release workflow uses Rust and Node.js checks. From a source checkout:
540
195
 
541
196
  ```bash
197
+ npm ci --ignore-scripts
198
+ npm run check
542
199
  cargo fmt --check
543
200
  cargo clippy --all-targets -- -D warnings
544
201
  cargo test --all-targets
545
- cargo test --release benchmarks -- --nocapture # speed budgets (also in ./scripts/check.sh and CI)
546
- ```
547
-
548
- Three layers run in that one command:
549
-
550
- | Layer | Where | What it proves |
551
- | --- | --- | --- |
552
- | Unit | `src/**` modules | Flag detection corpus, metrics/histogram math, terminal profile rules, CTFd verdict classification, config parsing |
553
- | CLI | `tests/cli.rs` | The argument surface stays documented: `--version`, `--help`, unknown flags, `ctfd verify --help` |
554
- | End to end | `tests/e2e_headless.rs`, `tests/e2e_ctfd.rs` | A real `wrosecode` process against a local mock OpenAI-compatible server and a mock CTFd: tool round trips, `--summary json` usage numbers, `--until` exit codes, `ctfd verify` retries and exit codes |
555
-
556
- The end-to-end tests bind `127.0.0.1` on an ephemeral port, point the child
557
- process at a temporary `HOME`, and never touch the network or a real provider.
558
-
559
- The release-mode budgets in `src/benchmarks.rs` (output shaping, SSE
560
- draining, repo-map build) fail on regressions; `./scripts/benchmark.sh`
561
- records test-suite latency and corpus size to `.ctf/reports/benchmark.json`.
562
-
563
- ## Permissions
564
-
565
- `--permission ask` prompts for mutating tool calls. `auto-safe` runs them automatically except risky shell commands. `yolo` removes normal prompts. A destructive shell-command blocklist prompts in every tier. `/plan` changes to read-only mode; `/build` returns to edit mode. The shell blocklist is a convenience guard, not an isolation boundary — for real isolation set `[sandbox] engine = "docker"` below, which moves every `shell` call into a container.
566
-
567
- Tool output, web content, and file text are untrusted data: scope and approval checks inspect structured tool-call arguments before dispatch, so result prose cannot change policy, approvals, or scope. Credential-shaped values and configured provider keys are redacted from displayed and persisted copies — transcript cells, streamed text, dashboard processes, events NDJSON, session JSON/SQLite payloads, crash reports, and memory facts — while the live model context keeps full fidelity.
568
-
569
- ## Skills and memory
570
-
571
- Skills are `SKILL.md` files with YAML frontmatter:
572
-
573
- ```yaml
574
- ---
575
- name: my-skill
576
- description: What it helps with
577
- fork: true
578
- keywords: [kubernetes, kubectl]
579
- ---
580
- Instructions for the agent.
202
+ cargo build --release --locked
581
203
  ```
582
204
 
583
- Skills load from bundled `skills/`, project `skills/`, `~/.wrosecode/skills/`, and `--skills DIR`, with later paths overriding names. Skill packages install from a git URL or a directory — `/skills install <url#ref | path>`, or `--install-skill` headless — into `~/.wrosecode/skills/`, versioned in `~/.wrosecode/packages.json`; `/skills list` and `/skills uninstall <pkg>` manage them. `keywords:` (a YAML list or a comma-separated string) makes a skill fire on its own: a short knowledge snippet loads as soon as one of those whole words appears in the prompt, without the skill name being mentioned — the keyword gate sits below the name match, so a prompt naming the skill still wins. Use `#fact text` for project memory and `#!fact text` for personal memory. `/memory` lists saved facts. Matching facts are recalled automatically. Obvious secret patterns are redacted on save.
205
+ CI runs on **Linux, macOS and Windows**. The CI badge reports the current public workflow status; it is not a guarantee that every optional external provider is available.
584
206
 
585
- `/harness minimal|swe|claude` switches prompt style without clearing history. `wrosecode acp` starts a basic ACP stdio agent.
207
+ ## Documentation
586
208
 
587
- ## Your own commands and agents
209
+ | Resource | Description |
210
+ |---|---|
211
+ | [Full CLI reference](docs/CLI_REFERENCE.md) | Original detailed README content, including TUI controls, providers and advanced workflows |
212
+ | [Architecture](ARCHITECTURE.md) | Internal design and components |
213
+ | [Feature reference](docs/features.md) | Detailed capabilities |
214
+ | [Agent API](API.md) | Local API and integration notes |
215
+ | [Benchmarks](BENCHMARKS.md) | Benchmark notes and methodology |
216
+ | [Contributing](CONTRIBUTING.md) | Development and testing expectations |
217
+ | [GitHub releases](https://github.com/whiterose717/WROSECODE-CLI/releases) | Native releases, versioned binaries and checksums |
588
218
 
589
- Markdown files with YAML frontmatter extend the shell without recompiling anything. Commands load from `.wrosecode/commands/*.md` (project) and `~/.wrosecode/commands/` (personal); the project file wins on a name clash:
219
+ ## License
590
220
 
591
- ```markdown
592
- ---
593
- description: Commit and push the branch
594
- category: Project
595
- ---
596
- Review the working tree, write one imperative commit message, commit, and push $ARGUMENTS.
597
- ```
598
-
599
- `/ship the fix` expands `$ARGUMENTS` and runs the body as a normal turn — in the TUI and in `wrosecode --headless '/ship the fix'`. Your commands appear in `/help` and the `Ctrl+P` palette, and typing `/` completes them.
221
+ WROSECODE is open source under the **MIT License**.
600
222
 
601
- Agents load from `.wrosecode/agents/*.md` and `~/.wrosecode/agents/`:
223
+ See the complete [LICENSE](LICENSE) file for legal terms and copyright information. The existing license text and attribution are preserved.
602
224
 
603
- ```markdown
604
- ---
605
- description: Reviews diffs, never edits
606
- mode: plan
607
- thinking: deep
608
225
  ---
609
- Always quote the file and line you are criticising.
610
- ```
611
-
612
- `wrosecode --agent reviewer 'review the diff'` activates one for a run; in the TUI it is listed in `/agents`. Its body is injected into every system prompt, `mode:` picks `build`, `plan`, or `general`, and `thinking:` sets the level. `/build`, `/plan`, or `/agents` on a built-in drops the custom agent.
613
-
614
- ## Recipes
615
-
616
- A recipe is a saved multi-step workflow: a YAML (or Markdown) file with parameters and an ordered list of prompt and command steps, in the spirit of goose's recipes. `.wrosecode/recipes/` holds the project's recipes, `~/.wrosecode/recipes/` the personal ones, and the project file wins a name clash.
617
-
618
- ```yaml
619
- name: audit
620
- description: Two-step audit
621
- version: "1"
622
- params:
623
- target:
624
- description: host to audit
625
- default: localhost
626
- steps:
627
- - prompt: "Recon {{target}} and list open ports."
628
- - command: "echo ports-open-for-{{target}}"
629
- - prompt: "Given {{prev}}, write the one-line verdict."
630
- ```
631
-
632
- `params` may also be a plain list of required names. `{{key}}` placeholders take the resolved parameter values (defaults fill in, an unknown key is an error), `{{prev}}` is the previous step's output, and `{{steps}}` is the accumulated history — bounded, oldest output dropped first. A Markdown recipe uses frontmatter for `name`/`description`/`params` and its body as a single prompt step.
633
-
634
- ```bash
635
- wrosecode recipe list
636
- wrosecode recipe run audit --set target=attackme.local
637
- ```
638
-
639
- `recipe run` behaves like any other headless run: it prints the answer, honours `--summary json`, `--goal`, `--until`, `--until-cmd`, `--events`, and exits `2` when the verification flags say the answer was wrong. Prompt steps run as ordinary turns — full tool use, permissions, and steering apply — while command steps are the recipe author's own shell commands, run with the project's shell timeout. In the TUI, `/recipe` opens a picker, asks for each parameter the recipe does not default, and streams every step; `/recipe NAME` skips the picker.
640
-
641
- ## Slash commands
642
-
643
- `/help` shows the full command list, generated from the same registry as the palette.
644
-
645
- | Area | Commands |
646
- | --- | --- |
647
- | Agents | `/agents`, `/build`, `/plan`, `/harness`, `/skills` |
648
- | Providers | `/connect`, `/providers`, `/models`, `/mcps`, `/mcp` |
649
- | Session | `/new`, `/sessions`, `/resume`, `/fork`, `/history`, `/tree`, `/move`, `/editor`, `/memory`, `/greet`, `/debug`, `/stats`, `/dashboard`, `/verbosity`, `/think`, `/theme`, `/compact`, `/export`, `/help`, `/exit`, `/quit` |
650
- | Project | `/init`, `/diff`, `/review`, `/commit`, `/issues`, `/rmslop`, `/undo`, `/redo`, `/add`, `/drop`, `/recipe`, `/coverage`, `/flags`, `/writeup`, `/ctf`, `/sandbox` |
651
-
652
- `/providers` opens a searchable provider screen with the built-in entries and their connection status. Enter configures or selects a provider; `a` adds, `e` edits, `d` deletes any provider (built-ins included — deleting the active one switches to another configured provider first), and `t` tests a connection. `/connect` opens the custom provider form directly; `/connect openai` offers "Sign in with ChatGPT" (browser loopback or device-code OAuth, tokens stored owner-only at `~/.wrosecode/credentials/openai.json`) next to the plain API-key path. The API key field is masked. `/models` lists models across connected providers and switches to the picked one.
653
-
654
- Provider definitions are saved in `~/.wrosecode/providers.toml` without keys. Keys go to the OS keyring when available, otherwise to `~/.wrosecode/auth.json` with mode `0600`. Environment variables override stored keys. Custom provider keys can use `WROSECODE_NAME_API_KEY` (replace dashes in the name with underscores), or a saved `env:VARIABLE` reference. Custom providers support `openai_compat` and `anthropic` APIs; both support streamed replies and tool calls. Each profile can also set `think` (its default thinking level) and `think_map` (per-level provider values) — see *Thinking levels* above. Providers that need cloud-specific signing or URLs can use an OpenAI-compatible gateway as their base URL.
655
-
656
- The same registry is available without the TUI:
657
-
658
- ```bash
659
- wrosecode providers list
660
- printf '%s\n' "$MY_API_KEY" | wrosecode providers add my-gateway \
661
- --base-url https://llm.example.com/v1 --stdin --model my-model
662
- wrosecode providers set-key my-gateway --api-key env:MY_API_KEY
663
- wrosecode providers edit my-gateway --model other-model
664
- wrosecode providers test my-gateway
665
- wrosecode --provider my-gateway 'Explain this project'
666
- wrosecode providers remove my-gateway
667
- ```
668
-
669
- OAuth sign-in (ChatGPT-style) is available alongside API keys. It needs a
670
- client ID from your own OAuth client registration — nothing first-party is
671
- bundled:
672
-
673
- ```bash
674
- wrosecode providers add openai --base-url https://api.openai.com/v1 \
675
- --model gpt-5 --oauth --oauth-client-id YOUR_CLIENT_ID
676
- wrosecode providers add openai --base-url https://api.openai.com/v1 \
677
- --model gpt-5 --oauth --device --oauth-client-id YOUR_CLIENT_ID
678
- ```
679
-
680
- The browser flow opens the issuer's authorize URL and waits on a short-lived
681
- `127.0.0.1:1455` callback (paste the redirect URL instead when the browser
682
- cannot reach this machine); `--device` prints a code to enter at the
683
- issuer's verification page instead. Tokens land owner-only (`0600`) at
684
- `~/.wrosecode/credentials/<name>.json`, the profile records
685
- `auth_method = "oauth"`, and refresh happens automatically before use.
686
226
 
687
- Use `--stdin` or `--api-key env:VARIABLE` to keep keys out of shell history. You can add repeated `--header K=V` options for non-secret custom headers.
227
+ <div align="center">
688
228
 
689
- `/new` archives the current conversation to `~/.wrosecode/sessions/` and begins a new one. Long conversations are summarized automatically before the next request once they pass 180 000 characters of history (`WROSECODE_COMPACT_CHARS` changes the threshold), with the newest request carried through the cut verbatim so the ask you just made can never be summarized away; `/compact` runs that summary immediately and reports how much context it freed. `/sessions` (or `/resume`) resumes a saved conversation, and `/move NAME` renames the current session. `/fork [name]` keeps the current session on disk and continues in a copy of it — both sides share the history up to the fork and diverge from there — and `--session ID --fork` does the same from a headless run. `/fork <n> [name]` (and headless `--fork-at N`) branches from an earlier message instead, keeping only the first n messages; `/history` prints every message with the number `/fork <n>` would branch at, and a partial fork rebuilds its visible transcript to match the shortened context. `/tree` draws the resulting forest, indenting each fork under its parent and marking the session you are in. Every run, headless or not, is written to both the SQLite store (`--session`) and the JSON files under `~/.wrosecode/sessions/` that the pickers list. `/editor` opens `$EDITOR` (default `vi`) on a temporary prompt; saving and exiting submits it.
229
+ **Built for the terminal. Grounded in reproducible work.**
690
230
 
691
- `/init` creates `.wrosecode/project.toml` and `WROSECODE.md` in the current repository without replacing existing files. `AGENTS.md` files from the repository root up through its parent directories are loaded with `WROSECODE.md` and injected into every system prompt (8 KB per file, 32 KB per chain). `/diff` includes tracked and untracked changes. `/review` asks the model for findings without applying changes. `/commit` shows the diff, proposes a message, allows edits, and requires an explicit confirmation before staging and committing. `/issues` reads open GitHub or GitLab issues from the `origin` remote; private repositories can use `GITHUB_TOKEN` or `GITLAB_TOKEN`. `/rmslop` lists untracked scratch files and empty directories created by this session's file tool, then requires confirmation before deleting them. Every batch of `write_file`, `edit_file`, and `apply_patch` calls first captures the pre-edit bytes of exactly those paths under `.wrosecode/snapshots/undo/`; `/undo` restores the newest snapshot (removing files the edit created) and keeps the replaced tree on the redo stack, `/redo` reverses that, and a failed turn that changed nothing discards its own snapshot. Git is never touched, so snapshots work in a repository you did not initialise.
231
+ [GitHub](https://github.com/whiterose717/WROSECODE-CLI) · [npm](https://www.npmjs.com/package/wrosecode) · [Releases](https://github.com/whiterose717/WROSECODE-CLI/releases) · [Issues](https://github.com/whiterose717/WROSECODE-CLI/issues)
692
232
 
693
- `/add PATH` pins a project file into every prompt: its contents ride along in the system prompt (capped at 6 000 characters per file and 24 000 in total) so the model never has to re-read it, `/add` alone lists the pins, and `/drop PATH` (or `/drop all`) removes them. The pin list is stored with the session, so `/sessions` and `--session` restore it, and headless runs accept the same thing as a repeatable `--add PATH` flag. For `/`-less prompting the repo map ranks files by query relevance blended with a PageRank over cross-file symbol references and stops at a 1 024-token budget.
233
+ </div>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wrosecode",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "description": "A terminal coding agent written in Rust",
5
5
  "license": "MIT",
6
6
  "keywords": [