Files
obsidian-vault/personal/projects/personal-os/personal-os-agent-rules.md
T
2026-05-29 13:03:52 +00:00

3.6 KiB

namespace, tags, last_updated, confidence
namespace tags last_updated confidence
work
system
agent
eagle
rules
2026-04-28 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:
INSERT INTO corrections_log (date, week_number, source, original_plan, correction, deferred_gids, reason_tag)
VALUES (current_date, EXTRACT(WEEK FROM current_date)::int,
        '<source>', '<original>', '<user_message>',
        ARRAY[<gids>]::text[], '<reason_tag>');

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:

stat -f "%Sm" ~/context/status.md
# Should be < 40 min old on workdays

If sync is broken:

bash ~/scripts/run-pipeline.sh
# Runs sync.js + generate-status.js + healthcheck

If wiki is stale:

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
eod-summary 18:00 workdays #daily-brief
inbox-check */30 9-19 workdays #inbox
weekly-plan Mon 08:00 #daily-brief
weekly-review Fri 17:00 #daily-brief
retrospector Fri 17:30 #retrospector
commit-vault 23:00 daily silent

wiki-ingest runs at 22:00 via launchd (not Hermes) — because it needs Mac filesystem access.

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.