This repository has been archived on 2026-09-17. You can view files and clone it, but you cannot make any changes to its state, such as pushing and creating new issues, pull requests or comments.
nixos-config/hosts/blunix/localServices/tasks.nix
pijukka 85616a6cb7 agent@: calendar writes + task-site edits, direct, no Builder gate
Two narrow, direct write capabilities for the otherwise read-only
Agent role, decided 2026-08-01 (docs/roadmap.md):

- Calendar: ===CALENDAR-EVENT=== marker, parsed and acted on entirely
  in worker.py's Python (never inside Codex's own sandbox -- read-only
  has no network_access field at all, only workspace-write does).
  calendar-add-event (new writeShellApplication) builds a VEVENT and
  PUTs it to Radicale's calendar/public over the existing `calendar`
  LLDAP account, tailnet-only via calendar.0ff.space.
- Tasks: ===TASK-EDIT=== marker triggers a second, narrowly-scoped
  `codex exec --sandbox workspace-write --add-dir /home/drone/tasks`
  (that one directory only, no network access), then the same
  COMMIT-MESSAGE-marker-and-commit-outside-the-sandbox mechanism
  builder.py already uses for its own repos, committing/pushing
  directly with no /freigeben approval step.

New lukas/tasks Forgejo repo (seeded from website's about.html shell +
style.css/manifest/icons), tailnet-only static site on blunix
(tasks.nix, port 8006, routes-internal.nix + adguard.nix rewrite),
webhook auto-deploy hook matching website/launcher's existing pattern.

agentCalendarPw.age secret scaffolded (real LLDAP password still needs
setting by hand -- see docs). agents/agent.md and the agent-codex
README document both new capabilities; 49/49 unit tests pass including
9 new ones for the marker parsing, sandbox scoping, and commit path.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-01 11:58:31 +02:00

20 lines
697 B
Nix

{ pkgs, ... }:
{
# Task list maintained by agent@ (see agent-codex.nix's task-edit
# capability) -- tailnet-only, wired via routes-internal.nix's mkRoute
# (not an inline Traefik block like website.nix/launcher.nix, since
# those are public).
systemd.services.tasks = {
description = "Task list, edited via chat with agent@bot.0ff.space (tailnet-only)";
wantedBy = [ "multi-user.target" ];
before = [ "traefik.service" ];
serviceConfig = {
User = "drone";
Group = "users";
ExecStart = "${pkgs.static-web-server}/bin/static-web-server --host 127.0.0.1 --port 8006 --root /var/www/tasks";
Restart = "always";
RestartSec = "5s";
};
};
}