Two engines, both runnable with Ed’s laptop closed. Pick per task; both follow ../CONVENTIONS.md.
| GitHub Actions builder | Cloud session (claude.ai/code) | |
|---|---|---|
| Started by | @claude in an issue or PR comment — from the GitHub app on a phone too |
Ed opening a session (web or phone app) |
| Runs on | a GitHub runner (Linux, 4 cores, 16 GB; free for public repos) | an Anthropic VM (Ubuntu, 4 cores, 16 GB, no compute charge) |
| Billed to | Ed’s Claude subscription, via the repo’s CLAUDE_CODE_OAUTH_TOKEN |
Ed’s Claude subscription |
| Lasts | up to 6 h per run (timeout-minutes) |
until idle; the conversation survives, running processes do not |
| Opens PRs | no — pushes a claude/… branch and comments a link |
yes |
| Talks via | the issue or PR it was mentioned on | its draft PR; a coordinator nudges it with claude -p "…" --cloud <session> |
claude setup-token in a terminal, sign in, copy the token it prints once.gh secret set CLAUDE_CODE_OAUTH_TOKEN -R edsaperia/<project> and paste the token (or GitHub → repo → Settings → Secrets and variables → Actions → New repository secret).project-stub.yml to <project>/.github/workflows/claude.yml, fill in node-version and setup for what the project needs, and commit it to main (issue and comment triggers only run from the default branch).@claude say hello — a builder should reply on the issue within a few minutes.../projects.md.Safety, by design of anthropics/claude-code-action: only people with write access can trigger it; it reads only the comments of readers (Ed and itself by default); it never pushes to main, merges, or edits workflow files.
cdn.playwright.dev for Playwright browsers).npx -y playwright@<exact version> install chromium); the builder runs the project’s own install itself. Keep any version pinned here in step with the project..claude/settings.json (the standing permissions, dev-ops PR #11) is honoured only by a session on a single repository in the default mode, a session on two repositories reads no permission rules from it at all, and the edit the data in “Questions for Ed” consent is not covered by allow rules in either mode. .claude/settings.json also carries defaultMode: "auto", and it works: a new session on a repo whose settings file has that line opens in Auto without anyone choosing it (Ed, 2026-09-30, on dev-ops). So this step is automatic on every repo whose settings file carries the line; choose the mode by hand only in a session opened before the line was merged, or on a repo without it..claude/skills/page-contract/ from dev-ops into the repo (in a repo where main deploys, by a Merge question like any other change), and make sure the environment’s variables carry CLAUDE_CODE_PLUGIN_DIRS with that repo’s path, as claude/QUESTIONS-PAGE.md, The page-contract mod, gives it. Without the variable a cloud session does not load the mod.The order the dev-ops coordinator follows when Ed brings a project in, new or existing (2026-10-02, admissions). Each step names who does it; Ed’s steps go on his questions page as tasks with a one-tap button.
https://github.com/new?owner=edsaperia&name=<project>&visibility=private (a cloud session cannot create one: the safety check and GitHub’s proxy both refuse it, Witch 2026-10-03), then the coordinator is opened on it. For an existing one, attach it with add_repo. If it can’t be reached, the Claude GitHub app needs access to it, which only the owner can give. Put a task on Ed’s page with a large button to https://github.com/apps/claude/installations/select_target, since nothing else can proceed.main deploys, and how;Summarise this for Ed as an update on his page.
main deploys):
.claude/settings.json with the standing permissions and defaultMode: "auto" (copy dev-ops’s);.claude/skills/page-contract/ (B6);CLAUDE.md, if the project has none: what it is, how to test, whether main deploys, and a glossary heading.@claude builders. This is the only step with a secret in it.CLAUDE_CODE_PLUGIN_DIRS (B6).<project>. Read AGENTS.md and CONVENTIONS.md from edsaperia/dev-ops main, then claude/QUESTIONS-PAGE.md; then ask me to paste my questions page’s link. Ed then pastes the page link into it.sets coordinators/<project> with its session link;../projects.md;A local coordinator’s conversation is on disk: claude --continue in the project folder brings it back. Cloud sessions and Actions runs are unaffected by the laptop; their work is on their pushed branches.