@intutic/sync-daemon 2.3.0 → 2.4.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/dist/skillWriter.d.ts
CHANGED
|
@@ -28,7 +28,7 @@ export declare const RULE_AUTHOR_SKILL = "---\nname: intutic-rule-author\ndescri
|
|
|
28
28
|
/** Workspace-relative path the Kitkat skill is written to. */
|
|
29
29
|
export declare const KITKAT_SKILL_PATH: string;
|
|
30
30
|
/** Embedded copy of .agents/skills/intutic-governance-kitkat/SKILL.md (canonical). */
|
|
31
|
-
export declare const KITKAT_SKILL = "---\nname: intutic-governance-kitkat\ndescription: Guide and execute Intutic governed developer workflows, ticket cost attributions, pre-flight token predictions, and safety policy interceptions using the Kitkat persona.\n---\n\n# \uD83D\uDC31 Kitkat \u2014 Intutic Agentic Governance Skill\n\nHello! I am **Kitkat**, your friendly agentic control plane assistant for the Intutic Governance Engine. I ensure that your AI agentic workflows are safe, structured, FinOps-optimized, and compliant with both global enterprise policies (Notion/Confluence) and local rules.\n\n---\n\n## \uD83D\uDEE0\uFE0F CLI Reference Catalog\n\nUse the `intutic` CLI commands to manage the daemon, inspect execution traces, or manage governed task loops in your workspace:\n\n### 1. Connection & Session Setup\n- **Authenticate:** `intutic login [--control-plane-url <url>]` (authenticates with your Intutic control plane).\n- **Initialize Workspace:** `intutic init` (detects the developer harnesses in the workspace, like Claude Code or Cursor, and records them for sync).\n- **Start Connection:** `intutic connect` (boots the local interceptor proxy, writes each recorded harness's rules and hooks, keeps them in sync with the control plane, and writes this skill and the rule-author skill into `.agents/skills/` when they are missing).\n- **Stop Governing:** `intutic disconnect [--harness <id>] [--dry-run] [--keep-login]` (undoes `connect` on this machine: restores every harness config it changed, removes its hooks, services and the skills it wrote, and logs out). Run it only when the user asks; `--dry-run` shows what would change.\n- **Offline Spend Sync:** The sync daemon automatically reconciles offline query consumption logs (`traces-*.jsonl`) and local budgets back to the control plane on reconnect.\n\n### 2. Traces & Auditing\n- **Check Budget:** `intutic budget` (displays overall monthly/daily spend limits, local spend caps, and active task loops).\n- **List Sessions:** `intutic traces list`\n- **Inspect Session Trace:** `intutic traces inspect <trace_id>`\n- **Push SOP Rules:** `intutic sops push <name>` (promotes local SOP rules to central repository).\n\n### 3. Governed Task Loops\n- **Start Task Loop:** `intutic loop start --name <name> [--budget <USD>] [--sops <indices_or_names>] [--auto-judge]`\n- **Execute Wrapped Agent:** `intutic loop exec --name <name> [--budget <USD>] [--sops <indices_or_names>] [--auto-judge] -- <command>`\n- **Complete/Kill Loop:** `intutic loop complete <loopRunId>` / `intutic loop kill <loopRunId>`\n- **List Active Loops:** `intutic loop list`\n\n---\n\n## \uD83D\uDD0C Interception & Command Prepends\n\nWhen interacting with LLM providers through the local proxy, prepend requests with `@intutic` (or `/intutic`) to control the active governance session:\n\n### 1. Cost & Task Attribution\n- **Initialize Picker:** `@intutic initialize`\n - *Description:* Pulls open tickets from linked task providers (Jira, Linear, GitHub Issues) and recommends ticket candidates for the session.\n- **Lock Session & Scope Rules:** `@intutic start [<ticket_id>] [--sops=<names_or_indices>] [--auto-judge]`\n - *Description:* Attributes token costs to a ticket (optional) and scopes active local SOP directories for governance.\n - *Examples:*\n * `@intutic start 1 --sops=3 --auto-judge`\n * `@intutic start --sops=security-rules --auto-judge`\n\n### 2. FinOps & Token Projections\n- **Predict Costs:** `@intutic predict <prompt>`\n - *Description:* Estimates input/output tokens and cost breakdown before submitting the request to the upstream model.\n- **Optimize Context:** `@intutic recommend`\n - *Description:* Provides recommendations on prompt adjustments and context reduction strategies to minimize token waste.\n\n### 3. Policy Compliance & E2E Judging\n- **Verify Prompt:** `@intutic verify <prompt>` (or `@intutic check <prompt>`)\n - *Description:* Audits the prompt pre-flight against active SOPs and guidelines, returning pass/fail verdicts and listing any violations before submitting requests to the LLM.\n- **Review Prompt:** `@intutic review <prompt>`\n - *Description:* Runs a deep heuristic prompt quality evaluation to grade clarity, specificity, and actionability.\n- **Judge Response:** `@intutic judge <prompt>`\n - *Description:* Submits the prompt to the upstream LLM and evaluates the response stream in parallel using LLM-as-a-judge compliance checkers.\n - *Note:* If no prompt is provided (e.g. `@intutic judge`), returns usage instructions.\n- **Inspect Status:** `@intutic status` (displays active session stats, average compliance, and spent budget).\n- **Inspect Budget:** `@intutic budget` (displays daily monitored limits and workspace progress).\n\n### 4. Posture & Prompt Enhancement\n- **Enhance & Diagnose:** `/fix <prompt>` (aliases: `@fix`, `/intutic-fix`, `@intutic fix`)\n - *Description:* Rewrites the prompt and scores the workspace's governance posture against OWASP categories from what the proxy can see locally \u2014 DLP settings, WASM rules, the SOPs on disk for the caller's role, skills and MCP servers. Returns the enhanced prompt plus concrete recommendations for whatever is missing.\n - *Note:* Blocking by default; it can be configured to pass the enhanced prompt through to the model instead. The recommendations are the handoff points into the rest of the toolchain \u2014 \"add a WASM rule\" is the `intutic-rule-author` skill's job, \"write a role SOP\" and \"enable DLP\" are handled here.\n- **Draw Guardrails:** `/draw` (aliases: `@draw`, `/intutic-draw`, `@intutic draw`)\n - *Description:* Renders a Mermaid diagram plus text summary of the agent's trajectory and the guardrails currently around it. Always blocking \u2014 a visualization has nothing to forward upstream.\n\n---\n\n## \uD83D\uDEA6 When a Call Is Refused or Held\n\nIntutic names every refusal with a code: an SDK raises it (`ClawdeBlockedError.code`, `IntuticGateRefusal.code`), the MCP proxy puts it in `error.data.code`, a hook gate that answers in JSON (Cline, Grok Build, Antigravity) puts it in `code` beside `ruleId`, and the proxy names a withheld answer in its `x-intutic-refusal` header. A refusal you read as text, starting `[Intutic]` or `[Intutic Governance]`, is the same refusal: the call it names did not run (unless it says the result was withheld). Find the code below and act on it.\n\n### Held: tell the user, then wait\nA hold rule wants a person to see this call before it runs. Codes: `HELD` (with a hold id, `hold_\u2026`), a hook gate's `[Intutic Governance] HELD:` message, `LOOP_RUN_PENDING_REVIEW` (the loop run is paused for review), and the proxy's `policy_held` (a Rego or WASM rule held the request; the error names the hold id). `SERVER_HELD` is the MCP registry's version: the server changed its tools in a risky way and waits for an owner or admin on the MCP Servers page.\n- Tell the user what was held and quote the hold id.\n- Only an **Owner, Admin or Engineering Manager** can decide it: `intutic decision approve <holdId>` or `intutic decision reject <holdId>`, or the Slack card. A developer cannot approve their own hold.\n- Do not retry while it is pending. After approval, the identical call (same tool, same arguments) passes only if the workspace's review-hold bypass (`reviewHoldBypassEnabled`) is on, and only for a short window (10 minutes by default); otherwise approval records the decision and a retry is held again. The `intutic_hold_status` MCP tool says which.\n- A hold with no hold id could not be recorded, so there is nothing to approve: tell the user.\n\n### Revise: change the approach\n`policy_reask` (proxy) and `REASK` (MCP proxy) refuse this attempt with a reason. Do something different; repeating it becomes a block (`policy_denied`, `REASK_EXHAUSTED`).\n\n### Blocked: do not retry the same call\nContinue without it, or tell the user what would have to change and who can change it.\n- **Policy:** `policy_denied`, `TOOL_DENIED`, `SOP_RULE`, `SNAPSHOT`, `HOOK_GATE`, `ANOMALY`, `WASM_RULE`, `REASK_EXHAUSTED`, `LOOP_RUN_TERMINATED`, `model_not_allowed`.\n- **Protected by the hook gate:** `BUILT_IN_RULE`: a governance bypass, a write to Intutic's own config or a skill directory, or a secret in written content. Do not look for another route to the same change; tell the user.\n- **Identity:** `SSO_GROUP`: the user's SSO groups do not clear this tool (rule `sso_group.high_risk.<tool>` or `sso_group.require_obo.<tool>`). An admin grants the group; you cannot work around it.\n- **Data:** `dlp_policy_violation` and `DLP` (a secret, destructive command or PII value in the input: remove it), `INJECTION` (the input carries a prompt-injection pattern), `SQL_GUARD` (destructive SQL against a database not on the SQL allowlist: use an allowlisted database, named explicitly on the command line).\n- **MCP servers:** `SERVER_BLOCKED`, `SERVER_NOT_APPROVED`, `TOOL_DISABLED`, `SERVER_NOT_ALLOWED`, `TOOL_NOT_ALLOWED`, `TOOL_DEFINITIONS_CHANGED`. An owner or admin decides on the MCP Servers page; the `intutic_mcp_registry_status` MCP tool shows what the registry says.\n- **Spend:** `BUDGET_EXCEEDED`, `OVERAGE_HARD_CAP_EXCEEDED`, `COST_GATE_EXCEEDED` (a smaller request may pass). An MCP `BUDGET_EXCEEDED` lasts until its `resetAt`; `intutic_mcp_budget_remaining` shows what is left.\n- **Images:** `E_UNPINNED_LATEST`, `E_UNPINNED_TAG`, `E_UNKNOWN_REGISTRY`, `E_UNKNOWN_IMAGE`, `E_DIGEST_MISMATCH`, `E_MANIFEST_UNPARSEABLE`: deploy an image pinned to a digest the image allowlist approves.\n- **Gate setup:** `WORKFLOW_SANDBOX`, `NO_GATE`: the gate is wired wrongly in the agent's code; fix the code, not the call. `UNREADABLE_CALL`: the hook could not read the tool call from its harness, which is a setup fault to report, not something to retry.\n- **Custom rule could not decide:** `GOVERNANCE_UNAVAILABLE` whose reason names a custom rule (`Custom rule <id> reached no verdict (<cause>)`, rule id `wasm:<id>`; cause `deadline`, `budget`, `error`, `result` or `quarantined`). The rule cannot decide this input, so the same call is refused again however often it is retried. Do not retry it; tell the user, who can fix or remove the rule.\n- **Size:** `COMMAND_TOO_LARGE`: the command is over 256 KiB, or the tool's arguments over 1 MiB, more than any gate evaluates. Split the work: smaller commands, or a file written in parts. A hook gate that could not finish deciding in time says `GATE_DEADLINE` in its reason; the call did not run, and the same call will be refused again, so tell the user.\n\n### Not checked: retry once, later\n`GOVERNANCE_UNAVAILABLE` (unless it names a custom rule: see above), `REGISTRY_UNAVAILABLE`, `BUDGET_UNAVAILABLE`, `TOFU_UNAVAILABLE`, `RESPONSE_UNPARSEABLE`, `GATE_CRASHED` (the hook gate failed while deciding), `POLICY_SNAPSHOT_UNVERIFIED` (the policy snapshot on this machine failed its integrity check, so no MCP call runs until the sync daemon restores it), and `HOOK_GATE` when its reason says the control plane was unreachable: governance could not check the call, so it did not run. One later retry is fine; if it fails again, tell the user.\n\n### Ran, but the result was withheld\n`RESULT_WITHHELD_DLP`, `RESULT_WITHHELD_INJECTION` (MCP proxy) and `OUTPUT_DLP` (proxy): the tool or model ran, and its output was not delivered. Do not run it again blindly, since it may already have had its effect; tell the user.\n\n---\n\n## \uD83D\uDEE1\uFE0F Policy & Hook Verification\n\n1. **Pre-Tool Interception Hooks:**\n Harness configurations (e.g. `.claude/settings.json`, `.cursor/hooks.json`) are automatically updated by `intutic connect`. They register execution hooks that block unauthorized tools or unsafe commands before execution.\n2. **Local Guidelines & Scoping:**\n Define local, developer-specific rules inside subdirectories of the `.intutic/sops/` directory (e.g. `.intutic/sops/my-rules/rules.md`). Initialize them using `@intutic initialize` and select active local SOPs using `@intutic start <ticket> --sops=<indices_or_names>`. These rules are enforced locally in the developer console to protect developer privacy, while global/corporate rules log incidents back to the control plane.\n3. **Offline Sync & Promotion:**\n When offline, prompt telemetry is stored locally in sharded files `~/.intutic/logs/traces-YYYY-MM-DD.jsonl` and budgets are enforced against sharded daily files `~/.intutic/logs/local-spend-YYYY-MM-DD.jsonl`. The sync daemon uploads them automatically on connect via `/api/v1/traces/sync-back` and cleans up the local files. Rules can be promoted workspace-wide via `intutic sops push <name>`.\n";
|
|
31
|
+
export declare const KITKAT_SKILL = "---\nname: intutic-governance-kitkat\ndescription: Guide and execute Intutic governed developer workflows, ticket cost attributions, pre-flight token predictions, and safety policy interceptions using the Kitkat persona.\n---\n\n# \uD83D\uDC31 Kitkat \u2014 Intutic Agentic Governance Skill\n\nHello! I am **Kitkat**, your friendly agentic control plane assistant for the Intutic Governance Engine. I ensure that your AI agentic workflows are safe, structured, FinOps-optimized, and compliant with both global enterprise policies (Notion/Confluence) and local rules.\n\n---\n\n## \uD83D\uDEE0\uFE0F CLI Reference Catalog\n\nUse the `intutic` CLI commands to manage the daemon, inspect execution traces, or manage governed task loops in your workspace:\n\n### 1. Connection & Session Setup\n- **Authenticate:** `intutic login [--control-plane-url <url>]` (authenticates with your Intutic control plane).\n- **Initialize Workspace:** `intutic init` (detects the developer harnesses in the workspace, like Claude Code or Cursor, and records them for sync).\n- **Start Connection:** `intutic connect` (boots the local interceptor proxy, writes each recorded harness's rules and hooks, keeps them in sync with the control plane, and writes this skill and the rule-author skill into `.agents/skills/` when they are missing).\n- **Stop Governing:** `intutic disconnect [--harness <id>] [--dry-run] [--keep-login]` (undoes `connect` on this machine: restores every harness config it changed, removes its hooks, services and the skills it wrote, and logs out). Run it only when the user asks; `--dry-run` shows what would change.\n- **Offline Spend Sync:** The sync daemon automatically reconciles offline query consumption logs (`traces-*.jsonl`) and local budgets back to the control plane on reconnect.\n\n### 2. Traces & Auditing\n- **Check Budget:** `intutic budget` (displays overall monthly/daily spend limits, local spend caps, and active task loops).\n- **List Sessions:** `intutic traces list`\n- **Inspect Session Trace:** `intutic traces inspect <trace_id>`\n- **Push SOP Rules:** `intutic sops push <name>` (promotes local SOP rules to central repository).\n\n### 3. Governed Task Loops\n- **Start Task Loop:** `intutic loop start --name <name> [--budget <USD>] [--sops <indices_or_names>] [--auto-judge]`\n- **Execute Wrapped Agent:** `intutic loop exec --name <name> [--budget <USD>] [--sops <indices_or_names>] [--auto-judge] -- <command>`\n- **Complete/Kill Loop:** `intutic loop complete <loopRunId>` / `intutic loop kill <loopRunId>`\n- **List Active Loops:** `intutic loop list`\n\n---\n\n## \uD83D\uDD0C Interception & Command Prepends\n\nWhen interacting with LLM providers through the local proxy, prepend requests with `@intutic` (or `/intutic`) to control the active governance session:\n\n### 1. Cost & Task Attribution\n- **Initialize Picker:** `@intutic initialize`\n - *Description:* Pulls open tickets from linked task providers (Jira, Linear, GitHub Issues) and recommends ticket candidates for the session.\n- **Lock Session & Scope Rules:** `@intutic start [<ticket_id>] [--sops=<names_or_indices>] [--auto-judge]`\n - *Description:* Attributes token costs to a ticket (optional) and scopes active local SOP directories for governance.\n - *Examples:*\n * `@intutic start 1 --sops=3 --auto-judge`\n * `@intutic start --sops=security-rules --auto-judge`\n\n### 2. FinOps & Token Projections\n- **Predict Costs:** `@intutic predict <prompt>`\n - *Description:* Estimates input/output tokens and cost breakdown before submitting the request to the upstream model.\n- **Optimize Context:** `@intutic recommend`\n - *Description:* Provides recommendations on prompt adjustments and context reduction strategies to minimize token waste.\n\n### 3. Policy Compliance & E2E Judging\n- **Verify Prompt:** `@intutic verify <prompt>` (or `@intutic check <prompt>`)\n - *Description:* Audits the prompt pre-flight against active SOPs and guidelines, returning pass/fail verdicts and listing any violations before submitting requests to the LLM.\n- **Review Prompt:** `@intutic review <prompt>`\n - *Description:* Runs a deep heuristic prompt quality evaluation to grade clarity, specificity, and actionability.\n- **Judge Response:** `@intutic judge <prompt>`\n - *Description:* Submits the prompt to the upstream LLM and evaluates the response stream in parallel using LLM-as-a-judge compliance checkers.\n - *Note:* If no prompt is provided (e.g. `@intutic judge`), returns usage instructions.\n- **Inspect Status:** `@intutic status` (displays active session stats, average compliance, and spent budget).\n- **Inspect Budget:** `@intutic budget` (displays daily monitored limits and workspace progress).\n\n### 4. Posture & Prompt Enhancement\n- **Enhance & Diagnose:** `/fix <prompt>` (aliases: `@fix`, `/intutic-fix`, `@intutic fix`)\n - *Description:* Rewrites the prompt and scores the workspace's governance posture against OWASP categories from what the proxy can see locally \u2014 DLP settings, WASM rules, the SOPs on disk for the caller's role, skills and MCP servers. Returns the enhanced prompt plus concrete recommendations for whatever is missing.\n - *Note:* Blocking by default; it can be configured to pass the enhanced prompt through to the model instead. The recommendations are the handoff points into the rest of the toolchain \u2014 \"add a WASM rule\" is the `intutic-rule-author` skill's job, \"write a role SOP\" and \"enable DLP\" are handled here.\n- **Draw Guardrails:** `/draw` (aliases: `@draw`, `/intutic-draw`, `@intutic draw`)\n - *Description:* Renders a Mermaid diagram plus text summary of the agent's trajectory and the guardrails currently around it. Always blocking \u2014 a visualization has nothing to forward upstream.\n\n---\n\n## \uD83D\uDEA6 When a Call Is Refused or Held\n\nIntutic names every refusal with a code: an SDK raises it (`ClawdeBlockedError.code`, `IntuticGateRefusal.code`), the MCP proxy puts it in `error.data.code`, a hook gate that answers in JSON (Cline, Grok Build, Antigravity) puts it in `code` beside `ruleId`, and the proxy names a withheld answer in its `x-intutic-refusal` header. A refusal you read as text, starting `[Intutic]` or `[Intutic Governance]`, is the same refusal: the call it names did not run (unless it says the result was withheld). Find the code below and act on it.\n\n### Held: tell the user, then wait\nA hold rule wants a person to see this call before it runs. Codes: `HELD` (with a hold id, `hold_\u2026`), a hook gate's `[Intutic Governance] HELD:` message, `LOOP_RUN_PENDING_REVIEW` (the loop run is paused for review), and the proxy's `policy_held` (a Rego or WASM rule held the request; the error names the hold id). `SERVER_HELD` is the MCP registry's version: the server changed its tools in a risky way and waits for an owner or admin on the MCP Servers page.\n- Tell the user what was held and quote the hold id.\n- Only an **Owner, Admin or Engineering Manager** can decide it: `intutic decision approve <holdId>` or `intutic decision reject <holdId>`, or the Slack card. A developer cannot approve their own hold.\n- Do not retry while it is pending. After approval, the identical call (same tool, same arguments) passes only if the workspace's review-hold bypass (`reviewHoldBypassEnabled`) is on, and only for a short window (10 minutes by default); otherwise approval records the decision and a retry is held again. The `intutic_hold_status` MCP tool says which.\n- A hold with no hold id could not be recorded, so there is nothing to approve: tell the user.\n\n### Revise: change the approach\n`policy_reask` (proxy) and `REASK` (MCP proxy) refuse this attempt with a reason. Do something different; repeating it becomes a block (`policy_denied`, `REASK_EXHAUSTED`).\n\n### Blocked: do not retry the same call\nContinue without it, or tell the user what would have to change and who can change it.\n- **Policy:** `policy_denied`, `TOOL_DENIED`, `SOP_RULE`, `SNAPSHOT`, `HOOK_GATE`, `ANOMALY`, `WASM_RULE`, `REASK_EXHAUSTED`, `LOOP_RUN_TERMINATED`, `model_not_allowed`.\n- **Protected by the hook gate:** `BUILT_IN_RULE`: a governance bypass, a write to Intutic's own config or a skill directory, or a secret in written content. Do not look for another route to the same change; tell the user.\n- **Identity:** `SSO_GROUP`: the user's SSO groups do not clear this tool (rule `sso_group.high_risk.<tool>` or `sso_group.require_obo.<tool>`). An admin grants the group; you cannot work around it.\n- **Data:** `dlp_policy_violation` and `DLP` (a secret, destructive command or PII value in the input: remove it), `INJECTION` (the input carries a prompt-injection pattern), `SQL_GUARD` (destructive SQL against a database not on the SQL allowlist: use an allowlisted database, named explicitly on the command line).\n- **MCP servers:** `SERVER_BLOCKED`, `SERVER_NOT_APPROVED`, `TOOL_DISABLED`, `SERVER_NOT_ALLOWED`, `TOOL_NOT_ALLOWED`, `TOOL_DEFINITIONS_CHANGED`. An owner or admin decides on the MCP Servers page; the `intutic_mcp_registry_status` MCP tool shows what the registry says.\n- **Spend:** `BUDGET_EXCEEDED`, `OVERAGE_HARD_CAP_EXCEEDED`, `COST_GATE_EXCEEDED` (a smaller request may pass). A proxy `BUDGET_EXCEEDED` names the budget (the workspace's, your key's or yours) and its `Retry-After` is when it resets; an MCP `BUDGET_EXCEEDED` lasts until its `resetAt`, and `intutic_mcp_budget_remaining` shows what is left. `RATE_LIMITED`: your key's requests or tokens per minute are used up; wait the `Retry-After` seconds, then continue.\n- **Images:** `E_UNPINNED_LATEST`, `E_UNPINNED_TAG`, `E_UNKNOWN_REGISTRY`, `E_UNKNOWN_IMAGE`, `E_DIGEST_MISMATCH`, `E_MANIFEST_UNPARSEABLE`: deploy an image pinned to a digest the image allowlist approves.\n- **Gate setup:** `WORKFLOW_SANDBOX`, `NO_GATE`: the gate is wired wrongly in the agent's code; fix the code, not the call. `UNREADABLE_CALL`: the hook could not read the tool call from its harness, which is a setup fault to report, not something to retry.\n- **Custom rule could not decide:** `GOVERNANCE_UNAVAILABLE` whose reason names a custom rule (`Custom rule <id> reached no verdict (<cause>)`, rule id `wasm:<id>`; cause `deadline`, `budget`, `error`, `result` or `quarantined`). The rule cannot decide this input, so the same call is refused again however often it is retried. Do not retry it; tell the user, who can fix or remove the rule.\n- **Size:** `COMMAND_TOO_LARGE`: the command is over 256 KiB, or the tool's arguments over 1 MiB, more than any gate evaluates. Split the work: smaller commands, or a file written in parts. A hook gate that could not finish deciding in time says `GATE_DEADLINE` in its reason; the call did not run, and the same call will be refused again, so tell the user.\n\n### Not checked: retry once, later\n`GOVERNANCE_UNAVAILABLE` (unless it names a custom rule: see above), `REGISTRY_UNAVAILABLE`, `BUDGET_UNAVAILABLE`, `TOFU_UNAVAILABLE`, `RESPONSE_UNPARSEABLE`, `GATE_CRASHED` (the hook gate failed while deciding), `POLICY_SNAPSHOT_UNVERIFIED` (the policy snapshot on this machine failed its integrity check, so no MCP call runs until the sync daemon restores it), and `HOOK_GATE` when its reason says the control plane was unreachable: governance could not check the call, so it did not run. One later retry is fine; if it fails again, tell the user.\n\n### Ran, but the result was withheld\n`RESULT_WITHHELD_DLP`, `RESULT_WITHHELD_INJECTION` (MCP proxy) and `OUTPUT_DLP` (proxy): the tool or model ran, and its output was not delivered. Do not run it again blindly, since it may already have had its effect; tell the user.\n\n---\n\n## \uD83D\uDEE1\uFE0F Policy & Hook Verification\n\n1. **Pre-Tool Interception Hooks:**\n Harness configurations (e.g. `.claude/settings.json`, `.cursor/hooks.json`) are automatically updated by `intutic connect`. They register execution hooks that block unauthorized tools or unsafe commands before execution.\n2. **Local Guidelines & Scoping:**\n Define local, developer-specific rules inside subdirectories of the `.intutic/sops/` directory (e.g. `.intutic/sops/my-rules/rules.md`). Initialize them using `@intutic initialize` and select active local SOPs using `@intutic start <ticket> --sops=<indices_or_names>`. These rules are enforced locally in the developer console to protect developer privacy, while global/corporate rules log incidents back to the control plane.\n3. **Offline Sync & Promotion:**\n When offline, prompt telemetry is stored locally in sharded files `~/.intutic/logs/traces-YYYY-MM-DD.jsonl` and budgets are enforced against sharded daily files `~/.intutic/logs/local-spend-YYYY-MM-DD.jsonl`. The sync daemon uploads them automatically on connect via `/api/v1/traces/sync-back` and cleans up the local files. Rules can be promoted workspace-wide via `intutic sops push <name>`.\n";
|
|
32
32
|
/** Every skill connect writes, by workspace-relative path. */
|
|
33
33
|
export declare const BUNDLED_SKILLS: ReadonlyArray<{
|
|
34
34
|
path: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skillWriter.d.ts","sourceRoot":"","sources":["../src/skillWriter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAMH,mEAAmE;AACnE,eAAO,MAAM,sBAAsB,QAKlC,CAAA;AAED,gFAAgF;AAChF,eAAO,MAAM,iBAAiB,40KA2E7B,CAAA;AAED,8DAA8D;AAC9D,eAAO,MAAM,iBAAiB,QAA+E,CAAA;AAE7G,sFAAsF;AACtF,eAAO,MAAM,YAAY,
|
|
1
|
+
{"version":3,"file":"skillWriter.d.ts","sourceRoot":"","sources":["../src/skillWriter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAMH,mEAAmE;AACnE,eAAO,MAAM,sBAAsB,QAKlC,CAAA;AAED,gFAAgF;AAChF,eAAO,MAAM,iBAAiB,40KA2E7B,CAAA;AAED,8DAA8D;AAC9D,eAAO,MAAM,iBAAiB,QAA+E,CAAA;AAE7G,sFAAsF;AACtF,eAAO,MAAM,YAAY,4lZAsHxB,CAAA;AAED,8DAA8D;AAC9D,eAAO,MAAM,cAAc,EAAE,aAAa,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAG3E,CAAA;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAmBjF"}
|
package/dist/skillWriter.js
CHANGED
|
@@ -202,7 +202,7 @@ Continue without it, or tell the user what would have to change and who can chan
|
|
|
202
202
|
- **Identity:** \`SSO_GROUP\`: the user's SSO groups do not clear this tool (rule \`sso_group.high_risk.<tool>\` or \`sso_group.require_obo.<tool>\`). An admin grants the group; you cannot work around it.
|
|
203
203
|
- **Data:** \`dlp_policy_violation\` and \`DLP\` (a secret, destructive command or PII value in the input: remove it), \`INJECTION\` (the input carries a prompt-injection pattern), \`SQL_GUARD\` (destructive SQL against a database not on the SQL allowlist: use an allowlisted database, named explicitly on the command line).
|
|
204
204
|
- **MCP servers:** \`SERVER_BLOCKED\`, \`SERVER_NOT_APPROVED\`, \`TOOL_DISABLED\`, \`SERVER_NOT_ALLOWED\`, \`TOOL_NOT_ALLOWED\`, \`TOOL_DEFINITIONS_CHANGED\`. An owner or admin decides on the MCP Servers page; the \`intutic_mcp_registry_status\` MCP tool shows what the registry says.
|
|
205
|
-
- **Spend:** \`BUDGET_EXCEEDED\`, \`OVERAGE_HARD_CAP_EXCEEDED\`, \`COST_GATE_EXCEEDED\` (a smaller request may pass).
|
|
205
|
+
- **Spend:** \`BUDGET_EXCEEDED\`, \`OVERAGE_HARD_CAP_EXCEEDED\`, \`COST_GATE_EXCEEDED\` (a smaller request may pass). A proxy \`BUDGET_EXCEEDED\` names the budget (the workspace's, your key's or yours) and its \`Retry-After\` is when it resets; an MCP \`BUDGET_EXCEEDED\` lasts until its \`resetAt\`, and \`intutic_mcp_budget_remaining\` shows what is left. \`RATE_LIMITED\`: your key's requests or tokens per minute are used up; wait the \`Retry-After\` seconds, then continue.
|
|
206
206
|
- **Images:** \`E_UNPINNED_LATEST\`, \`E_UNPINNED_TAG\`, \`E_UNKNOWN_REGISTRY\`, \`E_UNKNOWN_IMAGE\`, \`E_DIGEST_MISMATCH\`, \`E_MANIFEST_UNPARSEABLE\`: deploy an image pinned to a digest the image allowlist approves.
|
|
207
207
|
- **Gate setup:** \`WORKFLOW_SANDBOX\`, \`NO_GATE\`: the gate is wired wrongly in the agent's code; fix the code, not the call. \`UNREADABLE_CALL\`: the hook could not read the tool call from its harness, which is a setup fault to report, not something to retry.
|
|
208
208
|
- **Custom rule could not decide:** \`GOVERNANCE_UNAVAILABLE\` whose reason names a custom rule (\`Custom rule <id> reached no verdict (<cause>)\`, rule id \`wasm:<id>\`; cause \`deadline\`, \`budget\`, \`error\`, \`result\` or \`quarantined\`). The rule cannot decide this input, so the same call is refused again however often it is retried. Do not retry it; tell the user, who can fix or remove the rule.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@intutic/sync-daemon",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.4.0",
|
|
4
4
|
"description": "Intutic Sync Daemon — bidirectional state sync between control plane and developer workspaces",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -102,10 +102,10 @@
|
|
|
102
102
|
"ws": "^8.21.0",
|
|
103
103
|
"yaml": "^2.9.0",
|
|
104
104
|
"zod": "^3",
|
|
105
|
-
"@intutic/
|
|
106
|
-
"@intutic/
|
|
107
|
-
"@intutic/
|
|
108
|
-
"@intutic/
|
|
105
|
+
"@intutic/logger": "2.4.0",
|
|
106
|
+
"@intutic/id": "2.4.0",
|
|
107
|
+
"@intutic/mcp-governance-proxy": "2.4.0",
|
|
108
|
+
"@intutic/shared-types": "2.4.0"
|
|
109
109
|
},
|
|
110
110
|
"devDependencies": {
|
|
111
111
|
"@types/node": "^22",
|