You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit 217e9ea
Browse filesBrowse the repository at this point in the historyBrowse files
On macOS the sandbox launcher starts the shell through the system's
sandbox-exec, with a profile that allows writes only beneath the same
directories as on Linux (plus the macOS cache folders); reads stay
unrestricted. Directories are also given under their real paths, since
/tmp and the temp folders are links into /private. A gitagent started
inside the sandbox stays in it instead of failing to enter another.
The sandbox crate's apply() becomes prepare(), which returns how to start
the program: directly on Linux, where the launcher restricts itself as
before, or through sandbox-exec on macOS. No new dependency.
CI gains a macOS job that runs the sandbox tests and checks that the
launcher refuses a write outside the allowed folders. The docs no longer
list macOS as running without a sandbox.
@@ -125,7 +125,7 @@ Steps 4 to 9 repeat until the stop check accepts, the agent replies in conversat
125
125
| D19 | Parallel work as a `plan` tool over sub-agents, with a reconciling step, opt-in per agent | Large jobs finish faster and more consistently; bounded phases and tasks keep the cost predictable |
126
126
| D20 | Schedules run in-process while `gitagent schedule start` runs | The same behaviour as before; anything that must not be missed calls `gitagent schedule run` from an external scheduler |
127
127
| D21 | The terminal is the interface | One console with tool lines, approvals, a task board and command suggestions; no web server to secure |
128
-
| D22 | Landlock and seccomp around the agent's shell, not around gitagent | The agent cannot write outside its folders, while gitagent can still record |
128
+
| D22 | Landlock and seccomp (on macOS, a `sandbox-exec` profile) around the agent's shell, not around gitagent | The agent cannot write outside its folders, while gitagent can still record |
129
129
| D23 |`--bench` reads only committed files, and a test pins its prompt and tools | Product features cannot change a scored run by accident |
130
130
| D24 | Everyday defaults keep the benchmark's guards, except the snapshot; the console has no time limit unless one is set | The loop detector, stop check and context clearing help in any repository; a person at the console stops a turn with Ctrl-C, while runs nobody watches keep a 30-minute ceiling; the snapshot costs up to 15 seconds per start in a project the user already knows |
131
131
| D25 | Sub-agents are warned as their turns run low, may be given their own turn limit (up to 100), and come back marked partial when they run out | A review cut off mid-step wastes its whole cost; a warned one hands back what it found, and the lead re-runs only what is marked partial |
@@ -180,7 +180,7 @@ gitagent/
180
180
│ ├─ mcp/ the MCP client
181
181
│ ├─ record/ trajectory, counters, events
182
182
│ ├─ repo/ clone, branch, commit, push
183
-
│ ├─ sandbox/ Landlock and seccomp
183
+
│ ├─ sandbox/ Landlock and seccomp; sandbox-exec on macOS
184
184
│ ├─ learn/ offline learning of lessons
185
185
│ └─ sdk/ the in-process Rust library
186
186
├─ clients/ python/ and typescript/: thin clients over --ipc
Dependencies are kept few: `tokio`, `reqwest` with rustls, `serde`, `serde_json`, a YAML parser, `clap`, `regex`, `portable-pty`, `anyhow`, `thiserror`, `async-trait`, and `landlock` with a seccomp filter for the sandbox. Token counts are estimated at four bytes per token instead of linking a tokenizer. Release builds are static musl binaries for x86_64 and aarch64 Linux, plus macOS.
204
+
Dependencies are kept few: `tokio`, `reqwest` with rustls, `serde`, `serde_json`, a YAML parser, `clap`, `regex`, `portable-pty`, `anyhow`, `thiserror`, `async-trait`, and `landlock` with a seccomp filter for the sandbox (on macOS it uses the system's `sandbox-exec`, so no dependency). Token counts are estimated at four bytes per token instead of linking a tokenizer. Release builds are static musl binaries for x86_64 and aarch64 Linux, plus macOS.
Copy file name to clipboardExpand all lines: README.md
+2-3Lines changed: 2 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -545,7 +545,6 @@ gitagent 3 replaces the TypeScript packages (1.x and 2.x) with one binary. What
545
545
-**Not carried over.**`--voice`; the remote `--sandbox` (the binary prints a one-line note); a plugin's `entry` JavaScript (plugins contribute tools, skills, hooks and prompt text through files); the 1.x telemetry adapter (OTLP export replaces it).
546
546
-**Task list.** 1.x's `task_tracker` kept a searchable list of tasks. gitagent 3's `todo` is a plain checklist the agent rewrites whole; the name `task_tracker` still maps to it in tool lists and hooks.
547
547
-**Learning.** 1.x's online skill learning, which adjusted a skill's confidence after each use, is gone. Lessons are learned from finished runs instead (`learning: online` or `gitagent learn`, below) and go into the system prompt; skills are not changed.
548
-
-**Sandbox on macOS.** The sandbox is Linux-only (Landlock and seccomp). On macOS the agent's shell runs without one, where 1.x's remote sandbox worked on every system.
549
548
-**Scripts without a runtime.** 1.x ran every declared tool with `sh` unless `runtime` was set. gitagent 3 picks the interpreter by extension (`.py` with `python3`, `.js` with `node`, `.rb` with `ruby`, …), so such tools now run instead of failing.
550
549
551
550
## Configuration
@@ -582,7 +581,7 @@ With `learning: online`, gitagent learns from each task it completes. The model
582
581
583
582
### Sandbox
584
583
585
-
On Linux, outside benchmark runs, the agent's shell runs under Landlock: it may write only to the working folder, the output folder, the temp folders and `~/.cache`. A seccomp filter blocks system calls such as `mount`, loading kernel modules and `reboot`. Set `sandbox: off` in `gitagent.yaml` to disable it, or `sandbox: on` to require it. In benchmark runs, writing under `/tests` is refused; elsewhere `/tests` is an ordinary path.
584
+
Outside benchmark runs, the agent's shell runs in a sandbox: it may write only to the working folder, the output folder, the temp folders and `~/.cache` (on macOS also `~/Library/Caches`). Reading is not restricted. On Linux this is Landlock, plus a seccomp filter that blocks system calls such as `mount`, loading kernel modules and `reboot`. On macOS it is the system's `sandbox-exec` with a profile that refuses other writes. Other systems run the shell without a sandbox. Set `sandbox: off` in `gitagent.yaml` to disable it, or `sandbox: on` to require it. In benchmark runs, writing under `/tests` is refused; elsewhere `/tests` is an ordinary path.
586
585
587
586
## Terminal-Bench with Harbor
588
587
@@ -624,7 +623,7 @@ It learns only from tasks listed under `dev` in a split file (`--split`, default
624
623
625
624
**My files are not being used.** Run `gitagent validate <dir>`: it lists every problem with a file and line number. Warnings at startup (`gitagent: warning: …`) name files that were skipped.
626
625
627
-
**A command or file write is refused.** On Linux the agent's shell runs in a sandbox that allows writes only under the working folder, the output folder, the temp folders and `~/.cache`. Set `sandbox: off` in `gitagent.yaml` if the agent must write elsewhere. A hook may also have blocked the action; the `$` line says so in its result.
626
+
**A command or file write is refused.** On Linux and macOS the agent's shell runs in a sandbox that allows writes only under the working folder, the output folder, the temp folders and `~/.cache`. Set `sandbox: off` in `gitagent.yaml` if the agent must write elsewhere. A hook may also have blocked the action; the `$` line says so in its result.
628
627
629
628
**The session pauses with `! approval needed`.** The agent's compliance settings ask a person for that action. Answer `y` or `n`. Without a terminal, for example in a pipe, such requests are denied.
0 commit comments