@skrr-ai/cli 0.1.126 → 0.1.128

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (123) hide show
  1. package/dist/base-command.d.ts +23 -0
  2. package/dist/base-command.js +72 -0
  3. package/dist/commands/agents/chat.js +7 -0
  4. package/dist/commands/agents/goals/list.d.ts +2 -2
  5. package/dist/commands/agents/goals/list.js +2 -2
  6. package/dist/commands/commitments/action-history.js +1 -1
  7. package/dist/commands/commitments/cases.js +3 -3
  8. package/dist/commands/commitments/check-now.d.ts +10 -2
  9. package/dist/commands/commitments/check-now.js +53 -3
  10. package/dist/commands/commitments/create.d.ts +6 -14
  11. package/dist/commands/commitments/create.js +61 -6
  12. package/dist/commands/commitments/doctor.js +3 -1
  13. package/dist/commands/commitments/effective-policy.d.ts +11 -1
  14. package/dist/commands/commitments/effective-policy.js +84 -4
  15. package/dist/commands/commitments/hypotheses.js +12 -12
  16. package/dist/commands/commitments/next-tick.js +5 -0
  17. package/dist/commands/commitments/observations.js +18 -17
  18. package/dist/commands/commitments/pack/list.js +2 -1
  19. package/dist/commands/commitments/pack/plan.d.ts +6 -0
  20. package/dist/commands/commitments/pack/plan.js +19 -0
  21. package/dist/commands/commitments/preflight.d.ts +19 -0
  22. package/dist/commands/commitments/preflight.js +108 -10
  23. package/dist/commands/commitments/trigger-status.js +8 -0
  24. package/dist/commands/commitments/update.d.ts +1 -0
  25. package/dist/commands/commitments/update.js +45 -4
  26. package/dist/commands/commitments/wake-capabilities.js +13 -0
  27. package/dist/commands/compass/archive.js +4 -0
  28. package/dist/commands/compass/commitments.js +15 -1
  29. package/dist/commands/compass/create.js +11 -3
  30. package/dist/commands/compass/effective-policy.d.ts +1 -0
  31. package/dist/commands/compass/effective-policy.js +8 -7
  32. package/dist/commands/compass/revert.d.ts +8 -0
  33. package/dist/commands/compass/revert.js +25 -1
  34. package/dist/commands/compass/revisions.d.ts +2 -0
  35. package/dist/commands/compass/revisions.js +18 -2
  36. package/dist/commands/compass/tactic.d.ts +5 -3
  37. package/dist/commands/compass/tactic.js +8 -7
  38. package/dist/commands/compass/update.js +19 -3
  39. package/dist/commands/followups/act.js +1 -1
  40. package/dist/commands/followups/cancel.js +13 -0
  41. package/dist/commands/followups/observability.js +20 -1
  42. package/dist/commands/followups/plans/create.js +12 -1
  43. package/dist/commands/followups/show.js +13 -0
  44. package/dist/commands/followups/watch.js +1 -1
  45. package/dist/commands/goals/create.d.ts +1 -0
  46. package/dist/commands/goals/create.js +4 -1
  47. package/dist/commands/goals/planner-config.d.ts +11 -0
  48. package/dist/commands/goals/planner-config.js +16 -0
  49. package/dist/commands/goals/revisions.js +3 -19
  50. package/dist/commands/machines/update.d.ts +5 -3
  51. package/dist/commands/machines/update.js +70 -9
  52. package/dist/commands/northstars/create.js +3 -1
  53. package/dist/commands/northstars/governance/configure.d.ts +4 -0
  54. package/dist/commands/northstars/governance/configure.js +75 -9
  55. package/dist/commands/northstars/intents/decide.d.ts +6 -0
  56. package/dist/commands/northstars/intents/decide.js +69 -15
  57. package/dist/commands/northstars/intents/list.d.ts +2 -1
  58. package/dist/commands/northstars/intents/list.js +15 -5
  59. package/dist/commands/northstars/intents.d.ts +26 -0
  60. package/dist/commands/northstars/intents.js +49 -0
  61. package/dist/commands/northstars/list.d.ts +1 -0
  62. package/dist/commands/northstars/list.js +24 -3
  63. package/dist/commands/northstars/recommendations/list.d.ts +1 -1
  64. package/dist/commands/northstars/recommendations/list.js +3 -3
  65. package/dist/commands/northstars/recommendations.d.ts +19 -0
  66. package/dist/commands/northstars/recommendations.js +42 -0
  67. package/dist/commands/northstars/review-now.d.ts +1 -0
  68. package/dist/commands/northstars/review-now.js +10 -4
  69. package/dist/commands/northstars/reviews.d.ts +1 -0
  70. package/dist/commands/northstars/reviews.js +19 -3
  71. package/dist/commands/northstars/update.js +8 -1
  72. package/dist/commands/proposals/list.js +11 -2
  73. package/dist/commands/proposals/show.js +9 -1
  74. package/dist/commands/spaces/auto-executor/preview.d.ts +14 -1
  75. package/dist/commands/spaces/auto-executor/preview.js +35 -1
  76. package/dist/commands/spaces/auto-executor/run.d.ts +17 -0
  77. package/dist/commands/spaces/auto-executor/run.js +60 -2
  78. package/dist/commands/spaces/files/upload.js +1 -2
  79. package/dist/commands/spaces/index.js +23 -0
  80. package/dist/commands/spaces/revisions.js +3 -2
  81. package/dist/commands/tasks/revisions.js +3 -2
  82. package/dist/commands/triggers/fire-detail.js +2 -0
  83. package/dist/generated/agent-guides.json +69 -69
  84. package/dist/lib/agentic-stream.d.ts +9 -0
  85. package/dist/lib/agentic-stream.js +14 -0
  86. package/dist/lib/command-miss.js +11 -2
  87. package/dist/lib/commitment-attention-copy.d.ts +96 -0
  88. package/dist/lib/commitment-attention-copy.js +209 -0
  89. package/dist/lib/commitment-loop-status.d.ts +6 -0
  90. package/dist/lib/commitment-loop-status.js +16 -6
  91. package/dist/lib/commitments.d.ts +88 -0
  92. package/dist/lib/commitments.js +188 -0
  93. package/dist/lib/compass-body-help.d.ts +20 -0
  94. package/dist/lib/compass-body-help.js +61 -0
  95. package/dist/lib/compass-refusals.d.ts +35 -0
  96. package/dist/lib/compass-refusals.js +50 -0
  97. package/dist/lib/compasses.d.ts +80 -4
  98. package/dist/lib/compasses.js +232 -12
  99. package/dist/lib/followups.d.ts +22 -1
  100. package/dist/lib/followups.js +21 -1
  101. package/dist/lib/format.d.ts +11 -0
  102. package/dist/lib/format.js +29 -0
  103. package/dist/lib/initiatives.d.ts +9 -2
  104. package/dist/lib/initiatives.js +13 -2
  105. package/dist/lib/machines.d.ts +14 -1
  106. package/dist/lib/machines.js +24 -0
  107. package/dist/lib/northstars.d.ts +158 -24
  108. package/dist/lib/northstars.js +538 -26
  109. package/dist/lib/proposal-decision-command.js +21 -1
  110. package/dist/lib/proposals.d.ts +26 -1
  111. package/dist/lib/proposals.js +163 -0
  112. package/dist/lib/rate-limit-retry.d.ts +5 -0
  113. package/dist/lib/rate-limit-retry.js +19 -0
  114. package/dist/lib/revision-actor.d.ts +2 -0
  115. package/dist/lib/revision-actor.js +16 -0
  116. package/dist/lib/roles.d.ts +1 -1
  117. package/dist/lib/space-charter.js +9 -0
  118. package/dist/lib/task-asset-upload.js +1 -2
  119. package/dist/lib/triggers.d.ts +33 -1
  120. package/dist/lib/triggers.js +77 -3
  121. package/dist/node_modules/@skrr-ai/data-provider/index.js +7537 -7474
  122. package/oclif.manifest.json +357 -34
  123. package/package.json +4 -4
@@ -375,10 +375,10 @@
375
375
  "id": "commitments",
376
376
  "title": "Commitments and acting later",
