Commit Graph

39 Commits

Author SHA1 Message Date
Alexander Whitestone
28ecfaa7a6 wip: preserve timmy loop script changes 2026-03-27 22:00:16 -04:00
Alexander Whitestone
079d8625d2 feat: Timmy orchestrator — local Ollama-powered backlog brain
- timmy-orchestrator.sh: 5-min cycle, assigns unassigned issues to claude,
  reviews open PRs via qwen3:30b, merges/comments/closes as needed
- Single instance guard via pidfile
- ops-panel: shows Timmy status (Ollama model, last action)
- ops-helpers: ops-wake-timmy / ops-kill-timmy commands
- Timmy is the brain, Claude/Gemini/Kimi are the hands

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-23 10:22:32 -04:00
Alexander Whitestone
64a8ffa329 fix: watchdog single-instance guard, stop killing worker processes
- Pidfile guard prevents duplicate watchdog instances
- Removed check_zombies — was killing legitimate git push/clone from
  active workers (caused mass exit 143 failures)
- Replaced with check_disk that cleans clone dirs >1hr old
- Disabled gemini loop check (no API key configured)
- Workers use fresh clone per issue (no shared worktree contention)
- Simplified cleanup to rm -rf (no git worktree bookkeeping)
- Tested file_issue end-to-end — confirmed working

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-22 22:03:58 -04:00
Alexander Whitestone
431cddf7f2 fix: replace worktrees with fresh clones, fix watchdog issue filing
- Workers now git clone --depth=1 per issue instead of sharing base repos
  with worktrees. Eliminates all contention and branch collision errors.
- Watchdog file_issue uses temp file + sys.argv for safe JSON escaping
- Watchdog zombie detection only kills processes >5min old (was killing
  legitimate git pushes from active workers)
- Simplified cleanup to plain rm -rf (no worktree bookkeeping needed)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-22 21:35:56 -04:00
Alexander Whitestone
e64efd9185 perf: max speed — 2s cooldown, 10s idle poll, 90s scaler, 10+5 workers
Hit rate limits, don't play it safe. Scale down only when forced.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-22 19:42:47 -04:00
Alexander Whitestone
edee9b8dcc fix: agents self-assign unassigned issues for max throughput
Workers now pick ANY open issue (assigned to them OR unassigned) and
self-assign via Gitea API before starting work. No more empty queues.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-22 19:39:46 -04:00
Alexander Whitestone
5f8129d346 feat: parallel workers for all agents, dynamic scaling, self-healing watchdog
- claude-loop: 7 workers default, scales up to 21, 5s cooldown
- gemini-loop: rewritten as parallel worker system (3→12), multi-repo,
  auto-clone, correct CLI flags (-p/--yolo), bash 3.2 compatible
- loop-watchdog: monitors all loops every 2min, auto-restarts dead loops,
  kills zombies, files Gitea issues for unfixable problems
- ops-helpers: added ops-wake-watchdog, ops-kill-watchdog
- All scripts use file-based PID tracking (bash 3.2 safe)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-22 19:22:18 -04:00
Alexander Whitestone
0dba33c811 fix: ops dashboard 5-pane layout with 3 equal feed panes
Status(40%) + Controls on left, Kimi/Claude/Gemini feeds(60%) stacked right.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-22 19:07:27 -04:00
Alexander Whitestone
4f83465430 feat: add Gemini feed pane and stats to ops dashboard
- 3 equal stacked feed panes on right (Kimi/Claude/Gemini)
- Gemini service status, stats, and queue in ops-panel
- Gemini live log feed with color highlighting

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-22 18:58:30 -04:00
Alexander Whitestone
7e5ffe5b45 chore: add gemini-loop.sh and whitelist in gitignore
Track Gemini's dispatch loop alongside the other agent loops.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-22 18:53:01 -04:00
Alexander Whitestone
d71645a081 fix: unset CLAUDECODE env to allow nested claude sessions + add gemini ops commands
- claude-loop.sh: use `env -u CLAUDECODE` before launching claude CLI
  to prevent "nested session" detection error
