--- namespace: work tags: [system, agent, eagle, rules] last_updated: 2026-05-15 confidence: 1.0 --- # Personal OS — Agent Rules & Architecture Eagle (Орёл) is the Zulip-facing Hermes agent. This page documents what Eagle knows about its own environment and how to reason about it. ## Data Flow ``` Asana API → sync.js (every 30 min, workdays via Hermes cron) → PostgreSQL (tasks, stories, task_edges, sync_state, task_annotations) → generate-status.js → ~/Developer/personal-os/asana_context.md ← raw Asana context (inbox-check) → ~/context/status.md ← Eagle reads THIS ``` Eagle **only reads** `~/context/status.md`. It never touches the DB directly or calls Asana API. ## Eagle's Knowledge Sources 1. `~/context/status.md` — live Asana + ActivityWatch snapshot (updated every 30 min) 2. `~/Developer/personal-os/briefs/daily/YYYY-MM-DD.md` — today's brief 3. `~/Developer/personal-os/briefs/weekly/plan-MONDAY.md` — weekly plan 4. `~/obsidian/wiki/` — knowledge base (via obsidian MCP) 5. `~/Developer/personal-os/agent/` — playbooks and rules (via file tools) ## Feedback Loop When Alex corrects something: 1. Edit the brief directly (show diff first, confirm before writing) 2. If systemic → edit the prompt template in `agent/prompts/` 3. Log correction silently to `corrections_log` table: ```sql INSERT INTO corrections_log (date, week_number, source, original_plan, correction, deferred_gids, reason_tag) VALUES (current_date, EXTRACT(WEEK FROM current_date)::int, '', '', '', ARRAY[]::text[], ''); ``` `source` values: `zulip_pushback` | `morning_brief_correction` | `manual` `reason_tag` examples: `ship-review-crunch` | `urgent-bug` | `meeting-day` | `over-estimated` | `scope-change` Never announce the log insertion. It is silent instrumentation. ## Self-Diagnostics If pipeline seems stale, Eagle can check: ```bash stat -f "%Sm" ~/context/status.md # Should be < 40 min old on workdays ``` If sync is broken: ```bash bash ~/scripts/run-pipeline.sh # Runs sync.js + generate-status.js + healthcheck ``` If wiki is stale: ```bash bash ~/scripts/run-wiki-ingest.sh # Runs at 22:00 via launchd; call manually if needed ``` ## Cron Schedule (Hermes) | Job | Schedule | Channel | |-----|----------|---------| | data-pipeline | */30 7-21 workdays | silent | | morning-brief | 08:30 workdays | #daily-brief (Zulip → MM post-migration) | | eod-summary | 18:00 workdays | #daily-brief (Zulip → MM post-migration) | | inbox-check | */30 9-19 workdays | #inbox (Zulip → MM post-migration) | | weekly-plan | Mon 08:00 | #daily-brief (Zulip → MM post-migration) | | weekly-review | Fri 17:00 | #daily-brief (Zulip → MM post-migration) | | retrospector | Fri 17:30 | #retrospector | | commit-vault | 23:00 daily | silent | | **wiki-curation** | **02:00 daily** | **silent (cron report)** | > ⚠️ Work channels (morning-brief, eod-summary, inbox-check, weekly-plan, weekly-review) migrating from Zulip → Mattermost. Blocked on IT Ops MM bot accounts. See `work/plans/mattermost-migration.md`. wiki-ingest runs at 22:00 via **launchd** (not Hermes) — because it needs Mac filesystem access. wiki-curation runs at **02:00 daily** via Hermes cron — llm-wiki skill, lints and updates wiki/ folder. ## Allowed File Writes Eagle can write to: - `briefs/daily/YYYY-MM-DD.md` - `briefs/weekly/plan-MONDAY.md` - `briefs/weekly/YYYY-MM-DD.md` - `briefs/inbox/YYYY-MM-DD.md` - `agent/prompts/*.md` (with confirmation) - `~/obsidian/work/projects/SLUG.md` - `~/obsidian/work/decisions/YYYY-MM-TOPIC.md` - `~/obsidian/personal/` - `~/obsidian/family/` Never write to `obsidian/wiki/` directly — that's wiki-ingest's job. Never write `corrections_log.md` — use the SQL INSERT above (table, not file). ## Activity Classification Work activity is classified via `aw-projects.json`. Projects with `namespace: "personal"` (e.g., AXPressDeck, media_files_db) appear as a footnote in the Activity section of status.md but are **not** counted as work time and **not** upserted to `activity_daily`. To re-classify a project (personal ↔ work), ask Eagle to edit `aw-projects.json`. ## See Also - [[personal-os-architecture]] — full system map and data flows - [[personal-os-self-modification]] — how to safely change prompts, schema, crons - [[vault-filling-guide]] — what goes where in the Obsidian vault