Appearance
Testing
Pond's tests run the real processes wherever they can, against fakes for everything that would touch your agents, your screen or the network.
Never the real thing
- A fake Claude Code. End-to-end tests run
pond task newwith the real helper and the realpondCLI, and a small script stands in forclaude. It draws an input box, so the launcher's wait-and-type path runs for real. No test starts a real agent. - A temp Pond folder. Every test uses its own
POND_HOME, never~/.pond. - No Keychain. Tests use a seal key store that serves temp folders only and refuses any other.
- Fake backends. Pond Computer runs with
--fake-backends: fake capture, input, Accessibility and apps. Nothing is captured or posted. The browser has a fake engine for tests that do not need WebKit. Notifications go to a fake centre. - A local relay. Relay tests run the relay on
127.0.0.1only. Git pushes go to a bare repo in a temp folder. - No reports. The send guard blocks crash and usage reports under tests. The telemetry path is checked against a fake endpoint on loopback.
Time without sleeps
Timers and locks take an injected clock. Tests move a manual clock forward instead of sleeping, so a 120-second confirmation or a 20-second idle lease runs in milliseconds and gives the same result on a busy machine.
Security tests first
For security fixes, the test is written first and run against the old code, where it must fail. Examples: an agent's raw JSON written into a settings file, a stranger's request against the relay's quotas, or an agent's shell naming another agent's id.
Under load
A test that passes on a quiet machine can still hide a race. Pond's suites are also run with CPU load generators at load averages of 40 to 190, many times in a row. Each failure is traced to a cause before it is fixed.
Races found this way, each fixed in the product with a test that failed on the old code:
- Worktree monitor. While
git worktree addheld its lock, a slow read under load re-created the file-event stream, and the event for the unlock was dropped with the old stream. A worktree could show as locked for 30 seconds. The fix schedules one more read after each re-watch. - Computer-use lock events. Two threads could deliver event batches out of order, so an agent showed as driving after its turn ended. Now one thread delivers at a time, in order.
- Friends client. Two set requests to the relay could land in the wrong order, so the relay forgot a friend's drop or a group member. Every set request now holds a lock and reads its set inside it.
Budgets
Pond aims to stay light: under about 100 MB and about 0% CPU when idle. Measurement scripts start a release build with fake agents in a temp folder and record CPU, wakeups per minute and memory per process. Scenarios include idle, three agents streaming, and a browser tile opened and closed.
Release checks
A release smoke script checks the packaged app and the app inside its disk image: a valid signature on every binary, the hardened runtime, no debugging entitlement, no non-system libraries, and one version everywhere. It also runs the socket peer checks against a bundle signed the release way: Pond's own keys go in, and other callers are refused.