didericis-claude
d8071753f1
feat(cli): add commit command to snapshot running bottle state
...
lint / lint (push) Failing after 1m33s
test / unit (pull_request) Successful in 28s
test / integration (pull_request) Successful in 15s
Adds `./cli.py commit [<slug>]` which runs `docker commit` on the
active agent container and stores the resulting image tag in per-bottle
state. The next `./cli.py resume <slug>` automatically boots from the
committed snapshot instead of rebuilding from the Dockerfile, preserving
all in-container state across restarts and migrations.
- bottle_state: add write_committed_image / read_committed_image helpers
- docker/util: add commit_container wrapper around `docker commit`
- docker/launch: check for a committed image before the Dockerfile build
step; fall back to normal build if the image is absent from the daemon
- cli/commit: new command with interactive slug picker; errors clearly on
non-Docker backends
- 50 new unit tests covering all paths
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-20 02:15:00 +00:00
didericis-claude
7a124d7d25
refactor: make static the default branch in _parse_key_config
test / unit (pull_request) Successful in 29s
test / integration (pull_request) Successful in 16s
lint / lint (push) Successful in 1m31s
test / unit (push) Successful in 28s
test / integration (push) Successful in 15s
Update Quality Badges / update-badges (push) Successful in 1m10s
2026-06-19 22:25:14 +00:00
didericis-claude
f00c567469
rename: provisioner_token -> forge_token_env
lint / lint (push) Successful in 2m6s
test / unit (pull_request) Successful in 30s
test / integration (pull_request) Successful in 17s
2026-06-19 22:21:37 +00:00
didericis-claude
6f0e5b4589
refactor: extract _resolve_identity_file from prepare loop
lint / lint (push) Successful in 1m33s
test / unit (pull_request) Successful in 31s
test / integration (pull_request) Successful in 16s
2026-06-19 22:14:15 +00:00
didericis-claude
5da4d05bf2
fix: remove unused Optional import flagged by pyright
lint / lint (push) Successful in 1m33s
test / unit (pull_request) Successful in 30s
test / integration (pull_request) Successful in 17s
2026-06-19 22:09:52 +00:00
didericis-claude
1a8718ca9d
refactor: unify identity/provisioned_key into key block
...
lint / lint (push) Failing after 1m45s
test / unit (pull_request) Successful in 35s
test / integration (pull_request) Successful in 17s
Replace the two mutually-exclusive repo keys (identity and
provisioned_key) with a single required key block. key.provider
is "static" (path to host SSH key) or "gitea" (deploy-key lifecycle
via provisioner_token env var, replacing token_env).
Internal fields: ManifestProvisionedKeyConfig → ManifestKeyConfig;
ProvisionedKey field removed from ManifestGitEntry; Key field added.
git_gate.py checks entry.Key.provider == "gitea" instead of
entry.ProvisionedKey is not None.
2026-06-19 22:01:43 +00:00
didericis-claude
c1c225aa05
docs(gitea-provisioner): document required GITEA_DEPLOY_TOKEN permissions
lint / lint (push) Successful in 1m46s
test / unit (push) Successful in 34s
test / integration (push) Successful in 20s
Update Quality Badges / update-badges (push) Successful in 1m21s
2026-06-11 03:43:13 +00:00
didericis
dc7c10d6fe
fix(macos-container): use correct system status probe in preflight
...
lint / lint (push) Successful in 1m41s
test / unit (push) Successful in 34s
test / integration (push) Successful in 21s
Update Quality Badges / update-badges (push) Successful in 1m23s
`container system info` is not a valid subcommand and always returned
non-zero, causing a false-positive on the service check. Switch to
`container system status` which is the correct command.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-10 23:31:32 -04:00
Quality Badge Bot
a827b0841e
chore: update quality badges
...
- Pylint: 9.93/10
- Pyright: 0 errors
[skip ci]
2026-06-11 03:28:32 +00:00
didericis
a9c93ea9df
fix(macos-container): preflight check for container system service
...
lint / lint (push) Successful in 1m43s
test / unit (push) Successful in 34s
test / integration (push) Successful in 19s
Update Quality Badges / update-badges (push) Successful in 1m27s
Fail early with a clear message when the Apple Container system service
isn't running, instead of surfacing an opaque XPC connection error mid-build.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-10 23:24:09 -04:00
didericis
bb69af31f8
chore(claude): bump claude-code to 2.1.170
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-10 22:44:46 -04:00
didericis
7644da4280
docs: add Apple Container transparent egress spike
2026-06-10 22:36:55 -04:00
didericis
13e4af421d
docs: add Apple Container networking spike
2026-06-10 22:36:55 -04:00
github-actions[bot]
f2d5307573
ci(prd): assign sequential numbers to new PRDs
2026-06-11 02:36:07 +00:00
didericis
bc9a22b46a
fix(macos-container): support git-gate launch
test / unit (pull_request) Successful in 32s
test / integration (pull_request) Successful in 20s
lint / lint (push) Successful in 1m45s
prd-number / assign-numbers (push) Successful in 25s
test / unit (push) Successful in 32s
test / integration (push) Successful in 19s
Update Quality Badges / update-badges (push) Failing after 1m23s
2026-06-10 22:25:00 -04:00
didericis
932e71c0bf
fix(macos-container): make backend the macos default
2026-06-10 22:25:00 -04:00
didericis
d3b0b330aa
fix(macos-container): preserve working builder dns
2026-06-10 22:25:00 -04:00
didericis
5e927bcd13
fix(macos-container): start builder with dns
2026-06-10 22:25:00 -04:00
didericis
890a146413
test(macos-container): add launch integration smoke
2026-06-10 22:25:00 -04:00
didericis
afdf0779a1
feat(macos-container): launch explicit-proxy bottles
2026-06-10 22:25:00 -04:00
didericis-codex
eb7cae1fea
docs: link macos container prd to review comment
2026-06-10 22:25:00 -04:00
didericis-codex
fe82dc7f2b
feat: add macos container backend scaffold
2026-06-10 22:25:00 -04:00
didericis-claude
b00b0ba4aa
fix(git-gate): forward force push as +refspec to upstream
...
test / unit (pull_request) Successful in 38s
test / integration (pull_request) Successful in 22s
lint / lint (push) Successful in 1m47s
test / unit (push) Successful in 34s
test / integration (push) Successful in 20s
Update Quality Badges / update-badges (push) Successful in 1m21s
When $old != zero and $new is not a descendant of $old (detected via
git merge-base --is-ancestor), the hook now forwards +$new:$ref so the
upstream accepts the force push instead of rejecting it as a
non-fast-forward.
Closes #233
2026-06-11 02:17:27 +00:00
didericis-codex
3f04567290
egress: require opt-in for HTTPS git fetch
test / unit (pull_request) Successful in 42s
test / integration (pull_request) Successful in 27s
lint / lint (push) Successful in 1m53s
test / unit (push) Successful in 41s
test / integration (push) Successful in 23s
Update Quality Badges / update-badges (push) Successful in 1m35s
2026-06-10 07:00:01 +00:00
didericis-codex
acb9cd67c6
fix(git-gate): forward push options
test / unit (pull_request) Successful in 29s
test / integration (pull_request) Successful in 17s
lint / lint (push) Successful in 1m28s
test / unit (push) Successful in 29s
test / integration (push) Successful in 16s
Update Quality Badges / update-badges (push) Successful in 1m7s
2026-06-10 02:36:47 -04:00
didericis-codex
d90ab7e646
ci: enforce pylint threshold
lint / lint (push) Successful in 1m37s
test / unit (push) Successful in 34s
test / integration (push) Successful in 16s
Update Quality Badges / update-badges (push) Successful in 1m13s
2026-06-10 06:30:03 +00:00
didericis-codex
8ea90adcaf
fix: raise git http body cap
2026-06-10 06:29:46 +00:00
Quality Badge Bot
de803e1e76
chore: update quality badges
...
- Pylint: 9.94/10
- Pyright: 0 errors
[skip ci]
2026-06-10 05:34:38 +00:00
didericis-codex
019efab804
fix: narrow pi numeric settings types
test / unit (pull_request) Successful in 49s
test / integration (pull_request) Successful in 27s
lint / lint (push) Successful in 1m37s
test / unit (push) Successful in 31s
test / integration (push) Successful in 19s
Update Quality Badges / update-badges (push) Successful in 1m20s
2026-06-10 01:13:00 -04:00
didericis-codex
957d37f51f
fix: merge egress routes across extends
2026-06-10 01:13:00 -04:00
Quality Badge Bot
8e084262a0
chore: update quality badges
...
- Pylint: 9.94/10
- Pyright: 4 errors
[skip ci]
2026-06-10 04:07:25 +00:00
didericis
504144eb9c
fix(pi): prepare runtime state and agent workdir
lint / lint (push) Failing after 1m58s
test / unit (push) Successful in 41s
test / integration (push) Successful in 24s
Update Quality Badges / update-badges (push) Successful in 1m27s
2026-06-10 00:02:28 -04:00
didericis
86374ab293
fix(pi): select configured startup models
test / unit (pull_request) Successful in 30s
test / integration (pull_request) Successful in 17s
lint / lint (push) Successful in 1m37s
test / unit (push) Successful in 33s
test / integration (push) Successful in 17s
Update Quality Badges / update-badges (push) Successful in 1m6s
2026-06-09 06:57:33 -04:00
didericis
199edb228c
feat(pi): add fd and ripgrep to image
test / unit (pull_request) Successful in 35s
test / integration (pull_request) Successful in 18s
2026-06-09 06:26:19 -04:00
didericis
598a20a3f0
fix(pi): keep interactive sessions open
lint / lint (push) Successful in 1m29s
test / unit (pull_request) Successful in 30s
test / integration (pull_request) Successful in 17s
2026-06-09 06:00:40 -04:00
didericis
c8b5ba3812
feat(pi): support egress injected api keys
lint / lint (push) Successful in 1m38s
test / unit (pull_request) Successful in 31s
test / integration (pull_request) Successful in 17s
2026-06-09 05:56:39 -04:00
didericis-codex
5ea9fda69b
docs: activate pi provider prd
lint / lint (push) Successful in 1m43s
test / unit (pull_request) Successful in 34s
test / integration (pull_request) Successful in 18s
2026-06-09 08:32:09 +00:00
didericis-codex
4f7cfc0418
feat: add pi agent provider
2026-06-09 08:31:48 +00:00
didericis-codex
1f38a96561
docs: add pi provider prd
2026-06-09 08:23:00 +00:00
Quality Badge Bot
660b9b3810
chore: update quality badges
...
- Pylint: 9.94/10
- Pyright: 0 errors
[skip ci]
2026-06-09 05:46:00 +00:00
didericis
328069809b
fix(pyright): remove unused shlex imports from bottle backends
...
test / unit (pull_request) Successful in 31s
test / integration (pull_request) Successful in 15s
lint / lint (push) Successful in 1m35s
test / unit (push) Successful in 31s
test / integration (push) Successful in 17s
Update Quality Badges / update-badges (push) Successful in 1m30s
shlex is now only used in terminal.py after the exec_shell_script refactor.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-09 00:48:46 -04:00
didericis
b1551045dc
feat(terminal): tint terminal background per agent color
...
test / unit (pull_request) Successful in 29s
test / integration (pull_request) Successful in 17s
Add backend-agnostic terminal color support via OSC escape sequences:
- New backend/terminal.py with palette_printf() and exec_shell_script()
shared by both Docker and smolmachines bottle backends
- Emits OSC 4 (indexed palette) + OSC 11 (default background tint)
before launching; resets both on agent exit via OSC 104/111
- OSC 11 background tint is visible even when the TUI uses true/24-bit
colors (which bypass the palette), as Codex does for its chrome
- Fix Codex [tui] config: status_line=["model-with-reasoning"],
theme="ansi" (dark-ansi and cwd/directory were invalid identifiers)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-09 00:47:55 -04:00
didericis
d02226aab9
feat: forward agent style via native CLI config and terminal title
...
Replace prompt-injection for display identity with native UI wiring:
- Claude: writes a statusline shell script + custom theme JSON, wired up
via settings.json so label/color show in the status bar and theme
- Codex: writes [tui] block into codex-config.toml (status_line,
terminal_title, dark-ansi theme)
- Both backends set the terminal title via ANSI OSC 0 escape before
exec-ing the agent when a label is present
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-09 00:47:55 -04:00
didericis-codex
39811c9b32
feat: forward agent display identity to prompts
2026-06-09 00:47:55 -04:00
github-actions[bot]
f7f161e60f
ci(prd): assign sequential numbers to new PRDs
2026-06-09 03:37:10 +00:00
didericis-codex
e6040fc824
fix(start): skip backend selector
test / unit (pull_request) Successful in 40s
test / integration (pull_request) Successful in 24s
lint / lint (push) Successful in 1m47s
prd-number / assign-numbers (push) Successful in 29s
test / unit (push) Successful in 38s
test / integration (push) Successful in 27s
Update Quality Badges / update-badges (push) Failing after 1m20s
2026-06-09 03:31:26 +00:00
didericis-codex
17fc44d0d8
complete(prd): mark smolmachines default active
lint / lint (push) Successful in 1m46s
test / unit (pull_request) Successful in 41s
test / integration (pull_request) Successful in 22s
2026-06-09 03:27:58 +00:00
didericis-codex
1bebb7467f
feat(backend): default to smolmachines
2026-06-09 03:27:31 +00:00
didericis
cc1d986a74
test: fix smolmachines proxy assertions
lint / lint (push) Successful in 1m52s
test / unit (pull_request) Successful in 41s
test / integration (pull_request) Successful in 25s
2026-06-08 23:22:47 -04:00
didericis-codex
fabcd026af
test(smolmachines): verify TSI egress proxy path
lint / lint (push) Successful in 1m47s
test / unit (pull_request) Successful in 39s
test / integration (pull_request) Successful in 23s
2026-06-09 03:14:58 +00:00