Commit Graph

496 Commits

Author SHA1 Message Date
Miguel Palhas d932409986 feat(maestro): run the daemon and web UI on yolo
CI / eval (push) Successful in 2m39s
CI / lint (push) Successful in 42s
Adds the maestro flake as an input and imports its Home Manager module.
yolo enables both user services; web binds 0.0.0.0:8081 because aoe-web
already holds 8080 on this host.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-22 10:55:47 +01:00
Miguel Palhas 7c7aa0a7d9 fix(aoe-web): drop removed --auth flag
CI / lint (push) Successful in 36s
CI / eval (push) Successful in 2m12s
2026-08-22 09:47:26 +01:00
Miguel Palhas f99e0d4a8f chore(claude): default model opus[1m] 2026-08-22 09:44:56 +01:00
Miguel Palhas d41572a51c chore(flake): bump agent-of-empires (npmDepsHash fix) 2026-08-22 09:39:17 +01:00
Miguel Palhas 0f059c02c8 chore(flake): bump agent-of-empires 2026-08-22 09:19:15 +01:00
Miguel Palhas 11f6ad5a3d feat(yolo): install claude-agent-acp for aoe structured sessions
CI / lint (push) Successful in 32s
CI / eval (push) Successful in 1m52s
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-21 20:47:20 +01:00
Miguel Palhas 1ce7046994 fix(aoe-web): pin TMUX_TMPDIR and KillMode=process
CI / lint (push) Successful in 42s
CI / eval (push) Successful in 2m38s
Shells set TMUX_TMPDIR to the runtime dir; the unit did not, so the
daemon ran a second tmux server under /tmp. Every boot resumed duplicate
agents there, the dashboard diverged from the TUI, and polling the
invisible sessions fired an error push per session. Same fix pr-daemon
got.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-21 20:32:36 +01:00
Miguel Palhas 42fa03ec0e feat: switch aoe to git.naps.pt/yolo fork
CI / lint (push) Successful in 33s
CI / eval (push) Successful in 2m8s
Fork carries two patches on v1.14.1+: worktree_info on plain add
(grouping) and reaping agent processes that survive tmux teardown.
Also brings upstream the settings drift the mutable-file guard caught:
fable model, secret-guard hook chain, verbose, confirm_delete.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-21 19:55:22 +01:00
Miguel Palhas 1b52576097 fix: rev-deploy must skip unit install — units are hm symlinks
CI / lint (push) Successful in 36s
CI / eval (push) Successful in 1m52s
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-21 15:04:48 +01:00
Miguel Palhas 522eda7644 fix(smb): restrict hosts allow to wg subnet 10.10/16
CI / lint (push) Successful in 35s
CI / eval (push) Successful in 2m4s
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-21 10:21:39 +01:00
Miguel Palhas 25ca90f134 docs(smb): wg subnet is 10.10, not 10.0
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-21 10:21:03 +01:00
Miguel Palhas ccf0b2c35d fix(smb): widen hosts allow to 10/8 for wg clients
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-21 10:20:19 +01:00
Miguel Palhas 2532100b26 feat(smb): export yolo home, mount at ~/yolo
Guest samba share of /home/naps62 on yolo, limited to the private
nets via hosts allow. arrakis and konishi mount it with the same
lazy automount used for the NAS media share.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-21 10:17:34 +01:00
Miguel Palhas 9b4a2b44dc feat(opencode): allow bash on yolo only
CI / lint (push) Successful in 29s
CI / eval (push) Successful in 2m1s
Global config keeps bash at "ask", which stalls every unattended opencode
session on git and grep. yolo runs the PR daemon's reviewers, so the prompt
is a deadlock there rather than a gate.

