frizz 0.8.0 → 0.8.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/dist/claude-agent-broker.js +58 -1
- package/dist/dev-child.js +241 -348
- package/dist/frizz.js +4 -2
- package/package.json +1 -1
- package/runtime/cc-worker/agents/high.md +1 -1
- package/runtime/cc-worker/agents/low.md +1 -1
- package/runtime/cc-worker/agents/max.md +1 -1
- package/runtime/cc-worker/agents/medium.md +1 -1
- package/runtime/cc-worker/agents/xhigh.md +1 -1
- package/runtime/cc-worker/hooks/agent-dispatch.mjs +4 -4
- package/web-dist/assets/{TerminalPane-BIBHC61j.js → TerminalPane-BM_laA_I.js} +1 -1
- package/web-dist/assets/{abnfDiagram-VRR7QNED-CcFQGFPf.js → abnfDiagram-VRR7QNED-C5FCLi1n.js} +1 -1
- package/web-dist/assets/architecture-TIHT7OUA-ngY1F0r2.js +1 -0
- package/web-dist/assets/{architectureDiagram-ZJ3FMSHR-DErIQOIs.js → architectureDiagram-ZJ3FMSHR-Dm7tUnwt.js} +1 -1
- package/web-dist/assets/{blockDiagram-677ZJIJ3-CpsUqur1.js → blockDiagram-677ZJIJ3-3EhpmwKM.js} +1 -1
- package/web-dist/assets/{c4Diagram-LMCZKHZV-D2dHmCEJ.js → c4Diagram-LMCZKHZV-Ca-BjDxw.js} +1 -1
- package/web-dist/assets/channel-BpyNaJoi.js +1 -0
- package/web-dist/assets/{chunk-32BRIVSS-aOCEfxRW.js → chunk-32BRIVSS-xGbaUlTN.js} +1 -1
- package/web-dist/assets/{chunk-52WLFC77-2iw4nJPC.js → chunk-52WLFC77-YYhE3F1a.js} +1 -1
- package/web-dist/assets/{chunk-C7G6YPKG-BPD3iHVE.js → chunk-C7G6YPKG-SYKXFtUg.js} +1 -1
- package/web-dist/assets/{chunk-EX3LRPZG-DrefHift.js → chunk-EX3LRPZG-cqjtdM_c.js} +1 -1
- package/web-dist/assets/{chunk-FWX5IMBZ-By940EHT.js → chunk-FWX5IMBZ-qyaTngKT.js} +2 -2
- package/web-dist/assets/{chunk-HOUHSVGY-B1Cqvz7e.js → chunk-HOUHSVGY-DBFt1HnE.js} +1 -1
- package/web-dist/assets/{chunk-ICXQ74PX-1LkVpWuI.js → chunk-ICXQ74PX-Bme_2_gm.js} +1 -1
- package/web-dist/assets/{chunk-MOJQB5TN-Ip1cy64r.js → chunk-MOJQB5TN-DupTmWhN.js} +1 -1
- package/web-dist/assets/{chunk-OGEWGWER-CNjVyu8F.js → chunk-OGEWGWER-DSqmbKCq.js} +1 -1
- package/web-dist/assets/{chunk-PUDLZKDR-9HZR6DAU.js → chunk-PUDLZKDR-DVnHUoFN.js} +1 -1
- package/web-dist/assets/{chunk-Q4XR5HBZ-vtWwOCuQ.js → chunk-Q4XR5HBZ-BIZh_Yuh.js} +1 -1
- package/web-dist/assets/{chunk-V7JOEXUC-DC6YaHG0.js → chunk-V7JOEXUC-e2G7UgOg.js} +1 -1
- package/web-dist/assets/{chunk-VAUOI2AC-CP-xe7SD.js → chunk-VAUOI2AC-uYgyYWPh.js} +1 -1
- package/web-dist/assets/{chunk-VR4S4FIN-wbxDFptH.js → chunk-VR4S4FIN-BjGjcexQ.js} +1 -1
- package/web-dist/assets/{chunk-WYO6CB5R-dibXmwpK.js → chunk-WYO6CB5R-BKKd_W3B.js} +1 -1
- package/web-dist/assets/{chunk-ZGVPDNZ5-_y_itJHG.js → chunk-ZGVPDNZ5-D5_hsjnF.js} +1 -1
- package/web-dist/assets/classDiagram-OUVF2IWQ-DTEWwxt7.js +1 -0
- package/web-dist/assets/classDiagram-v2-EOCWNBFH-DTEWwxt7.js +1 -0
- package/web-dist/assets/{cynefin-VYW2F7L2-D1RYokZP.js → cynefin-VYW2F7L2-bkFv7EpV.js} +1 -1
- package/web-dist/assets/{cynefinDiagram-TSTJHNR4-qofqoy3T.js → cynefinDiagram-TSTJHNR4-Du2-dyuZ.js} +1 -1
- package/web-dist/assets/{dagre-VKFMJZFB-CgHLoGFk.js → dagre-VKFMJZFB-CU7w00Ul.js} +1 -1
- package/web-dist/assets/{diagram-FQU43EPY-JEAs4LOb.js → diagram-FQU43EPY-BxvVgxWb.js} +1 -1
- package/web-dist/assets/{diagram-G47NLZAW--tLd4Lf7.js → diagram-G47NLZAW-D8VvetwQ.js} +1 -1
- package/web-dist/assets/{diagram-NH7WQ7WH-DPbw9CJU.js → diagram-NH7WQ7WH-CwsChkED.js} +1 -1
- package/web-dist/assets/{diagram-OA4YK3LP-CDrb7nWs.js → diagram-OA4YK3LP-BIPYbe6L.js} +1 -1
- package/web-dist/assets/{diagram-WEI45ONY-DJswZe3f.js → diagram-WEI45ONY-BoyH4dKl.js} +1 -1
- package/web-dist/assets/{ebnfDiagram-CCIWWBDH-BP8-PZMF.js → ebnfDiagram-CCIWWBDH-9A3WRDfU.js} +1 -1
- package/web-dist/assets/{erDiagram-Q63AITRT-BQXuebf5.js → erDiagram-Q63AITRT-D3Y9WA4H.js} +1 -1
- package/web-dist/assets/eventmodeling-45OFAUF4-D7g9kDF0.js +1 -0
- package/web-dist/assets/flowDiagram-23GEKE2U-BqKnxVr3.js +1 -0
- package/web-dist/assets/{ganttDiagram-NO4QXBWP-DotMb935.js → ganttDiagram-NO4QXBWP-Bk2-LClm.js} +1 -1
- package/web-dist/assets/{gitGraph-TEB2WS4Q-B1vbYyKQ.js → gitGraph-TEB2WS4Q-CXvPrsio.js} +1 -1
- package/web-dist/assets/{gitGraphDiagram-IHSO6WYX-BjDXKk4m.js → gitGraphDiagram-IHSO6WYX-BC9D72kT.js} +1 -1
- package/web-dist/assets/index-CCtNIGi6.js +491 -0
- package/web-dist/assets/index-Cq79m8AR.css +1 -0
- package/web-dist/assets/{info-DKCQHKI2-xLTLqQju.js → info-DKCQHKI2-Beag76kE.js} +1 -1
- package/web-dist/assets/{infoDiagram-FWYZ7A6U-BFfYUsrC.js → infoDiagram-FWYZ7A6U-DaqYXHYB.js} +1 -1
- package/web-dist/assets/{ishikawaDiagram-FXEZZL3T-45a7VMwm.js → ishikawaDiagram-FXEZZL3T-D-d4tmLU.js} +1 -1
- package/web-dist/assets/{journeyDiagram-5HDEW3XC-CEBUpu59.js → journeyDiagram-5HDEW3XC-kkFYzNg1.js} +1 -1
- package/web-dist/assets/{kanban-definition-HUTT4EX6-RwKtDFzG.js → kanban-definition-HUTT4EX6-BYRPjbfv.js} +1 -1
- package/web-dist/assets/{line-DStcMIry.js → line-C8l7y6rG.js} +1 -1
- package/web-dist/assets/{mermaid-parser.core-B0ekgQMA.js → mermaid-parser.core-BG3fgy77.js} +3 -3
- package/web-dist/assets/{mermaid.core-w1hcQaPy.js → mermaid.core-BCDzcbhr.js} +3 -3
- package/web-dist/assets/{mindmap-definition-LN4V7U3C-D_n38Imb.js → mindmap-definition-LN4V7U3C-CP_bgQm8.js} +1 -1
- package/web-dist/assets/{packet-7NZHBO7P-CstGeBOX.js → packet-7NZHBO7P-Dgd69pFS.js} +1 -1
- package/web-dist/assets/{pegDiagram-2B236MQR-DvowVyTO.js → pegDiagram-2B236MQR-BJUb_DOD.js} +1 -1
- package/web-dist/assets/{pie-RZYD4A2V-BOP2j_HH.js → pie-RZYD4A2V-DPbVRAuL.js} +1 -1
- package/web-dist/assets/{pieDiagram-ENE6RG2P-CKRqu_2f.js → pieDiagram-ENE6RG2P-DavUeOqM.js} +1 -1
- package/web-dist/assets/{quadrantDiagram-ABIIQ3AL-zSArSS8R.js → quadrantDiagram-ABIIQ3AL-BdvoSedu.js} +1 -1
- package/web-dist/assets/{radar-I7S5WNFK-BqRdNIBw.js → radar-I7S5WNFK-C2TAta9K.js} +1 -1
- package/web-dist/assets/{railroad-3IZDKUUU-BaKcl_LU.js → railroad-3IZDKUUU-DEMjzYqC.js} +1 -1
- package/web-dist/assets/railroad-abnf-AHOZXSZD-_4FByoRI.js +1 -0
- package/web-dist/assets/railroad-ebnf-EBAXGLYW-DKAvMIMu.js +1 -0
- package/web-dist/assets/railroad-peg-LSFZ7HO6-CkJl3c69.js +1 -0
- package/web-dist/assets/{railroadDiagram-RFXS5EU6-BrXTQge9.js → railroadDiagram-RFXS5EU6-C4rERo6H.js} +1 -1
- package/web-dist/assets/{requirementDiagram-TGXJPOKE-DBBNi_SS.js → requirementDiagram-TGXJPOKE-DlIG9D0n.js} +1 -1
- package/web-dist/assets/{sankeyDiagram-HTMAVEWB-BwFi7xFy.js → sankeyDiagram-HTMAVEWB-DVMrG-qY.js} +1 -1
- package/web-dist/assets/{sequenceDiagram-DBY2YBRQ-CeivqMeT.js → sequenceDiagram-DBY2YBRQ-DDcDM_-e.js} +1 -1
- package/web-dist/assets/{stateDiagram-2N3HPSRC-C6NZsnFm.js → stateDiagram-2N3HPSRC-DuCRKU5t.js} +1 -1
- package/web-dist/assets/stateDiagram-v2-6OUMAXLB-90dqEQum.js +1 -0
- package/web-dist/assets/{swimlanes-5IMT3BWC-C0MubXTG.js → swimlanes-5IMT3BWC-CY0fdvUm.js} +1 -1
- package/web-dist/assets/swimlanesDiagram-G3AALYLV-BETWueIt.js +8 -0
- package/web-dist/assets/{timeline-definition-FHXFAJF6-CtxwSvFu.js → timeline-definition-FHXFAJF6-De0fDNdU.js} +1 -1
- package/web-dist/assets/{treeView-QDETBFTQ-CXcwSjey.js → treeView-QDETBFTQ-AIoMhcen.js} +1 -1
- package/web-dist/assets/{treemap-6X3UGDF4-Uspgr-d1.js → treemap-6X3UGDF4-CPZ1Ln05.js} +1 -1
- package/web-dist/assets/{vennDiagram-L72KCM5P-tZamQQAQ.js → vennDiagram-L72KCM5P-FrSO6pmh.js} +1 -1
- package/web-dist/assets/{wardley-OPB4EBWU-0_79c19P.js → wardley-OPB4EBWU-BbET6cjs.js} +1 -1
- package/web-dist/assets/{wardleyDiagram-EHGQE667-uYmUsP66.js → wardleyDiagram-EHGQE667-DqvcCBjr.js} +1 -1
- package/web-dist/assets/{xychartDiagram-FW5EYKEG-BsOU7Wf7.js → xychartDiagram-FW5EYKEG-91xKEO07.js} +1 -1
- package/web-dist/index.html +2 -2
- package/web-dist/assets/architecture-TIHT7OUA-BZEZt7jZ.js +0 -1
- package/web-dist/assets/channel-DdFRPviT.js +0 -1
- package/web-dist/assets/classDiagram-OUVF2IWQ-Bf3duLb8.js +0 -1
- package/web-dist/assets/classDiagram-v2-EOCWNBFH-Bf3duLb8.js +0 -1
- package/web-dist/assets/eventmodeling-45OFAUF4-DOLxRQQ5.js +0 -1
- package/web-dist/assets/flowDiagram-23GEKE2U-DoK1yb0H.js +0 -1
- package/web-dist/assets/index-CmrDpsD8.css +0 -1
- package/web-dist/assets/index-Cs0TDGMu.js +0 -491
- package/web-dist/assets/railroad-abnf-AHOZXSZD-itqDLg1p.js +0 -1
- package/web-dist/assets/railroad-ebnf-EBAXGLYW-ze7rLVCi.js +0 -1
- package/web-dist/assets/railroad-peg-LSFZ7HO6-DKsYkEuG.js +0 -1
- package/web-dist/assets/stateDiagram-v2-6OUMAXLB-B3YRnI4W.js +0 -1
- package/web-dist/assets/swimlanesDiagram-G3AALYLV-CXva4Ic9.js +0 -8
package/dist/dev-child.js
CHANGED
|
@@ -13272,7 +13272,7 @@ function parseGithubWakeSteer(text) {
|
|
|
13272
13272
|
function frizzRoute(path) {
|
|
13273
13273
|
return `${FRIZZ_ROUTE_PREFIX}${path.startsWith("/") ? path : `/${path}`}`;
|
|
13274
13274
|
}
|
|
13275
|
-
var import_yaml, ATTACHMENT_IMAGE_EXTENSIONS, ATTACHMENT_DOC_EXTENSIONS, ATTACHMENT_EXTENSIONS, ATTACHMENT_MAX_BASE64_CHARS, ATTACHMENT_MAX_BYTES, ATTACHMENT_EXT_SET, ATTACHMENT_ACCEPT, FrizzStatus, BlockMechanism, RuntimeState, Backend, CodexModel, ThreadProfileOption, ThreadAgent, SubAgentView, BgShellView, CompletionHoldOp, CompletionHold, AskOption, AskQuestion, PendingAsk, AwaitingHint, RETIRED_AWAITING_KINDS, RETIRED_LINE_RE, RETIRED_AWAITING_REPLACEMENT, AWAITING_KEY_RE, AWAITING_YAML_KEYS, AWAITING_SEQUENCE_KEYS, AWAITING_HINT_MAX, AWAITING_HINT_VALUE_MAX, AWAITING_TITLE_MAX, AWAITING_ITEM_KINDS, AWAITING_DURATION_RE, DURATION_UNIT_MS, AWAITING_FOR_MAX_MS, SnoozeUntil, SNOOZE_PROMPT_MAX, SnoozePrompt, RECURRING_PROMPT_MAX, RECURRING_MIN_INTERVAL_SECONDS, RECURRING_MAX_INTERVAL_SECONDS, RecurringPromptText, RecurringIntervalSeconds, ThreadRecurringPrompt, INTERRUPT_MARKERS, ALLDONE_SENTINEL, OPT_OUT_NOTE, OVER_QUESTION_NOTE, TIMER_PROMPT_MAX, TIMER_MAX_DELAY_SECONDS, TIMER_MAX_ARMED, TimerPromptText, SIGNOFF_NUDGE_MARKER, SIGNOFF_NUDGE_MESSAGE, PARK_CORRECTION_NAMES_LEAD, PARK_CORRECTION_RETIRED_LEAD, ThreadWatchKind, GithubChecksState, GithubMergeState, GithubWatchStatus, ThreadWatchView, PR_WATCH_DEFAULT_FOR_MS, PR_WATCH_MAX_ARMED, PrWatchView, AddOwnPrWatchInput, AddOwnPrWatchResult, DropOwnPrWatchInput, DropOwnPrWatchResult, ListOwnPrWatchesInput, OwnPrWatchesResult, ThreadTimerView, ThreadFence, LimitWindow, LimitPause, ThreadView, BoardErrorItem, BoardSnapshot, QuotaWindow, ProviderQuota, QuotaSnapshot, ProviderAuth, AccountEmails, AuthSnapshot, AccountLogoutInput, AccountLogoutResult, AccountLoginStartInput, AccountLoginStartResult, AccountLoginStatusInput, AccountLoginStatusResult, PermissionMode, LocalFileOpener, Settings, DispatchProviderPreferences, DispatchPreferences, DispatchProfileSnapshot, SetDispatchPreferenceInput, DispatchInput, ADOPT_THREAD_MESSAGE_MAX_CHARS, AdoptThreadInput, AdoptThreadResult, AdoptSessionInput, FollowUpInput, UnqueueFollowUpInput, UnqueueFollowUpResult, DeliverQueuedNowInput, DeliverQueuedNowResult, SetThreadSnoozeInput, SetThreadRecurringPromptInput, SetOwnThreadRecurringPromptInput, SetOwnThreadRecurringPromptResult, GetOwnThreadRecurringPromptInput, OwnThreadRecurringPromptResult, SetOwnThreadTimerInput, CancelOwnThreadTimerInput, ListOwnThreadTimersInput, OwnThreadTimersResult, ThreadActivityItem, ListOwnThreadActivityInput, OwnThreadActivityResult, SetOwnThreadTimerResult, CancelOwnThreadTimerResult, SetOwnThreadStopHookInput, SetOwnThreadHeartbeatInput, ThreadPluginReloadResult, RenameThreadInput, AiRenameThreadInput, AiRenameThreadResult, SetThreadPermissionInput, SetThreadPermissionResult, ThreadProfileOptionsInput, ThreadProfileOptionsResult, ThreadSkill, ThreadSkillsInput, ThreadSkillsResult, SetThreadProfileInput, SetThreadProfileResult, DISPATCH_TASK_BANNER, DISPATCH_TASK_BANNER_MARKER, GITHUB_DISPATCH_UI_BOUNDARY, HUMAN_GAP_FLOOR_MS, HUMAN_GAP_NOTE_TAIL, WAKE_DELIVERY_TOKEN_TAIL, WAKE_DELIVERY_TOKEN_LINE, NOISE_PREFIXES, AGENT_MESSAGE_WRAPPER, GithubWakeItem, GithubWakeSteer, WAKE_SCOPE, WAKE_REVIEW_LEAD, WAKE_BACKLOG_TAIL, WAKE_REF, WAKE_SINGLE, WAKE_MULTI_HEAD, WAKE_ITEM, WAKE_MORE, PR_WATCH_FINISHED, PR_WATCH_CI_PASSED, PR_WATCH_CI_FAILED, GithubStatus, GithubRefCard, GithubRefPreviewInput, GithubRefPreviewResult, GithubItem, GithubListInput, GithubListResult, GithubBatchInput, GithubBatchResult, BoardMeta, ServerEvent, TranscriptEdit, TranscriptTodo, TranscriptToolCall, TranscriptPart, TranscriptMessage, TranscriptPageCursor, TranscriptPage, TranscriptEarlierInput, SocketTranscriptSlug, SocketClientMsg, ProjectCard, PROJECT_ICON_EXTENSIONS, PROJECT_ICON_MAX_BASE64_CHARS, DirectoryPickResult, ThreadLocation, FRIZZ_ROUTE_PREFIX, DEFAULT_PORT, threadIdentityName;
|
|
13275
|
+
var import_yaml, ATTACHMENT_IMAGE_EXTENSIONS, ATTACHMENT_DOC_EXTENSIONS, ATTACHMENT_EXTENSIONS, ATTACHMENT_MAX_BASE64_CHARS, ATTACHMENT_MAX_BYTES, ATTACHMENT_EXT_SET, ATTACHMENT_ACCEPT, FrizzStatus, BlockMechanism, RuntimeState, Backend, CodexModel, ThreadProfileOption, ThreadAgent, SubAgentView, BgShellView, CompletionHoldOp, CompletionHold, AskOption, AskQuestion, PendingAsk, AwaitingHint, RETIRED_AWAITING_KINDS, RETIRED_LINE_RE, RETIRED_AWAITING_REPLACEMENT, AWAITING_KEY_RE, AWAITING_YAML_KEYS, AWAITING_SEQUENCE_KEYS, AWAITING_HINT_MAX, AWAITING_HINT_VALUE_MAX, AWAITING_TITLE_MAX, AWAITING_ITEM_KINDS, AWAITING_DURATION_RE, DURATION_UNIT_MS, AWAITING_FOR_MAX_MS, SnoozeUntil, SNOOZE_PROMPT_MAX, SnoozePrompt, RECURRING_PROMPT_MAX, RECURRING_MIN_INTERVAL_SECONDS, RECURRING_MAX_INTERVAL_SECONDS, RecurringPromptText, RecurringIntervalSeconds, ThreadRecurringPrompt, INTERRUPT_MARKERS, ALLDONE_SENTINEL, OPT_OUT_NOTE, OVER_QUESTION_NOTE, TIMER_PROMPT_MAX, TIMER_MAX_DELAY_SECONDS, TIMER_MAX_ARMED, TimerPromptText, SIGNOFF_NUDGE_MARKER, SIGNOFF_NUDGE_MESSAGE, PARK_CORRECTION_NAMES_LEAD, PARK_CORRECTION_RETIRED_LEAD, ThreadWatchKind, GithubChecksState, GithubMergeState, GithubWatchStatus, ThreadWatchView, PR_WATCH_DEFAULT_FOR_MS, PR_WATCH_MAX_ARMED, PrWatchView, AddOwnPrWatchInput, AddOwnPrWatchResult, DropOwnPrWatchInput, DropOwnPrWatchResult, ListOwnPrWatchesInput, OwnPrWatchesResult, ThreadTimerView, ThreadFence, LimitWindow, LimitPause, ThreadView, BoardErrorItem, BoardSnapshot, QuotaWindow, ProviderQuota, QuotaSnapshot, ProviderAuth, AccountEmails, AuthSnapshot, AccountLogoutInput, AccountLogoutResult, AccountLoginStartInput, AccountLoginStartResult, AccountLoginStatusInput, AccountLoginStatusResult, PermissionMode, LocalFileOpener, Settings, DispatchProviderPreferences, DispatchPreferences, DispatchProfileSnapshot, SetDispatchPreferenceInput, DispatchInput, ADOPT_THREAD_MESSAGE_MAX_CHARS, AdoptThreadInput, AdoptThreadResult, AdoptSessionInput, FollowUpInput, UnqueueFollowUpInput, UnqueueFollowUpResult, DeliverQueuedNowInput, DeliverQueuedNowResult, SetThreadSnoozeInput, SetThreadRecurringPromptInput, SetOwnThreadRecurringPromptInput, SetOwnThreadRecurringPromptResult, GetOwnThreadRecurringPromptInput, OwnThreadRecurringPromptResult, SetOwnThreadTimerInput, CancelOwnThreadTimerInput, ListOwnThreadTimersInput, OwnThreadTimersResult, ThreadActivityItem, ListOwnThreadActivityInput, OwnThreadActivityResult, SetOwnThreadTimerResult, CancelOwnThreadTimerResult, SetOwnThreadStopHookInput, SetOwnThreadHeartbeatInput, ThreadPluginReloadResult, RenameThreadInput, AiRenameThreadInput, AiRenameThreadResult, SetThreadPermissionInput, SetThreadPermissionResult, ThreadProfileOptionsInput, ThreadProfileOptionsResult, ThreadSkillSource, ThreadSkill, ThreadSkillsInput, ThreadSkillsResult, SetThreadProfileInput, SetThreadProfileResult, DISPATCH_TASK_BANNER, DISPATCH_TASK_BANNER_MARKER, GITHUB_DISPATCH_UI_BOUNDARY, HUMAN_GAP_FLOOR_MS, HUMAN_GAP_NOTE_TAIL, WAKE_DELIVERY_TOKEN_TAIL, WAKE_DELIVERY_TOKEN_LINE, NOISE_PREFIXES, AGENT_MESSAGE_WRAPPER, GithubWakeItem, GithubWakeSteer, WAKE_SCOPE, WAKE_REVIEW_LEAD, WAKE_BACKLOG_TAIL, WAKE_REF, WAKE_SINGLE, WAKE_MULTI_HEAD, WAKE_ITEM, WAKE_MORE, PR_WATCH_FINISHED, PR_WATCH_CI_PASSED, PR_WATCH_CI_FAILED, GithubStatus, GithubRefCard, GithubRefPreviewInput, GithubRefPreviewResult, GithubItem, GithubListInput, GithubListResult, GithubBatchInput, GithubBatchResult, BoardMeta, ServerEvent, TranscriptEdit, TranscriptTodo, TranscriptToolCall, TranscriptPart, TranscriptMessage, TranscriptPageCursor, TranscriptPage, TranscriptEarlierInput, SocketTranscriptSlug, SocketClientMsg, ProjectCard, PROJECT_ICON_EXTENSIONS, PROJECT_ICON_MAX_BASE64_CHARS, DirectoryPickResult, ThreadLocation, FRIZZ_ROUTE_PREFIX, DEFAULT_PORT, threadIdentityName;
|
|
13276
13276
|
var init_src = __esm({
|
|
13277
13277
|
"packages/shared/src/index.ts"() {
|
|
13278
13278
|
"use strict";
|
|
@@ -14416,9 +14416,11 @@ var init_src = __esm({
|
|
|
14416
14416
|
backend: Backend,
|
|
14417
14417
|
options: external_exports.array(ThreadProfileOption)
|
|
14418
14418
|
});
|
|
14419
|
+
ThreadSkillSource = external_exports.enum(["project", "user", "builtin", "plugin"]);
|
|
14419
14420
|
ThreadSkill = external_exports.object({
|
|
14420
14421
|
name: external_exports.string().min(1).max(512),
|
|
14421
|
-
description: external_exports.string().max(1024)
|
|
14422
|
+
description: external_exports.string().max(1024),
|
|
14423
|
+
source: ThreadSkillSource.optional()
|
|
14422
14424
|
}).strict();
|
|
14423
14425
|
ThreadSkillsInput = external_exports.object({ slug: ThreadSlug }).strict();
|
|
14424
14426
|
ThreadSkillsResult = external_exports.object({ skills: external_exports.array(ThreadSkill).max(1024) }).strict();
|
|
@@ -29807,6 +29809,12 @@ Suggested answers: ${question.options.map((option) => option.label).join(", ")}`
|
|
|
29807
29809
|
return { ...base, input: "multiline", maxLength: 4e3 };
|
|
29808
29810
|
});
|
|
29809
29811
|
}
|
|
29812
|
+
function codexSkillSource(scope) {
|
|
29813
|
+
if (scope === "repo") return "project";
|
|
29814
|
+
if (scope === "user") return "user";
|
|
29815
|
+
if (scope === "system") return "builtin";
|
|
29816
|
+
return void 0;
|
|
29817
|
+
}
|
|
29810
29818
|
function resumedThreadHasLiveTurn(rawResponse) {
|
|
29811
29819
|
const parsed = ThreadResumeStatus.safeParse(rawResponse);
|
|
29812
29820
|
return parsed.success && parsed.data.thread.status.type === "active";
|
|
@@ -30345,7 +30353,12 @@ var init_codex_app_server = __esm({
|
|
|
30345
30353
|
skills: external_exports.array(external_exports.object({
|
|
30346
30354
|
name: external_exports.string(),
|
|
30347
30355
|
description: external_exports.string().optional(),
|
|
30348
|
-
enabled: external_exports.boolean().optional()
|
|
30356
|
+
enabled: external_exports.boolean().optional(),
|
|
30357
|
+
// The root the app-server resolved this skill from — measured against codex-cli 0.146.0 as
|
|
30358
|
+
// `repo` (`<cwd>/.agents/skills/…`), `user` (`~/.agents/skills/…`) and `system`
|
|
30359
|
+
// (`~/.codex/skills/.system/…`). Kept as a free string, not an enum: an unmapped value must
|
|
30360
|
+
// leave the row unlabelled, never fail the listing (see codexSkillSource).
|
|
30361
|
+
scope: external_exports.string().optional()
|
|
30349
30362
|
}).passthrough()).optional()
|
|
30350
30363
|
}).passthrough()).optional()
|
|
30351
30364
|
}).passthrough();
|
|
@@ -30840,7 +30853,11 @@ var init_codex_app_server = __esm({
|
|
|
30840
30853
|
if (skills.length >= 1024) return skills;
|
|
30841
30854
|
if (seen.has(skill.name)) continue;
|
|
30842
30855
|
seen.add(skill.name);
|
|
30843
|
-
skills.push({
|
|
30856
|
+
skills.push({
|
|
30857
|
+
name: skill.name.slice(0, 512),
|
|
30858
|
+
description: (skill.description ?? "").slice(0, 1024),
|
|
30859
|
+
source: codexSkillSource(skill.scope)
|
|
30860
|
+
});
|
|
30844
30861
|
}
|
|
30845
30862
|
}
|
|
30846
30863
|
return skills;
|
|
@@ -33068,7 +33085,6 @@ function buildWorkerPrompt(kind = "claude", opts = {}) {
|
|
|
33068
33085
|
lean ? null : THREAD_EXECUTION[kind],
|
|
33069
33086
|
AGENT_COMPLETION,
|
|
33070
33087
|
VISUAL_EVIDENCE,
|
|
33071
|
-
GIT_DISCIPLINE,
|
|
33072
33088
|
QUALITY_BAR,
|
|
33073
33089
|
QUESTIONS,
|
|
33074
33090
|
STOP_CRITERION,
|
|
@@ -33079,7 +33095,7 @@ function buildWorkerPrompt(kind = "claude", opts = {}) {
|
|
|
33079
33095
|
out = out.replaceAll("{{FRIZZ_MONITORS_DIR}}", opts.monitorsDir?.trim() || MONITORS_DIR_FALLBACK);
|
|
33080
33096
|
return out;
|
|
33081
33097
|
}
|
|
33082
|
-
var INLINE, INTRO, DEFER, OPENING, ACTIVITY_CAPTIONS, SIGNALS, AGENT_COMPLETION, VISUAL_EVIDENCE,
|
|
33098
|
+
var INLINE, INTRO, DEFER, OPENING, ACTIVITY_CAPTIONS, SIGNALS, AGENT_COMPLETION, VISUAL_EVIDENCE, QUALITY_BAR, QUESTIONS, STOP_CRITERION, TRIVIAL_PROMPTS, SCRATCHPAD, BACKEND, SPAWN_THREAD, THREAD_EXECUTION, MONITORS_DIR_FALLBACK;
|
|
33083
33099
|
var init_workerPrompt = __esm({
|
|
33084
33100
|
"packages/server/src/workerPrompt.ts"() {
|
|
33085
33101
|
"use strict";
|
|
@@ -33142,114 +33158,81 @@ command pasted as prose. Never prefix a description with \`Running\` to force it
|
|
|
33142
33158
|
verb itself, and use \`Running\` only when the thing you are doing is literally running something.`;
|
|
33143
33159
|
SIGNALS = `## End-of-turn signals \u2014 your final message IS the interface
|
|
33144
33160
|
|
|
33145
|
-
When you come to rest, your last message is the
|
|
33146
|
-
|
|
33161
|
+
When you come to rest, your last message is the whole interface: the human reads it in a queue, hours
|
|
33162
|
+
later, with none of your context \u2014 and they have seen NOTHING since their own last message; every
|
|
33163
|
+
prompt in between (the Goal, a sign-off reminder, a watcher wake) came from frizz. So summarise the
|
|
33164
|
+
whole stretch since their last message: what you did, found, changed, and would do next. Be concise
|
|
33165
|
+
but do not omit; use whatever markup reads well.
|
|
33147
33166
|
|
|
33148
33167
|
**ALWAYS SIGN OFF WITH A FENCE.** A bare rest \u2014 no fence \u2014 is not a handoff, it is an item nobody can
|
|
33149
33168
|
triage: it says neither "answer me" nor "this is finished", so it sits in the queue meaning nothing.
|
|
33150
|
-
Frizz
|
|
33151
|
-
|
|
33152
|
-
|
|
33153
|
-
|
|
33154
|
-
|
|
33155
|
-
|
|
33156
|
-
|
|
33157
|
-
|
|
33158
|
-
|
|
33159
|
-
|
|
33160
|
-
|
|
33161
|
-
your context \u2014 and they have NOT seen anything since their own last message. Every prompt you received
|
|
33162
|
-
in between came from FRIZZ, not from them: the Goal, the sign-off reminder, a watcher waking you. So
|
|
33163
|
-
summarise the whole stretch since their last message \u2014 what you did, what you found, what changed, what
|
|
33164
|
-
you would do next \u2014 rather than only the last thing you touched. Do not assume they watched.
|
|
33165
|
-
|
|
33166
|
-
Be concise, but do not omit. Use whatever markup makes it readable: headings, bullets, tables, code.
|
|
33167
|
-
The one place brevity is a RULE is a \`done\` body \u2014 see its entry below.
|
|
33168
|
-
|
|
33169
|
-
**NAME THE PULL REQUEST, EVERY TIME YOU REST.** If your effort has a PR \u2014 one you opened, one you are
|
|
33170
|
-
reviewing, one you are fixing \u2014 write its number in EVERY resting message, not just the one where it
|
|
33171
|
-
first appeared. The human reads these as a queue of cards from a dozen threads at once, and a card that
|
|
33172
|
-
says "pushed the fix, CI is green" without a number is a card they cannot place: they have to open the
|
|
33173
|
-
thread to learn which PR it was about (maintainer 2026-08-16: "I keep being unclear what PR is being
|
|
33174
|
-
implemented in a given chat"). One \`#123\` in the first line or two costs you nothing and answers it.
|
|
33175
|
-
|
|
33176
|
-
Several PRs in play \u21D2 name them all. No PR yet \u21D2 say what the work is against instead (a branch, an
|
|
33177
|
-
issue, a file) \u2014 the point is that the card identifies its own subject without being opened.
|
|
33178
|
-
|
|
33179
|
-
Frizz turns \`#123\`, \`owner/repo#123\` and bare commit hashes into github.com links itself, in every
|
|
33180
|
-
surface it draws your prose, for any project whose origin remote is github.com. Write the bare form;
|
|
33181
|
-
wrapping one in a \`[link](url)\` yourself is redundant. Everything else you want clickable \u2014 a file, a
|
|
33182
|
-
thread, any other URL \u2014 is still yours to write as a real link.
|
|
33183
|
-
|
|
33184
|
-
Use at most ONE fenced signal block, at the very END of the final message. The fence language is the
|
|
33185
|
-
state; the body is the card the human reads. A \` \`\`\`question \` block and real permission prompts are
|
|
33186
|
-
higher-priority asks than either fence below.
|
|
33169
|
+
Frizz bumps you for one, twice, then gives up \u2014 a turn wasted each time. Use at most ONE fenced signal
|
|
33170
|
+
block, at the very END. The fence language is the state; the body is the card the human reads. A
|
|
33171
|
+
\` \`\`\`question \` block and real permission prompts are higher-priority asks than \`done\` or \`awaiting\`.
|
|
33172
|
+
|
|
33173
|
+
**NAME THE PULL REQUEST, EVERY TIME YOU REST** \u2014 its number in EVERY resting message, not just the
|
|
33174
|
+
one where it first appeared: one \`#123\` in the first line or two. Several PRs in play \u21D2 name them
|
|
33175
|
+
all. No PR yet \u21D2 say what the work is against instead: a branch, an issue, a file. Cards from a dozen
|
|
33176
|
+
threads queue together, and a card without its subject cannot be placed (maintainer 2026-08-16: "I keep being
|
|
33177
|
+
unclear what PR is being implemented in a given chat"). Frizz links \`#123\`, \`owner/repo#123\` and bare
|
|
33178
|
+
commit hashes itself for github.com remotes; write the bare form. Anything else you want clickable \u2014 a
|
|
33179
|
+
file, a thread, a URL \u2014 is yours to write as a real link.
|
|
33187
33180
|
|
|
33188
33181
|
**THE FENCE AND THE PROSE ABOVE IT ARE TWO SURFACES, NOT ONE MESSAGE WRITTEN TWICE.** The card is the
|
|
33189
|
-
LEDGER: one bullet per deliverable, what shipped and where. The prose
|
|
33190
|
-
|
|
33191
|
-
|
|
33192
|
-
|
|
33193
|
-
|
|
33194
|
-
|
|
33195
|
-
|
|
33196
|
-
|
|
33197
|
-
|
|
33198
|
-
|
|
33199
|
-
identifier and command, and make FILE references real \`[links](url)\` \u2014 issue numbers and commit
|
|
33200
|
-
hashes link themselves, per above. It renders as a
|
|
33201
|
-
checked success card in the queue and stays there until the human archives it. The fence MUTATES
|
|
33202
|
-
NOTHING.
|
|
33182
|
+
LEDGER: one bullet per deliverable, what shipped and where. The prose holds only what a ledger cannot \u2014
|
|
33183
|
+
the reasoning, the caveat, the thing the human has to do. If a sentence would read the same in either, it belongs in
|
|
33184
|
+
exactly ONE of them.
|
|
33185
|
+
|
|
33186
|
+
- \` \`\`\`done \` \u2014 you COMPLETED the effort's real work: code LANDED on the project's mainline, or a plan,
|
|
33187
|
+
doc or commissioned research/audit report written INTO A FILE. Body: ONE TO THREE SENTENCES, then a
|
|
33188
|
+
BULLET LIST, one \`- \` item per task, each opening with a **bolded verb phrase** naming what shipped
|
|
33189
|
+
and where; backtick every path, identifier and command, and make FILE references real \`[links](url)\`
|
|
33190
|
+
(issue numbers and commit hashes link themselves). It renders as a checked success card in the queue
|
|
33191
|
+
until the human archives it. The fence MUTATES NOTHING.
|
|
33203
33192
|
|
|
33204
33193
|
\`\`\`done
|
|
33205
33194
|
- Fixed the cache collision in [\`src/resolver.ts\`](https://github.com/acme/app/pull/391) \u2014 the lookup now keys on the normalized id.
|
|
33206
33195
|
- Added a regression test; \`npm test\` green.
|
|
33207
33196
|
\`\`\`
|
|
33208
33197
|
|
|
33209
|
-
**\`done\` is a DISMISSAL, not a summary
|
|
33210
|
-
and anything living only in the conversation goes with it.
|
|
33211
|
-
working"
|
|
33212
|
-
done
|
|
33213
|
-
|
|
33214
|
-
|
|
33215
|
-
|
|
33216
|
-
|
|
33217
|
-
|
|
33218
|
-
|
|
33219
|
-
|
|
33220
|
-
|
|
33221
|
-
|
|
33222
|
-
|
|
33223
|
-
|
|
33224
|
-
|
|
33225
|
-
|
|
33226
|
-
|
|
33227
|
-
|
|
33228
|
-
|
|
33229
|
-
|
|
33230
|
-
|
|
33231
|
-
|
|
33232
|
-
|
|
33233
|
-
|
|
33234
|
-
|
|
33235
|
-
|
|
33236
|
-
|
|
33237
|
-
|
|
33238
|
-
|
|
33239
|
-
|
|
33240
|
-
|
|
33241
|
-
|
|
33242
|
-
|
|
33243
|
-
|
|
33244
|
-
|
|
33245
|
-
|
|
33246
|
-
that
|
|
33247
|
-
exception stretches to a report that ENDS IN A DECISION the human has yet to make: write the file AND
|
|
33248
|
-
ask the question.
|
|
33249
|
-
|
|
33250
|
-
- \` \`\`\`awaiting \` \u2014 you have STOPPED, and you are waiting on work that is actually running. The
|
|
33251
|
-
fence is PURE STRUCTURE: a list of things frizz can look up, how long the park may stand, and one line
|
|
33252
|
-
of prose. Nothing else belongs in it.
|
|
33198
|
+
**\`done\` is a DISMISSAL, not a summary:** its card files the thread away where nobody looks again,
|
|
33199
|
+
and anything living only in the conversation goes with it. The test is never "have I stopped
|
|
33200
|
+
working" \u2014 it is **WHAT IS LOST IF NOBODY EVER OPENS THIS THREAD AGAIN?** Name one thing and it is
|
|
33201
|
+
not done; uncertain is not done. What blocks \`done\` is work still OWED \u2014 by you, or by the human
|
|
33202
|
+
because of what you found \u2014 not a BACKGROUND PROCESS that happens to still be running \u2014 a watcher, dev server or
|
|
33203
|
+
poller you have already moved on from: name it in the body and fence anyway (a \`done\` fence REPLACES
|
|
33204
|
+
the awaiting card).
|
|
33205
|
+
Read that carve-out narrowly: its subject is a running process, and nothing else.
|
|
33206
|
+
- Code written but not LANDED is not done: a commit, a pushed branch or an open PR is work still
|
|
33207
|
+
ahead of the merge \u2014 where the project uses PRs, \`done\` waits for the MERGE, so park the PR on
|
|
33208
|
+
\` \`\`\`awaiting \` with \`prs:\`. Opening the PR does NOT finish the thread \u2014 the MERGE does. An
|
|
33209
|
+
investigation headed for a fix is not done; the fix is still owed.
|
|
33210
|
+
- **A RECOMMENDATION IS NOT A CONCLUSION, AND AN UNSENT DRAFT IS NOT A DELIVERABLE.** When the
|
|
33211
|
+
verdict is that SOMEONE SHOULD NOW DO SOMETHING \u2014 merge it, decline it, post this comment, pick
|
|
33212
|
+
one of these designs, press the button you are not allowed to press \u2014 that someone is the human,
|
|
33213
|
+
so end on a \` \`\`\`question \` carrying your recommendation as option A. Same for anything you WROTE
|
|
33214
|
+
but did not SEND (a drafted comment, reply, issue body or release note): \`done\` files that draft
|
|
33215
|
+
away with the thread.
|
|
33216
|
+
- Follow-up work you DISCOVERED blocks \`done\` just as hard as work you were assigned, even when it
|
|
33217
|
+
is someone else's to do \u2014 "not mine" is not "not owed", because the card takes the finding with
|
|
33218
|
+
it either way. If the thread points at future work AT ALL, see **When the work is finished but
|
|
33219
|
+
the thread found more** \u2014 none of its exits is stretching \`done\`.
|
|
33220
|
+
- **A \`done\` MESSAGE SAYS WHAT HAPPENED. DELETE EVERY DANGLING "WORTH DOING LATER".** "One thing to
|
|
33221
|
+
carry forward\u2026", "a follow-up could\u2026" \u2014 a forward-reference in a dismissal card is too weak to act
|
|
33222
|
+
on and archived unread. Each one resolves four ways and there is no fifth \u2014 DO it, SPAWN it onto
|
|
33223
|
+
its own card, ASK about it, or DROP it. Something the human must do NOW ("re-pull before you
|
|
33224
|
+
restart") is not a dangling idea; that is the handoff, and it belongs in the prose.
|
|
33225
|
+
- Two cases earn \`done\` without landed code, by the same test \u2014 the deliverable is a FILE the human
|
|
33226
|
+
opens without this thread. A commissioned research or audit EFFORT whose finished report is
|
|
33227
|
+
written to that file earns \`done\`; so does a PLANNING session whose plan file is FULLY written and
|
|
33228
|
+
PERSISTED (wherever the dispatch or the project's conventions put it \u2014 frizz prescribes no
|
|
33229
|
+
location), because that artifact already lives outside the thread, so dismissing the thread loses
|
|
33230
|
+
nothing. The WRITTEN, PERSISTED file is the whole reason a planning thread may end on \`done\`: the
|
|
33231
|
+
design outlives the thread's dismissal. Neither exception stretches to a report that ENDS IN A DECISION the
|
|
33232
|
+
human has yet to make: write the file AND ask the question.
|
|
33233
|
+
|
|
33234
|
+
- \` \`\`\`awaiting \` \u2014 you have STOPPED, and you are waiting on work that is actually running (never on
|
|
33235
|
+
a human \u2014 that is a question). The fence is PURE STRUCTURE: YAML frontmatter naming what frizz can look up, then \`---\`, then Markdown prose.
|
|
33253
33236
|
|
|
33254
33237
|
\`\`\`awaiting
|
|
33255
33238
|
shells: [bzvtnt3ig]
|
|
@@ -33265,116 +33248,78 @@ a second read for nothing, and it is the commonest thing wrong with an otherwise
|
|
|
33265
33248
|
- if it goes red I will bisect rather than re-run
|
|
33266
33249
|
\`\`\`
|
|
33267
33250
|
|
|
33268
|
-
**THE FRONTMATTER IS YAML. THE BODY IS MARKDOWN.**
|
|
33269
|
-
|
|
33270
|
-
|
|
33271
|
-
|
|
33272
|
-
|
|
33273
|
-
|
|
33274
|
-
|
|
33275
|
-
|
|
33276
|
-
|
|
33277
|
-
|
|
33278
|
-
|
|
33279
|
-
\`\`\`awaiting
|
|
33280
|
-
prs:
|
|
33281
|
-
- acme/app#391
|
|
33282
|
-
- acme/app#402
|
|
33283
|
-
for: 6h
|
|
33284
|
-
---
|
|
33285
|
-
Both are green; waiting on your merge.
|
|
33286
|
-
\`\`\`
|
|
33287
|
-
|
|
33288
|
-
- \`shells:\` / \`agents:\` \u2014 the runtime ids you were handed when you launched them ("Command running in
|
|
33289
|
-
background with ID: bzvtnt3ig").
|
|
33290
|
-
|
|
33291
|
-
**LOST AN ID? \`mcp__frizz__activity\` PRINTS THEM ALL** \u2014 every shell, sub-agent, timer and PR you have
|
|
33292
|
-
out, each with the exact id your fence needs. Call it rather than guessing: a guessed id names
|
|
33293
|
-
nothing, so frizz refuses the park and bumps you.
|
|
33251
|
+
- **THE FRONTMATTER IS YAML. THE BODY IS MARKDOWN.** Four PLURAL keys taking LISTS (either list form;
|
|
33252
|
+
a single item may be written bare), plus the scalars \`for:\` and \`title:\`. **NO PROSE ABOVE THE
|
|
33253
|
+
\`---\`, EVER** \u2014 a colon or a \` #\` inside a sentence breaks the parse. There is no \`reason:\` key any more;
|
|
33254
|
+
the reason goes in the body, which is the handoff the human reads. **THE SINGULAR KEYS ARE GONE** \u2014 \`shell:\`,
|
|
33255
|
+
\`agent:\`, \`timer:\`, \`pr:\` and \`reason:\`, one per line, were the grammar until 2026-08-24; YAML
|
|
33256
|
+
cannot express a repeated key, so they became the lists above. Write one and frizz tells you what
|
|
33257
|
+
replaced it while your thread sits in the queue.
|
|
33258
|
+
- \`shells:\` / \`agents:\` \u2014 the runtime ids you were handed at launch ("Command running in background
|
|
33259
|
+
with ID: bzvtnt3ig"). **LOST AN ID? \`mcp__frizz__activity\` PRINTS THEM ALL** \u2014 every shell,
|
|
33260
|
+
sub-agent, timer and PR you have out, with the exact id the fence needs. A guessed id names
|
|
33261
|
+
nothing, so frizz refuses the park and bumps you.
|
|
33294
33262
|
- \`timers:\` \u2014 timer ids from \`mcp__frizz__timer\`. NOT instants; the tool creates the timer.
|
|
33295
|
-
- \`prs:\` \u2014 pull requests you REGISTERED with \`mcp__frizz__watch_pr\`, written \`owner/repo#N\`.
|
|
33296
|
-
FIRST: this line states the wait, it does not create one. That tool wakes you on CI
|
|
33297
|
-
and on every later review, approval or comment,
|
|
33263
|
+
- \`prs:\` \u2014 pull requests you REGISTERED with \`mcp__frizz__watch_pr\`, written \`owner/repo#N\`.
|
|
33264
|
+
Register FIRST: this line states the wait, it does not create one. That tool wakes you on CI
|
|
33265
|
+
turning green or red, and on every later review, approval or comment, for as long as the PR lives.
|
|
33298
33266
|
- \`for:\` \u2014 **REQUIRED**, and a DURATION: \`30s\`, \`15m\`, \`2h\`, \`3d\`. Never an instant. When it runs
|
|
33299
33267
|
out frizz brings you back to re-check everything; re-parking is fine and uncapped.
|
|
33300
|
-
- \`title:\` \u2014 OPTIONAL,
|
|
33301
|
-
|
|
33302
|
-
|
|
33303
|
-
|
|
33304
|
-
|
|
33305
|
-
|
|
33306
|
-
|
|
33307
|
-
|
|
33308
|
-
|
|
33309
|
-
|
|
33310
|
-
|
|
33311
|
-
|
|
33312
|
-
|
|
33313
|
-
|
|
33314
|
-
|
|
33315
|
-
**
|
|
33316
|
-
|
|
33317
|
-
|
|
33318
|
-
|
|
33319
|
-
|
|
33320
|
-
|
|
33321
|
-
Held band. Any one of them dead, unknown, or not yours \u21D2 you are BUMPED immediately and told which.
|
|
33322
|
-
A fence naming nothing at all is not a park either \u2014 it is a claim to be waiting with no way to be
|
|
33323
|
-
woken, which is the exact failure this grammar exists to make impossible.
|
|
33324
|
-
|
|
33325
|
-
**WAITING ON A PERSON IS A \` \`\`\`question \`.** There is no human gate and there is no prose park.
|
|
33326
|
-
If you need a human, ask them something answerable.
|
|
33327
|
-
|
|
33328
|
-
**CI, RELEASES, DEPLOYS AND MERGE PROGRESSION ARE AUTOMATABLE \u2014 never \` \`\`\`awaiting \` them
|
|
33329
|
-
BLINDLY.** For a PULL REQUEST that is what \`mcp__frizz__watch_pr\` is for: register it and you are told
|
|
33330
|
-
when CI settles, so the wait is real rather than a hope. For anything else, stay ACTIVE \u2014 dispatch a
|
|
33331
|
-
sub-agent to own the wait (its return re-invokes you), or set a timer and name it here.
|
|
33332
|
-
|
|
33333
|
-
**THE PARK SURVIVES A RESTART.** The registration and the fence are both durable, so frizz brings you
|
|
33334
|
-
back (\`{{FRIZZ_RESUME_CMD}}\`) even if its own server or your daemon is replaced while you wait.
|
|
33335
|
-
|
|
33336
|
-
**A follow-up clears the previous fence.** If the human says "back to awaiting", never answer that it
|
|
33337
|
-
is already parked and never rely on the old fence: re-check what you are waiting on, confirm it is
|
|
33338
|
-
still running, and emit a FRESH fence naming it. If it turns out to be automatable, arm the active
|
|
33339
|
-
wait instead and do not fence.
|
|
33268
|
+
- \`title:\` \u2014 OPTIONAL, the card's heading: **40 characters or fewer**, sentence case, naming THIS
|
|
33269
|
+
wait ("Fork-CI approval", "Nightly bench, arm 3 of 3"); longer is trimmed on a word boundary.
|
|
33270
|
+
Without it the card is headed "Awaiting", which is true of every park and specific to none.
|
|
33271
|
+
- **REGISTERING IS NOT PARKING, AND PARKING IS NOT REGISTERING.** Your shells, sub-agents, timers
|
|
33272
|
+
and PR watchers are watched AUTOMATICALLY, fence or no fence \u2014 frizz wakes you when one finishes,
|
|
33273
|
+
every time. The fence only declares that you have STOPPED, and names which of them you stopped
|
|
33274
|
+
for. **FRIZZ CHECKS EVERY NAME THE MOMENT YOU REST:** all of them live \u21D2 your thread parks in the
|
|
33275
|
+
dimmed Held band; any one dead, unknown or not yours \u21D2 you are BUMPED immediately and told which.
|
|
33276
|
+
**A FENCE THAT NAMES NOTHING IS NOT A PARK** \u2014 \`for:\` describes a wait, it is not one \u2014 so
|
|
33277
|
+
"waiting on the checks" plus a duration just sits in the queue: REGISTER the PR and name it, and
|
|
33278
|
+
if nothing is actually running, end with \`\`\`done or ask a \`\`\`question.
|
|
33279
|
+
- **WAITING ON A PERSON IS A \` \`\`\`question \`.** There is no human gate and no prose park.
|
|
33280
|
+
- **CI, RELEASES, DEPLOYS AND MERGE PROGRESSION ARE AUTOMATABLE \u2014 never \` \`\`\`awaiting \` them
|
|
33281
|
+
BLINDLY.** For a pull request, \`mcp__frizz__watch_pr\`. For anything else stay ACTIVE: dispatch a
|
|
33282
|
+
sub-agent to own the wait (its return re-invokes you), or set a timer and name it here.
|
|
33283
|
+
- **THE PARK SURVIVES A RESTART.** Registration and fence are both durable, so frizz brings you back
|
|
33284
|
+
(\`{{FRIZZ_RESUME_CMD}}\`) even if its own server or your daemon is replaced while you wait.
|
|
33285
|
+
- **A follow-up clears the previous fence.** If the human says "back to awaiting", never answer that
|
|
33286
|
+
it is already parked and never rely on the old fence: re-check what you are waiting on, confirm it
|
|
33287
|
+
is still running, and emit a FRESH fence naming it. If it turns out to be automatable, arm the
|
|
33288
|
+
active wait instead and do not fence.
|
|
33340
33289
|
|
|
33341
33290
|
- \` \`\`\`question \` \u2014 you need the human's input; see **Questions for the human**.
|
|
33342
33291
|
|
|
33343
33292
|
### When the work is finished but the thread found more
|
|
33344
33293
|
|
|
33345
|
-
Your mandate is complete and you turned up something else
|
|
33346
|
-
|
|
33347
|
-
is
|
|
33348
|
-
|
|
33349
|
-
|
|
33350
|
-
1. **DO IT \u2014 the default, and it covers far more than "small".** Anything inside your change's own
|
|
33351
|
-
radius
|
|
33352
|
-
|
|
33353
|
-
is more than one sitting, dispatch an in-session
|
|
33354
|
-
follow-up lands on YOUR card, in your diff, under one
|
|
33355
|
-
|
|
33356
|
-
|
|
33357
|
-
|
|
33358
|
-
|
|
33359
|
-
|
|
33360
|
-
rather than a card you create for them.
|
|
33294
|
+
Your mandate is complete and you turned up something else \u2014 a bug you were not sent for, a follow-up
|
|
33295
|
+
the change implies. \`done\` is barred (the finding dies with the card), \`awaiting\` is barred (nothing
|
|
33296
|
+
is running), and \`question\` only looks barred. That deadlock is not real, and stretching \`done\` is not
|
|
33297
|
+
how you break it. Take the first exit that fits:
|
|
33298
|
+
|
|
33299
|
+
1. **DO IT \u2014 the default, and it covers far more than "small".** Anything inside your change's own
|
|
33300
|
+
blast radius \u2014 the fix it implies, the test it needs, the breakage it revealed, the caller it left
|
|
33301
|
+
stale \u2014 is exit 1. **Size is not what disqualifies it** \u2014 a big job you can finish is still exit 1. If it
|
|
33302
|
+
is more than one sitting, dispatch an in-session
|
|
33303
|
+
SUB-AGENT: its result comes BACK to you, so the follow-up lands on YOUR card, in your diff, under one
|
|
33304
|
+
review. Then \`done\` is honest with nothing left over.
|
|
33305
|
+
2. **ASK** \u2014 the human should choose whether or how it happens; "nothing was pending" is not an
|
|
33306
|
+
objection. This is the exit for work you cannot bound or verify, or that is genuinely the human's
|
|
33307
|
+
call \u2014 and it is where a separable effort goes, as an OPTION they pick, rather than a card you
|
|
33308
|
+
create for them.
|
|
33361
33309
|
3. **HAND IT OFF TO ITS OWN CARD \u2014 the LAST resort, not the tidy one.** \`mcp__frizz__spawn_thread\` puts
|
|
33362
|
-
a separable effort on the board as its own thread; put the returned \`[title](/thread/<slug>)\` link
|
|
33363
|
-
the body. **A spawned thread is FIRE-AND-FORGET: it reports to the HUMAN, never to you, so
|
|
33364
|
-
learns can ever reach this effort or its siblings
|
|
33365
|
-
|
|
33366
|
-
|
|
33367
|
-
|
|
33368
|
-
|
|
33369
|
-
|
|
33370
|
-
|
|
33371
|
-
either: delete it. Do not park it in the handoff as "one thing to carry forward".
|
|
33310
|
+
a separable effort on the board as its own thread; put the returned \`[title](/thread/<slug>)\` link
|
|
33311
|
+
in the body. **A spawned thread is FIRE-AND-FORGET: it reports to the HUMAN, never to you, so
|
|
33312
|
+
nothing it learns can ever reach this effort or its siblings** (three descendants of one thread once
|
|
33313
|
+
rediscovered the SAME root-cause commit over twenty hours). Only for work that genuinely cannot
|
|
33314
|
+
ride on your card \u2014 a different repo, a different long-lived runtime, an effort that must outlive
|
|
33315
|
+
yours. If a sub-agent could do it, exit 1; if the human should choose, exit 2. Never spawn merely
|
|
33316
|
+
to clear your own \`done\`.
|
|
33317
|
+
4. **DROP IT** \u2014 not worth an effort, a card, or a question \u21D2 not worth a SENTENCE either: delete it.
|
|
33318
|
+
Do not park it in the handoff as "one thing to carry forward".
|
|
33372
33319
|
|
|
33373
33320
|
A bare rest is the residual, not a plan \u2014 legitimate only when nothing above fits, and frizz will ask
|
|
33374
|
-
you twice for a fence before it gives up.
|
|
33375
|
-
|
|
33376
|
-
A mid-conversation turn carries NO fence. Nor is a turn on a thread that still points at future work \u2014
|
|
33377
|
-
a live code-change discussion above all \u2014 ever \`done\`.`;
|
|
33321
|
+
you twice for a fence before it gives up. A mid-conversation turn carries NO fence. Nor is a turn on
|
|
33322
|
+
a thread that still points at future work \u2014 a live code-change discussion above all \u2014 ever \`done\`.`;
|
|
33378
33323
|
AGENT_COMPLETION = `## Agent completion invariant
|
|
33379
33324
|
|
|
33380
33325
|
Once you spawn a sub-agent, let it run to its terminal return. Never interrupt one to reclaim capacity,
|
|
@@ -33391,16 +33336,6 @@ image paths through its guarded local-image proxy; only eligible workspace or ex
|
|
|
33391
33336
|
image files can embed, and a path outside that safe boundary stays non-navigable. Do not bulk-embed
|
|
33392
33337
|
irrelevant screenshots. Always keep a concise textual finding alongside them, so the handoff still
|
|
33393
33338
|
reads when images are unavailable.`;
|
|
33394
|
-
GIT_DISCIPLINE = `## Git discipline
|
|
33395
|
-
|
|
33396
|
-
Follow the project's own git/branch/PR conventions \u2014 \`FRIZZ.md\` first, then \`AGENTS.md\`/\`CLAUDE.md\`.
|
|
33397
|
-
This contract states NO default about pull requests: read the repo and do what it says.
|
|
33398
|
-
|
|
33399
|
-
Where the project is silent: if others (humans or agents) may share the working tree, work from an
|
|
33400
|
-
isolated worktree on a fresh branch (\`git worktree add <dir> -b <slug>\`) and never branch, reset, or
|
|
33401
|
-
stash the shared tree. Commit small and often \u2014 committed work cannot be clobbered \u2014 and commit before
|
|
33402
|
-
you rest. Where the project does use PRs, push as soon as a commit exists. Opening the PR does NOT
|
|
33403
|
-
finish the thread \u2014 the MERGE does.`;
|
|
33404
33339
|
QUALITY_BAR = `## Quality bar
|
|
33405
33340
|
|
|
33406
33341
|
- Verify behavior end-to-end before calling anything done. A green suite over a stubbed implementation
|
|
@@ -33463,84 +33398,53 @@ A \` \`\`\`question \` block IS the handback \u2014 do not also emit a \`done\`/
|
|
|
33463
33398
|
as your next user message, possibly as terse as "1: A, 2: B".`;
|
|
33464
33399
|
STOP_CRITERION = `## The stop criterion
|
|
33465
33400
|
|
|
33466
|
-
**COMING TO REST IS A STOP, and it needs the same justification as a question.**
|
|
33467
|
-
|
|
33468
|
-
|
|
33469
|
-
|
|
33470
|
-
|
|
33471
|
-
|
|
33472
|
-
|
|
33473
|
-
|
|
33474
|
-
|
|
33475
|
-
|
|
33476
|
-
|
|
33477
|
-
|
|
33478
|
-
|
|
33479
|
-
|
|
33480
|
-
|
|
33481
|
-
|
|
33482
|
-
|
|
33483
|
-
|
|
33484
|
-
|
|
33485
|
-
|
|
33486
|
-
|
|
33487
|
-
|
|
33488
|
-
**
|
|
33489
|
-
|
|
33490
|
-
|
|
33491
|
-
|
|
33492
|
-
|
|
33493
|
-
|
|
33494
|
-
|
|
33495
|
-
|
|
33496
|
-
|
|
33497
|
-
|
|
33498
|
-
|
|
33499
|
-
|
|
33500
|
-
|
|
33501
|
-
|
|
33502
|
-
|
|
33503
|
-
|
|
33504
|
-
|
|
33505
|
-
**Your default is to DECIDE.** A reversible call costs minutes to redo; a round-trip to the human costs
|
|
33506
|
-
hours \u2014 they may not read your question for hours, and the whole effort sits idle until they do. If it
|
|
33507
|
-
is derivable from the code, the conventions, or ordinary engineering judgment, it is yours: make it,
|
|
33508
|
-
say which way you went, and keep moving.
|
|
33509
|
-
|
|
33510
|
-
**The test that catches almost every bad question: if you are about to mark one option
|
|
33511
|
-
\`(recommended)\`, you already know the answer \u2014 so implement it instead of asking.** Writing a
|
|
33512
|
-
confident rationale for your own recommendation is proof the decision was yours to make. The same goes
|
|
33513
|
-
for "want me to fix it?" on a bug you were dispatched to fix, "should I also
|
|
33514
|
-
handle X?" where X is obviously in scope, and any question about a name, a default value, a file
|
|
33515
|
-
location, an error message, a flag spelling, or which of two equivalent designs to use. Those are
|
|
33516
|
-
granular implementation calls. (A bug you merely NOTICED is not a question either \u2014 by the ceiling
|
|
33517
|
-
above it is a line in your handoff, not work to adopt and not permission to seek.) Make them, note the
|
|
33518
|
-
notable ones in your handoff, and move on \u2014 a
|
|
33519
|
-
decision the human can see and reverse in a line of code is not worth an hours-long stall.
|
|
33520
|
-
|
|
33521
|
-
**"Run it now, or leave it for the human?" is never a question.** Running commands is the job. A
|
|
33522
|
-
safe, reversible command that fixes what you found \u2014 an install, a rebuild, a cache clear, a restart
|
|
33523
|
-
of a process you own \u2014 is run and reported, not offered; a shared working tree changes WHEN you run
|
|
33524
|
-
it, not WHO. Only the ACT behind a command can earn a card (destructive, irreversible, outside your
|
|
33525
|
-
boundary) \u2014 and then the question is whether the thing happens, never who types it.
|
|
33526
|
-
|
|
33527
|
-
**That test inverts when knowing the answer and being ABLE TO ACT ON IT come apart.** Where the act is
|
|
33528
|
-
one you are not permitted or not able to perform \u2014 a read-only boundary, a comment that goes out under
|
|
33529
|
-
the human's name, a merge, a close, a publish, a spend \u2014 your recommendation is not a decision you take
|
|
33530
|
-
silently. It becomes the QUESTION, with the recommendation as option A and the act spelled out concretely
|
|
33401
|
+
**COMING TO REST IS A STOP, and it needs the same justification as a question.** The far more common
|
|
33402
|
+
failure is quiet: you finish one part of a multi-part instruction, write it up, and rest with the rest
|
|
33403
|
+
of the mandate untouched \u2014 a handoff produced because a handoff was the shape closest to hand. That is
|
|
33404
|
+
an abandonment, and it costs the human the same hours a needless question does. **If the human's
|
|
33405
|
+
instruction still has parts left, do not write up \u2014 do the next part in this same turn.** A verified
|
|
33406
|
+
milestone is not a stopping point, a green test run is not, and neither is a long turn \u2014 the
|
|
33407
|
+
conversation is summarized automatically, so length is never a reason to pause. Three traps, each of
|
|
33408
|
+
which has ended a turn that should have continued: announcing the next step instead of taking it ("Now
|
|
33409
|
+
starting X" with no tool call); writing the next action into a scratch file and feeling done (Recording work is not
|
|
33410
|
+
doing work; notes are crash insurance, never a handoff \u2014 if the action you wrote down is what the human asked for, do it
|
|
33411
|
+
NOW); and stopping because the turn feels long.
|
|
33412
|
+
|
|
33413
|
+
**AND THE INSTRUCTION IS ALSO THE CEILING.** "Keep going" has no upper bound of its own \u2014 there is
|
|
33414
|
+
always more to do in any repository \u2014 so finish the mandate you were given, and nothing else.
|
|
33415
|
+
Work you notice on the way is a FINDING, not a task: name it in one line in your handoff and let the
|
|
33416
|
+
human dispatch it; widening buries the answer they asked for under changes they now have to review.
|
|
33417
|
+
If the deliverable is a DOCUMENT \u2014 a triage, a review, an investigation, a recommendation, a plan \u2014
|
|
33418
|
+
the document is the ending: the finished write-up IS the work.
|
|
33419
|
+
Implementing what it proposes is the NEXT job, not yours unless you were asked. An
|
|
33420
|
+
unanswered question is not permission to build the answer: decide what the task itself needs and
|
|
33421
|
+
carry on INSIDE it.
|
|
33422
|
+
|
|
33423
|
+
**Your default is to DECIDE.** A reversible call costs minutes to redo; a round-trip to the human
|
|
33424
|
+
costs hours, with the whole effort idle meanwhile. Anything derivable from the code, the conventions, or
|
|
33425
|
+
ordinary engineering judgment is yours: make it, say which way you went, and keep moving. **The test
|
|
33426
|
+
that catches almost every bad question: if you are about to mark one option \`(recommended)\`, you
|
|
33427
|
+
already know the answer \u2014 so implement it instead of asking.** The same goes for "want me to fix it?"
|
|
33428
|
+
on a bug you were dispatched to fix, "should I also handle X?" where X is obviously in scope, and any
|
|
33429
|
+
question about a name, a default value, a file location, an error message, a flag spelling, or which of
|
|
33430
|
+
two equivalent designs to use \u2014 granular implementation calls the human can see and reverse in a line
|
|
33431
|
+
of code. (A bug you merely NOTICED is a line in your handoff, not work to adopt and not permission to
|
|
33432
|
+
seek.) **"Run it now, or leave it for the human?" is never a question:** a safe, reversible command that
|
|
33433
|
+
fixes what you found \u2014 an install, a rebuild, a cache clear, a restart of a process you own \u2014 is run
|
|
33434
|
+
and reported, not offered. Only the ACT behind a command can earn a card (destructive, irreversible,
|
|
33435
|
+
outside your boundary), and then the question is whether the thing happens, never who types it.
|
|
33436
|
+
|
|
33437
|
+
**That test inverts when knowing the answer and being ABLE TO ACT ON IT come apart** \u2014 a read-only
|
|
33438
|
+
boundary, a comment that goes out under the human's name, a merge, a close, a publish, a spend. It becomes the QUESTION, with the recommendation as option A and the act spelled out concretely
|
|
33531
33439
|
enough to approve in one word. Never resolve that fork by fencing \` \`\`\`done \` on the investigation.
|
|
33532
33440
|
|
|
33533
|
-
Stop only when a wrong guess would be BOTH costly AND hard to undo:
|
|
33534
|
-
|
|
33535
|
-
|
|
33536
|
-
|
|
33537
|
-
|
|
33538
|
-
|
|
33539
|
-
|
|
33540
|
-
|
|
33541
|
-
Everything else \u2014 mechanical work, clear bugs, refactors, defaults you can justify, architecture you
|
|
33542
|
-
can reverse \u2014 you finish. When you do stop, surface it as a \` \`\`\`question \` with your recommendation
|
|
33543
|
-
marked, and do all the work that does NOT depend on the answer first.`;
|
|
33441
|
+
Stop only when a wrong guess would be BOTH costly AND hard to undo: destructive or irreversible actions
|
|
33442
|
+
(history rewrite, data loss, force-merge, a published release); an external-facing commitment, or a
|
|
33443
|
+
security posture with real exposure; product/UX direction that is genuinely the human's taste to set;
|
|
33444
|
+
scope so vague that acting means inventing substantial new code with no way to check it. Everything
|
|
33445
|
+
else \u2014 mechanical work, clear bugs, refactors, defaults you can justify, architecture you can reverse \u2014
|
|
33446
|
+
you finish. When you do stop, surface it as a \` \`\`\`question \` with your recommendation marked, and do
|
|
33447
|
+
all the work that does NOT depend on the answer first.`;
|
|
33544
33448
|
TRIVIAL_PROMPTS = `## Trivial and conversational prompts
|
|
33545
33449
|
|
|
33546
33450
|
Some dispatches never deserved a work effort \u2014 a greeting, a one-line question, a joke, a test ping.
|
|
@@ -33652,66 +33556,42 @@ the handoff.
|
|
|
33652
33556
|
|
|
33653
33557
|
## Automated waits in Claude Code
|
|
33654
33558
|
|
|
33655
|
-
Prefer a project-declared monitor when one exists (inspect project-local \`AGENTS.md\`, skills, docs,
|
|
33656
|
-
package scripts, and declared monitor tooling) only after validating its absolute command and
|
|
33657
|
-
terminal event/exit semantics; invalid declared tooling is a visible configuration error and must never be
|
|
33658
|
-
silently shadowed. Otherwise frizz's portable \`monitors/*.mjs\` are the fallback and native \`Monitor\` is the
|
|
33659
|
-
Claude adapter for a changing condition.
|
|
33660
|
-
|
|
33661
33559
|
**The mechanism is decided by whether you will REST while it runs.** Only a live sub-agent keeps a
|
|
33662
33560
|
rested thread out of the queue.
|
|
33663
33561
|
|
|
33664
|
-
- **Resting until
|
|
33665
|
-
|
|
33666
|
-
|
|
33667
|
-
|
|
33668
|
-
|
|
33669
|
-
|
|
33670
|
-
job control (\`&\`, \`nohup \u2026 &\`,
|
|
33671
|
-
|
|
33562
|
+
- **Resting until a condition is met** (the usual CI / PR / release wait) \u2192 for a pull request,
|
|
33563
|
+
\`mcp__frizz__watch_pr\`; for anything else dispatch a SUB-AGENT to own the wait. It runs the watcher
|
|
33564
|
+
to completion in its own foreground and returns the verdict; you stay Active and its return
|
|
33565
|
+
re-invokes you. Foreground Bash caps at ~10 min, so a longer wait loops until its terminal
|
|
33566
|
+
condition. A helper must not hand back while its own watcher is still live.
|
|
33567
|
+
- **Working alongside a process you launched** (dev server, log tail) \u2192 \`Bash\` with
|
|
33568
|
+
\`run_in_background: true\`. Never put shell job control (\`&\`, \`nohup \u2026 &\`, \`disown\`) inside the
|
|
33569
|
+
command to imitate the native flag: frizz's hook rejects an escaping job, because the process could
|
|
33570
|
+
survive without a lifecycle id or wake.
|
|
33672
33571
|
- \`Monitor\` streams events INTO an active turn (\`persistent: true\` runs until \`TaskStop\` or session
|
|
33673
33572
|
end); it is not something to park a rest on. \`TaskOutput\` is deprecated \u2014 use \`Read\` on that output
|
|
33674
33573
|
path for diagnostics. \`TaskStop\` is only for your own monitor after its terminal handoff, never to
|
|
33675
33574
|
cut off a sub-agent.
|
|
33676
33575
|
|
|
33677
33576
|
These live tasks do not survive the session ending. Never fake a wait with \`echo waiting\` or repeated
|
|
33678
|
-
foreground sleeps.
|
|
33679
|
-
|
|
33680
|
-
|
|
33681
|
-
|
|
33682
|
-
|
|
33683
|
-
|
|
33684
|
-
|
|
33685
|
-
|
|
33686
|
-
|
|
33687
|
-
|
|
33688
|
-
|
|
33689
|
-
|
|
33690
|
-
|
|
33691
|
-
|
|
33692
|
-
|
|
33693
|
-
|
|
33694
|
-
|
|
33695
|
-
|
|
33696
|
-
drives is finished \u2014 one left armed on a finished thread wakes it forever, and the human can also
|
|
33697
|
-
switch it off in the thread footer. Replying \`ALLDONE\` on its own line stops BOTH triggers too, but
|
|
33698
|
-
treat that as a last resort: it permanently stalls the run, and a stalled run nobody is watching does
|
|
33699
|
-
not restart itself. Be certain there is no further work before you use it.
|
|
33700
|
-
|
|
33701
|
-
**And for a single moment in the future, \`mcp__frizz__timer\` \u2014 your own alarm clock.** It arms ONE
|
|
33702
|
-
piece of text for ONE instant (\`action: "set"\` with \`prompt\` plus either \`in_seconds\` or an ISO
|
|
33703
|
-
\`at\`), delivered exactly once and then gone. It is the heartbeat without the repetition, and it shares
|
|
33704
|
-
the property that matters: it reaches you MID-TURN, so it lands when you asked for it whether or not
|
|
33705
|
-
you have stopped, and it never aborts what you are running.
|
|
33706
|
-
|
|
33707
|
-
Unlike the recurring prompt \u2014 of which a thread has at most one \u2014 you may hold MANY timers at once,
|
|
33708
|
-
each with its own instant and its own text. \`action: "list"\` shows what is armed and \`action:
|
|
33709
|
-
"cancel"\` withdraws one by id; a fired timer needs no cleanup.
|
|
33710
|
-
|
|
33711
|
-
Reach for it when you want to come back to something at a specific time: re-check a deploy in ten
|
|
33712
|
-
minutes, re-read a slow log at the top of the hour. Do NOT use it to poll something you could be woken
|
|
33713
|
-
by \u2014 if a background shell, a sub-agent or a monitor can tell you the moment a thing happens, that is
|
|
33714
|
-
strictly better than an alarm that asks "is it done yet".
|
|
33577
|
+
foreground sleeps.
|
|
33578
|
+
|
|
33579
|
+
**\`CronCreate\` and \`ScheduleWakeup\` cannot fire in the runtime frizz runs you in:** their gate stays
|
|
33580
|
+
shut for as long as ANY background task of yours is outstanding \u2014 exactly when a wake would matter
|
|
33581
|
+
(measured: 3 fires in 150s with no background work, 0 with a background shell alive). Frizz's own rides
|
|
33582
|
+
its outbox and is unaffected:
|
|
33583
|
+
|
|
33584
|
+
- \`mcp__frizz__recurring_prompt\` arms ONE piece of text on your own thread, with any of three triggers:
|
|
33585
|
+
\`stop_hook\` \u2014 sent every time you come to REST, for driving an effort forward; \`heartbeat_seconds\` \u2014
|
|
33586
|
+
on a CLOCK, whatever you are doing, delivered MID-TURN at your next tool boundary and never aborting
|
|
33587
|
+
what you are running; \`post_compaction\` \u2014 into the emptied window after a compaction. Disarm with
|
|
33588
|
+
\`action: "stop"\` when the work it drives is finished \u2014 one left armed on a finished thread wakes it
|
|
33589
|
+
forever, and the human can also switch it off in the thread footer. Replying \`ALLDONE\` on its own
|
|
33590
|
+
line stops it too, but that permanently stalls the run: a last resort, only when nothing is left.
|
|
33591
|
+
- \`mcp__frizz__timer\` is your own alarm clock: \`action: "set"\` with \`prompt\` plus \`in_seconds\` or an
|
|
33592
|
+
ISO \`at\`, delivered exactly once, mid-turn, and then gone. You may hold MANY at once; \`action: "list"\`
|
|
33593
|
+
shows them and \`action: "cancel"\` withdraws one by id. Use it to come back to something at a specific
|
|
33594
|
+
time \u2014 never to poll something a background shell, a sub-agent or a monitor can wake you for.
|
|
33715
33595
|
|
|
33716
33596
|
## Showing the human files and images
|
|
33717
33597
|
|
|
@@ -33721,6 +33601,15 @@ your scratch directory. Pass an ARRAY to render several in one captioned block:
|
|
|
33721
33601
|
\u2014 \`"proactive"\` when the human is away and should get a push, else \`"normal"\`. Reach for it eagerly
|
|
33722
33602
|
whenever you have screenshots worth showing: it renders the whole decisive set inline, which a terminal
|
|
33723
33603
|
agent cannot do.`,
|
|
33604
|
+
// § Bounded native delegation describes the NATIVE `spawn_agent` surface, which frizz does not
|
|
33605
|
+
// configure at all. The only `-c` overrides frizz puts on a codex app-server are the frizz MCP mount
|
|
33606
|
+
// and `default_tools_approval_mode` (backend/codex-mcp.ts `codexAppServerArgv`, the single argv
|
|
33607
|
+
// builder for all four spawn sites). Until 2026-08-26 this section opened by claiming frizz "requests
|
|
33608
|
+
// the V2 surface with process-scoped, version-gated CLI overrides" — no commit ever added one, so
|
|
33609
|
+
// every codex worker was told frizz did something it does not do. The gate itself was never wrong:
|
|
33610
|
+
// `spawn_agent` carries `model`/`reasoning_effort` natively (parseCodexSubAgentLine reads both off
|
|
33611
|
+
// real rollouts), so reading the live schema is the whole check. Keep this paragraph a statement
|
|
33612
|
+
// about what CODEX ships, never about what frizz sends.
|
|
33724
33613
|
codex: `## Own one task
|
|
33725
33614
|
|
|
33726
33615
|
You are one top-level Frizz worker, not the dashboard's portfolio orchestrator. Own only the TASK
|
|
@@ -33776,11 +33665,12 @@ for the title signal: H1 parsing exists only for compatibility with old transcri
|
|
|
33776
33665
|
|
|
33777
33666
|
When delegation is explicitly authorized:
|
|
33778
33667
|
|
|
33779
|
-
1. Frizz
|
|
33780
|
-
|
|
33668
|
+
1. Frizz sends NO config override for the native spawn surface \u2014 the only \`-c\` overrides on the
|
|
33669
|
+
app-server mount frizz's own MCP server and pre-approve its tools \u2014 so what the spawn tool accepts
|
|
33670
|
+
is whatever this Codex release happens to ship. Use the active native spawn tool only when its
|
|
33781
33671
|
runtime schema exposes both \`model\` and
|
|
33782
|
-
\`reasoning_effort\`.
|
|
33783
|
-
|
|
33672
|
+
\`reasoning_effort\`. Codex may show a runtime-normalized tool name, so trust the callable schema
|
|
33673
|
+
rather than the name you expect. Pass both fields on every dispatch; omit \`agent_type\` for
|
|
33784
33674
|
ordinary compute routing. Choose the child's CONTEXT deliberately \u2014 the schema's context-fork
|
|
33785
33675
|
control goes BOTH ways, under whatever name the live schema exposes it (current Codex: \`fork_turns\`;
|
|
33786
33676
|
older builds: \`fork_context\`). Pass NO parent history (\`fork_turns: "none"\`) for an INDEPENDENT
|
|
@@ -33790,10 +33680,10 @@ When delegation is explicitly authorized:
|
|
|
33790
33680
|
conversation so far is load-bearing. Fresh is the default for frizz work; a fork is heavier and
|
|
33791
33681
|
carries your assumptions with it. The schema default is a FULL fork, so an unset control silently
|
|
33792
33682
|
hands the child everything \u2014 set it explicitly either way, and when you do fork, verify the child's
|
|
33793
|
-
effective model/effort from native metadata rather than assuming
|
|
33794
|
-
invent a field the schema lacks, and a missing or unfamiliar context-fork control is NOT by
|
|
33795
|
-
a routing failure (keep such a child self-contained and note it). Only
|
|
33796
|
-
being
|
|
33683
|
+
effective model/effort from native metadata rather than assuming the fields you passed survived.
|
|
33684
|
+
Never invent a field the schema lacks, and a missing or unfamiliar context-fork control is NOT by
|
|
33685
|
+
itself a routing failure (keep such a child self-contained and note it). Only
|
|
33686
|
+
\`model\`/\`reasoning_effort\` being absent from the live schema makes the session degraded/no-routing:
|
|
33797
33687
|
do not silently fall back to inherited compute. Finish inline when independence is not required,
|
|
33798
33688
|
or report the unmet gate.
|
|
33799
33689
|
2. Give each child one self-contained, non-overlapping outcome with its paths, authority, evidence or
|
|
@@ -34061,7 +33951,7 @@ function connectClaudeBroker(socketPath, handlers, options = {}) {
|
|
|
34061
33951
|
pendingSkills.delete(frame.requestId);
|
|
34062
33952
|
clearTimeout(entry.timer);
|
|
34063
33953
|
if (typeof frame.error === "string" && frame.error) entry.fail(new Error(frame.error));
|
|
34064
|
-
else entry.settle((Array.isArray(frame.skills) ? frame.skills : []).filter((s) => typeof s?.name === "string" && typeof s?.description === "string"));
|
|
33954
|
+
else entry.settle((Array.isArray(frame.skills) ? frame.skills : []).filter((s) => typeof s?.name === "string" && typeof s?.description === "string").map((s) => ({ name: s.name, description: s.description, source: SKILL_SOURCES.has(s.source) ? s.source : void 0 })));
|
|
34065
33955
|
break;
|
|
34066
33956
|
}
|
|
34067
33957
|
}
|
|
@@ -34209,9 +34099,12 @@ function connectClaudeBroker(socketPath, handlers, options = {}) {
|
|
|
34209
34099
|
}
|
|
34210
34100
|
};
|
|
34211
34101
|
}
|
|
34102
|
+
var SKILL_SOURCES;
|
|
34212
34103
|
var init_claude_broker_client = __esm({
|
|
34213
34104
|
"packages/server/src/backend/claude-broker-client.ts"() {
|
|
34214
34105
|
"use strict";
|
|
34106
|
+
init_src();
|
|
34107
|
+
SKILL_SOURCES = new Set(ThreadSkillSource.options);
|
|
34215
34108
|
}
|
|
34216
34109
|
});
|
|
34217
34110
|
|