Sandboxes
One-Tap Commands with actions.json
actions.json is for the developer tasks you run by hand — test suites, linters, code generators, database resets, dev-server restarts. List them once, commit, and they're one tap away from your phone.
Drop a small actions.json file at the root of your repository and RepoGo shows an Actions entry in the chat menu for that workspace. Open it and every command you listed is a row with a Run button. Tap one — or several at once — and RepoGo runs each command on your connected environment, shows a live spinner while it works, and tells you how it ended: a green alert with Exit code 0 on success, a red one with the exit code on failure.
No file yet? You don't have to leave the app. Open Actions on a project with no actions.json and there's a Create actions.json button — one tap writes a starter file at the repo root and drops you straight into the editor on it. Once a file exists, the pencil in the Actions header reopens it (and lets you pick, if your repo has more than one).
A quick example#
Create a file named actions.json at the root of your repository:
{
"actions": [
{ "name": "test", "label": "Run Tests", "cmd": "npm test" }
]
}Commit it, open the project in RepoGo, and tap the ⋯ menu in the chat header. You'll see Actions → a Run Tests row. Tap Run: the command executes in your environment, the row spins while it works, and when it exits you get the result — the exit code, how long it took, and the full output a tap away.
Actions run only when you ask. Nothing in
actions.jsonruns on its own — not on boot, not on file changes. One tap, one run.
How it works#
- You commit
actions.jsonto your repo root. It lives with your code, so it's the same on every clone and can differ per branch. - RepoGo reads it when you open Actions. The Actions item is always in the chat menu for a connected environment; with no file yet it offers to create one.
- A tap runs the command in your environment's shell — your Mac (via RepoGo Host) or your cloud sandbox — from the folder you specify.
- The exit code decides the outcome. Exit
0shows a green success alert; anything else shows a red alert with the code. Each row also keeps its result — exit code, duration, and the command's stdout/stderr — so you can expand it and read exactly what happened.
Run as many as you like in parallel: each row has its own spinner and its own result. Kicking off the test suite doesn't block you from running codegen next to it.
The file in full#
{
"actions": [
{
"name": "test",
"label": "Run Tests",
"cmd": "npm test",
"cwd": "apps/web",
"timeoutMs": 300000
},
{ "name": "gen", "label": "Generate API Client", "cmd": "npm run gen:api" }
]
}Fields#
| Field | Required | What it does |
|---|---|---|
name | Yes | A short, stable id for the action. Use lowercase letters, numbers, and dashes. |
cmd | Yes | The command to run. It executes in a shell, so pipes, $VARS, &&, and scripts all work. Its exit code decides success (0) or failure (anything else). |
label | No | The text shown on the row. Defaults to name — use it for something friendlier, like "Run Tests" instead of test. |
cwd | No | The folder to run in, relative to your repo root. Leave it out to run at the root. Handy in monorepos: apps/web. |
timeoutMs | No | How long the command may run, in milliseconds. Defaults to 30 seconds — set this higher for long tasks like test suites (e.g. 300000 for 5 minutes). Detached actions are capped at 10 minutes. |
detach | No | Set true to fire-and-forget: RepoGo starts the command and returns immediately, and the row shows a Stop button instead of a result. Good for "kick it off and move on" tasks. Detached runs report no output or exit code, and are stopped automatically after 10 minutes at most. |
island | No | Set true to pin the action to the repo island above the chat composer. It gets its own page in the island's swipeable pager, so you can swipe to it and run (or stop) the action without opening the Actions sheet. iPhone/iPad only. |
A few things to know:
- Every
actions.jsonin the repo counts. RepoGo searches subfolders too and shows them all together, labeled by the folder they came from — so a monorepo can keep each app's actions next to that app. - Entries missing
nameorcmdare skipped, and each file caps at 20 actions. - Fire-and-await, or fire-and-forget. A normal action blocks until it finishes and reports its exit code. A
detach: trueaction starts and immediately hands you a Stop button — you can stop it any time (even after closing and reopening the app), but you won't get a completion alert. Neither is a service: for long-lived dev servers and watchers, useenvironment.jsoninstead.
Actions vs. tests vs. services#
| You want to… | Use |
|---|---|
| Start dev servers automatically when the environment wakes | environment.json |
| Trigger a task on demand (tests, lint, codegen, reset) | actions.json |
Both live in your repo, so setting up a new project is just: add the file, commit, done.