okami.mom/albedo
git clone https://git.nkp.pet/okami.mom/albedo
076ff8a
main
Overview (pre-alpha)

Albedo is an agentic coding harness that can act on your device and soon able to manage sessions on other devices with agents that can act remotely on different machines or within containers. Our hope is that it being built on BEAM allows it to maintain low memory usage while running many concurrent agents and subagents across devices.
It is daemonized with the CLI and (future) WebUI being clients of this daemon. This ensures the agents can be programatically created, controlled, and even stopped all while still providing an experience similar to other harnesses like Claude Code and Codex. Albedo provides a Python REPL for the agents to use as a scratchpad and data manipulation allowing them to experiment, reason, and play with code before actually writing it down. This is similar to what other harnesses call CodeMode, and is based on prime-agent's's Python REPL and design.
The CLI is written in Go and uses the Charm stack.
# build native go cli go -C cli build-o bin/albedo ./cmd/albedo./cli/bin/albedo # or to install it globally go -C cli install ./cmd/albedoalbedo
When installed globally outside the checkout, set ALBEDO_ROOT to the absolute repo path if the daemon needs to be started:
ALBEDO_ROOT =/path/to/albedoalbedo
or embed the root at install time:
go -C cli install-ldflags "-X main.buildRoot= $( pwd ) " ./cmd/albedo
The default Nix package includes the client, compiled server, Python runtime, and Chrome Headless Shell for browser automation. The development shell also includes the browser:
nix build .#albedonix run .-- --help # package checks, with a local mock provider (no model credentials): python3 test/manual/nix_package_smoke.py" $ PWD /result/bin/albedo" ALBEDO_NO_BROWSER =1ALBEDO_TEST_BINARY =" $ PWD /result/bin/albedo" python3 test/daemon/integration.py
The client and server also build separately:
nix build .#albedo-client--out-link result-clientnix build .#albedo-server--out-link result-serverALBEDO_DAEMON =" $ PWD /result-server/bin/albedo-daemon" ./result-client/bin/albedo
optional: view, which lets the model see its changes and code as highlighted
images for a final review pass. needs cargo.
native/render/install.sh # then enable `view` in /extensions
CLI usage
Run albedo to open the terminal interface, or use --prompt to print a reply:
albedo -p "Explain this project" albedo --prompt "Run the checks" --session SESSION_ID--timeout 10malbedo resume SESSION_IDalbedo sessions--json albedo sessions read SESSION_ID 3# the newest 3 turns (default 1); --json for structure albedo sessions send SESSION_ID"message"
Session IDs can be shortened to any unique prefix. Run albedo --help or
albedo COMMAND --help for command options.
To inspect disk usage without starting the daemon, run albedo storage --json
or albedo storage --sessions. Offline database inspection and cleanup use the
local daemon executable without starting its server. Set ALBEDO_DAEMON to a
packaged executable or ALBEDO_ROOT to a source checkout. These storage commands
do not require Python. To clean up local files, stop the daemon first:
albedo daemon--stop albedo storage prune--backups
Cleanup shows a preview and asks for confirmation. To permanently delete sessions,
use albedo storage prune --session SESSION_ID, repeating --session for each
full ID. Add --yes to skip confirmation in scripts.
formatting
nix fmt# treefmt: Nix, Gleam, Go, Python, and shell files pre-commit install# once per checkout; available in `nix develop` pre-commit run--all-files # format, lint Python, and type-check Python gleam format src test# fix Gleam formatting ruff format priv/python test# fix Python formatting ruff check# lint Python ty check# type-check the kernel, plugins, and tests
The commit hook formats staged files and runs the Python checks; it needs
gleam on PATH.
tests
./test.sh # gleam, native go cli, and daemon suites go -C cli test ./...# native go cli tests go -C cli vet ./...# native go cli vet gleam test# gleam suite
test/manual holds opt-in checks that need a packaged binary or real credentials.
todo
- [] flesh out plugin system more
- [] sdk and -p, command to print out most recent assistant message from session
- [✓] compaction strategy plugins LCM and snapcompact
- [] compaction evaluations: old-fact recall, corrected instructions, tool pairing, images, restarts, and token/cost comparisons
- [✓] subagents plugin
- [] social plugins like discord
- [✓] plugins like heartbeat and skills
- [ish] oauth that we shamelessly rip from omp
- [] ai powered approve for me (jev/llm)
- [] improve verbose mode on tui
- [] webui
- [] connect to other albedos on tui/webui and manage sessions
- [ish we have remote but model opts into it, not yet able to have the model natively act in a different machine] ability to offload tools like python/bash onto other machines/containers
1# Overview (pre-alpha) 2 3 4 5Albedo is an agentic coding harness that can act on your device and soon able to manage sessions on other devices with agents that can act remotely on different machines or within containers. Our hope is that it being built on BEAM allows it to maintain low memory usage while running many concurrent agents and subagents across devices. 6 7It is daemonized with the CLI and (future) WebUI being clients of this daemon. This ensures the agents can be programatically created, controlled, and even stopped all while still providing an experience similar to other harnesses like Claude Code and Codex. Albedo provides a Python REPL for the agents to use as a scratchpad and data manipulation allowing them to experiment, reason, and play with code before actually writing it down. This is similar to what other harnesses call CodeMode, and is based on [prime-agent's](https://github.com/PrimeIntellect-ai/prime-agent/)'s Python REPL and design. 8 9The CLI is written in Go and uses the Charm stack. 10 11``` sh 12# build native go cli 13go -C cli build -o bin/albedo ./cmd/albedo 14./cli/bin/albedo 15 16# or to install it globally 17go -C cli install ./cmd/albedo 18albedo 19``` 20 21When installed globally outside the checkout, set `ALBEDO_ROOT` to the absolute repo path if the daemon needs to be started: 22``` sh 23ALBEDO_ROOT=/path/to/albedo albedo 24``` 25or embed the root at install time: 26``` sh 27go -C cli install -ldflags "-X main.buildRoot=$(pwd)" ./cmd/albedo 28``` 29 30The default Nix package includes the client, compiled server, Python runtime, and Chrome Headless Shell for browser automation. The development shell also includes the browser: 31 32``` sh 33nix build .#albedo 34nix run . -- --help 35# package checks, with a local mock provider (no model credentials): 36python3 test/manual/nix_package_smoke.py "$PWD/result/bin/albedo" 37ALBEDO_NO_BROWSER=1 ALBEDO_TEST_BINARY="$PWD/result/bin/albedo" python3 test/daemon/integration.py 38``` 39 40The client and server also build separately: 41 42``` sh 43nix build .#albedo-client --out-link result-client 44nix build .#albedo-server --out-link result-server 45ALBEDO_DAEMON="$PWD/result-server/bin/albedo-daemon" ./result-client/bin/albedo 46``` 47 48optional: `view`, which lets the model see its changes and code as highlighted 49images for a final review pass. needs cargo. 50 51``` sh 52native/render/install.sh # then enable `view` in /extensions 53``` 54 55## CLI usage 56 57Run `albedo` to open the terminal interface, or use `--prompt` to print a reply: 58 59``` sh 60albedo -p "Explain this project" 61albedo --prompt "Run the checks" --session SESSION_ID --timeout 10m 62albedo resume SESSION_ID 63albedo sessions --json 64albedo sessions read SESSION_ID 3 # the newest 3 turns (default 1); --json for structure 65albedo sessions send SESSION_ID "message" 66``` 67 68Session IDs can be shortened to any unique prefix. Run `albedo --help` or 69`albedo COMMAND --help` for command options. 70 71To inspect disk usage without starting the daemon, run `albedo storage --json` 72or `albedo storage --sessions`. Offline database inspection and cleanup use the 73local daemon executable without starting its server. Set `ALBEDO_DAEMON` to a 74packaged executable or `ALBEDO_ROOT` to a source checkout. These storage commands 75do not require Python. To clean up local files, stop the daemon first: 76 77``` sh 78albedo daemon --stop 79albedo storage prune --backups 80``` 81 82Cleanup shows a preview and asks for confirmation. To permanently delete sessions, 83use `albedo storage prune --session SESSION_ID`, repeating `--session` for each 84full ID. Add `--yes` to skip confirmation in scripts. 85 86formatting 87 88``` sh 89nix fmt # treefmt: Nix, Gleam, Go, Python, and shell files 90pre-commit install # once per checkout; available in `nix develop` 91pre-commit run --all-files # format, lint Python, and type-check Python 92gleam format src test # fix Gleam formatting 93ruff format priv/python test # fix Python formatting 94ruff check # lint Python 95ty check # type-check the kernel, plugins, and tests 96``` 97 98The commit hook formats staged files and runs the Python checks; it needs 99`gleam` on PATH. 100 101tests 102 103``` sh 104./test.sh # gleam, native go cli, and daemon suites 105go -C cli test ./... # native go cli tests 106go -C cli vet ./... # native go cli vet 107gleam test # gleam suite 108``` 109 110`test/manual` holds opt-in checks that need a packaged binary or real credentials. 111 112todo 113- [] flesh out plugin system more 114- [] sdk and -p, command to print out most recent assistant message from session 115- [✓] compaction strategy plugins LCM and snapcompact 116- [] compaction evaluations: old-fact recall, corrected instructions, tool pairing, images, restarts, and token/cost comparisons 117- [✓] subagents plugin 118- [] social plugins like discord 119- [✓] plugins like heartbeat and skills 120- [ish] oauth that we shamelessly rip from omp 121- [] ai powered approve for me (jev/llm) 122- [] improve verbose mode on tui 123- [] webui 124- [] connect to other albedos on tui/webui and manage sessions 125- [ish we have remote but model opts into it, not yet able to have the model natively act in a different machine] ability to offload tools like python/bash onto other machines/containers