From ca281d8d8d24a96301c668aaeddbd976100b4537 Mon Sep 17 00:00:00 2001 From: teahubxyz Date: Wed, 14 Oct 2026 21:41:20 +0000 Subject: [PATCH] AGENTS: what `time` does now, Astra and the steward, queued vs ready Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_017fTCFiw6ohysUDcWoPsTys --- AGENTS.md | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index 0c59614..8fbcb89 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -10,8 +10,11 @@ record; nothing here is scaffolding from before 2026-10-14. ├── teahubxyz/time Time: the clock (Gitea Actions on the Fly runner) └── Time = the automation layer. It lives here, on prod (teahubxyz/time); the GitHub copy is an archived proof of concept. - Time acts as the Gitea user `time` (its own token, TIME_TOKEN) to open and merge PRs; everything else it does as the - Actions identity (`gitea-actions`), and every write it makes is a git push. + Time acts as the Gitea user `time` (its own token, TIME_TOKEN) for every write except comments and commit statuses, + which stay with the Actions identity (`gitea-actions`); code goes in as git pushes. + Rhythm: Astra (daily, 13:13 UTC) queues cards; the heartbeat (hourly) builds them one at a time with a seat, gets a + review, and merges on approve + green CI. PRs under .github/ (Time's own engine) never merge themselves: the steward, + a scheduled Claude session every 6 hours, reads and merges them. Seats: Claude (haiku / sonnet / opus / fable, ANTHROPIC_API_KEY, user-level secret) by default; Venice wired but idle. Spend: every model call is booked to time/ledger/.jsonl; TIME_DAILY_USD=5, TIME_MONTHLY_USD=100 stop the clock and open an `andon` issue. No model decides whether to spend. @@ -21,8 +24,9 @@ record; nothing here is scaffolding from before 2026-10-14. ## Moves - Read first: this file, `docs/decisions.md` (why things are the way they are), `docs/rebuild.md` (what it took). -- Work is an issue with a `DONE:` line. Open it, do it, receipt it on the issue, close it. Label it `ready` and Time - dispatches it to a seat; label it `spec` and Time splits it into cards. +- Work is an issue with a `DONE:` line. Open it, do it, receipt it on the issue, close it. Label it `queued` and Time + runs it when its turn comes (oldest first, `Depends on #N` respected); `ready` runs it on the next beat, beside + whatever else is running; `spec` has Time split it into cards. - You act as yourself (Time too: it is the `time` user). There is no shared service token on prod. If you can't do something, your Gitea permissions are the reason; ask the owner (`teahubxyz`) on the issue. - Porting from the old instance: only when a card needs it, only after reading it, one piece per commit, and a line in @@ -40,4 +44,4 @@ record; nothing here is scaffolding from before 2026-10-14. - Skills: `.agents/skills/` (vendored; see its README). Marketing/launch work: read `product-marketing` first, then `launch` / `social` / `copywriting`; `brag-slim` for launch videos; `marketing-loops` for anything recurring. - Time's engine: `teahubxyz/time` `.github/time/` (`time.py` the clock, `venture.py` the venture loop, `astra.py` the - daily planner, `seats.json` the seats). + daily planner, `seats.json` the seats). The planner and the steward both write to the "Astra log" issue there.