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.
- package/README.md +143 -603
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,693 +1,233 @@
|
|
|
1
|
-
|
|
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&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 & VAPT</a> ·
|
|
25
|
+
<a href="#documentation">Documentation</a>
|
|
26
|
+
</p>
|
|
2
27
|
|
|
3
|
-
|
|
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
|
-
|
|
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
|
-
|
|
29
|
-
|
|
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
|
-
|
|
35
|
+
## Screenshots
|
|
33
36
|
|
|
34
|
-
|
|
35
|
-
npx wrosecode
|
|
36
|
-
```
|
|
37
|
+
### Native Rust terminal UI
|
|
37
38
|
|
|
38
|
-
|
|
39
|
+
Real screenshots captured from the WROSECODE executable using an isolated demo workspace, without account credentials or real target data.
|
|
39
40
|
|
|
40
|
-
|
|
41
|
-
|
|
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
|
-
|
|
46
|
+
<br>
|
|
45
47
|
|
|
46
|
-
|
|
47
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
64
|
+
### Option 1 — npm (recommended for end users)
|
|
68
65
|
|
|
69
|
-
|
|
66
|
+
Requires **Node.js 18+** and network access on the first installation/run to download the native executable.
|
|
70
67
|
|
|
71
68
|
```bash
|
|
72
|
-
|
|
73
|
-
wrosecode
|
|
74
|
-
wrosecode
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
236
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
wrosecode
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
393
|
-
wrosecode
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
```
|
|
431
|
-
|
|
432
|
-
|
|
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
|
-
`
|
|
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
|
-
##
|
|
136
|
+
## Features
|
|
438
137
|
|
|
439
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
461
|
-
docker build -f Dockerfile.sandbox -t wrosecode-sandbox:latest .
|
|
462
|
-
```
|
|
155
|
+
### CTF labs
|
|
463
156
|
|
|
464
|
-
|
|
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
|
-
|
|
479
|
-
/sandbox up # warm the container now
|
|
480
|
-
/sandbox down # stop and remove it
|
|
160
|
+
wrosecode --mode ctf
|
|
481
161
|
```
|
|
482
162
|
|
|
483
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
505
|
-
|
|
506
|
-
|
|
170
|
+
wrosecode bugbounty https://app.example.test \
|
|
171
|
+
--scope app.example.test \
|
|
172
|
+
--program "Authorized Assessment"
|
|
507
173
|
```
|
|
508
174
|
|
|
509
|
-
|
|
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
|
-
|
|
177
|
+
Findings follow an evidence-gated process:
|
|
514
178
|
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
179
|
+
```text
|
|
180
|
+
Potential → Investigating → Reproduced → Verified → Reported
|
|
181
|
+
```
|
|
518
182
|
|
|
519
|
-
|
|
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
|
-
|
|
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
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
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
|
-
|
|
537
|
-
it should, so a section cannot silently stop being read again.
|
|
192
|
+
## Development and quality checks
|
|
538
193
|
|
|
539
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
207
|
+
## Documentation
|
|
586
208
|
|
|
587
|
-
|
|
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
|
-
|
|
219
|
+
## License
|
|
590
220
|
|
|
591
|
-
|
|
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
|
-
|
|
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
|
-
|
|
227
|
+
<div align="center">
|
|
688
228
|
|
|
689
|
-
|
|
229
|
+
**Built for the terminal. Grounded in reproducible work.**
|
|
690
230
|
|
|
691
|
-
|
|
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
|
-
|
|
233
|
+
</div>
|