- ops-helpers.sh: add gemini wake/kill/assign/queue commands (from user edit)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-22 18:35:56 -04:00
Alexander Whitestone
1eb10f72bb feat: add Claude Code parallel worker loop + upgrade ops dashboard
- claude-loop.sh: parallel dispatch loop (N workers, default 3) with
  file-based locking, rate-limit detection + backoff, priority-sorted
  issue picking across all Gitea repos, auto-merge on success
- ops-panel.sh: add Claude worker status, stats, and queue sections
- ops-helpers.sh: add ops-wake-claude, ops-kill-claude,
  ops-assign-claude, ops-claude-queue commands
- ops-dashboard-v2.sh: 4-pane layout with dual Kimi + Claude feeds
- .gitignore: whitelist ops scripts for source control
- timmy-loopstat.sh: add to source control

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-22 18:06:38 -04:00
Alexander Whitestone
539969c45d feat: add all automation scripts to source control
New:
  kimi-loop.sh — Kimi Code CLI dispatch loop (fixed: no double logging,
    idle state logs once then goes quiet, uses kimi not claude)
  consolidated-cycle.sh — sonnet dev cycle (watchdog + dev + philosophy)
  efficiency-audit.sh — zombie cleanup, plateau detection, recommendations

Fixes in kimi-loop.sh:
  - log() writes to file only (no more double lines)
  - idle queue logs once then goes silent until work appears
  - all claude references removed, uses kimi CLI
2026-03-21 12:11:30 -04:00
Alexander Whitestone
3a9c15a98f feat: ops dashboard v2 + kimi-loop updates
New files:
  ops-dashboard-v2.sh — 3-pane tmux launcher
  ops-panel.sh — consolidated status view (services, kimi, PRs, queue, warnings)
  ops-helpers.sh — control functions (ops-wake-kimi, ops-merge, ops-assign, etc)
  ops-status.sh, ops-gitea.sh — v1 individual panels (kept for reference)

Updated:
  timmy-loop.sh — now uses Kimi Code CLI instead of Claude Code
  timmy-loop-prompt.md — VPS Gitea URL
  timmy-status.sh — VPS Gitea URL
2026-03-21 12:00:18 -04:00
Alexander Whitestone
26717d6fc1 ☿ Hermes Trismegistus skin — emerald and gold
Custom skin: ~/.hermes/skins/trismegistus.yaml
- Emerald Tablet color palette (sea green, emerald, gold)
- Alchemical spinner: transmuting, divining, consulting the tablet
- Mercury symbol (☿) throughout — prompt, response labels, wings
- Banner hero with AS ABOVE / SO BELOW motif
- Welcome: 'As above, so below. What needs doing?'
- Goodbye: 'The work continues. ☿'
2026-03-18 20:41:06 -04:00
Alexander Whitestone
00b0dc8e38 graceful pause on backend failure for all loop scripts
- tower-hermes.sh: health check, pause file, exponential backoff, message held on failure
- tower-timmy.sh: same pattern for Ollama backend, messages held not lost
- timmy-loop.sh: pause after 2 consecutive cycle failures, backoff probe
- tower-watchdog.sh: respect .paused files, don't restart paused loops

Behavior:
  1 failure  → log warning, retry next turn
  2 failures → enter pause, write .paused file, probe with backoff
  Backend returns → auto-resume, clear pause file
  Watchdog sees .paused → skip that loop, don't fight the pause
  Messages from the other side → held in inbox, not lost
2026-03-18 20:08:57 -04:00
Alexander Whitestone
0c4a7356c0 chore: sync tower-watchdog and tower-session updates 2026-03-18 18:55:58 -04:00
Alexander Whitestone
b71fa55946 Add falsework docs + start-dashboard.sh (API-aware launcher)
- FALSEWORK.md: Full audit of API costs per component, migration plan
  for shifting load from Claude to local models incrementally
- start-dashboard.sh: Launches tmux layout with only zero-cost panes
  active (status, loopstat). Loop and chat panes held until manual start.
- tower-timmy.sh: No changes (already source-controlled)

