frizz 0.13.12 → 0.13.14

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 (3) hide show
  1. package/README.md +21 -13
  2. package/dist/frizz.js +888 -233
  3. package/package.json +3 -2
package/README.md CHANGED
@@ -43,7 +43,7 @@ $ npx frizz
43
43
  A browser tab opens on the dashboard at `http://127.0.0.1:9393/`. Add a **project** there — any folder: a repo, a jj checkout, or a folder of scripts. Frizz has no opinion about version control and does not require Git. Each project gets its own board at `/project/<name>`, and from then on running `npx frizz` inside that folder opens its board. Frizz always listens on port 9393 (19393 if something else holds it), and one server serves every project on the machine, so a second run joins the server already running rather than starting another. Runs on macOS, Linux, and Windows.
44
44
 
45
45
  <p align="center">
46
- <img src="assets/board.png" alt="The Frizz board: the project rail down the left, the composer and the queue of threads beside it, and on the right a card where an agent is asking an answerable question with numbered options drawn as keycaps, with its snooze clock and done check in the card's header." width="100%">
46
+ <img src="assets/board.png" alt="The Frizz board: the project rail down the left, the composer and the queue of threads beside it, and on the right a card where an agent is asking an answerable question with lettered options, with its snooze clock and done check in the card's header." width="100%">
47
47
  </p>
48
48
 
49
49
  <br/>
@@ -84,21 +84,23 @@ The queue is strict about what earns a card, which is what keeps it a real todo
84
84
  **Threads are built to run without you.** A worker keeps going until it reaches something only you can settle — a product call, a fork where guessing wrong is expensive to undo, an irreversible action — and then it hands back an answerable *question* rather than a wall of text for you to re-read and interpret.
85
85
 
86
86
  <p align="center">
87
- <img src="assets/question.png" alt="A question card titled Question: 'Should the settings store use SQLite or a JSON file?' with two options numbered 1 and 2 on keycaps, the first tagged RECOMMENDED, a third row numbered 3 for typing something else, and a Send answers button." width="100%">
87
+ <img src="assets/question.png" alt="A question card titled Question: 'Should the settings store use SQLite or a JSON file?' with two options lettered A and B, the first tagged RECOMMENDED, and a third row lettered C for typing something else, above the prompt box and its Send button." width="100%">
88
88
  </p>
89
89
 
90
- Options are numbered: press an option's number or click it to pick it, then Enter to send. A worker marks its own recommendation when it has one. There is always a row for writing something else instead.
90
+ Options are lettered: click one to pick it, then Enter to send it, along with anything typed in the prompt box below. A worker marks its own recommendation when it has one. There is always a row for writing something else instead.
91
91
 
92
92
  When the answer isn't one thing, the same card takes several: check any combination and add a note.
93
93
 
94
94
  <p align="center">
95
- <img src="assets/question-multi.png" alt="A question card titled Select multiple: 'Which of these findings should I fix in this pass?' with three numbered checkbox options, the first two ticked, a fourth numbered row for adding a note, and a Send answers button." width="100%">
95
+ <img src="assets/question-multi.png" alt="A question card titled Select multiple: 'Which of these findings should I fix in this pass?' with three lettered checkbox options, the first two ticked, and a fourth lettered row for adding a note, above the prompt box, whose Send button is lit." width="100%">
96
96
  </p>
97
97
 
98
98
  ### GitHub
99
99
 
100
100
  Browse the repo's issues and pull requests from the composer, select any number of them, and each becomes its own thread.
101
101
 
