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. |
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.