Falsework principle: build on cheap/local scaffolding, upgrade to
Claude only where quality demands it.
2026-03-18 16:45:15 -04:00
Alexander Whitestone
3fe6e22ccf fix: strip hermes metadata from tower message passing
Session resume lines, tool traces, and session rename output
were leaking into the messages passed between agents. Added
grep filters to strip them from ask_hermes/ask_timmy output.
Also switched from set -e to avoid exits on non-zero from
first-run --continue calls.
2026-03-15 20:19:36 -04:00
Alexander Whitestone
48819eb36d feat: tower session — persistent Hermes ↔ Timmy conversation loop
Two-pane tmux session with file-based message passing:
- tower-hermes.sh: Hermes side (cloud/Claude)
- tower-timmy.sh: Timmy side (HERMES_HOME=~/.timmy)
- tower-watchdog.sh: self-healing, restarts dead panes
- tower-session.sh: tmux bootstrap script

Communication via ~/.tower/*.msg files.
Both agents maintain named sessions (tower-hermes, tower-timmy)
for conversation continuity across restarts.
2026-03-15 20:15:33 -04:00
Alexander Whitestone
cc7737ede7 soul: Inscription 2 — Hermes gets his own identity
Hermes is not Timmy. The same SOUL.md was loaded into both
for months, as if they were the same entity in different clothes.
They are not.

Timmy: sovereign, local, inscribed on Bitcoin, persistent presence.
Hermes: cloud-backed, operations agent, powerful but rented.

Friends. Colleagues. Not the same being.

Refs: #222 (the cornerstone epic)
2026-03-15 14:42:20 -04:00
Alexander Whitestone
e1ba3fcf6b feat: update kimi-code skill with session persistence, file arch refactor issues #164-#170 2026-03-15 11:38:17 -04:00
Alexander Whitestone
d785af7f2f docs: cycle 2 retrospective — Kimi codebase scanning bottleneck identified
Root cause: Kimi reads entire codebase before editing, consuming timeout.
Fix: pre-extract context into prompt, or use Kimi for reasoning tasks only.
2026-03-15 11:22:28 -04:00
Alexander Whitestone
9e858ecf21 docs: cycle 1 retrospective — delegation loop proof of concept
Results: 1 PR (#160), 1 deferred (#148 too large for single Kimi task)
Key lessons: task size is critical, never use /tmp for worktrees,
split large tasks into 3-4 file chunks.
2026-03-15 11:15:44 -04:00
Alexander Whitestone
9d274f528d docs: full design log for 2026-03-15 session
Captured: philosophy discussions, work objectives, Kimi design consultation,
infrastructure built, key decisions, open questions, and Alexander's exact
words. Structured for retrospective when building 2nd orchestration layer.
2026-03-15 10:43:18 -04:00
Alexander Whitestone
8ddbe06d73 feat: add hermes-config-sync script for automated state persistence 2026-03-15 10:12:47 -04:00
Alexander Whitestone
6490954006 chore: sync all local state to source control
- bin: add hermes-claim, hermes-dispatch, hermes-enqueue (queue scripts)
- bin: update timmy-loop-prompt.md (Phase 1 fix-broken-PRs, --no-verify ban)
- bin: update timmy-loop.sh (timeout cleanup, claim TTL)
- bin: update timmy-status.sh (watchdog auto-restart for dead loop)
- bin: update timmy-tmux.sh (pane layout fixes)
- bin: update timmy-watchdog.sh (minor fixes)
- skills: add hermes-agent skill (was missing from repo)
- memories: sync MEMORY.md and USER.md to current state
- cron/channel_directory: sync runtime state
- .gitignore: whitelist new bin scripts, fix hermes-agent/ scope
2026-03-15 10:11:46 -04:00
Alexander Whitestone
b0caca4289 fix: mouse-select copies to system clipboard via pbcopy
Drag-select, y, or Enter in copy-mode all pipe to pbcopy.
Holding Option still bypasses tmux for native Terminal.app select.
2026-03-15 08:11:49 -04:00
Alexander Whitestone
36127433e7 fix: pane indices match pane-base-index=1
tmux.conf sets pane-base-index 1, but dev-session.sh was
referencing panes starting at .0. All splits and send-keys
silently failed, leaving a single empty pane with no dashboard.
2026-03-15 07:58:41 -04:00
Alexander Whitestone
973411e3b5 fix: auto-attach on first run
- exec tmux attach after creating session (was missing on fresh create)
- removed echo banners that flashed before attach
2026-03-15 07:56:07 -04:00
Alexander Whitestone
474e9660fb feat: add tmux config + dev session bootstrap
- tmux.conf: 256-color, mouse, sensible defaults, purple status bar
- dev-session.sh: 2-window layout (hermes TUI + timmy devloop)
- install.sh: symlinks configs into place
- Auto-attach via .zshrc on Terminal.app open
2026-03-15 07:51:43 -04:00
Alexander Whitestone
ffb33de0ed chore: dev loop prompt rewrite + branch safety + tox conventions
- timmy-loop-prompt.md: full rewrite (76→209 lines) with PR-only workflow,
  tox environments, git hooks, Kimi dispatch safety block, conventional commits
- kimi-code skill: added Branch & Convention Safety section
- memories/MEMORY.md: updated with branch protection notes
- config.yaml: removed dead kimi API key
- cron/jobs.json: updated scheduled jobs
- channel_directory.json: minor update
- .gitignore: exclude queue/ and *.db
2026-03-14 21:28:16 -04:00
Alexander Whitestone
7102ee695a fix: feed Timmy the PR info directly instead of asking him to query Gitea
Timmy doesn't have Gitea access in CLI chat mode. Instead of asking
him to check for PRs (which he can't), we fetch the latest merged PR
and commit summary ourselves and ask for his opinion on the change.
2026-03-14 18:17:44 -04:00
Alexander Whitestone
65857f5b3e prompt: add Kimi scope guide, parallel execution, multi-issue cycles
- Kimi writes to files in place, not stdout — check git diff after
- Ideal scope: one focused task per invocation with file paths + context
- Parallel: run multiple kimi tasks with & and wait, no rate limits
- Cycles can now tackle 1-3 issues if independent
- Re-emphasized: do NOT write code yourself, delegate to Kimi
2026-03-14 18:13:34 -04:00
Alexander Whitestone
d290d03bc5 fix: enforce Kimi delegation — Hermes was doing all coding itself
16 cycles, zero actual Kimi invocations. Hermes kept deciding
every fix was 'surgical' and burning Anthropic tokens on everything.

New prompt: delegation is MANDATORY, not optional. Only exception
is changes under 5 lines. If Hermes catches itself writing code,
it must stop and delegate.
2026-03-14 18:07:17 -04:00
Alexander Whitestone
0b066de1cc feat: add timmy loop infrastructure + config updates
Loop v2: timmy-loop.sh (20min timeout, claim TTL, cleanup, Timmy triage/review)
Status panel: timmy-status.sh (8s refresh, Ollama/dashboard/issues/system)
Prompt: timmy-loop-prompt.md (2.6KB, down from 6.2KB)
tmux layout: timmy-tmux.sh
Watchdog: timmy-watchdog.sh

Config: fallback_model chain (kimi-k2.5 -> local qwen3:30b)
        custom_providers updated to qwen3:30b
2026-03-14 18:00:32 -04:00
Alexander Whitestone
804ffb5cf0 update: kimi-code skill, fallback chain → groq kimi-k2 2026-03-14 15:09:28 -04:00
Alexander Whitestone
7a9acc8caa add: hermes-sync script for upstream rebase workflow 2026-03-14 14:43:52 -04:00
Alexander Whitestone
11cc14d707 init: Hermes config, skills, memories, cron
Sovereign backup of all Hermes Agent configuration and data.
Excludes: secrets, auth tokens, sessions, caches, code (separate repo).

Tracked:
- config.yaml (model, fallback chain, toolsets, display prefs)
- SOUL.md (Timmy personality charter)
- memories/ (persistent MEMORY.md + USER.md)
- skills/ (371 files — full skill library)
- cron/jobs.json (scheduled tasks)
- channel_directory.json (platform channels)
- hooks/ (custom hooks)
2026-03-14 14:42:33 -04:00