@skrr-ai/cli 0.1.111 → 0.1.114

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/docs/v1/README.md CHANGED
@@ -9,6 +9,7 @@ This edition was reviewed on **2026-10-10** against CLI **0.1.95**, daemon **0.8
9
9
  | Sign in and create your first Task | [Quickstart](quickstart.md) |
10
10
  | Make a read-only HTTP request with a scoped key | [Public API](api.md) |
11
11
  | Fix sign-in, errors, quotas, permissions, or a failed upgrade | [Operations and recovery](operations.md) |
12
+ | Schedule, inspect, revise or cancel 1–10 lookbacks | [Lookback plans](lookback-plans.md) |
12
13
  | Understand what changed in this guide | [Changelog](changelog.md) |
13
14
 
14
15
  The workspace CLI uses the account/workspace `/api` surface. The Managed Agents public API uses `/v1` and Space-scoped API keys. A personal access token for CLI automation is a different credential. Choose the surface before issuing a credential.
@@ -0,0 +1,88 @@
1
+ # Scheduled lookback plans
2
+
3
+ A plan provides 1–10 opportunities to inspect fresh evidence. Each check may stay silent. It does not promise one message per check.
4
+
5
+ ## Create
6
+
7
+ Read a conversation belonging to the intended agent:
8
+
9
+ ```sh
10
+ skrr convos messages YOUR_CONVERSATION_ID --json
11
+ ```
12
+
13
+ Choose a completed assistant reply (`isCreatedByUser: false`, `unfinished: false`). Copy its actual `messageId` and completion `updatedAt`. The source is immutable: do not substitute the current clock or a user message.
14
+
15
+ Generate a template without signing in, then replace all three source placeholders:
16
+
17
+ ```sh
18
+ skrr followups plans example > plan.json
19
+ ```
20
+
21
+ The generated file contains:
22
+
23
+ ```json
24
+ {
25
+ "objective": "Check deployment health",
26
+ "stopCondition": "Deployment is ready or the owner cancels",
27
+ "source": {
28
+ "conversationId": "YOUR_CONVERSATION_ID",
29
+ "messageId": "YOUR_COMPLETED_ASSISTANT_MESSAGE_ID",
30
+ "replyCompletedAt": "ACTUAL_REPLY_COMPLETION_ISO_TIMESTAMP"
31
+ },
32
+ "steps": [
33
+ {
34
+ "id": "health-check",
35
+ "instruction": "Read the latest original conversation. Report readiness once; otherwise stay silent.",
36
+ "when": { "kind": "relative", "offset": "10m" }
37
+ }
38
+ ]
39
+ }
40
+ ```
41
+
42
+ ```sh
43
+ skrr followups plans create --agent YOUR_AGENT_ID --from-json plan.json --json
44
+ ```
45
+
46
+ Relative time is measured from that reply's completion, so ensure the resulting time is still in the future. An envelope can explicitly separate delivery from evidence:
47
+
48
+ ```json
49
+ {
50
+ "agentId": "YOUR_AGENT_ID",
51
+ "pinnedConversationId": "YOUR_CONVERSATION_ID",
52
+ "plan": { "objective": "...", "stopCondition": "...", "source": {}, "steps": [] }
53
+ }
54
+ ```
55
+
56
+ The envelope's abbreviated `plan` is structural guidance; replace it with the complete authored plan above. Optional delivery fields are `endpointId` and `endpointTarget`; source identity remains independent. `armed: true` confirms timer registration. A saved/pending result does not, and an existing terminal plan remains terminal on replay.
57
+
58
+ ## Time forms
59
+
60
+ Each step's `when` accepts one of these shapes. Replace example dates with future dates:
61
+
62
+ ```json
63
+ {"kind":"relative","offset":"10m"}
64
+ ```
65
+
66
+ ```json
67
+ {"kind":"absolute","at":"2026-10-21T12:00:00Z"}
68
+ ```
69
+
70
+ ```json
71
+ {"kind":"local","dateTime":"2026-10-21T09:00:00","timezone":"America/Los_Angeles"}
72
+ ```
73
+
74
+ Absolute timestamps require `Z` or a UTC offset. Local times require an IANA timezone; ambiguous and nonexistent DST times are refused. A step may also have `label` and `expiresAfter` (for example `"1h"`). After expiry, the check must not execute. Top-level `title` and `timezone` are optional.
75
+
76
+ ## Inspect, revise and cancel
77
+
78
+ ```sh
79
+ skrr followups plans list --agent YOUR_AGENT_ID --json
80
+ skrr followups plans show PLAN_ID --json
81
+ skrr followups plans revise PLAN_ID --revision 1 --from-json revised-plan.json --json
82
+ skrr followups plans cancel PLAN_ID --revision 2 --reason "No longer needed" --json
83
+ skrr followups plans observability --agent YOUR_AGENT_ID --json
84
+ ```
85
+
86
+ Use the current revision returned by `show`. A stale edit returns `LOOKBACK_CONFLICT` with HTTP 409; reread before deciding whether to edit again. Revision JSON is the full authored plan itself, with the exact original source and existing step IDs. Start from `plan.json`, preserve IDs from `show`, and edit pending instructions/times. Do not resubmit the full `show` response: server fields such as `state`, `runAt`, `expiresAt`, outcomes and claims are not authoring input. Completed evaluations consume the same lifetime allowance after edits.
87
+
88
+ Cancellation is idempotent and fences remaining work; it does not retract a message already delivered. `observability` reports a bounded sample, not lifetime totals. Normal account authority, budgets, runtime support and delivery policies still apply. No feature-flag enrollment or special two-person activation is needed.
@@ -7406,6 +7406,17 @@
7406
7406
  "multiple": false,