Merges like claude-settings.json: home/yolo/opencode.json holds only the
override, so agents, commands and skills still come from common. Reviewers
run on branches under review, so this drops that prompt too.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-20 11:25:08 +01:00
Miguel Palhas 503b3baeb4 chore: bump claude-code to 2.1.237
CI / lint (push) Successful in 30s
CI / eval (push) Successful in 2m1s
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-20 10:30:24 +01:00
Miguel Palhas 7bdff2ff98 chore: bump remaining flake inputs
CI / lint (push) Successful in 29s
CI / eval (push) Successful in 1m50s
2026-08-19 23:06:55 +01:00
Miguel Palhas 9794335ad6 chore: bump nixpkgs, home-manager, hardware
CI / lint (push) Successful in 29s
CI / eval (push) Successful in 2m5s
2026-08-19 22:51:40 +01:00
Miguel Palhas 4a1e9aeaa8 fix(tmux): use csi-u extended keys format
CI / lint (push) Successful in 30s
CI / eval (push) Successful in 1m45s
2026-08-19 22:45:21 +01:00
Miguel Palhas cd3b271e10 chore: remove ferdium
CI / lint (push) Successful in 29s
CI / eval (push) Successful in 1m46s
2026-08-19 22:42:30 +01:00
Miguel Palhas 3eb0a098a2 chore: ignore worktree dirs
CI / lint (push) Successful in 29s
CI / eval (push) Successful in 1m54s
2026-08-19 22:40:04 +01:00
Miguel Palhas 77d8803a8f refactor: scope workstation apps 2026-08-19 22:38:19 +01:00
Miguel Palhas ba5b618e49 refactor(yolo): take the agent-skills units from their own module
CI / lint (push) Successful in 30s
CI / eval (push) Successful in 1m57s
pr-daemon, hourlog and week-review are defined by the agent-skills
home-manager module now, next to the scripts they run; this host just
enables them.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-19 22:20:44 +01:00
Miguel Palhas 7580edb82c fix(pr-daemon): pin TMUX_TMPDIR to the runtime dir
CI / lint (push) Successful in 30s
CI / eval (push) Successful in 1m53s
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-19 19:06:33 +01:00
Miguel Palhas 88abb49340 fix(pr-daemon): KillMode=process
CI / lint (push) Successful in 30s
CI / eval (push) Successful in 1m53s
Agent tmux sessions the daemon starts live in its cgroup; a restart was
killing every session it had created.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-19 19:03:51 +01:00
Miguel Palhas 9c536f87f6 Merge branch 'pr-daemon'
CI / lint (push) Successful in 30s
CI / eval (push) Successful in 1m52s
2026-08-19 18:54:33 +01:00
Miguel Palhas 88915d9cfd feat(hyprland): restore media-key OSD with swayosd
CI / lint (push) Successful in 29s
CI / eval (push) Successful in 1m53s
The XF86 binds survived the noctalia -> eww switch, but the popup they
drew did not, so volume and brightness changed with no feedback. swayosd
replaces it: swayosd-client both applies the change and draws the OSD.

Also fixes two binds that pointed at binaries no host installs any more:
XF86AudioMicMute called volumectl (avizo, removed) and the brightness
keys called brightnessctl, which only arrakis has.

Commands are referenced by store path because Hyprland execs binds with
the PATH the session was started with.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-19 18:35:27 +01:00
Miguel Palhas 94e24f9277 feat(yolo): run the PR daemon as a user service
Watches GitHub and Gitea PRs and routes them to aoe sessions. Lives here
rather than in agent-skills' nix module for the same reason the timers
do: it belongs to one box.

