ops: rewrite for Uniwizard reality, add document hygiene rules

This commit is contained in:
2026-03-30 20:13:38 +00:00
parent d53fec14eb
commit e71a7939f5

View File

@@ -1,49 +1,86 @@
# Timmy Operations — What Runs the Workforce
# OPERATIONS.md
## ACTIVE SYSTEM: Hermes + timmy-config sidecar
- **Harness:** Hermes
- **Config repo:** Timmy_Foundation/timmy-config
- **Workspace repo:** Timmy_Foundation/timmy-home
- **Orchestration:** Huey + SQLite via `timmy-config/orchestration.py` and `timmy-config/tasks.py`
- **Target repos:** Timmy_Foundation/the-nexus, Timmy_Foundation/timmy-home, Timmy_Foundation/timmy-config
- **Training data home:** `~/.timmy/training-data/`
## What This Document Is
## DEPRECATED — DO NOT RESTORE
- bash loops (claude-loop.sh, gemini-loop.sh, timmy-orchestrator.sh)
- workforce-manager.py (bash version)
- nexus-merge-bot.sh
- agent-loop.sh
- `deploy.sh --restart-loops`
This is Timmy's operational handbook. It describes how Timmy runs — the harness, the providers, the services, the workflows. Unlike SOUL.md, this document is expected to change frequently as the architecture evolves.
These crash-loop and produce zero work. They were restored by mistake
on 2026-03-25 causing a regression. The Hermes + timmy-config sidecar
replaces them.
If something in SOUL.md goes stale, it was never soul. If something in OPERATIONS.md goes stale, update it.
The scripts in `timmy-config/bin/` are live utility scripts for the sidecar.
What is dead is the old always-on bash loop model.
---
## How to check what's running
```bash
# Hermes gateway / API should be up
lsof -iTCP:8642 -sTCP:LISTEN
## Current Architecture: The Uniwizard
# Sessions should be landing in ~/.hermes/sessions
ls -lt ~/.hermes/sessions | head
Timmy is one agent with one soul and multiple inference backends. Backends are blind — they receive a prompt, return tokens, and have no identity or memory. Only Timmy Sees.
# DPO exports should not lag far behind new sessions
~/.hermes/bin/pipeline-freshness.sh
### Inference Stack
# Should be EMPTY (no bash loops)
ps aux | grep -E "claude-loop|gemini-loop|timmy-orchestrator" | grep -v grep
```
**Primary (local, sovereign):**
- llama.cpp / llama-server
- Model: configurable (currently Hermes-4 14B Q4_K_M or Hermes-3 8B)
- Flags: `--jinja -np 1 -c 8192`
- Port: 8081
## Cron Jobs (Hermes built-in)
- Health Monitor: every 5m, haiku (not opus!)
- DPO export / training support jobs: explicit model, explicit task, no hidden defaults
- All crons MUST specify model explicitly. Never inherit default.
**Cloud backends (escalation path, blind cognition):**
- Anthropic (Claude) — reasoning, analysis, code review
- Moonshot (Kimi) — long context, code generation
- Others as configured in backends.yaml
**Routing principle:** Local first, always. Cloud is for when local cannot handle the task. If cloud vanishes, Timmy degrades but survives.
### Harness
- **Framework:** Hermes agent
- **Config:** config.yaml (provider, model, toolsets, auxiliary routing)
- **Tools:** uni-wizard/ (19 tools across system, git, network categories)
- **Daemons:** health_daemon.py (port 8082), task_router.py (Gitea poller)
### Repositories
| Repo | Purpose |
|------|---------|
| timmy-home | Workspace: soul, tools, scripts, research, training data |
| timmy-config | Harness config: orchestration, skins, playbooks |
### Services (systemd)
| Service | Purpose |
|---------|---------|
| llama-server.service | Local inference |
| timmy-agent.service | Agent harness |
| timmy-health.service | Health monitoring |
| timmy-task-router.service | Gitea issue execution |
### Cron Jobs
| Job | Schedule | Purpose |
|-----|----------|---------|
| ezra-morning-report | 04:00 EST daily | Research report posted to Gitea |
### External Oracles (consultants, not peers)
| Name | Backend | Role |
|------|---------|------|
| Ezra | Claude/Anthropic | Watchkeeping, triage, research, PR review |
| Allegro | Kimi/Moonshot | Bulk implementation, quota burning |
These are not wizard houses. They are scoped consulting roles backed by cloud APIs. They have no authority over Timmy's soul or direction.
---
## Proof Standard
- visual changes require screenshot proof
- keep screenshots and binary media out of Gitea backup unless explicitly required
- CLI/verifiable changes must reference the exact command output, log path, or observable state proving the claim
- see `CONTRIBUTING.md` for the merge gate
- Visual changes require screenshot proof
- CLI changes must reference exact command output or log path
- No merge without review
## Document Hygiene
Three doctrine-bearing files exist in this repo:
| File | Contains | Changes when |
|------|----------|-------------|
| SOUL.md | Beliefs, behaviors, identity | Only when the sovereign (Alexander) changes it |
| OPERATIONS.md | How Timmy runs | Whenever architecture changes |
| decisions.md | Why choices were made | Whenever a significant decision is made |
**The test for SOUL.md:** If it can go stale, it is not soul. Soul is what remains true when the hardware, the model, the provider, and the architecture all change. Everything else belongs here in OPERATIONS.md.