archal-ci skill
helps a coding agent fit the lifecycle into your existing runner. Review its
plan before allowing workflow edits.
Start with one protected workflow
Use a manual, nightly, or protected main-branch trigger first. Do not expose an Archal secret to code from an untrusted fork. Never usepull_request_target
for a workflow that checks out and executes pull-request code.
Use a separate CI key
Do not reuse the coding-agent pairing credential. Create a CI key restricted to the environments and lifecycle scopes the workflow needs. Store it in the CI secret manager. The test subprocess must not inheritARCHAL_API_KEY. It should receive only
the provider URLs and short-lived headers returned for its sandbox.
Cancellation-safe lifecycle
- Derive an idempotency key from provider run ID, attempt, job, matrix values, shard, and the create-body hash.
- Create with
--detachso the sandbox ID is available before readiness. - Write the create response to a mode
0600file without printing it. - Wait for readiness.
- Mask and inject only returned provider connections.
- Remove
ARCHAL_API_KEYfrom the test subprocess environment. - Run the intended integration or eval suite.
- Request teardown in an always-run cleanup step.
- Preserve the original test failure separately from a cleanup failure.
Bound cost and concurrency
- create only the environments the job needs
- use one sandbox per independent job or shard
- keep the initial TTL close to the job timeout
- cap matrix parallelism below the workspace session limit
- do not enable automatic recharge solely for CI
- destroy as soon as the test finishes
Prove the integration before broadening it
The first CI canary should show:- one provider-shaped read
- one explicit before-state snapshot
- one meaningful mutation
- one diff against that snapshot
- one reset to the declared baseline
- durable teardown acceptance
- final destruction when the runner remains available
Current limitations
- There is no verified GitHub Actions, GitLab CI, Buildkite, or CircleCI scaffold yet.
- CLI create, wait, status, and renew responses contain scoped credentials. Capture them in
mode-
0600files, mask returned credential values, and do not print them. - Evidence export is metadata-only and does not include raw request or state payloads.
- Renewal rotates provider credentials, so long jobs must refresh their clients.
- Runner loss relies on TTL and orphan reconciliation after the process disappears.
