frizz 0.5.1 → 0.6.0
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 +3 -3
- package/dist/claude-agent-broker.js +31 -6
- package/dist/dev-child.js +8820 -1420
- package/dist/frizz.js +7589 -240
- package/package.json +2 -1
- package/runtime/cc-worker/DECISIONS.md +2 -2
- package/runtime/cc-worker/bin/browser-mcp-tools.json +1192 -0
- package/runtime/cc-worker/bin/browser-mcp.mjs +730 -0
- package/runtime/cc-worker/bin/frizz-mcp.mjs +16 -5
- package/runtime/cc-worker/hooks/deny-ask.mjs +3 -3
- package/runtime/cc-worker/hooks/deny-plan.mjs +5 -4
- package/runtime/cc-worker/hooks/perm-policy.mjs +1 -1
- package/web-dist/assets/{TerminalPane-WcpgmCA-.js → TerminalPane-GfnCbZQ8.js} +1 -1
- package/web-dist/assets/{abnfDiagram-VRR7QNED-Caecklbz.js → abnfDiagram-VRR7QNED-By12QfQW.js} +1 -1
- package/web-dist/assets/architecture-TIHT7OUA-XOYod28l.js +1 -0
- package/web-dist/assets/{architectureDiagram-ZJ3FMSHR-BEk0fg8C.js → architectureDiagram-ZJ3FMSHR-CcXU45QO.js} +1 -1
- package/web-dist/assets/{blockDiagram-677ZJIJ3-B4yq3xiy.js → blockDiagram-677ZJIJ3-CmzyO2OF.js} +1 -1
- package/web-dist/assets/{c4Diagram-LMCZKHZV-DaA5NBkz.js → c4Diagram-LMCZKHZV-DFGSW_ZS.js} +1 -1
- package/web-dist/assets/channel-Bqn3pFKp.js +1 -0
- package/web-dist/assets/{chunk-32BRIVSS-2XsSs8F_.js → chunk-32BRIVSS-whgaFxPY.js} +1 -1
- package/web-dist/assets/{chunk-52WLFC77-DWJfECP3.js → chunk-52WLFC77-DCT0MLgl.js} +1 -1
- package/web-dist/assets/{chunk-C7G6YPKG-Bz07eaGt.js → chunk-C7G6YPKG-Br0OaxIX.js} +1 -1
- package/web-dist/assets/{chunk-EX3LRPZG-D78kZEMM.js → chunk-EX3LRPZG-CUnQkdEF.js} +1 -1
- package/web-dist/assets/{chunk-FWX5IMBZ-CeCa17CW.js → chunk-FWX5IMBZ-D1NqKRFr.js} +2 -2
- package/web-dist/assets/{chunk-HOUHSVGY-9H4GFuBa.js → chunk-HOUHSVGY-7ZL78OrO.js} +1 -1
- package/web-dist/assets/{chunk-ICXQ74PX--Aa17r4X.js → chunk-ICXQ74PX-QSgBAuYw.js} +1 -1
- package/web-dist/assets/{chunk-MOJQB5TN-C3vXhsPV.js → chunk-MOJQB5TN-DOI-0kaG.js} +1 -1
- package/web-dist/assets/{chunk-OGEWGWER-G4kZRBkX.js → chunk-OGEWGWER-CZ3ED-QB.js} +1 -1
- package/web-dist/assets/{chunk-PUDLZKDR-DWd5kvyM.js → chunk-PUDLZKDR-BQJElUFX.js} +1 -1
- package/web-dist/assets/{chunk-Q4XR5HBZ-u55p39Up.js → chunk-Q4XR5HBZ-5B6Qs7rQ.js} +1 -1
- package/web-dist/assets/{chunk-V7JOEXUC-BU4YBmV4.js → chunk-V7JOEXUC-DkMaAMFK.js} +1 -1
- package/web-dist/assets/{chunk-VAUOI2AC-VXcmT20q.js → chunk-VAUOI2AC-Bvq-8GYO.js} +1 -1
- package/web-dist/assets/{chunk-VR4S4FIN-CSjEXLOC.js → chunk-VR4S4FIN-DRVTU-HZ.js} +1 -1
- package/web-dist/assets/{chunk-WYO6CB5R-4WGk2dpL.js → chunk-WYO6CB5R-CRxI5d1E.js} +1 -1
- package/web-dist/assets/{chunk-ZGVPDNZ5-D5Xl8ZV6.js → chunk-ZGVPDNZ5-D_3ow6xU.js} +1 -1
- package/web-dist/assets/classDiagram-OUVF2IWQ-DEMCehy_.js +1 -0
- package/web-dist/assets/classDiagram-v2-EOCWNBFH-DEMCehy_.js +1 -0
- package/web-dist/assets/{cynefin-VYW2F7L2-O6wB49wK.js → cynefin-VYW2F7L2-Bexf41pD.js} +1 -1
- package/web-dist/assets/{cynefinDiagram-TSTJHNR4-pd6ZogNC.js → cynefinDiagram-TSTJHNR4-9gbbl1EH.js} +1 -1
- package/web-dist/assets/{dagre-VKFMJZFB-D8W1S6fw.js → dagre-VKFMJZFB-B04shbL0.js} +1 -1
- package/web-dist/assets/{diagram-FQU43EPY-Bm1NOkHd.js → diagram-FQU43EPY-CGXlhEsB.js} +1 -1
- package/web-dist/assets/{diagram-G47NLZAW-CjwnXTIc.js → diagram-G47NLZAW-DmPCeTOa.js} +1 -1
- package/web-dist/assets/{diagram-NH7WQ7WH-DH1jZ_mu.js → diagram-NH7WQ7WH-D8Hthvi7.js} +1 -1
- package/web-dist/assets/{diagram-OA4YK3LP-B-s969Q_.js → diagram-OA4YK3LP-DbLR6tfL.js} +1 -1
- package/web-dist/assets/{diagram-WEI45ONY-BU3lv6cL.js → diagram-WEI45ONY-B6YWev_0.js} +1 -1
- package/web-dist/assets/{ebnfDiagram-CCIWWBDH-FsAeyqcC.js → ebnfDiagram-CCIWWBDH-8G1uf683.js} +1 -1
- package/web-dist/assets/{erDiagram-Q63AITRT-BRvg5Y9d.js → erDiagram-Q63AITRT-U_VRdQHz.js} +1 -1
- package/web-dist/assets/eventmodeling-45OFAUF4-DIpO2jQx.js +1 -0
- package/web-dist/assets/flowDiagram-23GEKE2U-aERDdceE.js +1 -0
- package/web-dist/assets/{ganttDiagram-NO4QXBWP-eATKNh9U.js → ganttDiagram-NO4QXBWP-Cnsi9uVf.js} +1 -1
- package/web-dist/assets/{gitGraph-TEB2WS4Q-CNYqsua8.js → gitGraph-TEB2WS4Q-DYf7ka-G.js} +1 -1
- package/web-dist/assets/{gitGraphDiagram-IHSO6WYX-BUxgluf8.js → gitGraphDiagram-IHSO6WYX-Bvmr7dEH.js} +1 -1
- package/web-dist/assets/index-Czv3R-v0.js +486 -0
- package/web-dist/assets/index-D8iyWUZ0.css +1 -0
- package/web-dist/assets/{info-DKCQHKI2-HsVLwo1c.js → info-DKCQHKI2-CdP9Q9r0.js} +1 -1
- package/web-dist/assets/{infoDiagram-FWYZ7A6U-D7U65xDp.js → infoDiagram-FWYZ7A6U-RBcOH3Pi.js} +1 -1
- package/web-dist/assets/{ishikawaDiagram-FXEZZL3T-BsfIYXjX.js → ishikawaDiagram-FXEZZL3T-zS0gy3fS.js} +1 -1
- package/web-dist/assets/{journeyDiagram-5HDEW3XC-CpkREKol.js → journeyDiagram-5HDEW3XC-cOciJlFY.js} +1 -1
- package/web-dist/assets/{kanban-definition-HUTT4EX6-2M3KW6Gw.js → kanban-definition-HUTT4EX6-B-v0XClo.js} +1 -1
- package/web-dist/assets/{line-Cs7zWs24.js → line-z44YXdci.js} +1 -1
- package/web-dist/assets/{mermaid-parser.core-Dw-IECV5.js → mermaid-parser.core-0Bg1x4p0.js} +3 -3
- package/web-dist/assets/{mermaid.core-C1lrddjT.js → mermaid.core-ByFqgcIE.js} +3 -3
- package/web-dist/assets/{mindmap-definition-LN4V7U3C-gVS5On1g.js → mindmap-definition-LN4V7U3C-DiGaAQFh.js} +1 -1
- package/web-dist/assets/{packet-7NZHBO7P-Tti1-UWA.js → packet-7NZHBO7P-Bv8ILo_S.js} +1 -1
- package/web-dist/assets/{pegDiagram-2B236MQR-DE5in93G.js → pegDiagram-2B236MQR-CtOUW7n0.js} +1 -1
- package/web-dist/assets/{pie-RZYD4A2V-DfLNkvHl.js → pie-RZYD4A2V-Dz4Bm-Vx.js} +1 -1
- package/web-dist/assets/{pieDiagram-ENE6RG2P-DcqSqJqb.js → pieDiagram-ENE6RG2P-VMY_CK3i.js} +1 -1
- package/web-dist/assets/{quadrantDiagram-ABIIQ3AL-DR-nRPgN.js → quadrantDiagram-ABIIQ3AL-V7HZxM7j.js} +1 -1
- package/web-dist/assets/{radar-I7S5WNFK-DGLDBfPd.js → radar-I7S5WNFK-CWk6RruH.js} +1 -1
- package/web-dist/assets/{railroad-3IZDKUUU-BaiGEHlV.js → railroad-3IZDKUUU-m_8st_Ez.js} +1 -1
- package/web-dist/assets/railroad-abnf-AHOZXSZD-DIaRscxr.js +1 -0
- package/web-dist/assets/railroad-ebnf-EBAXGLYW-CeHpbK-W.js +1 -0
- package/web-dist/assets/railroad-peg-LSFZ7HO6-CbhVIbOj.js +1 -0
- package/web-dist/assets/{railroadDiagram-RFXS5EU6-82aEev5_.js → railroadDiagram-RFXS5EU6-Dz80V-7-.js} +1 -1
- package/web-dist/assets/{requirementDiagram-TGXJPOKE-Bs8opBRj.js → requirementDiagram-TGXJPOKE-DrDDgTwm.js} +1 -1
- package/web-dist/assets/{sankeyDiagram-HTMAVEWB-gOb3FIr8.js → sankeyDiagram-HTMAVEWB-D4SeC-Bi.js} +1 -1
- package/web-dist/assets/{sequenceDiagram-DBY2YBRQ-6DvjtRHR.js → sequenceDiagram-DBY2YBRQ-CA-ZO_qp.js} +1 -1
- package/web-dist/assets/{stateDiagram-2N3HPSRC-Cg2LWdUf.js → stateDiagram-2N3HPSRC-C_ZYvV2s.js} +1 -1
- package/web-dist/assets/stateDiagram-v2-6OUMAXLB-BLevFa3H.js +1 -0
- package/web-dist/assets/{swimlanes-5IMT3BWC-BDpPdYEl.js → swimlanes-5IMT3BWC-DGMDseYx.js} +1 -1
- package/web-dist/assets/swimlanesDiagram-G3AALYLV-00mQRq57.js +8 -0
- package/web-dist/assets/{timeline-definition-FHXFAJF6-BSjfeutv.js → timeline-definition-FHXFAJF6-CEiMp3_j.js} +1 -1
- package/web-dist/assets/{treeView-QDETBFTQ-DwgPy6V3.js → treeView-QDETBFTQ-BSspY0US.js} +1 -1
- package/web-dist/assets/{treemap-6X3UGDF4-7eiifTKW.js → treemap-6X3UGDF4-DXNQxmQ7.js} +1 -1
- package/web-dist/assets/{vennDiagram-L72KCM5P-9u4AhcnV.js → vennDiagram-L72KCM5P-C-khqkdm.js} +1 -1
- package/web-dist/assets/{wardley-OPB4EBWU-DqNb5x9U.js → wardley-OPB4EBWU-B9QCQ_Tm.js} +1 -1
- package/web-dist/assets/{wardleyDiagram-EHGQE667-DlJ7h3vg.js → wardleyDiagram-EHGQE667-vhVpAUzh.js} +1 -1
- package/web-dist/assets/{xychartDiagram-FW5EYKEG-B_9ukg2S.js → xychartDiagram-FW5EYKEG-B8ev9zqs.js} +1 -1
- package/web-dist/index.html +2 -2
- package/web-dist/assets/architecture-TIHT7OUA-BTy2nvYL.js +0 -1
- package/web-dist/assets/channel-WghlT4VS.js +0 -1
- package/web-dist/assets/classDiagram-OUVF2IWQ-D21-Dy4r.js +0 -1
- package/web-dist/assets/classDiagram-v2-EOCWNBFH-D21-Dy4r.js +0 -1
- package/web-dist/assets/eventmodeling-45OFAUF4-RhX2WA7g.js +0 -1
- package/web-dist/assets/flowDiagram-23GEKE2U-C7N14tdV.js +0 -1
- package/web-dist/assets/index-BFuReKr0.js +0 -368
- package/web-dist/assets/index-BH9U3Zlg.css +0 -1
- package/web-dist/assets/railroad-abnf-AHOZXSZD-BCeoIOWA.js +0 -1
- package/web-dist/assets/railroad-ebnf-EBAXGLYW-lZpXJLD8.js +0 -1
- package/web-dist/assets/railroad-peg-LSFZ7HO6-CaUBrHTL.js +0 -1
- package/web-dist/assets/stateDiagram-v2-6OUMAXLB-Digf9CWZ.js +0 -1
- package/web-dist/assets/swimlanesDiagram-G3AALYLV-DEZRDWHA.js +0 -8
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<p align="center">
|
|
2
2
|
<h1 align="center"><img src="assets/logo-concepts/final/fff-tile.png" alt="" width="104" height="104"><br/>Frizz</h1>
|
|
3
|
-
<p align="center">
|
|
3
|
+
<p align="center">An opinionated agent console for extreme productivity.
|
|
4
4
|
<br/>
|
|
5
5
|
by <a href="https://x.com/colinhacks">@colinhacks</a>
|
|
6
6
|
</p>
|
|
@@ -122,7 +122,7 @@ $ npx frizz --help
|
|
|
122
122
|
Frizz production launcher
|
|
123
123
|
|
|
124
124
|
Usage: npx frizz [options] [repository]
|
|
125
|
-
npx frizz up
|
|
125
|
+
npx frizz up start the server plus its public tunnel
|
|
126
126
|
|
|
127
127
|
Runs the npm-resolved immutable Frizz package, then opens it in your default browser. Use frizz-dev
|
|
128
128
|
only for a source checkout.
|
|
@@ -196,7 +196,7 @@ trades the code for a session cookie, so the link itself stops working the momen
|
|
|
196
196
|
<details>
|
|
197
197
|
<summary><b>Can I run it on several repos at once?</b></summary>
|
|
198
198
|
|
|
199
|
-
> Yes
|
|
199
|
+
> Yes. One Frizz server serves every project on your machine — you don't start one per repo. Run `frizz` in any of them and switch projects from the board; each project's threads, settings and state stay separate.
|
|
200
200
|
|
|
201
201
|
</details>
|
|
202
202
|
|
|
@@ -19873,6 +19873,7 @@ var CLAUDE_BROKER_CAPABILITY_CANCEL_INPUT = "cancel-input-v1";
|
|
|
19873
19873
|
var CLAUDE_BROKER_CAPABILITY_STOP_TASK = "stop-task-v1";
|
|
19874
19874
|
var CLAUDE_BROKER_CAPABILITY_RELOAD_PLUGINS = "reload-plugins-v1";
|
|
19875
19875
|
var CLAUDE_BROKER_CAPABILITY_RENAME = "rename-v1";
|
|
19876
|
+
var CLAUDE_BROKER_CAPABILITY_LIST_SKILLS = "list-skills-v1";
|
|
19876
19877
|
var CLAUDE_INPUT_DROP_DIAGNOSTIC_PREFIX = "input dropped, the agent never received it";
|
|
19877
19878
|
var ClaudeAgentSdkProtocolError = class extends Error {
|
|
19878
19879
|
constructor(message) {
|
|
@@ -20255,6 +20256,7 @@ var RealClaudeQueryHandle = class {
|
|
|
20255
20256
|
closing = false;
|
|
20256
20257
|
closed = false;
|
|
20257
20258
|
initialized = false;
|
|
20259
|
+
initSkills = [];
|
|
20258
20260
|
sdkQuery;
|
|
20259
20261
|
input;
|
|
20260
20262
|
diagnostic;
|
|
@@ -20364,6 +20366,21 @@ var RealClaudeQueryHandle = class {
|
|
|
20364
20366
|
errorCount: Number.isFinite(result?.error_count) ? Number(result.error_count) : 0
|
|
20365
20367
|
};
|
|
20366
20368
|
}
|
|
20369
|
+
// The session's invocable skills: the initialize handshake already carries every slash entry WITH
|
|
20370
|
+
// its description (mapped and bounded above in mapControlInitialization — the same data the SDK's
|
|
20371
|
+
// `supportedCommands()` would re-serve from its cache), and the init frame's `skills` array is the
|
|
20372
|
+
// harness's own verdict on which of those are skills rather than built-in commands. The intersection
|
|
20373
|
+
// is exactly "what `/name` invokes a skill", with descriptions, and zero frizz-side discovery.
|
|
20374
|
+
async listSkills() {
|
|
20375
|
+
const initialization = await this.initializationResult();
|
|
20376
|
+
const skillNames = new Set(this.initSkills);
|
|
20377
|
+
const skills = [];
|
|
20378
|
+
for (const command of initialization.commands) {
|
|
20379
|
+
if (!command.name || !skillNames.has(command.name)) continue;
|
|
20380
|
+
skills.push({ name: command.name, description: command.description.slice(0, 1024) });
|
|
20381
|
+
}
|
|
20382
|
+
return skills;
|
|
20383
|
+
}
|
|
20367
20384
|
// Unqueue a follow-up the operator has taken back.
|
|
20368
20385
|
//
|
|
20369
20386
|
// `cancelAsyncMessage` is present at runtime in @anthropic-ai/claude-agent-sdk 0.3.207 but absent
|
|
@@ -20461,6 +20478,7 @@ var RealClaudeQueryHandle = class {
|
|
|
20461
20478
|
}
|
|
20462
20479
|
if (event.kind === "init") {
|
|
20463
20480
|
if (event.sessionId !== this.sessionId) throw new ClaudeAgentSdkProtocolError("Claude session ownership mismatch");
|
|
20481
|
+
this.initSkills = event.skills;
|
|
20464
20482
|
if (this.initialized) {
|
|
20465
20483
|
this.output.push(event);
|
|
20466
20484
|
continue;
|
|
@@ -20642,7 +20660,7 @@ function startClaudeQuery(executablePath, options) {
|
|
|
20642
20660
|
// `AGENTS.md` and its `.claude/skills`. Measured differential in the frizz repo, one variable:
|
|
20643
20661
|
// this factory answered `NO-CLAUDE-MD` where a plain `claude -p` in the same cwd answered
|
|
20644
20662
|
// "# No pull requests — land on local `main`". That fix restored PROJECT + LOCAL and left USER
|
|
20645
|
-
// out, which kept a second, quieter half of the same regression: the
|
|
20663
|
+
// out, which kept a second, quieter half of the same regression: the retired transport ran plain
|
|
20646
20664
|
// `claude` and got all three scopes, so a broker session was the only place the operator's
|
|
20647
20665
|
// `~/.claude/settings.json` stopped applying. Measured 2026-08-16 against the maintainer's real
|
|
20648
20666
|
// config, one variable: `--setting-sources=project,local` reported their `env` block UNSET where
|
|
@@ -20657,7 +20675,7 @@ function startClaudeQuery(executablePath, options) {
|
|
|
20657
20675
|
...options.disallowedTools?.length ? { disallowedTools: [...options.disallowedTools] } : {},
|
|
20658
20676
|
persistSession: options.persistSession ?? false,
|
|
20659
20677
|
// Keep Claude's default (preset) system prompt and APPEND the frizz worker contract, the SDK
|
|
20660
|
-
// equivalent of the
|
|
20678
|
+
// equivalent of the argv path's --append-system-prompt-file.
|
|
20661
20679
|
...options.appendSystemPrompt ? { systemPrompt: { type: "preset", preset: "claude_code", append: options.appendSystemPrompt } } : {},
|
|
20662
20680
|
// The 1M context window rides the MODEL value as a `[1m]` suffix, always paired with the bare
|
|
20663
20681
|
// alias as `fallbackModel` — an unavailable long-context beta is a hard 400 that kills the
|
|
@@ -21452,7 +21470,7 @@ function createClaudeBrokerExitWriter(path, meta, now = () => /* @__PURE__ */ ne
|
|
|
21452
21470
|
}
|
|
21453
21471
|
|
|
21454
21472
|
// packages/server/src/backend/claude-agent-broker.ts
|
|
21455
|
-
var BROKER_CAPABILITIES = [CLAUDE_BROKER_CAPABILITY_SUBAGENT_STEER, CLAUDE_BROKER_CAPABILITY_CANCEL_INPUT, CLAUDE_BROKER_CAPABILITY_STOP_TASK, CLAUDE_BROKER_CAPABILITY_RELOAD_PLUGINS, CLAUDE_BROKER_CAPABILITY_RENAME];
|
|
21473
|
+
var BROKER_CAPABILITIES = [CLAUDE_BROKER_CAPABILITY_SUBAGENT_STEER, CLAUDE_BROKER_CAPABILITY_CANCEL_INPUT, CLAUDE_BROKER_CAPABILITY_STOP_TASK, CLAUDE_BROKER_CAPABILITY_RELOAD_PLUGINS, CLAUDE_BROKER_CAPABILITY_RENAME, CLAUDE_BROKER_CAPABILITY_LIST_SKILLS];
|
|
21456
21474
|
var IDLE_EXIT_MS = 6 * 60 * 60 * 1e3;
|
|
21457
21475
|
var REACHABILITY_CHECK_MS = 3e4;
|
|
21458
21476
|
var REACHABILITY_STRIKES = 2;
|
|
@@ -21502,9 +21520,10 @@ function runClaudeBroker(config) {
|
|
|
21502
21520
|
pluginDir: config.pluginDir,
|
|
21503
21521
|
mcpServers: config.mcpServers,
|
|
21504
21522
|
allowedTools: config.allowedTools,
|
|
21505
|
-
// NO `disallowedTools` here, and the asymmetry with the
|
|
21506
|
-
// `--disallowedTools=AskUserQuestion`) is DELIBERATE. That flag exists because a
|
|
21507
|
-
//
|
|
21523
|
+
// NO `disallowedTools` here, and the asymmetry with the argv path (WORKER_DISALLOWED_TOOLS →
|
|
21524
|
+
// `--disallowedTools=AskUserQuestion`) is DELIBERATE. That flag exists because a worker launched as
|
|
21525
|
+
// its own interactive `claude` process had nowhere to put the question: it opened a TUI dialog on a
|
|
21526
|
+
// terminal screen nobody was looking at. On this path it
|
|
21508
21527
|
// has somewhere to go — canUseTool routes it to a real dashboard question card, the operator answers
|
|
21509
21528
|
// it, and the chosen labels reach the model. A follow-up sent instead of an answer retires the card
|
|
21510
21529
|
// and unwinds the tool call (see retirePendingFor in the bridge), so a parked turn is still steerable.
|
|
@@ -21639,6 +21658,12 @@ function runClaudeBroker(config) {
|
|
|
21639
21658
|
(reloaded) => write(sock, { t: "reload-result", requestId, reloaded }),
|
|
21640
21659
|
(error) => write(sock, { t: "reload-result", requestId, error: error instanceof Error ? error.message : String(error) })
|
|
21641
21660
|
);
|
|
21661
|
+
} else if (msg.t === "list-skills") {
|
|
21662
|
+
const requestId = msg.requestId;
|
|
21663
|
+
void handle.listSkills().then(
|
|
21664
|
+
(skills) => write(sock, { t: "skills-result", requestId, skills }),
|
|
21665
|
+
(error) => write(sock, { t: "skills-result", requestId, error: error instanceof Error ? error.message : String(error) })
|
|
21666
|
+
);
|
|
21642
21667
|
} else if (msg.t === "set-mode") void handle.setPermissionMode(msg.mode).catch(() => {
|
|
21643
21668
|
});
|
|
21644
21669
|
}
|