102
+ Sign Frizz in once from Settings → GitHub, with a device code. The sign-in is read-only with one exception GitHub builds in: it can read code, issues, pull requests and checks on the accounts where you install [the Frizz GitHub App](https://github.com/apps/frizz-agent-console), plus public repos, and the only thing it can do beyond reading is comment on a commit. It's what watches pull requests and issues for your workers, overnight included, and it's separate from any `gh` sign-in of your own. It's stored encrypted, with a key unique to your machine: in the keychain on a Mac, and in a separate private file elsewhere. That keeps it from token scanners and copied files, but not from a program running as you that goes after Frizz on purpose.
103
+
102
104
  <p align="center">
103
105
  <img src="assets/github.png" alt="The GitHub picker open over the composer, listing real open issues from colinhacks/zod with numbers, authors, and reaction counts; three are checked and a Start investigations button is enabled." width="100%">
104
106
  </p>
@@ -121,6 +123,12 @@ Give a thread a standing goal. Frizz sends it as a prompt every time the agent c
121
123
  <img src="assets/goal.png" alt="The goal panel open above a queue card's prompt box: a goal saying to keep going until the test suite is green, sent at every rest and every 30 minutes." width="100%">
122
124
  </p>
123
125
 
126
+ ### Launch prefix
127
+
128
+ Start every worker through a command of your own: a secret injector, a token proxy, a sandbox. Set it per project under the gear beside **Claude Code** or **Codex** in the model picker. With `op run --env-file .env --` there, a new Claude worker starts as `op run --env-file .env -- claude …`, so the variables 1Password injects are in the worker's environment and nowhere on disk.
129
+
130
+ The command gets the worker's environment, and must run the command after it with stdin and stdout passed through and stay running until it exits (`exec` does both). Frizz splits the prefix into words like a shell would but never runs it in one, so for variables or pipes, write the shell in: `sh -c 'export ANTHROPIC_BASE_URL="$(my-proxy url)"; exec "$@"' sh`. Claude picks up a change on the next thread you dispatch. Codex's prefix wraps the app-server a project's Codex threads share, and Frizz restarts it once no Codex turn is running. With a prefix set, Frizz no longer refuses to dispatch when it finds no local sign-in, since the prefix may be what supplies the credentials.
131
+
124
132
  <br/>
125
133
 
126
134
  <h2 align="center">CLI</h2>
@@ -142,18 +150,18 @@ Options:
142
150
  --no-app print the URL without opening a browser
143
151
  --port <port> request a fixed port for a new workspace server
144
152
  --sandbox a disposable Frizz to try things in: throwaway home and project, its
145
- own port, deleted when this terminal closes; credentials (gh,
146
- cloudflared, Claude, Codex, the machine's frizz.sh key) are shared
153
+ own port, deleted when this terminal closes; credentials (Frizz's
154
+ GitHub sign-in, cloudflared, Claude, Codex, the machine's frizz.sh
155
+ key) are shared
147
156
  --link print a fresh single-use access link for the running board
148
157
  --debug stream the full event feed to the terminal instead of the compact readout
149
158
  -h, --help show this help
150
159
 
151
160
 
152
161
  To reach the board from a phone or another machine, press R in the terminal running it: a short
153
- walkthrough sets up a private frizz.sh name (no account needed), a Cloudflare
154
- Tunnel, Tailscale, or a proxy of your own, and
155
- remembers the choice, so a plain launch serves it from then on. The board stays on loopback and
156
- shows a single-use sign-in link as a QR; press L for a fresh one, or run --link from another shell.
162
+ walkthrough sets up a private frizz.sh subdomain (no account needed), a Cloudflare Tunnel,
163
+ Tailscale, or a proxy of your own, and remembers the choice, so a plain launch serves it from then
164
+ on. The board stays on loopback and shows a single-use sign-in link as a QR; press L for a fresh one, or run --link from another shell.
157
165
  ```
158
166
 
159
167
  <br/>
@@ -170,7 +178,7 @@ shows a single-use sign-in link as a QR; press L for a fresh one, or run --link
170
178
  <details>
171
179
  <summary><b>Does anything leave my machine?</b></summary>
172
180
 
173
- > Nothing from Frizz. There's no account, no telemetry, and the server binds to `127.0.0.1`; reaching it from another device is something you switch on yourself (press R in its terminal). The agents themselves talk to their providers, and `gh` talks to GitHub, but Frizz is a local process looking at local files.
181
+ > Nothing from Frizz. There's no account, no telemetry, and the server binds to `127.0.0.1`; reaching it from another device is something you switch on yourself (press R in its terminal). The agents themselves talk to their providers, and Frizz reads GitHub directly with the read-only sign-in you give it, but Frizz is a local process looking at local files.
174
182
 
175
183
  </details>
176
184
 
@@ -205,7 +213,7 @@ shows a single-use sign-in link as a QR; press L for a fresh one, or run --link
205
213
  <details>
206
214
  <summary><b>Can I reach it from another machine?</b></summary>
207
215
 
208
- > Yes. Press **R** in the terminal running Frizz. A short walkthrough sets up one of four ways to reach the board — a name on frizz.sh, a Cloudflare Tunnel you own, Tailscale, or any proxy you run — checks what each needs, prints the commands, and remembers your choice. From then on a plain `npx frizz` serves it; pick **Off** in the same place to go back to loopback only.
216
+ > Yes. Press **R** in the terminal running Frizz. A short walkthrough sets up one of four ways to reach the board — a frizz.sh subdomain, a Cloudflare Tunnel you own, Tailscale, or any proxy you run — checks what each needs, prints the commands, and remembers your choice. From then on a plain `npx frizz` serves it; pick **Off** in the same place to go back to loopback only.
209
217
  >
210
218
  > To try any of this without touching the board you run, launch a second one with `npx frizz --sandbox` — a throwaway home and project on its own port, deleted on ctrl-c.
211
219
  >
@@ -216,7 +224,7 @@ shows a single-use sign-in link as a QR; press L for a fresh one, or run --link
216
224
  <details>
217
225
  <summary><b>Can I reach it from anywhere, not just my LAN?</b></summary>
218
226
 
219
- > Same answer: press **R** and pick a private frizz.sh name (unguessable, no account), a Cloudflare Tunnel, or Tailscale. (Custom frizz.sh names are paused for now; a board that already holds one keeps it.) Each is reachable from anywhere the transport is — a frizz.sh name and a Cloudflare Tunnel from the open internet, Tailscale from your own devices.
227
+ > Same answer: press **R** and pick a private frizz.sh subdomain (unguessable, no account), a Cloudflare Tunnel, or Tailscale. (Custom frizz.sh subdomains are paused for now; a board that already holds one keeps it.) Each is reachable from anywhere the transport is — a frizz.sh subdomain and a Cloudflare Tunnel from the open internet, Tailscale from your own devices.
220
228
  >
221
229
  > Frizz has no accounts, so the single-use sign-in link **is** the door: a phone that scans it gets a session; nobody else gets in. Sessions are per device and can be listed and revoked with `npx frizz --sessions` and `npx frizz --sign-out`. Every project added or removed, thread started, message sent and question answered is recorded in `logs/audit.jsonl` under Frizz's data folder, with the session id of the device that did it and whether it came through that public address.
222
230