377
377
  "readWhen": "you make something happen later, repeatedly or continuously, or give an Agent a standing responsibility",
378
- "version": 3,
378
+ "version": 4,
379
379
  "routed": true,
380
380
  "aliases": [],
381
- "tokens": 1168,
381
+ "tokens": 1169,
382
382
  "sections": [
383
383
  {
384
384
  "id": "model",
@@ -410,7 +410,7 @@
410
410
  "id": "authoring",
411
411
  "title": "Write a Commitment: sources, keys, cadence and budgets",
412
412
  "readWhen": "you draft or change a Commitment's contract: what it watches, how often, where its work goes, what it may spend",
413
- "tokens": 918,
413
+ "tokens": 1088,
414
414
  "aliases": [],
415
415
  "explains": [
416
416
  "COMMITMENT_MODE_RETIRED",
@@ -462,7 +462,7 @@
462
462
  "id": "always-on",
463
463
  "title": "Turn it on: activation and Always-On",
464
464
  "readWhen": "a Commitment must start waking on its own, or has stopped waking",
465
- "tokens": 413,
465
+ "tokens": 524,
466
466
  "aliases": [],
467
467
  "explains": [
468
468
  "COMMITMENT_ACTIVATION_BLOCKED",
@@ -474,7 +474,7 @@
474
474
  "id": "governance",
475
475
  "title": "Compass and Northstar: what each may change",
476
476
  "readWhen": "a Commitment is bound to a Compass or belongs to a Northstar, and you must know what either may change",
477
- "tokens": 399,
477
+ "tokens": 455,
478
478
  "aliases": [],
479
479
  "explains": [
480
480
  "COMMITMENT_COMPASS_IMMUTABLE"
@@ -709,8 +709,8 @@
709
709
  ]
710
710
  }
711
711
  ],
712
- "hash": "3581ad4744d3aae5df82a9358ddb6f87e823b4928104006581e16b3a4d821b2e",
713
- "tokens": 544
712
+ "hash": "6d23de37b320e5257e7e2400c36bfc79063c76c2e3984771b96a90727e95980d",
713
+ "tokens": 545
714
714
  },
715
715
  "routedIndex": {
716
716
  "level": "index",
@@ -1088,10 +1088,10 @@
1088
1088
  "id": "commitments",
1089
1089
  "title": "Commitments and acting later",
1090
1090
  "readWhen": "you make something happen later, repeatedly or continuously, or give an Agent a standing responsibility",
1091
- "version": 3,
1091
+ "version": 4,
1092
1092
  "routed": true,
1093
1093
  "aliases": [],
1094
- "tokens": 1168,
1094
+ "tokens": 1169,
1095
1095
  "sections": [
1096
1096
  {
1097
1097
  "id": "model",
@@ -1123,7 +1123,7 @@
1123
1123
  "id": "authoring",
1124
1124
  "title": "Write a Commitment: sources, keys, cadence and budgets",
1125
1125
  "readWhen": "you draft or change a Commitment's contract: what it watches, how often, where its work goes, what it may spend",
1126
- "tokens": 918,
1126
+ "tokens": 1088,
1127
1127
  "aliases": [],
1128
1128
  "explains": [
1129
1129
  "COMMITMENT_MODE_RETIRED",
@@ -1175,7 +1175,7 @@
1175
1175
  "id": "always-on",
1176
1176
  "title": "Turn it on: activation and Always-On",
1177
1177
  "readWhen": "a Commitment must start waking on its own, or has stopped waking",
1178
- "tokens": 413,
1178
+ "tokens": 524,
1179
1179
  "aliases": [],
1180
1180
  "explains": [
1181
1181
  "COMMITMENT_ACTIVATION_BLOCKED",
@@ -1187,7 +1187,7 @@
1187
1187
  "id": "governance",
1188
1188
  "title": "Compass and Northstar: what each may change",
1189
1189
  "readWhen": "a Commitment is bound to a Compass or belongs to a Northstar, and you must know what either may change",
1190
- "tokens": 399,
1190
+ "tokens": 455,
1191
1191
  "aliases": [],
1192
1192
  "explains": [
1193
1193
  "COMMITMENT_COMPASS_IMMUTABLE"
@@ -1353,8 +1353,8 @@
1353
1353
  ]
1354
1354
  }
1355
1355
  ],
1356
- "hash": "2f65b076744f03768c49bce61d58f4ee26354c007316777602a3567f3d71f35d",
1357
- "tokens": 493
1356
+ "hash": "c7cd104ee736aa524b486eb8858dce17a2de5f69036c7c61795ce5603ce1246e",
1357
+ "tokens": 494
1358
1358
  },
1359
1359
  "cards": {
1360
1360
  "tasks": {
@@ -1743,12 +1743,12 @@
1743
1743
  "id": "commitments",
1744
1744
  "title": "Commitments and acting later",
1745
1745
  "readWhen": "you make something happen later, repeatedly or continuously, or give an Agent a standing responsibility",
1746
- "version": 3,
1746
+ "version": 4,
1747
1747
  "routed": true,
1748
1748
  "aliases": [],
1749
1749
  "body": "## Concept model\n\n| Noun | Question it answers |\n| --- | --- |\n| **Compass** | What does good look like for this Agent, and what may it never trade away? |\n| **Northstar** | Which Commitments should exist, at what priority and on what budget? |\n| **Commitment** | Which outcome does this Agent keep true, and how does it keep checking? |\n| **Check** | What did one wake of a Commitment see, decide and do? |\n\nA Commitment is not a unit of work. A **Task** is one unit of work and a **Goal** is a dated\noutcome with key results; a Commitment watches both and may create Tasks, and is neither.\n\n## Decide\n\nFive mechanisms make something happen later, and the noun alone does not pick one:\n\n| Mechanism | What it is for | The signal that picks it |\n| --- | --- | --- |\n| **Follow-up** | Coming back to one thing, once or a bounded few times: a reminder, a watch, a check-in, an agreed action | The ask ends: \"look tomorrow\", \"tell me when CI is green\" |\n| **Trigger** | Running the Agent with a set prompt on a schedule, an event, once, or on demand | The person names when, and every run does the same work |\n| **Heartbeat** | Checking in on a conversation, group chat or Space at a frequency that backs off while unread | The person wants regular contact, not an outcome held |\n| **Commitment** | Keeping an outcome true: watched sources, a cadence and a loop that decides when to act | \"Keep X true\", \"watch this metric\": no end, and stale evidence matters |\n| **Workflow** | Running a durable graph of Tasks in order | Repeatable work whose steps depend on each other |\n\nA one-off \"look at it tomorrow\" is a follow-up, never a Commitment. Standing observation is a\nCommitment with a freshness contract, not a recurring trigger or a task board left running.\n\n## Workflow\n\n### Start a Commitment\n\n1. Read the Agent's Commitments first, and change one rather than add a near-duplicate.\n2. Create it and turn it on in one call: the outcome, what it watches, how often it checks, where\n its work goes. Turning it on runs Preflight; a refusal keeps the draft and reports the code,\n reason and fix.\n3. Leave it a draft only when the person asked to see it first.\n4. Read it back, and tell the person what it watches, how often, and whether it is on.\n\n## Authority\n\n| Actor | May do | Only a person may do |\n| --- | --- | --- |\n| Agent | Read the Commitments of an Agent it can view; create one, change it and turn it on; request a check; pause one; decide whether a finding is worth telling the owner | Lift a stop a person made; set or clear a concurrency limit; choose the Task review policy; approve an action proposal or a cadence change; configure a Northstar's governance or decide its intents |\n| Person | Everything in both columns | — |\n\nA Commitment grants no permission: its runs work under the Agent's own. A Check never writes an\nowner-facing message, and a Compass never creates, rewrites, pauses or archives a Commitment. The\nserver cannot always tell an Agent from the person whose login it holds, so an accepted call is\nnot permission: the right-hand column stays a person's.\n\n## Live state\n\n- `skrr commitments list --agent <agent-id>` — an Agent's Commitments, with status and assessment.\n- `skrr commitments show <commitment-id>` — the contract, its next check and the last one.\n- `skrr commitments roster --agent <agent-id>` — each loop: whether it is armed, its next wake, runs today.\n\n## Related guides\n\n- `tasks` — the Tasks a Commitment creates or watches.\n- `spaces` — Goals, and Workflows: durable graphs of Tasks.\n- `agents` — the Agent a Commitment belongs to, and where its runs execute.\n- `communication` — whether, what and how to tell the owner.",
1750
- "hash": "4e2368a7dfc2796743cf92cbc05a7446f343423a299a0e21769ee651b8b8143c",
1751
- "tokens": 1168,
1750
+ "hash": "8a5ab2048ea5a6edacd881d4403a3481798876b4529f8a070d4953eebebd075f",
1751
+ "tokens": 1169,
1752
1752
  "sections": [
1753
1753
  {
1754
1754
  "id": "model",
@@ -1780,7 +1780,7 @@
1780
1780
  "id": "authoring",
1781
1781
  "title": "Write a Commitment: sources, keys, cadence and budgets",
1782
1782
  "readWhen": "you draft or change a Commitment's contract: what it watches, how often, where its work goes, what it may spend",
1783
- "tokens": 918,
1783
+ "tokens": 1088,
1784
1784
  "aliases": [],
1785
1785
  "explains": [
1786
1786
  "COMMITMENT_MODE_RETIRED",
@@ -1832,7 +1832,7 @@
1832
1832
  "id": "always-on",
1833
1833
  "title": "Turn it on: activation and Always-On",
1834
1834
  "readWhen": "a Commitment must start waking on its own, or has stopped waking",
1835
- "tokens": 413,
1835
+ "tokens": 524,
1836
1836
  "aliases": [],
1837
1837
  "explains": [
1838
1838
  "COMMITMENT_ACTIVATION_BLOCKED",
@@ -1844,7 +1844,7 @@
1844
1844
  "id": "governance",
1845
1845
  "title": "Compass and Northstar: what each may change",
1846
1846
  "readWhen": "a Commitment is bound to a Compass or belongs to a Northstar, and you must know what either may change",
1847
- "tokens": 399,
1847
+ "tokens": 455,
1848
1848
  "aliases": [],
1849
1849
  "explains": [
1850
1850
  "COMMITMENT_COMPASS_IMMUTABLE"
@@ -5769,7 +5769,7 @@
5769
5769
  "section": "model",
5770
5770
  "title": "Compass, Northstar, Commitment and the check loop",
5771
5771
  "readWhen": "you must tell a Commitment from a Goal, Task, Compass or Northstar, or read what its loop reports",
5772
- "version": 3,
5772
+ "version": 4,
5773
5773
  "aliases": [],
5774
5774
  "explains": [],
5775
5775
  "body": "Read this when you must tell a Commitment from a Goal, Task, Compass or Northstar, or read what its loop reports.\n\n## Three layers\n\n| Layer | Answers | Changes |\n| --- | --- | --- |\n| **Compass** | What good looks like for this Agent: the states it keeps true, and its autonomy and communication defaults | Rarely, deliberately |\n| **Northstar** | Which Commitments should exist, their priority and their budget | On a review cadence |\n| **Commitment** | One outcome held true by its own check loop | Continuously |\n\nA **Goal** is a dated outcome with key results, and a **Task** is one unit of work. A Commitment\nmay watch a Goal and its Tasks as sources and may create Tasks; it is neither of them.\n\n## The loop\n\n- A **Check** wakes on the cadence or on a watched event. It reads the watched sources, compares\n them with the last snapshot, finds open loops (blocked, stale, waiting on someone, overdue),\n chooses a posture and routes actions. Most checks end quiet, by design.\n- **Reflection** is slower: it measures whether the checks earn their keep and retunes the cadence.\n- Its assessment answers three things separately: the outcome, how fresh the evidence is, and\n how the work is going. A finished run, a patch or a merged PR does not by itself prove the\n outcome, and evidence goes stale.\n\n## Vocabulary\n\n- Kind, fixed when the Commitment is created:\n - `achieve`: a bounded outcome, which may carry a deadline and completes when it is met.\n - `maintain`: a state held true for as long as the Commitment runs; it never completes.\n- Status: `draft`, `active`, `paused`, `completed`, `cancelled`, `archived`.\n- A Check's posture: `stay_quiet`, `record_only`, `act_silently`, `ask_approval`, `nudge_user`, `escalate`.\n\nA `draft` does nothing until it is turned on; `paused` stops new work, and a turn already running\nmay finish.",
@@ -5806,7 +5806,7 @@
5806
5806
  "id": "authoring",
5807
5807
  "title": "Write a Commitment: sources, keys, cadence and budgets",
5808
5808
  "readWhen": "you draft or change a Commitment's contract: what it watches, how often, where its work goes, what it may spend",
5809
- "tokens": 918,
5809
+ "tokens": 1088,
5810
5810
  "aliases": [],
5811
5811
  "explains": [
5812
5812
  "COMMITMENT_MODE_RETIRED",
@@ -5858,7 +5858,7 @@
5858
5858
  "id": "always-on",
5859
5859
  "title": "Turn it on: activation and Always-On",
5860
5860
  "readWhen": "a Commitment must start waking on its own, or has stopped waking",
5861
- "tokens": 413,
5861
+ "tokens": 524,
5862
5862
  "aliases": [],
5863
5863
  "explains": [
5864
5864
  "COMMITMENT_ACTIVATION_BLOCKED",
@@ -5870,7 +5870,7 @@
5870
5870
  "id": "governance",
5871
5871
  "title": "Compass and Northstar: what each may change",
5872
5872
  "readWhen": "a Commitment is bound to a Compass or belongs to a Northstar, and you must know what either may change",
5873
- "tokens": 399,
5873
+ "tokens": 455,
5874
5874
  "aliases": [],
5875
5875
  "explains": [
5876
5876
  "COMMITMENT_COMPASS_IMMUTABLE"
@@ -5885,7 +5885,7 @@
5885
5885
  "section": "later",
5886
5886
  "title": "Choose how to act later",
5887
5887
  "readWhen": "you must choose how to make something happen later, repeatedly or continuously",
5888
- "version": 3,
5888
+ "version": 4,
5889
5889
  "aliases": [],
5890
5890
  "explains": [],
5891
5891
  "body": "Read this when you must choose how to make something happen later, repeatedly or continuously.\n\n## Choose by the ask\n\n- **It ends.** \"Look tomorrow\", \"tell me when the review lands\", \"remind me on Friday\": a\n follow-up. A loop that outlives the ask is the wrong record, however useful it seems.\n- **It repeats on a clock the person named, with the same work each time.** \"Every weekday at 9,\n brief me\": a trigger.\n- **It is contact, not an outcome.** \"Check in with me daily\": a heartbeat, which backs off while\n its messages go unread.\n- **It must stay true.** \"Keep our deploy failure rate low\", \"watch this metric\": a Commitment. It\n needs sources it can read and a cadence, and its loop decides when anything is worth doing.\n- **It is several steps in order.** A Workflow: a graph of Tasks in a Space.\n\nWho asked matters as much as when. A reminder keeps the person's words. A check-in you decided on\nis arranged by you, without asking whether you should.\n\n## Arrange it\n\n| Mechanism | Command |\n| --- | --- |\n| Follow-up | `skrr followups remind`, `skrr followups watch`, `skrr followups checkin` or `skrr followups act` |\n| Trigger | `skrr triggers create` |\n| Heartbeat | `skrr spaces heartbeats create`, for a Space; no command sets up a personal one |\n| Commitment | `skrr commitments create`, which makes a draft |\n| Workflow | `skrr spaces workflows create` |\n\n## Example\n\n\"CI on main has been flaky all week. Look at it tomorrow morning and tell me whether it's still\nred.\" The ask ends tomorrow, so it is a watch follow-up: one look at a set time that reports back.\n\n```bash\nskrr followups watch --subject ci:main --why \"Owner asked whether CI on main is still red\" \\\n --check \"Read the latest CI run on main\" --success \"The latest run on main passed\" \\\n --abort \"No CI run on main within two days\" --wait clock --wait-at <tomorrow-09:00-with-offset>\n```\n\nWhen it wakes, report either answer to the owner and settle it with `skrr followups resolve`.",
@@ -5922,7 +5922,7 @@
5922
5922
  "id": "authoring",
5923
5923
  "title": "Write a Commitment: sources, keys, cadence and budgets",
5924
5924
  "readWhen": "you draft or change a Commitment's contract: what it watches, how often, where its work goes, what it may spend",
5925
- "tokens": 918,
5925
+ "tokens": 1088,
5926
5926
  "aliases": [],
5927
5927
  "explains": [
5928
5928
  "COMMITMENT_MODE_RETIRED",
@@ -5974,7 +5974,7 @@
5974
5974
  "id": "always-on",
5975
5975
  "title": "Turn it on: activation and Always-On",
5976
5976
  "readWhen": "a Commitment must start waking on its own, or has stopped waking",
5977
- "tokens": 413,
5977
+ "tokens": 524,
5978
5978
  "aliases": [],
5979
5979
  "explains": [
5980
5980
  "COMMITMENT_ACTIVATION_BLOCKED",
@@ -5986,7 +5986,7 @@
5986
5986
  "id": "governance",
5987
5987
  "title": "Compass and Northstar: what each may change",
5988
5988
  "readWhen": "a Commitment is bound to a Compass or belongs to a Northstar, and you must know what either may change",
5989
- "tokens": 399,
5989
+ "tokens": 455,
5990
5990
  "aliases": [],
5991
5991
  "explains": [
5992
5992
  "COMMITMENT_COMPASS_IMMUTABLE"
@@ -6001,7 +6001,7 @@
6001
6001
  "section": "followups",
6002
6002
  "title": "Follow-ups",
6003
6003
  "readWhen": "you want to come back to something later: a reminder, a watch, a check-in or an action",
6004
- "version": 3,
6004
+ "version": 4,
6005
6005
  "aliases": [
6006
6006
  "tasks/followups"
6007
6007
  ],
@@ -6040,7 +6040,7 @@
6040
6040
  "id": "authoring",
6041
6041
  "title": "Write a Commitment: sources, keys, cadence and budgets",
6042
6042
  "readWhen": "you draft or change a Commitment's contract: what it watches, how often, where its work goes, what it may spend",
6043
- "tokens": 918,
6043
+ "tokens": 1088,
6044
6044
  "aliases": [],
6045
6045
  "explains": [
6046
6046
  "COMMITMENT_MODE_RETIRED",
@@ -6092,7 +6092,7 @@
6092
6092
  "id": "always-on",
6093
6093
  "title": "Turn it on: activation and Always-On",
6094
6094
  "readWhen": "a Commitment must start waking on its own, or has stopped waking",
6095
- "tokens": 413,
6095
+ "tokens": 524,
6096
6096
  "aliases": [],
6097
6097
  "explains": [
6098
6098
  "COMMITMENT_ACTIVATION_BLOCKED",
@@ -6104,7 +6104,7 @@
6104
6104
  "id": "governance",
6105
6105
  "title": "Compass and Northstar: what each may change",
6106
6106
  "readWhen": "a Commitment is bound to a Compass or belongs to a Northstar, and you must know what either may change",
6107
- "tokens": 399,
6107
+ "tokens": 455,
6108
6108
  "aliases": [],
6109
6109
  "explains": [
6110
6110
  "COMMITMENT_COMPASS_IMMUTABLE"
@@ -6119,7 +6119,7 @@
6119
6119
  "section": "authoring",
6120
6120
  "title": "Write a Commitment: sources, keys, cadence and budgets",
6121
6121
  "readWhen": "you draft or change a Commitment's contract: what it watches, how often, where its work goes, what it may spend",
6122
- "version": 3,
6122
+ "version": 4,
6123
6123
  "aliases": [],
6124
6124
  "explains": [
6125
6125
  "COMMITMENT_MODE_RETIRED",
@@ -6128,9 +6128,9 @@
6128
6128
  "COMMITMENT_CONCURRENCY_REQUIRES_OWNER_DECISION",
6129
6129
  "COMMITMENT_TASK_REVIEW_POLICY_OWNER_REQUIRED"
6130
6130
  ],
6131
- "body": "Read this when you draft or change a Commitment's contract: what it watches, how often, where its work goes, what it may spend.\n\nA Commitment starts as a draft; create and turn it on in one call unless the person asked to\nreview it first. Activation runs Preflight — a refusal keeps the draft and reports the code,\nreason and fix. An active contract spends compute on every check, so make it say exactly what\nwill be watched.\n\n- **Outcome and criteria**: the state to hold true, and how you will know it holds.\n- **Watched sources**: what each check reads. A source the platform reads itself (Tasks, a Goal,\n GitHub, metric snapshots it records) needs only its name and scope. A value only a run can read,\n such as a dashboard or an outside CI rate, is an `agent_run` key you declare.\n- **Declared keys**: the operator declares the keys, and the agent fills them. A run may report any\n key, but only a declared one can move the loop, and only as its `changeRule` says: `any` change,\n or `numeric_delta` with `minDelta`, `minRatio`, `direction` and `absoluteFloor`.\n- **Cadence**: `interval` (`1m` to `365d`), `daily` at `HH:MM` times in a timezone,\n `event_plus_interval` (watched events plus a timed backstop), or `manual`.\n- **Delivery**: where its work goes. `report_only` reports and changes nothing.\n- **Budgets**: `policy.executionBudget` caps runs, sensing runs and cost per day. `0` blocks; `null`\n is no limit.\n\n## Example\n\nA daily, report-only watch on a deploy failure rate:\n\nSave this as `commitment.json`:\n\n```json\n{\n \"agentId\": \"<agent-id>\",\n \"title\": \"Deploy failure rate\",\n \"status\": \"draft\",\n \"target\": { \"outcome\": \"A rise in the deploy failure rate is reported the day it happens\" },\n \"cadence\": { \"mode\": \"daily\", \"times\": [\"09:00\"], \"timezone\": \"America/New_York\" },\n \"delivery\": { \"mode\": \"report_only\" },\n \"watchedSources\": [{\n \"source\": \"agent_run\",\n \"config\": { \"keys\": [{\n \"key\": \"deploys.failure_rate_7d\",\n \"label\": \"Deploy failure rate, last 7 days\",\n \"changeRule\": { \"mode\": \"numeric_delta\", \"minDelta\": 0.02, \"direction\": \"up\" }\n }] }\n }],\n \"policy\": { \"executionBudget\": { \"maxRunsPerDay\": 2, \"maxObservationRunsPerDay\": 2 } }\n}\n```\n\n```bash\nskrr commitments create --from-json commitment.json --activate --json\n```\n\n`create` prints a `Warning:` for anything the body leaves inert, such as an `agent_run` source\nwith no keys. `--activate` turns it on in the same call: it runs Preflight, and a refusal keeps\nthe draft and reports it, such as Always-On being off for the Agent. Drop `--activate` only when\nthe person asked to review it first; `skrr commitments resume` turns a draft on later, and\n`skrr commitments update` changes it.\n\n## Refusals\n\n| Code | Cause | Fix |\n| --- | --- | --- |\n| `COMMITMENT_MODE_RETIRED` | The body carries `mode`; Commitment modes are retired. | Leave it out: runs work under the Agent's own permissions. |\n| `COMMITMENT_POLICY_RETIRED` | The body carries a retired permission-tier policy field. | Remove the field the refusal names. |\n| `COMMITMENT_DELIVERY_REQUIRED` | A coding Commitment names no delivery. | Choose where its work goes. |\n| `COMMITMENT_CONCURRENCY_REQUIRES_OWNER_DECISION` | An Agent set or cleared a finite concurrency limit. | Recommend the limit; the person sets it. |\n| `COMMITMENT_TASK_REVIEW_POLICY_OWNER_REQUIRED` | Only the owner chooses the Task review policy. | Leave it out and ask the owner. |",
6132
- "hash": "141c4a587c433eaaab613d648ffde518624638e0f23a26d530de7c6d7b77cb84",
6133
- "tokens": 918,
6131
+ "body": "Read this when you draft or change a Commitment's contract: what it watches, how often, where its work goes, what it may spend.\n\nA Commitment starts as a draft; create and turn it on in one call unless the person asked to\nreview it first. Activation runs Preflight — a refusal keeps the draft and reports the code,\nreason and fix. An active contract spends compute on every check, so make it say exactly what\nwill be watched.\n\n- **Outcome and criteria**: the state to hold true, and how you will know it holds.\n- **Watched sources**: what each check reads. A source the platform reads itself (Tasks, a Goal,\n GitHub, metric snapshots it records) needs only its name and scope. A value only a run can read,\n such as a dashboard or an outside CI rate, is an `agent_run` key you declare.\n- **Declared keys**: the operator declares the keys, and the agent fills them. A run may report any\n key, but only a declared one can move the loop, and only as its `changeRule` says: `any` change,\n or `numeric_delta` with `minDelta`, `minRatio`, `direction` and `absoluteFloor`.\n- **Cadence**: `interval` (`1m` to `365d`), `daily` at `HH:MM` times in a timezone,\n `event_plus_interval` (watched events plus a timed backstop), or `manual`.\n- **Delivery**: where its work goes. `report_only` reports and changes nothing.\n- **Budgets**: `policy.executionBudget` caps runs, sensing runs and cost per day. `0` blocks; `null`\n is no limit.\n- **Event sources**: `policy.executionBudget.allowedEventSources` limits which sources may wake it.\n An empty or missing list allows every source; name sources to restrict it.\n- **Interruptions**: `policy.maxUserNudgesPerDay` caps messages to the person: `0` mutes, `null` is\n no limit. `minUserNudgeIntervalMs` is the least gap between two.\n- **Quiet hours**: `policy.quietHours` is `{enabled, start, end, timezone}`. Times are 24-hour\n `HH:MM`; `enabled: true` needs both, and they must differ. A window may cross midnight, and `end`\n is outside it. `timezone` is an IANA name; omitted means UTC, not the person's zone.\n\n## Example\n\nA daily, report-only watch on a deploy failure rate:\n\nSave this as `commitment.json`:\n\n```json\n{\n \"agentId\": \"<agent-id>\",\n \"title\": \"Deploy failure rate\",\n \"status\": \"draft\",\n \"target\": { \"outcome\": \"A rise in the deploy failure rate is reported the day it happens\" },\n \"cadence\": { \"mode\": \"daily\", \"times\": [\"09:00\"], \"timezone\": \"America/New_York\" },\n \"delivery\": { \"mode\": \"report_only\" },\n \"watchedSources\": [{\n \"source\": \"agent_run\",\n \"config\": { \"keys\": [{\n \"key\": \"deploys.failure_rate_7d\",\n \"label\": \"Deploy failure rate, last 7 days\",\n \"changeRule\": { \"mode\": \"numeric_delta\", \"minDelta\": 0.02, \"direction\": \"up\" }\n }] }\n }],\n \"policy\": { \"executionBudget\": { \"maxRunsPerDay\": 2, \"maxObservationRunsPerDay\": 2 } }\n}\n```\n\n```bash\nskrr commitments create --from-json commitment.json --activate --json\n```\n\n`create` prints a `Warning:` for anything the body leaves inert, such as an `agent_run` source\nwith no keys. `--activate` turns it on in the same call: it runs Preflight, and a refusal keeps\nthe draft and reports it, such as Always-On being off for the Agent. Drop `--activate` only when\nthe person asked to review it first; `skrr commitments resume` turns a draft on later, and\n`skrr commitments update` changes it.\n\n## Refusals\n\n| Code | Cause | Fix |\n| --- | --- | --- |\n| `COMMITMENT_MODE_RETIRED` | The body carries `mode`; Commitment modes are retired. | Leave it out: runs work under the Agent's own permissions. |\n| `COMMITMENT_POLICY_RETIRED` | The body carries a retired permission-tier policy field. | Remove the field the refusal names. |\n| `COMMITMENT_DELIVERY_REQUIRED` | A coding Commitment names no delivery. | Choose where its work goes. |\n| `COMMITMENT_CONCURRENCY_REQUIRES_OWNER_DECISION` | An Agent set or cleared a finite concurrency limit. | Recommend the limit; the person sets it. |\n| `COMMITMENT_TASK_REVIEW_POLICY_OWNER_REQUIRED` | Only the owner chooses the Task review policy. | Leave it out and ask the owner. |",
6132
+ "hash": "c662fe976cd9555acee832566b6e321d807461522d521dca3bfc0f9d336b34d7",
6133
+ "tokens": 1088,
6134
6134
  "sections": [
6135
6135
  {
6136
6136
  "id": "model",
@@ -6162,7 +6162,7 @@
6162
6162
  "id": "authoring",
6163
6163
  "title": "Write a Commitment: sources, keys, cadence and budgets",
6164
6164
  "readWhen": "you draft or change a Commitment's contract: what it watches, how often, where its work goes, what it may spend",
6165
- "tokens": 918,
6165
+ "tokens": 1088,
6166
6166
  "aliases": [],
6167
6167
  "explains": [
6168
6168
  "COMMITMENT_MODE_RETIRED",
@@ -6214,7 +6214,7 @@
6214
6214
  "id": "always-on",
6215
6215
  "title": "Turn it on: activation and Always-On",
6216
6216
  "readWhen": "a Commitment must start waking on its own, or has stopped waking",
6217
- "tokens": 413,
6217
+ "tokens": 524,
6218
6218
  "aliases": [],
6219
6219
  "explains": [
6220
6220
  "COMMITMENT_ACTIVATION_BLOCKED",
@@ -6226,7 +6226,7 @@
6226
6226
  "id": "governance",
6227
6227
  "title": "Compass and Northstar: what each may change",
6228
6228
  "readWhen": "a Commitment is bound to a Compass or belongs to a Northstar, and you must know what either may change",
6229
- "tokens": 399,
6229
+ "tokens": 455,
6230
6230
  "aliases": [],
6231
6231
  "explains": [
6232
6232
  "COMMITMENT_COMPASS_IMMUTABLE"
@@ -6241,7 +6241,7 @@
6241
6241
  "section": "sensing",
6242
6242
  "title": "Readings a run reports",
6243
6243
  "readWhen": "you read what a Commitment's runs reported seeing, or report a reading from a run",
6244
- "version": 3,
6244
+ "version": 4,
6245
6245
  "aliases": [],
6246
6246
  "explains": [],
6247
6247
  "body": "Read this when you read what a Commitment's runs reported seeing, or report a reading from a run.\n\nA run is a sensor: it can read what the platform cannot, such as a dashboard or a vendor's console.\nThe run reports what it saw, and the server decides whether that is a change.\n\n- Every reading is stored as \"AGENT-REPORTED, not platform-verified\", and that caveat travels inside its text.\n- Its confidence is capped at 0.5, or 0.7 when it carries an artifact with a\n real content digest (`sha256:…`). It is never 1.\n\n## Report a reading\n\n- Report the reading, not a judgement about it: one entry per declared key you read. A key you\n invent is recorded and drives nothing.\n- If you could not read a key, say so with `accessStatus` `unavailable` or `unauthorized` and no\n value. \"I could not see\" is not \"it is fine\", so never carry the previous reading forward.\n- Where a key requires an artifact, attach what you actually kept (a screenshot, a file, a log)\n with a real digest; without it the reading is kept as evidence and cannot move the Commitment.\n\n## Read them\n\nThe `changed` beside a reading is the server's verdict, from the key's `changeRule`. Treat every\nreading as a claim by the actor whose work is being judged, your own included.\n\n```bash\nskrr commitments observations <commitment-id> --declared-only\nskrr commitments observations <commitment-id> --latest\n```\n\nWithout `--declared-only` the list includes undeclared keys: what a run noticed that nobody asked\nabout is how to decide what to declare next.",
@@ -6278,7 +6278,7 @@
6278
6278
  "id": "authoring",
6279
6279
  "title": "Write a Commitment: sources, keys, cadence and budgets",
6280
6280
  "readWhen": "you draft or change a Commitment's contract: what it watches, how often, where its work goes, what it may spend",
6281
- "tokens": 918,
6281
+ "tokens": 1088,
6282
6282
  "aliases": [],
6283
6283
  "explains": [
6284
6284
  "COMMITMENT_MODE_RETIRED",
@@ -6330,7 +6330,7 @@
6330
6330
  "id": "always-on",
6331
6331
  "title": "Turn it on: activation and Always-On",
6332
6332
  "readWhen": "a Commitment must start waking on its own, or has stopped waking",
6333
- "tokens": 413,
6333
+ "tokens": 524,
6334
6334
  "aliases": [],
6335
6335
  "explains": [
6336
6336
  "COMMITMENT_ACTIVATION_BLOCKED",
@@ -6342,7 +6342,7 @@
6342
6342
  "id": "governance",
6343
6343
  "title": "Compass and Northstar: what each may change",
6344
6344
  "readWhen": "a Commitment is bound to a Compass or belongs to a Northstar, and you must know what either may change",
6345
- "tokens": 399,
6345
+ "tokens": 455,
6346
6346
  "aliases": [],
6347
6347
  "explains": [
6348
6348
  "COMMITMENT_COMPASS_IMMUTABLE"
@@ -6357,7 +6357,7 @@
6357
6357
  "section": "cycles-explain",
6358
6358
  "title": "Why it stopped: cycles and explain",
6359
6359
  "readWhen": "a Commitment did not do what you expected and you need to know where it stopped",
6360
- "version": 3,
6360
+ "version": 4,
6361
6361
  "aliases": [],
6362
6362
  "explains": [],
6363
6363
  "body": "Read this when a Commitment did not do what you expected and you need to know where it stopped.\n\nEvery wake is a cycle. A cycle that stopped names the first question it answered \"no\" to, with the\nreason in the platform's own words and, where someone can act, the fix. The questions, in the order\nthey are asked, and what a stop at each means:\n\n- `wake`: \"The wake did not run a check.\"\n- `fresh`: \"There was nothing new to act on.\"\n- `turn`: \"It was not this wake’s turn.\"\n- `think`: \"The check did not start an agent turn.\"\n- `act`: \"The agent turn or its action did not go ahead.\"\n- `reach`: \"The check had something to raise and it did not reach you.\"\n- `error`: \"The check or its run failed.\"\n\nA stop at `fresh`, or at `think` with the gate `no_agent_turn_planned`, is the loop choosing\nsilence, and there is nothing to fix. Every other stop is a gate between an intention and its\neffect. Act on the fix the cycle gives; do not invent another, and do not report a gate as quiet.\n\n```bash\nskrr commitments explain <commitment-id>\nskrr commitments cycles <commitment-id>\nskrr commitments trigger-status <commitment-id>\n```\n\n`explain` walks the latest cycle as six yes or no questions; `cycles` lists them, newest first;\n`trigger-status` shows what the scheduler actually holds, which is usually why one \"isn't\nchecking\". A failed run names who has to move: the machine (sign it in, bring it online) or the\nmodel. Once a machine is fixed, `skrr commitments check-now <commitment-id>` starts a new run; a\nscheduled check would still see nothing new.",
@@ -6394,7 +6394,7 @@
6394
6394
  "id": "authoring",
6395
6395
  "title": "Write a Commitment: sources, keys, cadence and budgets",
6396
6396
  "readWhen": "you draft or change a Commitment's contract: what it watches, how often, where its work goes, what it may spend",
6397
- "tokens": 918,
6397
+ "tokens": 1088,
6398
6398
  "aliases": [],
6399
6399
  "explains": [
6400
6400
  "COMMITMENT_MODE_RETIRED",
@@ -6446,7 +6446,7 @@
6446
6446
  "id": "always-on",
6447
6447
  "title": "Turn it on: activation and Always-On",
6448
6448
  "readWhen": "a Commitment must start waking on its own, or has stopped waking",
6449
- "tokens": 413,
6449
+ "tokens": 524,
6450
6450
  "aliases": [],
6451
6451
  "explains": [
6452
6452
  "COMMITMENT_ACTIVATION_BLOCKED",
@@ -6458,7 +6458,7 @@
6458
6458
  "id": "governance",
6459
6459
  "title": "Compass and Northstar: what each may change",
6460
6460
  "readWhen": "a Commitment is bound to a Compass or belongs to a Northstar, and you must know what either may change",
6461
- "tokens": 399,
6461
+ "tokens": 455,
6462
6462
  "aliases": [],
6463
6463
  "explains": [
6464
6464
  "COMMITMENT_COMPASS_IMMUTABLE"
@@ -6473,7 +6473,7 @@
6473
6473
  "section": "hypotheses",
6474
6474
  "title": "Hypotheses: claims about why",
6475
6475
  "readWhen": "a run concludes why a reading moved, or you investigate a drift that may already be ruled out",
6476
- "version": 3,
6476
+ "version": 4,
6477
6477
  "aliases": [],
6478
6478
  "explains": [
6479
6479
  "missing_falsifier",
@@ -6516,7 +6516,7 @@
6516
6516
  "id": "authoring",
6517
6517
  "title": "Write a Commitment: sources, keys, cadence and budgets",
6518
6518
  "readWhen": "you draft or change a Commitment's contract: what it watches, how often, where its work goes, what it may spend",
6519
- "tokens": 918,
6519
+ "tokens": 1088,
6520
6520
  "aliases": [],
6521
6521
  "explains": [
6522
6522
  "COMMITMENT_MODE_RETIRED",
@@ -6568,7 +6568,7 @@
6568
6568
  "id": "always-on",
6569
6569
  "title": "Turn it on: activation and Always-On",
6570
6570
  "readWhen": "a Commitment must start waking on its own, or has stopped waking",
6571
- "tokens": 413,
6571
+ "tokens": 524,
6572
6572
  "aliases": [],
6573
6573
  "explains": [
6574
6574
  "COMMITMENT_ACTIVATION_BLOCKED",
@@ -6580,7 +6580,7 @@
6580
6580
  "id": "governance",
6581
6581
  "title": "Compass and Northstar: what each may change",
6582
6582
  "readWhen": "a Commitment is bound to a Compass or belongs to a Northstar, and you must know what either may change",
6583
- "tokens": 399,
6583
+ "tokens": 455,
6584
6584
  "aliases": [],
6585
6585
  "explains": [
6586
6586
  "COMMITMENT_COMPASS_IMMUTABLE"
@@ -6595,7 +6595,7 @@
6595
6595
  "section": "speaking",
6596
6596
  "title": "A Commitment finds; its Agent speaks",
6597
6597
  "readWhen": "a Commitment run found something and you must decide whether the owner hears of it",
6598
- "version": 3,
6598
+ "version": 4,
6599
6599
  "aliases": [],
6600
6600
  "explains": [],
6601
6601
  "body": "Read this when a Commitment run found something and you must decide whether the owner hears of it.\n\nA Check never writes to the owner. When something it found may matter, the run is handed a brief\nunder \"Owner communication — your call.\": what was found, the evidence, why it may matter and a\nsuggested next step. Those are facts to judge, not a message to forward.\n\n- Decide with everything in view: what you already said, whether the owner replied, what another\n surface already raised. One message, a different message or nothing are all valid outcomes, and\n silence is often the right one.\n- To speak from the run, return a `message` or `status_update` action intent with its `text`, or a\n `report` with its `text` for the Commitment's report destinations. Write the words yourself.\n- The owner's limits (mute, quiet hours, a daily nudge cap) decide whether a run is asked to speak\n at all, and whatever you deliver counts against them, whichever way you send it.\n\n`skrr commitments reports <commitment-id>` lists where its reports go and on what condition; the\ndefault sends only on a material change.",
@@ -6632,7 +6632,7 @@
6632
6632
  "id": "authoring",
6633
6633
  "title": "Write a Commitment: sources, keys, cadence and budgets",
6634
6634
  "readWhen": "you draft or change a Commitment's contract: what it watches, how often, where its work goes, what it may spend",
6635
- "tokens": 918,
6635
+ "tokens": 1088,
6636
6636
  "aliases": [],
6637
6637
  "explains": [
6638
6638
  "COMMITMENT_MODE_RETIRED",
@@ -6684,7 +6684,7 @@
6684
6684
  "id": "always-on",
6685
6685
  "title": "Turn it on: activation and Always-On",
6686
6686
  "readWhen": "a Commitment must start waking on its own, or has stopped waking",
6687
- "tokens": 413,
6687
+ "tokens": 524,
6688
6688
  "aliases": [],
6689
6689
  "explains": [
6690
6690
  "COMMITMENT_ACTIVATION_BLOCKED",
@@ -6696,7 +6696,7 @@
6696
6696
  "id": "governance",
6697
6697
  "title": "Compass and Northstar: what each may change",
6698
6698
  "readWhen": "a Commitment is bound to a Compass or belongs to a Northstar, and you must know what either may change",
6699
- "tokens": 399,
6699
+ "tokens": 455,
6700
6700
  "aliases": [],
6701
6701
  "explains": [
6702
6702
  "COMMITMENT_COMPASS_IMMUTABLE"
@@ -6711,16 +6711,16 @@
6711
6711
  "section": "always-on",
6712
6712
  "title": "Turn it on: activation and Always-On",
6713
6713
  "readWhen": "a Commitment must start waking on its own, or has stopped waking",
6714
- "version": 3,
6714
+ "version": 4,
6715
6715
  "aliases": [],
6716
6716
  "explains": [
6717
6717
  "COMMITMENT_ACTIVATION_BLOCKED",
6718
6718
  "COMMITMENT_STOP_NOT_YOURS_TO_LIFT",
6719
6719
  "COMMITMENT_COMPASS_NOT_ACTIVE"
6720
6720
  ],
6721
- "body": "Read this when a Commitment must start waking on its own, or has stopped waking.\n\nA Commitment that wakes on a cadence or on events needs its Agent's Always-On: while it is off,\nnothing wakes the Agent and turning the Commitment on is refused. Pausing a Commitment, or turning\nAlways-On off, stops new work; a turn already running may finish, and a cancelled record is not\nproof that a process stopped.\n\n## Turn a Commitment on\n\n1. Read the Agent's Always-On state. A standing responsibility the person asked for covers turning\n it on for that Commitment; otherwise turn it on only when the owner asked the Agent to work on\n its own.\n2. Turning it on runs Preflight, and every blocking gate must pass, so look first where you can.\n3. Turn the Commitment on, then read it back: armed, and when it next wakes.\n\n```bash\nskrr agents always-on status <agent-id>\nskrr commitments preflight <commitment-id>\nskrr commitments resume <commitment-id>\nskrr commitments status <commitment-id>\n```\n\n`skrr agents always-on enable <agent-id>` turns Always-On on, and `reconcile` repairs a degraded\none. `skrr commitments pause <commitment-id>` stops new work.\n\n## Refusals\n\n| Code | Cause | Fix |\n| --- | --- | --- |\n| `COMMITMENT_ACTIVATION_BLOCKED` | A blocking Preflight gate did not pass; the refusal names the first. | Fix that gate, then turn it on again. |\n| `COMMITMENT_STOP_NOT_YOURS_TO_LIFT` | A person or the platform stopped it, and an Agent cannot lift that stop. | Ask the person to resume it. |\n| `COMMITMENT_COMPASS_NOT_ACTIVE` | The Compass it is bound to is not active. | Ask the person to activate that Compass first. |",
6722
- "hash": "f775f7b5681d47f9d2856cf9a9d189a484993123ddbaf658d7159fdcd90591da",
6723
- "tokens": 413,
6721
+ "body": "Read this when a Commitment must start waking on its own, or has stopped waking.\n\nA Commitment that wakes on a cadence or on events needs its Agent's Always-On: while it is off,\nnothing wakes the Agent and turning the Commitment on is refused. Pausing a Commitment, or turning\nAlways-On off, stops new work; a turn already running may finish, and a cancelled record is not\nproof that a process stopped.\n\n## Turn a Commitment on\n\n1. Read the Agent's Always-On state. A standing responsibility the person asked for covers turning\n it on for that Commitment; otherwise turn it on only when the owner asked the Agent to work on\n its own.\n2. Turning it on runs Preflight, and every blocking gate must pass, so look first where you can.\n More than one can block at once, and Always-On is only the first: a Commitment is bounded work,\n and the cloud Agent Worker cannot enforce a bounded Commitment's contract, so an Agent that runs\n there is refused (`runtime_commitment_contract_unavailable`) even with Always-On on. It needs a\n Hosted Machine or a local harness.\n3. Turn the Commitment on, then read it back: armed, and when it next wakes.\n\n```bash\nskrr agents always-on status <agent-id>\nskrr commitments preflight <commitment-id>\nskrr commitments resume <commitment-id>\nskrr commitments status <commitment-id>\n```\n\n`skrr agents always-on enable <agent-id>` turns Always-On on, and `reconcile` repairs a degraded\none. `skrr agents attach-harness <harness> --agent <agent-id>` moves an Agent off the cloud worker.\n`skrr commitments pause <commitment-id>` stops new work.\n\n## Refusals\n\n| Code | Cause | Fix |\n| --- | --- | --- |\n| `COMMITMENT_ACTIVATION_BLOCKED` | A blocking Preflight gate did not pass; the refusal names the first, and Preflight lists every one. | Fix each gate Preflight lists, then turn it on again. |\n| `COMMITMENT_STOP_NOT_YOURS_TO_LIFT` | A person or the platform stopped it, and an Agent cannot lift that stop. | Ask the person to resume it. |\n| `COMMITMENT_COMPASS_NOT_ACTIVE` | The Compass it is bound to is not active. | Ask the person to activate that Compass first. |",
6722
+ "hash": "d1888e652fc8b76c8bc6ca790250c6cdd3db91089c467fdc4e9831da5fbdfe9d",
6723
+ "tokens": 524,
6724
6724
  "sections": [
6725
6725
  {
6726
6726
  "id": "model",
@@ -6752,7 +6752,7 @@
6752
6752
  "id": "authoring",
6753
6753
  "title": "Write a Commitment: sources, keys, cadence and budgets",
6754
6754
  "readWhen": "you draft or change a Commitment's contract: what it watches, how often, where its work goes, what it may spend",
6755
- "tokens": 918,
6755
+ "tokens": 1088,
6756
6756
  "aliases": [],
6757
6757
  "explains": [
6758
6758
  "COMMITMENT_MODE_RETIRED",
@@ -6804,7 +6804,7 @@
6804
6804
  "id": "always-on",
6805
6805
  "title": "Turn it on: activation and Always-On",
6806
6806
  "readWhen": "a Commitment must start waking on its own, or has stopped waking",
6807
- "tokens": 413,
6807
+ "tokens": 524,
6808
6808
  "aliases": [],
6809
6809
  "explains": [
6810
6810
  "COMMITMENT_ACTIVATION_BLOCKED",
@@ -6816,7 +6816,7 @@
6816
6816
  "id": "governance",
6817
6817
  "title": "Compass and Northstar: what each may change",
6818
6818
  "readWhen": "a Commitment is bound to a Compass or belongs to a Northstar, and you must know what either may change",
6819
- "tokens": 399,
6819
+ "tokens": 455,
6820
6820
  "aliases": [],
6821
6821
  "explains": [
6822
6822
  "COMMITMENT_COMPASS_IMMUTABLE"
@@ -6831,14 +6831,14 @@
6831
6831
  "section": "governance",
6832
6832
  "title": "Compass and Northstar: what each may change",
6833
6833
  "readWhen": "a Commitment is bound to a Compass or belongs to a Northstar, and you must know what either may change",
6834
- "version": 3,
6834
+ "version": 4,
6835
6835
  "aliases": [],
6836
6836
  "explains": [
6837
6837
  "COMMITMENT_COMPASS_IMMUTABLE"
6838
6838
  ],
6839
- "body": "Read this when a Commitment is bound to a Compass or belongs to a Northstar, and you must know what either may change.\n\n## Compass\n\nA Compass says what good looks like for an Agent: invariant targets, plus autonomy and\ncommunication defaults such as the quiet hours a Commitment without its own inherits. A\nCommitment is bound to one Compass when it is created and reads its current direction on every\ncheck. The binding cannot change afterwards; a different Compass needs a successor Commitment. A\nCompass never creates, rewrites, pauses or archives a Commitment.\n\n## Northstar\n\nA Northstar groups Commitments without owning their loops. Its review rolls their health up,\ngives each a cadence band and a run budget, and proposes typed management intents. Only the\nNorthstar's own router applies an intent, and only as its governance allows: `advisory` records\nthem, `approval` waits for a person on each, and `bounded_auto` applies a narrow set. Resuming,\ncreating or reassigning a Commitment, and any change that buys compute, always wait for a person.\nArchiving a Northstar detaches its Commitments, and they keep running.\n\nYou may read both and propose; configuring governance and deciding intents are a person's.\n\n```bash\nskrr compass list --agent <agent-id>\nskrr compass trace <compass-id> --agent <agent-id>\nskrr northstars show <northstar-id>\nskrr northstars intents list <northstar-id>\n```\n\n`compass trace` shows which Commitment checks used each version of a Compass.\n\n## Refusals\n\n| Code | Cause | Fix |\n| --- | --- | --- |\n| `COMMITMENT_COMPASS_IMMUTABLE` | An update tried to change the Compass a Commitment is bound to. | Create a successor Commitment bound to the other Compass. |",
6840
- "hash": "e1c27473f864764930c9337a27cfcb3280195d9a1e349085f65708fc022d37e2",
6841
- "tokens": 399,
6839
+ "body": "Read this when a Commitment is bound to a Compass or belongs to a Northstar, and you must know what either may change.\n\n## Compass\n\nA Compass says what good looks like for an Agent: invariant targets, plus autonomy and\ncommunication defaults such as the quiet hours a Commitment without its own inherits. A\nCommitment is bound to one Compass when it is created and reads its current direction on every\ncheck. The binding cannot change afterwards; a different Compass needs a successor Commitment. A\nCompass never creates, rewrites, pauses or archives a Commitment.\n\n## Northstar\n\nA Northstar groups Commitments without owning their loops. Its review rolls their health up,\ngives each a cadence band and a run budget, and proposes typed management intents. Only the\nNorthstar's own router applies an intent, and only as its governance allows: `advisory` records\nthem, `approval` waits for a person on each, and `bounded_auto` applies a narrow set. Resuming,\ncreating or reassigning a Commitment, and any change that buys compute, always wait for a person.\nArchiving a Northstar detaches its Commitments, and they keep running.\n\nYou may read both and propose; configuring governance and deciding intents are a person's.\n\n```bash\nskrr compass list --agent <agent-id>\nskrr compass trace <compass-id> --agent <agent-id>\nskrr northstars show <northstar-id>\nskrr northstars intents list <northstar-id>\n```\n\n`compass trace` shows which Commitment checks used each version of a Compass. To bind a\nCommitment to one, set `compassId` in the `--from-json` body of `skrr commitments create`; there\nis no flag, and `skrr compass commitments <compass-id> --agent <agent-id>` lists it once bound.\n\n## Refusals\n\n| Code | Cause | Fix |\n| --- | --- | --- |\n| `COMMITMENT_COMPASS_IMMUTABLE` | An update tried to change the Compass a Commitment is bound to. | Create a successor Commitment bound to the other Compass. |",
6840
+ "hash": "e3ca9a955d02c043b5856eb652e2eb382835ddda6c6932d08f8d80a88149400b",
6841
+ "tokens": 455,
6842
6842
  "sections": [
6843
6843
  {
6844
6844
  "id": "model",
@@ -6870,7 +6870,7 @@
6870
6870
  "id": "authoring",
6871
6871
  "title": "Write a Commitment: sources, keys, cadence and budgets",
6872
6872
  "readWhen": "you draft or change a Commitment's contract: what it watches, how often, where its work goes, what it may spend",
6873
- "tokens": 918,
6873
+ "tokens": 1088,
6874
6874
  "aliases": [],
6875
6875
  "explains": [
6876
6876
  "COMMITMENT_MODE_RETIRED",
@@ -6922,7 +6922,7 @@
6922
6922
  "id": "always-on",
6923
6923
  "title": "Turn it on: activation and Always-On",
6924
6924
  "readWhen": "a Commitment must start waking on its own, or has stopped waking",
6925
- "tokens": 413,
6925
+ "tokens": 524,
6926
6926
  "aliases": [],
6927
6927
  "explains": [
6928
6928
  "COMMITMENT_ACTIVATION_BLOCKED",
@@ -6934,7 +6934,7 @@
6934
6934
  "id": "governance",
6935
6935
  "title": "Compass and Northstar: what each may change",
6936
6936
  "readWhen": "a Commitment is bound to a Compass or belongs to a Northstar, and you must know what either may change",
6937
- "tokens": 399,
6937
+ "tokens": 455,
6938
6938
  "aliases": [],
6939
6939
  "explains": [
6940
6940
  "COMMITMENT_COMPASS_IMMUTABLE"
@@ -47,6 +47,14 @@ export type AgenticStreamResult = {
47
47
  * (OSK-13543). Absent on every ordinary run.
48
48
  */
49
49
  repaired?: true;
50
+ /**
51
+ * Tool calls refused because nobody could be asked and the run was not started with
52
+ * `--approve-tools`, as the same one-line description the streamed `[permission]` line uses.
53
+ * A quiet run discards the rendering, so without this a `--no-stream --json` turn read as a
54
+ * completed turn that did nothing, beside an agent telling the person to resend from another
55
+ * surface (which a CLI cannot offer). Absent when nothing was refused.
56
+ */
57
+ permissionDenials?: string[];
50
58
  lastEvent?: AgenticStreamEvent;
51
59
  };
52
60
  /**
@@ -605,6 +613,7 @@ export declare class AgenticStreamClient {
605
613
  private readonly openQuestionPrompts;
606
614
  /** Text already written to the terminal, for suffix-only rendering. */
607
615
  private renderedText;
616
+ private permissionDenials;
608
617
  /** The "still waiting" line for a terminal run with no output yet (OSK-20427). */
609
618
  private waitingTimer;
610
619
  private waitingStartedAt;
@@ -855,6 +855,7 @@ class AgenticStreamClient {
855
855
  openQuestionPrompts = new Map();
856
856
  /** Text already written to the terminal, for suffix-only rendering. */
857
857
  renderedText = '';
858
+ permissionDenials = [];
858
859
  /** The "still waiting" line for a terminal run with no output yet (OSK-20427). */
859
860
  waitingTimer = null;
860
861
  waitingStartedAt = 0;
@@ -2213,6 +2214,18 @@ class AgenticStreamClient {
2213
2214
  output.write(`\n[application permission] ${String(event.message)}\n`);
2214
2215
  return;
2215
2216
  }
2217
+ if (event.type === 'permission.denied' && event.reason === 'noninteractive_or_not_enabled') {
2218
+ const described = describePermission(event);
2219
+ // The stream asks and is refused twice for one call (observed: both appear, identical), and
2220
+ // the result should name a refused call once.
2221
+ if (!this.permissionDenials.includes(described))
2222
+ this.permissionDenials.push(described);
2223
+ // A quiet run withholds the answer's rendering, not a refusal: say it on stderr, as the
2224
+ // handover and browser-permission lines above do, so stdout stays the final result.
2225
+ if (this.options.quiet && !this.options.jsonl) {
2226
+ (this.options.statusOutput ?? process.stderr).write(`\n[permission] ${described} denied: nobody could be asked, and this run was not started with --approve-tools\n`);
2227
+ }
2228
+ }
2216
2229
  // Accumulation and `onEvent` still run — only the incremental rendering is
2217
2230
  // suppressed, so a quiet run is the same turn with a different display.
2218
2231
  if (this.options.quiet)
@@ -2522,6 +2535,7 @@ class AgenticStreamClient {
2522
2535
  text: this.accumulated,
2523
2536
  status,
2524
2537
  ...(status === 'completed' && event.repaired === true ? { repaired: true } : {}),
2538
+ ...(this.permissionDenials.length ? { permissionDenials: [...this.permissionDenials] } : {}),
2525
2539
  lastEvent: event,
2526
2540
  };
2527
2541
  this.resolve(this.terminalResult);