7407
7407
  "type": "option"
7408
7408
  },
7409
+ "initial-always-on": {
7410
+ "description": "Start autonomous work after creation (default: on). Use off for a passive agent; explicit chat still works. Relationship-loop seeding is configured separately.",
7411
+ "name": "initial-always-on",
7412
+ "hasDynamicHelp": false,
7413
+ "multiple": false,
7414
+ "options": [
7415
+ "on",
7416
+ "off"
7417
+ ],
7418
+ "type": "option"
7419
+ },
7409
7420
  "no-relationship-loops": {
7410
7421
  "description": "Single-purpose agent: skip the system-managed relationship portfolio (conversation continuity, relationship pulse, commitment incubator, open-loop closer). Self-reflection is still seeded.",
7411
7422
  "name": "no-relationship-loops",
@@ -23332,7 +23343,7 @@
23332
23343
  "aliases": [],
23333
23344
  "args": {
23334
23345
  "state": {
23335
- "description": "Whether personal stored balance may pay for skrr Code overage",
23346
+ "description": "Whether personal stored balance may pay for Skrr Code overage",
23336
23347
  "name": "state",
23337
23348
  "options": [
23338
23349
  "enabled",
@@ -23341,7 +23352,7 @@
23341
23352
  "required": true
23342
23353
  }
23343
23354
  },
23344
- "description": "Enable or disable personal skrr Code overage after included allowance is exhausted",
23355
+ "description": "Enable or disable personal Skrr Code overage after included allowance is exhausted",
23345
23356
  "examples": [
23346
23357
  "<%= config.bin %> balance overage enabled",
23347
23358
  "<%= config.bin %> balance overage disabled",
@@ -23409,7 +23420,7 @@
23409
23420
  "balance:plan": {
23410
23421
  "aliases": [],
23411
23422
  "args": {},
23412
- "description": "Show your skrr Code plan, renewal state, available tiers, and the matching lifecycle page",
23423
+ "description": "Show your Skrr Code plan, renewal state, available tiers, and the matching lifecycle page",
23413
23424
  "examples": [
23414
23425
  "<%= config.bin %> balance plan",
23415
23426
  "<%= config.bin %> balance plan --json"
@@ -23709,7 +23720,7 @@
23709
23720
  "balance:usage:breakdown": {
23710
23721
  "aliases": [],
23711
23722
  "args": {},
23712
- "description": "Aggregate settled skrr Code usage by model, surface, agent and member",
23723
+ "description": "Aggregate settled Skrr Code usage by model, surface, agent and member",
23713
23724
  "examples": [
23714
23725
  "<%= config.bin %> balance usage breakdown",
23715
23726
  "<%= config.bin %> balance usage breakdown --json",
@@ -23801,7 +23812,7 @@
23801
23812
  "balance:usage:events": {
23802
23813
  "aliases": [],
23803
23814
  "args": {},
23804
- "description": "List the skrr Code charges and run/session attribution behind aggregate allowance usage",
23815
+ "description": "List the Skrr Code charges and run/session attribution behind aggregate allowance usage",
23805
23816
  "examples": [
23806
23817
  "<%= config.bin %> balance usage events",
23807
23818
  "<%= config.bin %> balance usage events --limit 20 --json",
@@ -26984,7 +26995,7 @@
26984
26995
  "pluginName": "@skrr-ai/cli",
26985
26996
  "pluginType": "core",
26986
26997
  "strict": false,
26987
- "summary": "Start the skrr Code interactive coding agent in this directory",
26998
+ "summary": "Start the Skrr Code interactive coding agent in this directory",
26988
26999
  "enableJsonFlag": false,
26989
27000
  "isESM": false,
26990
27001
  "relativePath": [
@@ -26997,7 +27008,7 @@
26997
27008
  "code:acp": {
26998
27009
  "aliases": [],
26999
27010
  "args": {},
27000
- "description": "Run the skrr Code ACP server over stdio (used by the skrr daemon)",
27011
+ "description": "Run the Skrr Code ACP server over stdio (used by the skrr daemon)",
27001
27012
  "examples": [
27002
27013
  "<%= config.bin %> code acp"
27003
27014
  ],
@@ -27021,7 +27032,7 @@
27021
27032
  "code:doctor": {
27022
27033
  "aliases": [],
27023
27034
  "args": {},
27024
- "description": "Diagnose the local skrr Code engine, config sources, and trust posture",
27035
+ "description": "Diagnose the local Skrr Code engine, config sources, and trust posture",
27025
27036
  "examples": [
27026
27037
  "<%= config.bin %> code doctor",
27027
27038
  "<%= config.bin %> code doctor --json"
@@ -27183,7 +27194,7 @@
27183
27194
  "code:install": {
27184
27195
  "aliases": [],
27185
27196
  "args": {},
27186
- "description": "Install the local skrr Code signed release; use --daemon to install on another machine",
27197
+ "description": "Install the local Skrr Code signed release; use --daemon to install on another machine",
27187
27198
  "examples": [
27188
27199
  "<%= config.bin %> code install",
27189
27200
  "<%= config.bin %> code install --daemon <daemon-id>",
@@ -27732,7 +27743,7 @@
27732
27743
  ]
27733
27744
  }
27734
27745
  },
27735
- "description": "Migrate an existing OpenCode configuration into skrr Code",
27746
+ "description": "Migrate an existing OpenCode configuration into Skrr Code",
27736
27747
  "examples": [
27737
27748
  "<%= config.bin %> code migrate opencode",
27738
27749
  "<%= config.bin %> code migrate opencode --apply",
@@ -27749,7 +27760,7 @@
27749
27760
  "dependsOn": [
27750
27761
  "apply"
27751
27762
  ],
27752
- "description": "Replace existing skrr Code files, moving each aside to a timestamped .bak first",
27763
+ "description": "Replace existing Skrr Code files, moving each aside to a timestamped .bak first",
27753
27764
  "name": "overwrite",
27754
27765
  "allowNo": false,
27755
27766
  "type": "boolean"
@@ -27787,7 +27798,7 @@
27787
27798
  "code:rollback": {
27788
27799
  "aliases": [],
27789
27800
  "args": {},
27790
- "description": "Restore the previous verified local skrr Code release",
27801
+ "description": "Restore the previous verified local Skrr Code release",
27791
27802
  "flags": {
27792
27803
  "json": {
27793
27804
  "description": "Emit the result as JSON",
@@ -27815,7 +27826,7 @@
27815
27826
  "code:run": {
27816
27827
  "aliases": [],
27817
27828
  "args": {},
27818
- "description": "Run skrr Code headlessly on a single prompt",
27829
+ "description": "Run Skrr Code headlessly on a single prompt",
27819
27830
  "examples": [
27820
27831
  "<%= config.bin %> code run \"add a regression test for the parser\"",
27821
27832
  "<%= config.bin %> code run --json \"summarize the diff\"",
@@ -27842,7 +27853,7 @@
27842
27853
  "code:skrr-agent": {
27843
27854
  "aliases": [],
27844
27855
  "args": {},
27845
- "description": "Show or set the skrr agent a managed skrr Code session is attributed to",
27856
+ "description": "Show or set the skrr agent a managed Skrr Code session is attributed to",
27846
27857
  "examples": [
27847
27858
  "<%= config.bin %> code skrr-agent",
27848
27859
  "<%= config.bin %> code skrr-agent --set Engineer",
@@ -27920,7 +27931,7 @@
27920
27931
  "code:update": {
27921
27932
  "aliases": [],
27922
27933
  "args": {},
27923
- "description": "Check or update the local skrr Code signed release; use --daemon to update another machine",
27934
+ "description": "Check or update the local Skrr Code signed release; use --daemon to update another machine",
27924
27935
  "examples": [
27925
27936
  "<%= config.bin %> code update",
27926
27937
  "<%= config.bin %> code update --check",
@@ -45552,7 +45563,7 @@
45552
45563
  "followups:plans:create": {
45553
45564
  "aliases": [],
45554
45565
  "args": {},
45555
- "description": "Schedule a bounded plan of 1–10 lookbacks, each free to stay silent",
45566
+ "description": "Schedule a bounded plan of 1–10 lookbacks, each free to stay silent\n\nInput is authored Plan JSON with objective, stopCondition, source and 1–10 steps. Generate an editable JSON file:\n\nskrr followups plans example > plan.json\n\nReplace the three source placeholders with a real completed assistant reply belonging to this agent. `skrr convos messages <conversation-id> --json` reads its messageId and completion updatedAt. Never use the current clock as a replacement anchor.\n\nRelative time is measured from source.replyCompletedAt, not command invocation. Choose an offset whose resulting time is still in the future.\n\nEach when supports {\"kind\":\"relative\",\"offset\":\"10m\"}, {\"kind\":\"absolute\",\"at\":\"2026-10-21T12:00:00Z\"}, or {\"kind\":\"local\",\"dateTime\":\"2026-10-21T09:00:00\",\"timezone\":\"America/Los_Angeles\"}. Replace example dates with future dates. Absolute time requires Z or a UTC offset; ambiguous/nonexistent local DST times are refused.\n\nOptional fields: title, timezone; per step: id, label, expiresAfter (for example \"1h\"). Revision retains the exact source and existing step IDs. Do not submit the show response unchanged: remove lifecycle fields such as state, runAt and expiresAt.\n\nA check may remain silent. Only armed:true confirms timer registration; saved/pending is not armed. Full guide is shipped at docs/v1/lookback-plans.md in the installed CLI package.\n\nCreate also accepts {\"agentId\":\"...\",\"pinnedConversationId\":\"...\",\"plan\":{...}}. Source and delivery destination are separate; pin the original conversation to return there.",
45556
45567
  "examples": [
45557
45568
  "<%= config.bin %> followups plans create --from-json plan.json --agent agent_1 --json"
45558
45569
  ],
@@ -45631,6 +45642,67 @@
45631
45642
  "create.js"
45632
45643
  ]
45633
45644
  },
45645
+ "followups:plans:example": {
45646
+ "aliases": [],
45647
+ "args": {},
45648
+ "description": "Print an editable Plan JSON template without signing in\n\nReplace the source placeholders with a real completed assistant reply before creating a plan. This command schedules nothing.",
45649
+ "examples": [
45650
+ "<%= config.bin %> followups plans example > plan.json"
45651
+ ],
45652
+ "flags": {
45653
+ "bare": {
45654
+ "description": "Bare mode — ignore keychain/file credential sources. Token must come from env or --token.",
45655
+ "name": "bare",
45656
+ "allowNo": false,
45657
+ "type": "boolean"
45658
+ },
45659
+ "token": {
45660
+ "description": "Bearer token for this invocation (debugging/impersonation). Overrides env and stored creds.",
45661
+ "name": "token",
45662
+ "hasDynamicHelp": false,
45663
+ "multiple": false,
45664
+ "type": "option"
45665
+ },
45666
+ "workspace": {
45667
+ "description": "Workspace ID for workspace-scoped requests (also sets X-Workspace-Id).",
45668
+ "name": "workspace",
45669
+ "hasDynamicHelp": false,
45670
+ "multiple": false,
45671
+ "type": "option"
45672
+ },
45673
+ "profile": {
45674
+ "description": "Which stored session to use. Each profile keeps its own credential and deployment, so signing into one does not sign you out of another. Also OVERSKY_PROFILE. List them with `profiles list`.",
45675
+ "name": "profile",
45676
+ "hasDynamicHelp": false,
45677
+ "multiple": false,
45678
+ "type": "option"
45679
+ },
45680
+ "raw": {
45681
+ "description": "With --json, keep the Mongo storage fields (_id next to id, __v) that the CLI otherwise strips. Also OVERSKY_CLI_RAW=1.",
45682
+ "name": "raw",
45683
+ "allowNo": false,
45684
+ "type": "boolean"
45685
+ }
45686
+ },
45687
+ "hasDynamicHelp": false,
45688
+ "hiddenAliases": [],
45689
+ "id": "followups:plans:example",
45690
+ "pluginAlias": "@skrr-ai/cli",
45691
+ "pluginName": "@skrr-ai/cli",
45692
+ "pluginType": "core",
45693
+ "strict": true,
45694
+ "enableJsonFlag": false,
45695
+ "autonomousCredentialPolicy": "delegated",
45696
+ "resolveSpaceFlag": true,
45697
+ "isESM": false,
45698
+ "relativePath": [
45699
+ "dist",
45700
+ "commands",
45701
+ "followups",
45702
+ "plans",
45703
+ "example.js"
45704
+ ]
45705
+ },
45634
45706
  "followups:plans:list": {
45635
45707
  "aliases": [],
45636
45708
  "args": {},
@@ -45841,7 +45913,10 @@
45841
45913
  "required": true
45842
45914
  }
45843
45915
  },
45844
- "description": "Revise pending lookbacks using the original source and step IDs",
45916
+ "description": "Revise pending lookbacks using the original source and step IDs\n\nInput is authored Plan JSON with objective, stopCondition, source and 1–10 steps. Generate an editable JSON file:\n\nskrr followups plans example > plan.json\n\nReplace the three source placeholders with a real completed assistant reply belonging to this agent. `skrr convos messages <conversation-id> --json` reads its messageId and completion updatedAt. Never use the current clock as a replacement anchor.\n\nRelative time is measured from source.replyCompletedAt, not command invocation. Choose an offset whose resulting time is still in the future.\n\nEach when supports {\"kind\":\"relative\",\"offset\":\"10m\"}, {\"kind\":\"absolute\",\"at\":\"2026-10-21T12:00:00Z\"}, or {\"kind\":\"local\",\"dateTime\":\"2026-10-21T09:00:00\",\"timezone\":\"America/Los_Angeles\"}. Replace example dates with future dates. Absolute time requires Z or a UTC offset; ambiguous/nonexistent local DST times are refused.\n\nOptional fields: title, timezone; per step: id, label, expiresAfter (for example \"1h\"). Revision retains the exact source and existing step IDs. Do not submit the show response unchanged: remove lifecycle fields such as state, runAt and expiresAt.\n\nA check may remain silent. Only armed:true confirms timer registration; saved/pending is not armed. Full guide is shipped at docs/v1/lookback-plans.md in the installed CLI package.\n\nRevise accepts the plan itself, not a create envelope. Use the current --revision from show; a stale revision returns LOOKBACK_CONFLICT (409).",
45917
+ "examples": [
45918
+ "<%= config.bin %> followups plans revise PLAN_ID --revision 1 --from-json revised-plan.json --json"
45919
+ ],
45845
45920
  "flags": {
45846
45921
  "bare": {
45847
45922
  "description": "Bare mode — ignore keychain/file credential sources. Token must come from env or --token.",
@@ -45991,7 +46066,7 @@
45991
46066
  "followups:remind": {
45992
46067
  "aliases": [],
45993
46068
  "args": {},
45994
- "description": "Remind the owner at a time — the reminder follow-up",
46069
+ "description": "Remind the owner at a time. By default, deliver the literal content through owner notifications without an agent turn. Use --active for agent-written delivery.",
45995
46070
  "examples": [
45996
46071
  "<%= config.bin %> followups remind --subject task:OSK-42 --content \"pick the deploy up\" --in 2h",
45997
46072
  "<%= config.bin %> followups remind --subject conversation:conv_9 --content \"ask how the move went\" --at 2026-09-20T09:00:00Z --active --agent agent_1",
@@ -46081,28 +46156,28 @@
46081
46156
  "type": "boolean"
46082
46157
  },
46083
46158
  "agent": {
46084
- "description": "Agent ID (default: bound session agent)",
46159
+ "description": "Agent ID (default: bound session agent). Attribution only unless --active is set",
46085
46160
  "name": "agent",
46086
46161
  "hasDynamicHelp": false,
46087
46162
  "multiple": false,
46088
46163
  "type": "option"
46089
46164
  },
46090
46165
  "endpoint": {
46091
- "description": "Delivery endpoint id (EndpointRegistry)",
46166
+ "description": "Active only: delivery endpoint id; requires --active",
46092
46167
  "name": "endpoint",
46093
46168
  "hasDynamicHelp": false,
46094
46169
  "multiple": false,
46095
46170
  "type": "option"
46096
46171
  },
46097
46172
  "endpoint-target": {
46098
- "description": "Channel target for channel endpoints",
46173
+ "description": "Active only: channel target for a channel endpoint; requires --active",
46099
46174
  "name": "endpoint-target",
46100
46175
  "hasDynamicHelp": false,
46101
46176
  "multiple": false,
46102
46177
  "type": "option"
46103
46178
  },
46104
46179
  "pin": {
46105
- "description": "Conversation id the reminder was authored in",
46180
+ "description": "Active only: deliver into this conversation; requires --active. Do not combine with --endpoint other than pinned",
46106
46181
  "name": "pin",
46107
46182
  "hasDynamicHelp": false,
46108
46183
  "multiple": false,
@@ -46612,7 +46687,7 @@
46612
46687
  "type": "option"
46613
46688
  },
46614
46689
  "endpoint": {
46615
- "description": "Delivery endpoint id (EndpointRegistry)",
46690
+ "description": "Delivery endpoint id (defaults to main). Use --pin to deliver into a specific conversation",
46616
46691
  "name": "endpoint",
46617
46692
  "hasDynamicHelp": false,
46618
46693
  "multiple": false,
@@ -46626,7 +46701,7 @@
46626
46701
  "type": "option"
46627
46702
  },
46628
46703
  "pin": {
46629
- "description": "Conversation id the watch was authored in",
46704
+ "description": "Deliver into this conversation. Do not combine with --endpoint other than pinned",
46630
46705
  "name": "pin",
46631
46706
  "hasDynamicHelp": false,
46632
46707
  "multiple": false,
@@ -137151,5 +137226,5 @@
137151
137226
  ]
137152
137227
  }
137153
137228
  },
137154
- "version": "0.1.111"
137229
+ "version": "0.1.114"
137155
137230
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@skrr-ai/cli",
3
- "version": "0.1.111",
3
+ "version": "0.1.114",
4
4
  "description": "Command-line interface for skrr",
5
5
  "license": "ISC",
6
6
  "author": "skrr",
@@ -558,7 +558,10 @@
558
558
  "description": "Your Agent Manager (HR Agent): create it, or repair an incomplete one"
559
559
  },
560
560
  "followups": {
561
- "description": "Schedule an agent to come back once — reminders, watches, check-ins, and deferred actions"
561
+ "description": "Schedule agent follow-ups and bounded lookback plans"
562
+ },
563
+ "followups:plans": {
564
+ "description": "Schedule and manage bounded plans of 1–10 lookbacks"
562
565
  },
563
566
  "enterprise": {
564
567
  "description": "Enterprise deployment configuration for a workspace (admin)"