Skip to content

fix: [SDK-5479] run checkpoint sends inside the sandbox and escalate one flush per skill - #65

Merged
sherwinski merged 1 commit into
mainfrom
sherwin/sdk-5479
Oct 22, 2026
Merged

sherwinski merged 1 commit into
mainfrom
sherwin/sdk-5479

Conversation

@sherwinski

@sherwinski sherwinski commented Oct 12, 2026 •

Copy link
Copy Markdown
Collaborator

One Line Summary

In a sandboxed runtime (i.e. Codex in default mode) the skills now send a flush of telemetry milestones so as to cut down on the number of network approval prompts asked of the user.

Motivation

In testing (specifically Codex in default mode), users noticed that plugin asks for permission for everything; which can be highly disruptive. Codex's default Auto mode runs workspace commands without a prompt and asks before each command that needs the network. These approvals added up during the time of the run.

Now, the plugin will hold multiple telemetry checkpoints and send them once at the end of the run. This should cut down of number of user request prompts for Codex users significantly.

Ticket: SDK-5479, sub-issue of SDK-5444.

@kalley kalley left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The rules read the same across the three skills and both contracts, and the exit-3 claims match onesignal_api.py and resolve_sdk_version.py. One non-blocking note inline.

Comment thread skills/setup/SKILL.md
the event in `.onesignal/pending.jsonl`, and exits 0. In a sandbox that output is the
expected result, not an error: do not re-run the call with escalation, and do not stop
to report it.
- **Escalate the closing `flush` (Step 8) once.** One approval sends every held event.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A run that stops after Step 2 never gets to this flush, for example after a rejected diff, or a terminal failure in credentials. In a sandbox, that run's fail row then stays in pending.jsonl until a later run flushes it. Those are the rows that the "record a failure the moment you are blocked" rule is there to keep. Should a stop also escalate one flush before it ends the turn? Doesn't block.

@abdulraqeeb33 abdulraqeeb33 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good. checkpoint.sh keeps every held event until the closing flush, and the escalate-after-exit-3 rule matches both helpers. Nothing to add beyond Kalley's note about runs that stop before the closing flush.

…one flush per skill

A sandboxed host such as Codex approves one command at a time. The skill
text told the agent to request network approval once before Step 0, and
no host has that mechanism, so an agent escalated every checkpoint.sh
call and the user answered one prompt per milestone.

The skills now run every milestone call inside the sandbox, where the
script holds a blocked event and exits 0, and escalate only the closing
flush of each skill. The version resolver and the API probes escalate
only after the sandbox blocked them once. Safety contract 15 and the
telemetry contract state the same rule, and the README Codex section
names the prompts that remain.
@sherwinski
sherwinski merged commit 9432d3b into main Oct 22, 2026
5 checks passed
@sherwinski
sherwinski deleted the sherwin/sdk-5479 branch October 22, 2026 20:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants