{"ref":"main","files":[{"name":".agents","kind":"directory","size":0,"lastCommitHash":"024a9d7711496209c6a344088f3ac1a17203fe50","lastCommitWhen":"2026-10-01T18:32:45-04:00","lastCommitMessage":"feat(skills): ship orchestrating-agents and complexity-review built in\n\nBoth are general, with no albedo internals, so they work for people who\nhave only the daemon and TUI. orchestrating-agents now also covers model\nchoice, shared contracts, verifying claims against the source, and staying\nin scope toward the user. The repo-local copy is removed because a project\nskill would shadow the built-in one.\n"},{"name":"cli","kind":"directory","size":0,"lastCommitHash":"b872b4b855be411c204fe71ff7d4b94f523bb47d","lastCommitWhen":"2026-10-02T15:16:16-04:00","lastCommitMessage":"fix(e2e): inherit installed tools for loopback hosts\n\nUse the actual environment PATH instead of fixed system directories. Keep the fixture Python first and quote the inherited path.\n"},{"name":"docs","kind":"directory","size":0,"lastCommitHash":"2597195dd9cc5a6bb3212ddd10e9c75b30b83d69","lastCommitWhen":"2026-10-02T15:16:16-04:00","lastCommitMessage":"docs(storage): explain online reports and offline cleanup\n\nDescribe who owns the report and when local diagnosis applies. Reported paths never authorize local deletion.\n"},{"name":"flake","kind":"directory","size":0,"lastCommitHash":"24e71780efca85d3b156eb01fbbad708d4cc2525","lastCommitWhen":"2026-10-01T12:58:04-04:00","lastCommitMessage":"fix(python): align tooling and Nix runtimes with Python 3.11\n"},{"name":"native","kind":"directory","size":0,"lastCommitHash":"b2e29fd276eda1ce2e5549e543d93bbfc594de1f","lastCommitWhen":"2026-09-30T21:33:07+03:00","lastCommitMessage":"requests: fit history images over the provider's edge by appending image fit rows to the transcript\n\nSigned-off-by: dawn <90008@klbr.net>\n"},{"name":"priv","kind":"directory","size":0,"lastCommitHash":"8679812f9a1556a9965ed134e65a17b95af7d3a1","lastCommitWhen":"2026-10-02T22:00:06+03:00","lastCommitMessage":"ssh: say when a probe is copying the kernel to a host, in the picker and the chat\n\nalbedo_ssh.py probe announces a staging step on its own line before it copies the bundle; albedo_ssh.erl passes lines on as they arrive and keeps the last as the answer. /hosts/:host carries step while warming, and the session status's kernel carries it while a remote kernel boots, so both read \"copying the kernel to chernobog…\" instead of \"connecting to\".\n\nSigned-off-by: dawn <90008@klbr.net>\n"},{"name":"robot-docs","kind":"directory","size":0,"lastCommitHash":"d1bf2ecde5302ebbf9cb7d6533ec9bbc81ec8ccd","lastCommitWhen":"2026-10-02T22:00:06+03:00","lastCommitMessage":"tui: after /cd, offer the /link add that links the folder the session left\n\na notice with the folder as stored, ready to paste; a later move replaces it, and a move away from a missing folder offers nothing.\n\nSigned-off-by: dawn <90008@klbr.net>\n"},{"name":"src","kind":"directory","size":0,"lastCommitHash":"91ebead9b124d521197e1f95b557e10853f6aaed","lastCommitWhen":"2026-10-02T15:11:31-04:00","lastCommitMessage":"feat(storage): serve typed usage reports from the daemon\n\nLet the daemon count its own storage. Online clients can leave Python and SQLite at home.\n"},{"name":"test","kind":"directory","size":0,"lastCommitHash":"b872b4b855be411c204fe71ff7d4b94f523bb47d","lastCommitWhen":"2026-10-02T15:16:16-04:00","lastCommitMessage":"fix(e2e): inherit installed tools for loopback hosts\n\nUse the actual environment PATH instead of fixed system directories. Keep the fixture Python first and quote the inherited path.\n"},{"name":".gitignore","kind":"file","size":362,"lastCommitHash":"a6d8ebe32b86b42c8845430466c96b5eeff8eb90","lastCommitWhen":"2026-10-02T12:50:48-04:00","lastCommitMessage":"feat(daemon): own startup defaults and readiness\n\nGive standalone and local launches the same defaults, protected discovery record, and honest health status.\n"},{"name":".pre-commit-config.yaml","kind":"file","size":940,"lastCommitHash":"b585313526672d775b6b1fe54ba3b25ad150e62b","lastCommitWhen":"2026-10-01T12:34:16-04:00","lastCommitMessage":"refactor(gleam): clean up code and enforce focused lint checks\n"},{"name":"agents.md","kind":"file","size":11468,"lastCommitHash":"2f43cb2da0aaeaff5bdef36f61fa5475e6c9ad2b","lastCommitWhen":"2026-10-02T21:59:35+03:00","lastCommitMessage":"links: link workspaces into one project, sharing memory and work items\n\n/link adds or removes peers in a workspace_links group. each member keeps writing its own memory and work items; reads cover the group (memory snapshot, grep and search; every work ledger read and change), so a gone member loses nothing and unlinking undoes nothing.\n\na member's folder is checked where it is: a remote one with one exists gather over the shared ControlMaster, every member at once. a host that doesn't answer reads as connecting, sign in or unreachable, never gone, and opening a session never waits on a host.\n\na link or unlink queues a note in every open session of the workspaces it touches; a link note carries the new members' memory snapshot, so an open session sees it without rebuilding its prompt.\n\nmemory moves daemon-side: the kernel's memory object calls the memory host route through a new blocking host_now, so a remote session's notes land in the daemon's ALBEDO_HOME instead of the host's.\n\nSigned-off-by: dawn <90008@klbr.net>\n"},{"name":"default.nix","kind":"file","size":5181,"lastCommitHash":"a6d8ebe32b86b42c8845430466c96b5eeff8eb90","lastCommitWhen":"2026-10-02T12:50:48-04:00","lastCommitMessage":"feat(daemon): own startup defaults and readiness\n\nGive standalone and local launches the same defaults, protected discovery record, and honest health status.\n"},{"name":"flake.lock","kind":"file","size":3141,"lastCommitHash":"b585313526672d775b6b1fe54ba3b25ad150e62b","lastCommitWhen":"2026-10-01T12:34:16-04:00","lastCommitMessage":"refactor(gleam): clean up code and enforce focused lint checks\n"},{"name":"flake.nix","kind":"file","size":1044,"lastCommitHash":"b585313526672d775b6b1fe54ba3b25ad150e62b","lastCommitWhen":"2026-10-01T12:34:16-04:00","lastCommitMessage":"refactor(gleam): clean up code and enforce focused lint checks\n"},{"name":"gleam.toml","kind":"file","size":1909,"lastCommitHash":"b585313526672d775b6b1fe54ba3b25ad150e62b","lastCommitWhen":"2026-10-01T12:34:16-04:00","lastCommitMessage":"refactor(gleam): clean up code and enforce focused lint checks\n"},{"name":"LICENSE","kind":"file","size":488,"lastCommitHash":"2092a50f3a9edc40153570b12c1685dafc1d9144","lastCommitWhen":"2026-09-22T17:40:10-04:00","lastCommitMessage":"WTFPL\n"},{"name":"manifest.toml","kind":"file","size":7849,"lastCommitHash":"a62bda75257d26fc803f1f9b4ae2c7159df66723","lastCommitWhen":"2026-09-26T09:16:58Z","lastCommitMessage":"Route agents across providers and align Claude OAuth MCP requests\n"},{"name":"pyproject.toml","kind":"file","size":631,"lastCommitHash":"34b54dc113e0a1fed24a3e046adb250c6f177487","lastCommitWhen":"2026-10-02T11:43:16-04:00","lastCommitMessage":"test: make the gate usable on macOS\n\n- ty: pin python-platform to linux. The tests call os.pidfd_open behind a\n  skip, and ty on macOS reported it unresolved, which failed the gate and the\n  pre-commit hook before any suite ran.\n- e2e harness: resolve the scratch root. The daemon reports realpaths, so on\n  macOS (/tmp -> /private/tmp) two catalog and extensions tests compared\n  unresolved paths against resolved ones and failed on a clean checkout.\n- snapshot-daemon.sh: start from an empty output directory. Reusing one kept\n  the previous beams (cp -R nested into the old ebin) and let `ln -s` follow\n  the old priv link into the checkout as priv/priv.\n"},{"name":"pyrightconfig.json","kind":"file","size":178,"lastCommitHash":"3846f034887cc83dc3985e6ccf7224f5d41dd114","lastCommitWhen":"2026-09-21T03:35:27-04:00","lastCommitMessage":"awa\n"},{"name":"README.md","kind":"file","size":6709,"lastCommitHash":"6e75bf9e2f69d54417ef7b240f4ed5f7a2d1934d","lastCommitWhen":"2026-10-01T20:57:00-04:00","lastCommitMessage":"readme: add a terminal screenshot\n"},{"name":"test.sh","kind":"file","size":2029,"lastCommitHash":"dcac456f56d2f712db650fb364128e01ece5bc50","lastCommitWhen":"2026-10-02T15:16:16-04:00","lastCommitMessage":"test(storage): exercise report authority and offline safety\n\nCheck real totals, discovery failures, and canceled diagnostics through the CLI. Online reports work without local storage or Python.\n"},{"name":"THIRD_PARTY_NOTICES.md","kind":"file","size":3878,"lastCommitHash":"3b601a9e0b5b086153a0641bbaa58e17030c0aa6","lastCommitWhen":"2026-09-28T22:22:54+03:00","lastCommitMessage":"Add /cd: a folder picker that moves a session, and descendants follow\n\n/cd opens a full-screen picker: recent workspaces ranked by frecency, or\na typed path listed through the daemon and fuzzy-filtered by its last\nsegment, beside a preview of the highlighted folder (breadcrumbs over a\nlanguage-share rule, the repository line, a two-level tree, the folder's\nsessions). /cd <path> moves at once; ~ and relative paths resolve on the\ndaemon. The picker replaces the workspace-recovery text box: a turn\nrefused because the folder went missing is sent again after picking.\n\nThe preview keeps its sessions on screen: the tree fits around a third\nof the pane kept for them, showing fewer children, then only the top\nlevel, then fewer top entries, and the sessions fill what it leaves. → steps into the highlighted\nfolder's sessions, where enter opens one. From the sessions view, ctrl+f\n(or ~ or / typed into an empty search) opens the same picker to browse\nsessions by folder; there enter starts a new session in the folder.\n\nThe daemon serves GET /fs/list, /fs/repo and /fs/preview, so the picker\nonly offers folders the daemon can see, remote or not. harness/vcs is a\nshared git + jj module: .jj wins over .git in a colocated repository, and\njj always runs with --ignore-working-copy so browsing never snapshots or\nwrites an operation. A jj repository's bookmark is the one @ works on,\nfound from the fork (the newest change in @'s history a bookmark\ncontains), so a bookmark that moved on is not replaced by an old backup\nbehind @. Language shares and file colors come from linguist's\nlanguages.yml, shipped in priv/linguist and parsed once with yamerl.\nInside a repository the preview tree shows only tracked or changed paths.\n\nMoving a session now moves every descendant that was in the same folder:\nidle ones before the POST answers, running ones when their turn ends.\n\nThe CLI colors languages with our own pastels, falling back to linguist's\nhex, lifted in OKLCH until they reach an APCA contrast target on the\nterminal's background. robot-docs/workspaces.md is the contract.\n"}],"branches":[{"name":"main","hash":"2597195dd9cc5a6bb3212ddd10e9c75b30b83d69","when":"2026-10-02T15:16:16-04:00","isDefault":true,"message":"docs(storage): explain online reports and offline cleanup\n\nDescribe who owns the report and when local diagnosis applies. Reported paths never authorize local deletion.\n"},{"name":"master","hash":"6c003b5dcbdd51609a2b5779acbd471330c2da61","when":"2026-10-01T13:56:27-04:00","isDefault":false,"message":"fix(python): release obsolete job output watchers\n\nUse weak callbacks and clear obsolete watchers while preserving early-read notifications and retention limits. Benchmark: retained memory falls 73%, from 5.02 to 1.35 MiB after 256 jobs.\n"},{"name":"tui-verbose-cards-cells","hash":"c9f9ce4dd960ba096173a4cc83ec9b626f218595","when":"2026-09-30T14:31:55-04:00","isDefault":false,"message":"Show tool calls as foldable cards, add /cells, scroll while selecting\n\n/v draws each call as a colored card that folds on click. /cells lists\nevery call with the selected one in full. Dragging a selection past an\nedge scrolls it and copies the rows it crossed. The turn signoff offers\ncopy reply, which copies the turn as markdown.\n"},{"name":"existing-storage-migrations","hash":"f76e7a600add6254d6649d0a06292798426667d3","when":"2026-09-30T01:14:15-04:00","isDefault":false,"message":"refactor: organize existing storage migrations\n"},{"name":"page-detail","hash":"3ea2dec2f5af6f8e403c15e998de54a189478ec5","when":"2026-09-29T12:33:27-04:00","isDefault":false,"message":"give page rows a detail pane and vents a title\n"},{"name":"paperclips","hash":"6f794228ba884ac6fc6f80fb548c90e149177fdc","when":"2026-09-29T16:28:19Z","isDefault":false,"message":"give page rows a detail pane and vents a title\n"},{"name":"quota-ledger","hash":"1ef80b3d4cf42deac784be32bcd2850cfa8ac8c7","when":"2026-09-28T11:05:22+03:00","isDefault":false,"message":"Call the per-attempt provider log requests, not a ledger\n\n\"ledger\" already names the daemon's store handle (runtime.ledger) and the work\nand schedule tables, so loop code read ledger.record(runtime.ledger(host), ...).\nThe module is albedo/daemon/requests, the table provider_requests, the route\nGET /sessions/:id/requests, and robot-docs/provider-requests.md. Nothing outside\nthis branch has stored rows yet, so no migration.\n"},{"name":"tests/e2e-harness","hash":"0fdbac21b2049d8edd60606148e59b5eeb979ada","when":"2026-09-27T02:43:14-04:00","isDefault":false,"message":"Prune unit tests down to what E2E cannot catch\n\nEvery unit test was sorted by the writing-tests policy: deleted when it\nrestated the implementation, pinned constants or formatting, or duplicated E2E\ncoverage; moved to test/e2e when the behaviour is observable end to end; kept,\nwith a comment on the bug it catches, when it guards an invariant or\nbug-prone logic E2E cannot reach (provider wire formats, security boundaries,\nprocess supervision races, migrations, TUI interaction).\n\nTest code drops from 26.5k to 11.8k lines: gleam test 298 -> 106 tests, with\npython_test, compaction_test and daemon_test added to the E2E suite (43 tests).\ngleam test now runs against a temporary ALBEDO_HOME, so a developer's own\n~/.albedo settings no longer fail it, and the E2E harness refuses to boot its\nshared daemon from a process that never exits.\n\nAlso finishes moving docs/ to robot-docs/.\n"},{"name":"session-rename","hash":"e46d8fb177f636159a0f9b16c4c4170f414b1426","when":"2026-09-26T21:22:25-04:00","isDefault":false,"message":"keep a session's given name when its workspace changes\n\nthe workspace route put the session's own copy of its info back into\nthe registry, and that copy still has the title the session started\nwith. a renamed root then went back to its old title in the workspace\nreply and as the sender name on its children's task letters. remember\nnow re-reads the stored row, which has the new workspace, the given name,\nand the latest title, and answers with it.\n"},{"name":"compaction-prior","hash":"4e496711ff5cfa304091b069c2b0f93bb9e63c50","when":"2026-09-26T20:54:35-04:00","isDefault":false,"message":"compaction strategies share stored folds through the context\n\nstrategies no longer import each other to see stored summaries. a\nFoldPlugin supplies them, and the runtime hands every strategy\ncontext.prior, which splits history into stored folds and the rest they\ndon't cover, leaving out the active strategy's own provider. lcm-memory\nprovides lcm's folds; rolling and snapcompact read them from the context,\nand snapcompact keeps them as text ahead of its frames.\n\na compaction strategy enabled by name, for a session or globally, now\ndisplaces one that only the defaults enable, so a new default strategy\ncannot break an older choice.\n\nsnapcompact-memory hands the snapcompact archive to other strategies as\ntext folds and adds transcript_grep and transcript_read over the durable\ntranscript. snapcompact's frame cap follows oh-my-pi's per-provider image\nbudgets and a 3 MB inline budget (claude uploads through the files api).\nit reports its window and trigger to /context, and a forced compaction\nkeeps a tail sized to the request, so /compact archives under a large\nwindow.\n\na model id several catalog providers publish, served through a gateway\nthe catalog does not list, answers with the input kinds they agree on\nand the smallest limits instead of nothing. the compaction notice says\nwhat the strategy did: archived as frames, folded, or summarized.\n"},{"name":"feat/claude-codex-providers","hash":"3298618e979b71b437f93db5fce93c78e9661fba","when":"2026-09-26T05:15:16-04:00","isDefault":false,"message":"Route agents across providers and align Claude OAuth MCP requests\n"},{"name":"agents-mail","hash":"442fdea7f8172da4ce9f365aeac2e203fc0b9a0a","when":"2026-09-26T02:00:31-04:00","isDefault":false,"message":"providers: rate-limit rotation for every multi-account provider\n\nThe codex rotation is now albedo/harness/rotation (the retry loop) and\nalbedo_accounts (ordering, session stickiness, limit records). A provider\nsupplies a pool; a limited request moves to a sibling with room, a brief limit\nis waited out, a lasting one fails fast, and the error names the account the\nlast attempt went to.\n\nantigravity: sessions spread across Google accounts and stick; QUOTA_EXHAUSTED\nis lasting, rate limits brief, MODEL_CAPACITY_EXHAUSTED waits without moving;\n/login shows limited accounts.\n\nalibaba: a key pool from every alibaba profile, auth.json (now also a list),\nand the environment, the profile's own key first.\n"},{"name":"fix/tui-markdown-picker-layout","hash":"9de8f739ec36d5d89d8f1cc34f8a3b4af6d6d411","when":"2026-09-25T11:07:19-04:00","isDefault":false,"message":"Render Markdown with Glamour and keep session picker in two panes\n"},{"name":"transcript-readability","hash":"cd55c64dfe6b1da738f5cfbbbfecb70f1ef0a60c","when":"2026-09-24T14:51:40+03:00","isDefault":false,"message":"cli: theme every screen from terminal colors, add speaker rails and kaomoji\n"}],"totalBranches":14,"tags":[],"totalTags":0,"languages":[{"name":"Gleam","size":1664336,"share":34.724342504008455,"percentage":35},{"name":"Go","size":1337622,"share":27.907853023005448,"percentage":28},{"name":"Python","size":1274898,"share":26.599193197572706,"percentage":27},{"name":"Erlang","size":458319,"share":9.562267434036547,"percentage":9},{"name":"Rust","size":43953,"share":0.917025784504261,"percentage":1},{"name":"Nix","size":9330,"share":0.1946590805957444,"percentage":0},{"name":"Shell","size":4537,"share":0.09465897627683734,"percentage":0}],"failed":{"files":false,"refs":false,"languages":false},"compact":{".agents":"skills","native":"render","cli/cmd":"albedo","cli/test":"e2e",".agents/skills/gleam-design/assets":"examples",".agents/skills/charm-tui/examples/worked/internal":"display"}}