@awak-app/simy-cli 0.7.35 → 0.7.37
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +50 -46
- package/package.json +1 -1
- package/src/agent.js +1 -1
- package/src/backend-executable.js +1 -1
- package/src/cli-contract.js +1 -1
- package/src/cli-observability.js +1 -1
- package/src/codex-plugins/simy/.codex-plugin/plugin.json +5 -5
- package/src/codex-plugins/simy/hooks/README.md +3 -3
- package/src/codex-plugins/simy/hooks/delivery-loop.mjs +2 -2
- package/src/codex-plugins/simy/skills/continue/SKILL.md +4 -4
- package/src/codex-plugins/simy/skills/continue/agents/openai.yaml +3 -3
- package/src/codex-plugins/simy/skills/diagnose/SKILL.md +2 -2
- package/src/codex-plugins/simy/skills/sqm-loop/SKILL.md +3 -3
- package/src/codex-plugins/simy/skills/sqm-loop/agents/openai.yaml +2 -2
- package/src/console/app.js +7 -7
- package/src/delivery-hooks/claude-workflow.md +1 -1
- package/src/delivery-hooks/command.js +5 -5
- package/src/desktop-host.js +58 -11
- package/src/index.js +1 -1
- package/src/local-task.js +1 -1
- package/src/orchestrator/presentation.js +1 -1
- package/src/runner.js +2 -2
- package/src/session-supervision/automatic-continuation.js +11 -11
- package/src/session-supervision/continuation-analysis.js +1 -1
- package/src/session-supervision/continuation-command.js +3 -3
- package/src/session-supervision/continuation-readiness.js +1 -1
- package/src/session-supervision/conversation-presentation.js +3 -3
- package/src/session-supervision/decision-presentation.js +8 -8
- package/src/session-supervision/index.js +13 -13
- package/src/session-supervision/owner-transport.js +53 -11
- package/src/session-supervision/remote-errors.js +2 -2
- package/src/session-supervision/remote-hosts.js +14 -3
- package/src/session-supervision/work-state.js +3 -3
- package/src/sqm/agent-skill.js +3 -3
- package/src/sqm/claude-plugin.js +1 -1
package/README.md
CHANGED
|
@@ -8,7 +8,7 @@ This signs the desktop into SIMY; browser automation uses its own provider conne
|
|
|
8
8
|
|
|
9
9
|
Technical coding failures retain their task and retry after a persisted 5–30 minute
|
|
10
10
|
cooldown. Automatic recovery preserves the original goal, usage limits, provider
|
|
11
|
-
connection and explicit stops.
|
|
11
|
+
connection and explicit stops. Turning on Delivery Loop can also adopt an
|
|
12
12
|
ordinary loop waiting for an external dependency, starting with read-only inspection.
|
|
13
13
|
A damaged provider-link file can be repaired by **Connect SIMY** for that provider;
|
|
14
14
|
the original file is retained and the other provider stays disconnected.
|
|
@@ -36,7 +36,7 @@ for configuration, tests and remaining host integration requirements.
|
|
|
36
36
|
|
|
37
37
|
ローカルDelivery Loopの0.6.24候補を版固定で実行するには、[ローカル候補版のインストール・実行](docs/local-delivery-runtime.md)を参照してください。
|
|
38
38
|
|
|
39
|
-
Local execution agent for SIMY Local Tasks and
|
|
39
|
+
Local execution agent for SIMY Local Tasks and Delivery Loop runs.
|
|
40
40
|
|
|
41
41
|
To supervise an explicitly requested current goal after a finished Codex run, use
|
|
42
42
|
`simy delivery followup --provider codex --session SESSION_ID --previous-run-id RUN_ID --objective "Current goal and expected result"`.
|
|
@@ -75,7 +75,7 @@ segments, and keep lifetime failure counts after event rotation.
|
|
|
75
75
|
|
|
76
76
|
Each AI app card separates **SIMY connection: on / stopped** from CLI, sign-in
|
|
77
77
|
and plugin health. Disconnecting collapses those details and explains that SIMY
|
|
78
|
-
monitoring and
|
|
78
|
+
monitoring and Delivery Loop are stopped. Details can still be opened;
|
|
79
79
|
reconnecting restores the item statuses. Plugin inspection failure never changes
|
|
80
80
|
the connection setting or hides its disconnect action.
|
|
81
81
|
|
|
@@ -116,7 +116,7 @@ The server's durable recovery migration requeues the same failed job and retains
|
|
|
116
116
|
its input, history and attempt count; it is required to recover jobs previously
|
|
117
117
|
held by the server's lifetime retry cap.
|
|
118
118
|
|
|
119
|
-
|
|
119
|
+
Delivery Loop preflight accepts the task's existing requirement, acceptance
|
|
120
120
|
criteria, required checks and charter context alongside the repository/provider.
|
|
121
121
|
Its `startup` summary lists all blockers, unverified conditions and recovery
|
|
122
122
|
actions together. Environment-only calls remain supported. Task checks reuse the
|
|
@@ -135,7 +135,7 @@ remain available for history and usage warnings. The Web controller supports
|
|
|
135
135
|
connected local Codex/Claude engines; unsupported cloud execution is refused
|
|
136
136
|
before dispatch.
|
|
137
137
|
|
|
138
|
-
A completed
|
|
138
|
+
A completed Delivery Loop worker's structured result is saved privately before evidence
|
|
139
139
|
collection and the final observation flush. If the controller restarts after that save,
|
|
140
140
|
the authorized daemon recovers the same attempt and collects fresh evidence
|
|
141
141
|
without dispatching the completed worker again. Collector read failures retry up
|
|
@@ -157,14 +157,14 @@ repeated on every monitor tick; explicitly continue the same run to recover.
|
|
|
157
157
|
Older reviews without a saved CI basis can refresh only when their prior evidence
|
|
158
158
|
still establishes the complete reviewed identity; otherwise explicitly continue.
|
|
159
159
|
|
|
160
|
-
For interrupted
|
|
160
|
+
For interrupted Delivery Loop work, `GET /v1/agentic-loop/:id/recovery` provides a
|
|
161
161
|
read-only objective and checkout fingerprint. Reconcile an uncertain side effect
|
|
162
162
|
with `POST` to that endpoint (`action: reconcile`, authoritative
|
|
163
163
|
`operation_status`, `observation`, `evidence_refs`) before resuming. A paused
|
|
164
|
-
|
|
164
|
+
Delivery Loop run retains `POST /v1/agentic-loop/:id/continuation-ceilings` for an
|
|
165
165
|
explicit safety-ceiling extension under the progress policy. Token and retry
|
|
166
166
|
budgets are notification thresholds: they do not interrupt or stop useful work.
|
|
167
|
-
|
|
167
|
+
Delivery Loop checks a separate safety ceiling before each new provider call:
|
|
168
168
|
15,000,000 weighted Provider tokens and 50 executor attempts by default, using
|
|
169
169
|
existing `provider_token_ceiling` and `attempt_ceiling` settings when present.
|
|
170
170
|
The final attempt may still be reviewed if token allowance remains. Active
|
|
@@ -175,7 +175,7 @@ remaining work, explicitly extend the relevant ceiling within the existing
|
|
|
175
175
|
run. A notification-threshold increase alone cannot clear a safety stop; at the
|
|
176
176
|
maximum ceiling, further automatic calls remain blocked. Extension itself never
|
|
177
177
|
resets usage or resumes work. Local Task and managed Delivery behavior is not
|
|
178
|
-
changed by this
|
|
178
|
+
changed by this Delivery Loop safety gate. Both routes require the original authorized
|
|
179
179
|
account, organization and device throughout the request.
|
|
180
180
|
|
|
181
181
|
## Provider reconnection and saved consent
|
|
@@ -244,9 +244,9 @@ after reconnecting permits another probe, with bounded automatic cooldowns.
|
|
|
244
244
|
Conversation checks blocked by **Sign-in required** automatically recheck after
|
|
245
245
|
a fresh Codex or Claude login probe succeeds, including after an app restart.
|
|
246
246
|
An unchanged ready status cannot repeatedly re-run a failed check. Manual retry
|
|
247
|
-
remains available; continuing the conversation still requires **
|
|
247
|
+
remains available; continuing the conversation still requires **Continue automatically**.
|
|
248
248
|
|
|
249
|
-
You can
|
|
249
|
+
You can turn on **Continue automatically** while a conversation is running when its original
|
|
250
250
|
provider configuration is verified. SIMY saves the preference and waits for the
|
|
251
251
|
current turn to finish before checking remaining work. Configuration and runtime
|
|
252
252
|
blockers appear in the conversation view with recovery guidance; turning the
|
|
@@ -276,16 +276,18 @@ Closing the window keeps the agent running. Open the app again or choose
|
|
|
276
276
|
interrupting active tasks. The normal `simy` command remains available.
|
|
277
277
|
|
|
278
278
|
The macOS **Automatic updates** switch saves this Mac's choice across restarts.
|
|
279
|
-
Compatible signed installations enable it by default. Patch/minor updates
|
|
280
|
-
|
|
281
|
-
previous installed version.
|
|
282
|
-
|
|
279
|
+
Compatible signed installations enable it by default. Patch/minor updates prepare
|
|
280
|
+
and verify the new runtime before a safe handoff; failed startup restores the
|
|
281
|
+
previous installed version. Choose **Update and restart** to open the verified
|
|
282
|
+
new interface, or **Later** to keep using the current window. The window never
|
|
283
|
+
restarts automatically. Turning the switch off keeps
|
|
283
284
|
manual checks and **Download DMG** available. An explicit `SIMY_AUTO_UPDATE=0`
|
|
284
285
|
remains authoritative, and major updates continue to use the DMG.
|
|
285
286
|
**Stop task…** in a task
|
|
286
287
|
detail asks for confirmation and terminates its local Provider process, keeping
|
|
287
|
-
existing output and history.
|
|
288
|
-
|
|
288
|
+
existing output and history. Window updates preserve the same execution owner,
|
|
289
|
+
pending approvals and inputs, and scoped drafts. Older services without this
|
|
290
|
+
capability keep running and wait for a safe update. **⌘Q** exits SIMY and
|
|
289
291
|
its background services directly, including when work is running. The window shows
|
|
290
292
|
the app version, and normal app launches select the newer installed interface.
|
|
291
293
|
|
|
@@ -314,7 +316,7 @@ missing sources. Provider plugin enablement and hook trust remain provider-owned
|
|
|
314
316
|
|
|
315
317
|
For conversation continuation, select SIMY in the Codex app with `@` and ask
|
|
316
318
|
`continue this task` (Japanese: `この作業を続けて`). The `continue` skill uses the
|
|
317
|
-
running app's existing
|
|
319
|
+
running app's existing Delivery Loop switch (**Continue automatically**) and background coordinator. In
|
|
318
320
|
Codex CLI, use its native `$simy:continue` skill selector; in Claude Code use the
|
|
319
321
|
native `/simy:continue` command. Claude Code does not define `@simy` as a plugin
|
|
320
322
|
command: use the slash command for an explicit invocation. Merely mentioning
|
|
@@ -347,7 +349,7 @@ SIMY**, reopen it, and reconnect; closing the window alone does not restart the
|
|
|
347
349
|
background host. Refresh connections and confirm the conversation list returns.
|
|
348
350
|
Diagnostic `provider connection failed` entries distinguish `reason=update`,
|
|
349
351
|
`organization_change`, and `shutdown` without including credentials or transcripts.
|
|
350
|
-
Reconnection does not sign in to Codex CLI or restore revoked
|
|
352
|
+
Reconnection does not sign in to Codex CLI or restore a revoked Delivery Loop.
|
|
351
353
|
|
|
352
354
|
The plugin also includes a non-blocking connection reminder. At task startup,
|
|
353
355
|
resume, and prompt submission it reads the origin-scoped local discovery record
|
|
@@ -368,7 +370,7 @@ from the same maintained source as Codex; only provider terminology and hook/man
|
|
|
368
370
|
format differ. Installing source files does not imply that either provider has enabled
|
|
369
371
|
the plugin. Existing Claude settings, unrelated marketplaces, and plugins are preserved.
|
|
370
372
|
|
|
371
|
-
State-only feature-improvement collection ships with the generated Claude plugin, but uploads require the paired desktop CLI runtime to refresh device consent and drain its local outbox. Without that paired authenticated runtime, the plugin remains default-off and does not
|
|
373
|
+
State-only feature-improvement collection ships with the generated Claude plugin, but uploads require the paired desktop CLI runtime to refresh device consent and drain its local outbox. Without that paired authenticated runtime, the plugin remains default-off and does not turn on Delivery Loop.
|
|
372
374
|
|
|
373
375
|
After that first installation, the daemon checks installed workflows at startup
|
|
374
376
|
and every hour, including after a CLI automatic upgrade. It updates only existing
|
|
@@ -379,7 +381,7 @@ marketplace still points to SIMY’s generated local source. Plugin versions inc
|
|
|
379
381
|
receive a fresh cache. Use a new Codex task to pick up updated skills; running
|
|
380
382
|
tasks are not restarted. Missing or disabled plugins are not enabled automatically.
|
|
381
383
|
Failed refreshes retry on the next check without blocking daemon startup.
|
|
382
|
-
|
|
384
|
+
**Continue automatically** ON saves consent for the selected original conversation; it does not
|
|
383
385
|
immediately launch a second turn. A verified desktop discovery admission or an
|
|
384
386
|
existing exact admission saves this preference without another provider RPC.
|
|
385
387
|
After the current turn settles, continuation separately rechecks context, the
|
|
@@ -399,7 +401,7 @@ probes remain limited to recent conversations and explicitly retained work;
|
|
|
399
401
|
older rows remain visible with unverified execution state. The macOS work list then prioritizes verified running
|
|
400
402
|
conversations, including families with running children, followed by work needing
|
|
401
403
|
a human response and recent activity. Its All, Running, Needs attention, Completed
|
|
402
|
-
and Archived views combine with search. Tracking and
|
|
404
|
+
and Archived views combine with search. Tracking and Delivery Loop settings never
|
|
403
405
|
prove that an AI is running; observations older than 45 seconds or a failed
|
|
404
406
|
provider refresh display an unknown execution state.
|
|
405
407
|
|
|
@@ -415,7 +417,7 @@ unfinished children or open PRs keep a completed task out of the Completed view.
|
|
|
415
417
|
Codex candidates come from CLI, VS Code and app-server
|
|
416
418
|
conversation sources; non-interactive exec, unknown sources and delegated agents
|
|
417
419
|
are excluded. A hook observation alone cannot restore a filtered conversation.
|
|
418
|
-
Explicitly tracked, monitored,
|
|
420
|
+
Explicitly tracked, monitored, Delivery Loop and unsettled supervision records
|
|
419
421
|
remain visible even during a provider discovery failure. When a retained Codex conversation is
|
|
420
422
|
omitted from the recent provider page, SIMY reads its exact metadata without
|
|
421
423
|
loading turns or taking writer ownership. The same interactive source filter and
|
|
@@ -475,7 +477,7 @@ settings can differ, and project-scoped installations are labeled explicitly.
|
|
|
475
477
|
missing sources; existing sources still receive updates.
|
|
476
478
|
|
|
477
479
|
This is the recommended installation because the CLI can safely install patch
|
|
478
|
-
and minor releases, and the daemon restarts only when no
|
|
480
|
+
and minor releases, and the daemon restarts only when no Delivery Loop task is active. To run
|
|
479
481
|
the interactive chat after installation, use `simy`.
|
|
480
482
|
|
|
481
483
|
For a one-time evaluation or source development, these modes remain supported:
|
|
@@ -501,7 +503,7 @@ injected runtime context. Dated messages outside the configured lookback are
|
|
|
501
503
|
excluded even when their conversation continues today. Legacy transcripts with
|
|
502
504
|
no message timestamps use the file timestamp as a fallback. The local cursor stores only opaque hashes and
|
|
503
505
|
timestamps scoped to the connection, account, and device. Uploads require the
|
|
504
|
-
`user_conversation.v2`
|
|
506
|
+
SIMY service `user_conversation.v2` contract and exact per-chunk
|
|
505
507
|
receipts before the cursor advances. Deploy those companion changes before
|
|
506
508
|
enabling this CLI version; earlier receivers cannot acknowledge v2 history.
|
|
507
509
|
|
|
@@ -528,18 +530,18 @@ cursor is written under `$SIMY_HOME/work-pattern-history-sync/`.
|
|
|
528
530
|
|
|
529
531
|
The CLI starts a loopback HTTP agent on a random available port, keeps a
|
|
530
532
|
48-hour, origin-scoped local session, and opens a native coding chat. The first
|
|
531
|
-
chat message creates the remote audit ledger and starts the local
|
|
533
|
+
chat message creates the remote audit ledger and starts the local Delivery Loop
|
|
532
534
|
state machine; SIMY Web mirrors the lifecycle but is not required as the task
|
|
533
535
|
entry point. The CLI also accepts backend-issued launch challenges for Web-led
|
|
534
536
|
runs. It builds the requirement charter, runs Codex or Claude Code, audits
|
|
535
537
|
structured completion evidence, and re-instructs the executor while verification shows useful progress.
|
|
536
538
|
|
|
537
|
-
Before Web creates an
|
|
539
|
+
Before Web creates an Delivery Loop, it classifies whether the request actually
|
|
538
540
|
needs a managed PR, verification, evidence, and merge lifecycle. A bounded
|
|
539
541
|
ordinary task is sent to CLI 0.2.2 or newer through the one-time direct executor
|
|
540
542
|
instead. CLI independently recomputes the guardrail, restricts read-only work at
|
|
541
543
|
the Provider command boundary, and permits exactly one Provider invocation. It
|
|
542
|
-
does not create an
|
|
544
|
+
does not create an Delivery Loop ledger, audit session, or retry lifecycle for
|
|
543
545
|
that task.
|
|
544
546
|
|
|
545
547
|
## Local Tasks
|
|
@@ -568,13 +570,13 @@ process running as the same OS user.
|
|
|
568
570
|
|
|
569
571
|
|
|
570
572
|
CLI API contract v9 promotes non-coding work to a first-class **Local Task**
|
|
571
|
-
runtime. A Local Task is separate from
|
|
573
|
+
runtime. A Local Task is separate from Delivery Loop: it runs one bounded Codex
|
|
572
574
|
or Claude Code session without Git branches, pull requests, audits, or automatic
|
|
573
575
|
Provider retries. Knowledge-work deliverables use an isolated task sandbox by
|
|
574
576
|
default, so they do not require a repository.
|
|
575
577
|
|
|
576
578
|
`POST /v1/local-tasks/start` accepts JSON or the same verified multipart
|
|
577
|
-
attachment envelope used by
|
|
579
|
+
attachment envelope used by Delivery Loop and requires a stable
|
|
578
580
|
`Idempotency-Key`. Repeating the same request returns the original task; using
|
|
579
581
|
the same key for different content returns
|
|
580
582
|
`LOCAL_TASK_IDEMPOTENCY_CONFLICT`. `GET /v1/local-tasks/reconcile` with the same
|
|
@@ -664,10 +666,12 @@ original argv once. A process-wide nonce/version guard prevents update loops.
|
|
|
664
666
|
Major releases are never installed at startup: `simy update` asks for explicit
|
|
665
667
|
confirmation (`simy update --yes` is available for non-interactive automation).
|
|
666
668
|
|
|
667
|
-
The macOS desktop app
|
|
668
|
-
keeps downloaded releases in the user cache
|
|
669
|
-
|
|
670
|
-
for
|
|
669
|
+
The macOS desktop app starts from `/Applications/SIMY.app`. Its signed updater
|
|
670
|
+
keeps downloaded releases in the user cache. An explicit window restart opens
|
|
671
|
+
the validated immutable release while retaining its execution owner. Whole-bundle
|
|
672
|
+
replacement waits for processes using the bundle to exit; a busy bundle is left
|
|
673
|
+
in place and the selected release opens directly. The previous bundle is retained
|
|
674
|
+
for recovery. If permissions or verification prevent installation, SIMY shows
|
|
671
675
|
an installer recovery action instead of reporting the desktop app as current.
|
|
672
676
|
Concurrent handoffs share one exclusive installation lock. Packages before
|
|
673
677
|
0.5.29 may require one system-authorized installer update because their bundle
|
|
@@ -724,7 +728,7 @@ Auto-update E2E screenshots are generated locally under
|
|
|
724
728
|
|
|
725
729
|
## Executor compatibility
|
|
726
730
|
|
|
727
|
-
SIMY checks the selected executor with `--version` before an
|
|
731
|
+
SIMY checks the selected executor with `--version` before an Delivery Loop can
|
|
728
732
|
start. The currently validated compatibility floors are Codex `0.144.0` and
|
|
729
733
|
Claude Code `2.1.200`. A missing, older, or unversioned executable fails the
|
|
730
734
|
preflight and returns the installed version, required version, and a recovery
|
|
@@ -846,7 +850,7 @@ permissions still require validation in the corresponding environment.
|
|
|
846
850
|
|
|
847
851
|
Normal runs do not require a separate sync command: the CLI
|
|
848
852
|
uses a verified local cache and revalidates it with TTL and ETag semantics.
|
|
849
|
-
The
|
|
853
|
+
The Delivery Loop runs min-check after each code modification and the full check
|
|
850
854
|
before PR readiness. Findings and the redacted signed-proof summary are recorded
|
|
851
855
|
in its audit; source text is never uploaded.
|
|
852
856
|
|
|
@@ -888,7 +892,7 @@ list.
|
|
|
888
892
|
|
|
889
893
|
## Interactive console
|
|
890
894
|
|
|
891
|
-
Running `simy` in a terminal opens the
|
|
895
|
+
Running `simy` in a terminal opens the Delivery Loop chat. It discovers the
|
|
892
896
|
current GitHub repository and branch, selects an available executor, and keeps
|
|
893
897
|
the composer active so a natural-language request can start immediately. Each
|
|
894
898
|
run appears in a selectable list with its lifecycle state, process ID, and a
|
|
@@ -988,7 +992,7 @@ Publishing is handled by GitHub Actions in `.github/workflows/publish.yml`.
|
|
|
988
992
|
|
|
989
993
|
### Repository system scopes
|
|
990
994
|
|
|
991
|
-
Version 0.5.7 supports signed `system_scope` snapshots from
|
|
995
|
+
Version 0.5.7 supports signed `system_scope` snapshots from SQM.
|
|
992
996
|
Each check pins the repository's connected component and graph revision. A new
|
|
993
997
|
check revalidates scoped bundles online; a stale or unavailable scope cannot fall
|
|
994
998
|
back to an older cached component. Minimum and full check proofs retain the
|
|
@@ -1035,13 +1039,13 @@ No twelve-view specification, reconstruction review, traceability matrix or new
|
|
|
1035
1039
|
review package is required. Check actual ease, clarity and accuracy using the
|
|
1036
1040
|
[UX guidance](src/orchestrator/delivery/references/ux-specification.md).
|
|
1037
1041
|
|
|
1038
|
-
## Purpose-driven
|
|
1042
|
+
## Purpose-driven Delivery Loop
|
|
1039
1043
|
|
|
1040
1044
|
The desktop **Continue automatically / 自動で続ける** switch enables purpose-driven
|
|
1041
1045
|
search: research, experiments, minimal implementation and direct outcome checks.
|
|
1042
1046
|
A separate review is used for semantic inspection or when explicitly requested. Failed methods trigger replanning; review findings return to repair.
|
|
1043
1047
|
Independent authorized work can continue while a controller-tracked operation waits.
|
|
1044
|
-
The existing Codex
|
|
1048
|
+
The existing Codex **Continue automatically** switch enables read-only diagnosis for uncertain or
|
|
1045
1049
|
information-waiting conversations, then assessed work. No default time/turn cap is
|
|
1046
1050
|
added; explicitly enrolled purpose budgets and user stops are preserved. Native
|
|
1047
1051
|
provider approval waits still require the original provider boundary to settle.
|
|
@@ -1082,7 +1086,7 @@ model responses or credentials. Historical summaries are not a replacement for
|
|
|
1082
1086
|
signed proof files or delivery acceptance. Records from versions that kept
|
|
1083
1087
|
analysis only in memory cannot be recovered after that process exits.
|
|
1084
1088
|
|
|
1085
|
-
The CLI
|
|
1089
|
+
The CLI Delivery Loop uses [proportionate retry and review decisions](docs/stop-prevention/proportionate-continuation.md): reasoning notes are advisory, and an independent reviewer may explicitly defer or dismiss minor/warning/info findings with a nonempty explanation while retaining them in the receipt. Required acceptance evidence and major safety findings remain protected.
|
|
1086
1090
|
|
|
1087
1091
|
### Local coding attempt result collection
|
|
1088
1092
|
|
|
@@ -1398,8 +1402,8 @@ Search covers the full available catalog, including older conversations. Use
|
|
|
1398
1402
|
Each row identifies its provider; identical IDs in Codex and Claude remain
|
|
1399
1403
|
separate rows. A provider failure preserves the other provider's results with
|
|
1400
1404
|
an explicit incomplete warning (`complete: false` and `warnings` in JSON).
|
|
1401
|
-
This view respects both saved provider connection settings and never
|
|
1402
|
-
|
|
1405
|
+
This view respects both saved provider connection settings and never turns on
|
|
1406
|
+
Delivery Loop. Disconnected providers are not read.
|
|
1403
1407
|
|
|
1404
1408
|
The terminal command reads this host and hosts explicitly registered in
|
|
1405
1409
|
`~/.simy/remote-hosts.json`. Use `--local-only` to skip SSH, and
|
|
@@ -1461,7 +1465,7 @@ unsupported-platform error for Claude native control.
|
|
|
1461
1465
|
|
|
1462
1466
|
Keep Claude available in an unlocked desktop while the operation runs. SIMY
|
|
1463
1467
|
opens the exact Code-tab conversation and uses Claude's own archive/restore
|
|
1464
|
-
control. Running conversations and
|
|
1468
|
+
control. Running conversations and Delivery Loop must be stopped first.
|
|
1465
1469
|
Before opening that conversation, SIMY checks Claude's visible windows for
|
|
1466
1470
|
unsent input, generating responses and dialogs. It leaves the current conversation
|
|
1467
1471
|
in place if any are present or the window/input state cannot be inspected. The
|
|
@@ -1483,7 +1487,7 @@ with `--provider codex`.
|
|
|
1483
1487
|
### Delivery entry routes
|
|
1484
1488
|
|
|
1485
1489
|
Crew owns `sessionLoopOptions` in the distributed loop kernel. Codex enrollment,
|
|
1486
|
-
Continue, follow-up, desktop controls and
|
|
1490
|
+
Continue, follow-up, desktop controls and Delivery Loop use purpose v2
|
|
1487
1491
|
by default; old false/v1 enrollment flags cannot select the retired mode.
|
|
1488
1492
|
Explicit strict/balanced policies and human acceptance criteria remain binding.
|
|
1489
1493
|
Compatible saved tasks migrate without replacing identity, history or budget.
|
|
@@ -1530,7 +1534,7 @@ occupancy without accepting the task. Long-running tasks transmit current
|
|
|
1530
1534
|
recovery context and recent work; the full history remains in durable state
|
|
1531
1535
|
and can be inspected through `delivery status`.
|
|
1532
1536
|
|
|
1533
|
-
### Reusable
|
|
1537
|
+
### Reusable Delivery Loop evaluation inputs
|
|
1534
1538
|
|
|
1535
1539
|
For the 20 versioned conversation regression cases, immutable stopping-protocol
|
|
1536
1540
|
plans, and pinned SWE-bench Pro public-task preparation, see
|
package/package.json
CHANGED
package/src/agent.js
CHANGED
|
@@ -3126,7 +3126,7 @@ export async function startAgent({
|
|
|
3126
3126
|
request,
|
|
3127
3127
|
});
|
|
3128
3128
|
const runId = String(remoteRun?.id || "");
|
|
3129
|
-
if (!runId) throw new Error("SIMY Web did not return
|
|
3129
|
+
if (!runId) throw new Error("SIMY Web did not return a Delivery Loop run id.");
|
|
3130
3130
|
const run = createRun({ runId, request, session, apiOrigin, localStateRoot: codingRunStateRoot, sqmHistoryRoot: sessionRoot });
|
|
3131
3131
|
await saveCodingRunSnapshot(codingRunStateRoot, run.snapshot);
|
|
3132
3132
|
registry.create(run);
|
|
@@ -28,7 +28,7 @@ export async function inspectBackendExecutable(
|
|
|
28
28
|
backend,
|
|
29
29
|
{ spawnImpl = spawn, candidates, timeoutMs = 5_000, signal, discoveryOptions = {}, minimumVersion, executionEnvironment } = {},
|
|
30
30
|
) {
|
|
31
|
-
const assertActive = () => { if (signal?.aborted) throw Object.assign(new Error('
|
|
31
|
+
const assertActive = () => { if (signal?.aborted) throw Object.assign(new Error('AI provider inspection was cancelled.'), { code: 'cancelled' }); };
|
|
32
32
|
assertActive();
|
|
33
33
|
const policy = versionPolicy(backend);
|
|
34
34
|
const requiredVersion = minimumVersion || policy.minimumVersion;
|
package/src/cli-contract.js
CHANGED
|
@@ -14,7 +14,7 @@ import {
|
|
|
14
14
|
} from "./durable-local-task-steps-contract.js";
|
|
15
15
|
import { buildExecutionCapabilityContract } from "./execution-capability-contract.js";
|
|
16
16
|
|
|
17
|
-
export const CLI_VERSION = "0.7.
|
|
17
|
+
export const CLI_VERSION = "0.7.37";
|
|
18
18
|
export const CLI_API_CONTRACT_VERSION = 10;
|
|
19
19
|
|
|
20
20
|
export function narrativeImageCapabilityMetadata() {
|
package/src/cli-observability.js
CHANGED
|
@@ -7,7 +7,7 @@ import { execFile } from 'node:child_process';
|
|
|
7
7
|
import { promisify } from 'node:util';
|
|
8
8
|
import { webApiHeaders, webApiUrl } from './web-api.js';
|
|
9
9
|
// Keep this leaf module package-safe: hooks load it before the full CLI contract.
|
|
10
|
-
const CLI_VERSION = '0.7.
|
|
10
|
+
const CLI_VERSION = '0.7.37';
|
|
11
11
|
|
|
12
12
|
const STORE = 'cli-observability-state.json';
|
|
13
13
|
const LEGACY_CONFIG = 'cli-observability.json';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "simy",
|
|
3
3
|
"version": "0.1.0",
|
|
4
|
-
"description": "SIMY
|
|
4
|
+
"description": "SIMY Delivery Loop, SQM checks and PR review through the original conversation's existing controls.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Specialist Doctors Inc.",
|
|
7
7
|
"url": "https://github.com/SpecialistDoctors-Inc"
|
|
@@ -17,17 +17,17 @@
|
|
|
17
17
|
"interface": {
|
|
18
18
|
"displayName": "SIMY",
|
|
19
19
|
"shortDescription": "Continue, check and review.",
|
|
20
|
-
"longDescription": "Ask SIMY to continue unfinished work in the original conversation through the running CLI app's existing
|
|
20
|
+
"longDescription": "Ask SIMY to continue unfinished work in the original conversation through the running CLI app's existing Delivery Loop controller (Continue automatically), or request SQM checks and PR reviews. Read the same real work state and next action as the app. Saved delegation is not execution proof. Stops, permission waits and opt-outs are preserved. Retired local delivery agents stay retired.",
|
|
21
21
|
"developerName": "Specialist Doctors Inc.",
|
|
22
22
|
"category": "Developer Tools",
|
|
23
23
|
"capabilities": [
|
|
24
|
-
"
|
|
24
|
+
"Delivery Loop",
|
|
25
25
|
"Quality",
|
|
26
26
|
"Review"
|
|
27
27
|
],
|
|
28
28
|
"defaultPrompt": [
|
|
29
|
-
"
|
|
30
|
-
"Run
|
|
29
|
+
"Continue this conversation automatically with SIMY and show its actual progress.",
|
|
30
|
+
"Run a SIMY SQM check for the current thread.",
|
|
31
31
|
"Review the current pull request with SIMY."
|
|
32
32
|
],
|
|
33
33
|
"composerIcon": "./assets/logo.png",
|
|
@@ -27,7 +27,7 @@ including when SessionStart was missed. No per-project enable command is needed.
|
|
|
27
27
|
preserve it. Existing loops, explicit stops, session opt-outs and revoked provider
|
|
28
28
|
consent remain authoritative. No hook grants provider trust. Stop checks that
|
|
29
29
|
session's checkpoint and returns bounded next-step instructions. Approval/input
|
|
30
|
-
blocks, interruption, completion, failures and missing progress stop
|
|
30
|
+
blocks, interruption, completion, failures and missing progress stop Delivery Loop.
|
|
31
31
|
Provider errors/exits are surfaced to SIMY's desktop; a dead provider is not
|
|
32
32
|
silently restarted. No hook writes trust, permission settings, or SQM evidence.
|
|
33
33
|
|
|
@@ -35,7 +35,7 @@ Private state is under `SIMY_HOME/delivery-hooks` (default `~/.simy/delivery-hoo
|
|
|
35
35
|
keyed by provider and session ID and bound to the canonical working directory.
|
|
36
36
|
Historical hook observations do not prove hooks are still enabled. See the
|
|
37
37
|
CLI delivery command documentation for checkpoint commands and explicit recovery.
|
|
38
|
-
The local Codex delivery-loop skill is retired; request the CLI
|
|
38
|
+
The local Codex delivery-loop skill is retired; request the CLI Delivery Loop
|
|
39
39
|
explicitly for new delivery work. Existing lifecycle hooks do not start it.
|
|
40
40
|
|
|
41
41
|
SIMY does not limit a task's elapsed time, number of turns or provider tokens.
|
|
@@ -47,7 +47,7 @@ criteria cannot manufacture progress, and activity alone does not prove it.
|
|
|
47
47
|
Required approvals, manual stops and unreconciled effects still block dispatch.
|
|
48
48
|
|
|
49
49
|
Context-first tasks without host-checkable acceptance pause rather than fail at
|
|
50
|
-
that limit, so
|
|
50
|
+
that limit, so Delivery Loop stays available after review. An explicit resume,
|
|
51
51
|
answer or approval resets both no-progress attempt counters and the progress clock,
|
|
52
52
|
even before a threshold was reached. Failure counts and verified criterion history
|
|
53
53
|
remain; reusing old evidence cannot count as fresh progress.
|
|
@@ -996,7 +996,7 @@ function hookDeliveryContext(record, automatic = false) {
|
|
|
996
996
|
const identity = `SIMY connected to this ${provider} conversation: ${session}.`;
|
|
997
997
|
if (!run && automatic && !record.automaticStartBlocked && !record.providerArchived && !record.parentSession && !(record.autoContinue === false && record.autoContinueEpoch)) return `${identity} Automatic Delivery Loop start is enabled for this workspace. The next nonempty user prompt starts checkpoint tracking in this conversation; do not issue a duplicate start. Provider permissions and user stops remain authoritative.`;
|
|
998
998
|
if (!run) return `${identity} Delivery Loop has not started. When the user requests it, use simy delivery start --provider ${provider} --session ${session} with the agreed objective and next step. For future conversations in this workspace, the user can enable automatic start once with simy delivery auto on --provider ${provider}. Never enable, trust, resume, or reset a loop without the user's request.`;
|
|
999
|
-
return `${identity} Existing
|
|
999
|
+
return `${identity} Existing Delivery Loop: ${run.state}. ${deliveryAcceptanceContext(run)} ` +
|
|
1000
1000
|
(['active', 'reported_done', 'completed'].includes(run.state) ? `${correctiveFollowupInstruction} ` : '') +
|
|
1001
1001
|
(provider === 'codex' && ['completed', 'reported_done'].includes(run.state) ? `Finished run ID: ${run.id}. Its completion does not supervise later user requests. If the user explicitly requests supervision of the current goal, use simy delivery followup --provider codex --session ${session} --previous-run-id ${run.id} --objective CURRENT_GOAL. A different goal archives the old run; the same ordinary reported_done goal retains identity and budgets for read-only reconciliation. A new prompt alone is not consent to run this command. ` : '') +
|
|
1002
1002
|
(run.state === 'active' && !run.managed ? `Before ending the turn, submit an honest JSON checkpoint with simy delivery checkpoint --provider ${provider} --session ${session} --file -. Use status in_progress with summary, remainingWork and nextStep for remaining work; completed with summary, acceptanceMet:true and evidence for finished work; or blocked with summary and blocker missing_information or authorization. The first completed checkpoint requests an outcome check in this conversation; inspect the actual result and submit a fresh checkpoint. If requested work remains, perform the first authorized step instead of ending with self-evaluation or a plan. Completion is provider-reported, not independently verified. ${informationWaitInstruction} ` : '') +
|
|
@@ -1051,7 +1051,7 @@ export async function startDelivery({ root = rootDirectory(), provider, session,
|
|
|
1051
1051
|
if ((following || reconciling) && (provider !== 'codex' || !admitted || !managedState?.autoRecovery || managedState.capability !== 'codex_app_server' || managedState.initialAction.kind !== 'read' || managedState.contextBootstrap)) throw new Error('Follow-up requires exact-session managed supervision, a concrete goal and read-only reconciliation.');
|
|
1052
1052
|
if (upgrading && (!managedState?.autonomyPolicy || managedState.initialAction.kind !== 'read' || managedState.contextBootstrap)) throw new Error('Upgrade requires read-only reconciliation and frozen acceptance of the original objective.');
|
|
1053
1053
|
if (!managedState && continuationMode(continuationPolicy) === 'progress') throw new Error('Progress continuation requires frozen managed acceptance criteria.');
|
|
1054
|
-
if (followupAutoContinue && !(following || reconciling)) throw new Error('
|
|
1054
|
+
if (followupAutoContinue && !(following || reconciling)) throw new Error('Delivery Loop follow-up requires the exact finished run.');
|
|
1055
1055
|
if (autoContinueEpoch && managedState) managedState.autoContinueEpoch = autoContinueEpoch;
|
|
1056
1056
|
if (managedState && previous.associationTaskId) {
|
|
1057
1057
|
managedState.taskId = previous.associationTaskId;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: continue
|
|
3
|
-
description:
|
|
3
|
+
description: Turn on SIMY Delivery Loop (Continue automatically) for the original conversation when the user explicitly asks SIMY or @simy to take over or continue unfinished work. Also read its real execution status or turn Delivery Loop off for this conversation. This is a controller entry, not an independent delivery agent or an SQM check.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Continue the original conversation with SIMY
|
|
@@ -32,8 +32,8 @@ existing conversation reference before changing anything.
|
|
|
32
32
|
Use this command on the original local host. Preserve a remote selection's host
|
|
33
33
|
and use its existing SIMY remote controls instead of treating it as local.
|
|
34
34
|
|
|
35
|
-
This command delegates to the running SIMY app's existing
|
|
36
|
-
and background coordinator. It preserves the original goal, task history,
|
|
35
|
+
This command delegates to the running SIMY app's existing Delivery Loop control
|
|
36
|
+
(the Continue automatically switch) and background coordinator. It preserves the original goal, task history,
|
|
37
37
|
corrections, permissions, failure budgets and approvals. It does not start a
|
|
38
38
|
second provider process, create a replacement task, change accounts or models,
|
|
39
39
|
trust hooks, or grant native permissions. The original current turn continues
|
|
@@ -51,7 +51,7 @@ result and acceptance. Continue already-authorized work in this conversation.
|
|
|
51
51
|
To inspect again, use the same exact target with `auto-continue status` in place
|
|
52
52
|
of `auto-continue on`. If the response was lost or status reading failed after
|
|
53
53
|
saving, query status; never automatically repeat a mutation to infer success.
|
|
54
|
-
When asked to turn
|
|
54
|
+
When asked to turn Delivery Loop off, use `auto-continue off` for the
|
|
55
55
|
same target. OFF preserves the current native turn; an explicit stop uses the
|
|
56
56
|
existing task Stop control. A stopped, rejected, archived, settled, disconnected
|
|
57
57
|
or unavailable task stays within its existing boundary: report the returned
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
interface:
|
|
2
|
-
display_name: "SIMY
|
|
3
|
-
short_description: "
|
|
4
|
-
default_prompt: "Use $simy:continue to
|
|
2
|
+
display_name: "SIMY Continue automatically"
|
|
3
|
+
short_description: "Turn on Delivery Loop for this conversation"
|
|
4
|
+
default_prompt: "Use $simy:continue to turn on SIMY Delivery Loop for this conversation and report its actual work state."
|
|
5
5
|
policy:
|
|
6
6
|
allow_implicit_invocation: true
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: diagnose
|
|
3
|
-
description:
|
|
3
|
+
description: Check why it stopped (停止理由の確認) for a stopped or unresponsive SIMY task when the user says “SIMY CLIに相談して” or asks why it stopped. Distinguish a read-only check from an explicit request to repair and continue the original work. Environment diagnosis is `simy doctor`, not this entry.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
#
|
|
6
|
+
# Check why it stopped (停止理由の確認)
|
|
7
7
|
|
|
8
8
|
Use this entry for an explicit consultation, diagnosis, or repair-and-continue request, independently of Delivery Loop enrollment or permission to resume. Prefer `$SIMY_HOME/bin/simy` or `$HOME/.simy/bin/simy`. Inspect `--version` and `delivery --help` to confirm `consult` is available. If only `diagnose` exists, use the legacy command below for diagnosis and report repair as unavailable; never reinterpret a failed consult invocation as execution. An older installed CLI is a compatibility gap, never permission to switch its live runtime.
|
|
9
9
|
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: sqm-loop
|
|
3
|
-
description: Run
|
|
3
|
+
description: Run a SIMY SQM check on the repository and changes discussed in the current Codex thread, on request. Use when the user asks SIMY to start SQM or quality-check the current work now. The opted-in pre-PR gate is the separate simy-sqm-pr-check skill.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# SIMY SQM
|
|
6
|
+
# SIMY SQM check
|
|
7
7
|
|
|
8
8
|
Treat the current Codex thread, its attachments, and the active repository as the request context. Convert that context into explicit quality expectations, then verify the actual repository state; do not merely summarize the conversation.
|
|
9
9
|
|
|
@@ -22,7 +22,7 @@ Investigate and repair authorized reversible setup; preserve real account,
|
|
|
22
22
|
organization, device and provider authority. Do not guess credentials or invent a
|
|
23
23
|
successful scope. A connected scope is not quality acceptance.
|
|
24
24
|
|
|
25
|
-
## Run the
|
|
25
|
+
## Run the SQM check
|
|
26
26
|
|
|
27
27
|
1. Identify the repository root and the user-visible behavior or incident discussed in the current thread.
|
|
28
28
|
2. Preserve unrelated user changes and follow repository instructions.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
interface:
|
|
2
|
-
display_name: "SIMY SQM
|
|
3
|
-
short_description: "Run SQM
|
|
2
|
+
display_name: "SIMY SQM check"
|
|
3
|
+
short_description: "Run an SQM check on the current work"
|
|
4
4
|
default_prompt: "Use $sqm-loop to quality-check the work in this thread."
|
|
5
5
|
policy:
|
|
6
6
|
allow_implicit_invocation: true
|
package/src/console/app.js
CHANGED
|
@@ -176,7 +176,7 @@ export function AgenticLoopConsole({ agent, onQuit = () => {}, remoteConnections
|
|
|
176
176
|
}
|
|
177
177
|
if (!selectedRun) {
|
|
178
178
|
if (command.type !== "guidance") {
|
|
179
|
-
setNotice("That command requires a selected
|
|
179
|
+
setNotice("That command requires a selected Delivery Loop run.");
|
|
180
180
|
return;
|
|
181
181
|
}
|
|
182
182
|
setBusy(true);
|
|
@@ -213,12 +213,12 @@ export function AgenticLoopConsole({ agent, onQuit = () => {}, remoteConnections
|
|
|
213
213
|
setNotice("Guidance queued for the next executor handoff.");
|
|
214
214
|
} else {
|
|
215
215
|
await agent.controls.continue(selectedRun, command.message);
|
|
216
|
-
setNotice("Human guidance accepted. The
|
|
216
|
+
setNotice("Human guidance accepted. The Delivery Loop is continuing.");
|
|
217
217
|
}
|
|
218
218
|
break;
|
|
219
219
|
case "decision":
|
|
220
220
|
await agent.controls.applyDecision(selectedRun, command);
|
|
221
|
-
setNotice("Human decision recorded. The
|
|
221
|
+
setNotice("Human decision recorded. The Delivery Loop is continuing.");
|
|
222
222
|
break;
|
|
223
223
|
case "recheck":
|
|
224
224
|
await agent.controls.recheck(selectedRun);
|
|
@@ -297,7 +297,7 @@ export function AgenticLoopConsole({ agent, onQuit = () => {}, remoteConnections
|
|
|
297
297
|
await agent.controls.selectRepository(selectedRun, match);
|
|
298
298
|
setDetailOpen(true);
|
|
299
299
|
setDetailScrollFromEnd(0);
|
|
300
|
-
setNotice(`Authorized ${match.repository}. The same
|
|
300
|
+
setNotice(`Authorized ${match.repository}. The same Delivery Loop run is continuing.`);
|
|
301
301
|
} else if (selectedRun) {
|
|
302
302
|
setNotice(
|
|
303
303
|
`${selectedRun.request.repository} was not found under ${result.root}. Run /scan <path> for another authorized root.`,
|
|
@@ -328,7 +328,7 @@ export function AgenticLoopConsole({ agent, onQuit = () => {}, remoteConnections
|
|
|
328
328
|
setRepositoryPicker(null);
|
|
329
329
|
setDetailOpen(true);
|
|
330
330
|
setDetailScrollFromEnd(0);
|
|
331
|
-
setNotice(`Authorized ${selected.repository}. The same
|
|
331
|
+
setNotice(`Authorized ${selected.repository}. The same Delivery Loop run is continuing.`);
|
|
332
332
|
} else {
|
|
333
333
|
const verified = await agent.controls.selectRepository(null, selected);
|
|
334
334
|
setDraft((current) => ({
|
|
@@ -510,7 +510,7 @@ export function AgenticLoopConsole({ agent, onQuit = () => {}, remoteConnections
|
|
|
510
510
|
if (confirmStop) void execute("/stop");
|
|
511
511
|
else {
|
|
512
512
|
setConfirmStop(true);
|
|
513
|
-
setNotice("Press x again to stop the selected
|
|
513
|
+
setNotice("Press x again to stop the selected Delivery Loop run.");
|
|
514
514
|
}
|
|
515
515
|
return;
|
|
516
516
|
}
|
|
@@ -641,7 +641,7 @@ function NewTask({ draft, loginUrl, width }) {
|
|
|
641
641
|
dimColor: true,
|
|
642
642
|
wrap: "wrap",
|
|
643
643
|
children:
|
|
644
|
-
"Describe the outcome. SIMY will choose a one-time Local Task or
|
|
644
|
+
"Describe the outcome. SIMY will choose a one-time Local Task or a Delivery Loop.",
|
|
645
645
|
}),
|
|
646
646
|
jsx(Text, { children: " " }),
|
|
647
647
|
jsx(Text, {
|