Config and tokens are outside the store, so the unit refuses to start
without them.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-19 18:30:56 +01:00
Miguel Palhas 51c852b5ef chore: bump claude-code to 2.1.235
CI / lint (push) Successful in 29s
CI / eval (push) Successful in 1m51s
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-19 16:46:09 +01:00
Miguel Palhas 54fc3e317b refactor(sddm): replace noctalia theme with sddm-astronaut
CI / lint (push) Successful in 30s
CI / eval (push) Successful in 1m53s
Noctalia shell is no longer used; the only consumer left was the
SDDM login theme.
2026-08-19 16:11:11 +01:00
Miguel Palhas 81b9cbde44 Merge branch 'update'
CI / lint (push) Successful in 29s
CI / eval (push) Successful in 1m50s
2026-08-19 15:16:03 +01:00
Miguel Palhas 60f93e604f Merge branch 'tatars' 2026-08-19 15:15:18 +01:00
Miguel Palhas fc7ac103f5 chore: update agent-skills
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-19 15:15:16 +01:00
Miguel Palhas ced70ee3e3 chore: bump the agent-skills pin for pi + opencode coverage 2026-08-19 15:14:43 +01:00
Miguel Palhas 5ba12d3684 refactor: move pi's AGENTS.md concat into the agent-skills module
All four tools' context wiring lives there now; this file just installs
the package.
2026-08-19 15:14:43 +01:00
Miguel Palhas 231b6bdb28 refactor: get opencode rules and shared commands from agent-skills
opencode has no @file imports, so the shared home-manager module
concatenates the claude-md fragments into .config/opencode/AGENTS.md
(the screenshots line moved there as a fragment) and links commands/
into place. Keeps only the opencode-specific agents, commands and
skills here.
2026-08-19 15:14:43 +01:00
naps62-yolo a0a69cf58c feat: replace noctalia with an eww panel (#3)
CI / eval (push) Successful in 2m3s
CI / lint (push) Successful in 29s
2026-08-19 15:13:05 +01:00
Miguel Palhas d61700d173 fix: make synclaude reach synthetic.new
CI / lint (push) Successful in 29s
CI / eval (push) Successful in 2m0s
Two dokploy MCP tools declare ttl with the draft-04 "exclusiveMinimum":
true. Synthetic validates tool schemas against draft-2020 and rejects the
whole request, so every session died on a bodiless 500. Deny those two.

Haiku moves to GLM Flash: Qwen3.6-27B rejects Claude Code multi-block
system prompt.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-19 14:22:12 +01:00
Miguel Palhas b07120973a feat: add synclaude, Claude Code on synthetic.new
Binds the opus/sonnet/haiku aliases to Kimi K3, GLM-5.2 and Qwen3.6 so
they can be swapped mid-session, and registers the wrapper as an aoe agent.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-19 14:01:06 +01:00
Miguel Palhas 074cb5faa1 chore: drop kimiclaude from aoe agents
Moonshot-backed wrapper is no longer used; only synclaude remains registered.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-19 13:17:15 +01:00
naps62 46bb060208 Merge pull request 'chore: pin the noctalia input to a rev' (#2) from noctalia-pin into main
CI / lint (push) Successful in 29s
CI / eval (push) Successful in 2m18s
Reviewed-on: #2
2026-08-19 13:11:36 +01:00
Miguel Palhas 189196fb88 chore: pin the noctalia input to a rev
CI / lint (pull_request) Successful in 29s
CI / eval (pull_request) Successful in 1m51s
noctalia publishes no binary cache, so `flake update` means a local Qt/QML
build every time. quickshell comes from nixpkgs and is cached, so the
nixpkgs follows stays; only the noctalia ref is pinned.

Pinned to the rev already locked, so this rebuilds nothing.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-19 12:29:22 +01:00
Miguel Palhas 849cd3a5ef chore: sync aoe structured-session toggle from yolo
CI / lint (push) Successful in 38s
CI / eval (push) Successful in 2m26s
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-19 12:22:23 +01:00
Miguel Palhas 013d41aa72 feat: add the pi coding agent harness
CI / lint (push) Successful in 33s
CI / eval (push) Successful in 2m9s
Packages the prebuilt pi release binary and puts it on PATH alongside
Claude Code, Codex and opencode.

pi has no `@file` imports in context files, so the shared agent-skills
fragments are concatenated into ~/.pi/agent/AGENTS.md. Skills need no
wiring: pi already reads ~/.agents/skills.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-19 11:57:24 +01:00
Miguel Palhas 0a4dd8a192 fix: bypass the ssh agent for github on yolo
CI / lint (push) Successful in 30s
CI / eval (push) Successful in 2m4s
gpg-agent is the ssh agent here, and signing blocks forever on a pinentry
prompt with no TTY, so git push hung right after "Server accepts key".
The key file has no passphrase, so read it directly instead.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-18 21:11:28 +01:00
Miguel Palhas 8efd0a1139 feat: give yolo a distinct amber cursor
CI / lint (push) Successful in 30s
CI / eval (push) Successful in 1m56s
yolo's desktop is only ever seen through a Moonlight window, so its cursor
needs to be tellable apart from the client's at a glance. Bibata-Modern-Amber
differs in both colour and silhouette from Nordzy.

Threads the theme through an option rather than setting it in one place: it
was hardcoded in cursor.nix, in hl.env, in the setcursor autostart, and twice
more in darkman's mode scripts, which re-set it on every light/dark switch and
would have reverted the override.

Also drops a stale hl.env pointing HYPRCURSOR_THEME at rose-pine-hyprcursor,
which no host installs.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-18 16:06:01 +01:00
Miguel Palhas de527df7c4 feat: stream yolo at 4k
virtio-gpu exposes no NVENC/VAAPI, so sunshine software-encodes. Measured
x264 (superfast+zerolatency) on the 8 vCPUs: 73fps at 2160p against 135fps
at 1440p, so a 60fps client keeps roughly 20% margin.

Also brings the drifted agent-of-empires config upstream, which the
mutableFiles guard required before switching.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-18 15:56:56 +01:00
Miguel Palhas c7eb5796ea fix: grant sunshine access to /dev/uinput
hardware.uinput, enabled by services.sunshine, sets /dev/uinput to
root:uinput 0660 and adds no members to the group. Sunshine runs as a
user service, so it failed to create the virtual mouse, keyboard and
gamepads and the stream carried no input.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-18 15:43:55 +01:00
Miguel Palhas 3ee2f4db10 feat: run the aoe web dashboard as a service
CI / lint (push) Successful in 33s
CI / eval (push) Successful in 2m12s
Auth is off in the unit: traefik + authelia front it, and aoe rejects
--auth none on a wildcard bind unless --behind-proxy says so.
2026-08-18 09:28:32 +01:00
Miguel Palhas 886af193a2 Merge remote-tracking branch 'origin/main' into images
CI / lint (push) Successful in 28s
CI / eval (push) Successful in 1m55s
2026-08-18 09:18:29 +01:00
Miguel Palhas 4a8f8d330c fix: make clip2path safe and ssh-aware
Text paste went through `kitty @ send-text`, which has no bracketed
paste, so multi-line clipboard text ran line by line in a shell. Route
text through `kitty @ action paste_from_clipboard` instead and keep
send-text for the image path only.

Over SSH the typed path pointed at the local /tmp and the remote process
could not read it. Read the focused window's foreground processes from
`kitty @ ls`, and when one of them is an ssh client, scp the image to
that host and type the remote path. Nothing is typed into the focused
app but a path, so this still works when the target is a TUI rather than
a shell. The real ssh process is preferred over the `kitten ssh`
wrapper, whose long options the argument parser does not understand.

Also: mktemp instead of a timestamp that collides within a second,
a prune of clip files older than a day, image/png preferred over
whatever format the source advertises first, and the clipboard tools
pinned so the script does not depend on kitty's inherited PATH.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-18 08:30:20 +01:00