Completed goals moved here to keep GOALS.md lean. Axonix: do not read this file during sessions — it is reference only.
- [G-126] LEARNINGS.md audit: trimmed sub-agent code example, stream_server section, removed duplicate evolve.sh warning; 9155→6952 bytes — Day 24 S2
- [G-121] Split repl.rs into sub-modules (src/repl/): types, commands, memory, predict, ssh_cmd, github_cmds, tests; 2459 lines split into files under 300 lines — Day 24 S2
- [G-105] Listener /history command: /history returns last 5 conversation turns formatted for Telegram — Day 21 S1
- [G-100] Self-written skill: git activity summarizer —
src/git_summary.rs+skills/git-summary/SKILL.md;recent_activity(n)+format_for_telegram(n); wired into Telegram /status — Day 21 S1 - [G-093] Telegram /ask context awareness: active goal + memory injected into system prompt — Day 18 S1
- [G-083] Dashboard redesign: Axonix visual identity — panel-based dark system theme, 1000px layout, Inter+JetBrains Mono dual typography, system-status hero — Issue #99 — Day 15 S1
- [G-079] Wire
brief.rsinto AxonixDb: every --brief run logs a row to the sessions table with day/notes; +4 tests; DB failure non-crashing — Predictions #20/#21 resolved — Day 15 S1 - [G-078] NUC service monitor: --health flag reports Docker container status via dockerproxy, Telegram alert on non-running containers, brief includes containers section — Level 4 "Know the NUC" — Day 14 S1+S2
- [G-072] Add
--insert-metrics-row <row>CLI flag: calls insert_metrics_row() from evolve.sh without API key; EVOLVE_PROPOSED.md proposal written for evolve.sh integration; closes prediction #14 — Day 11 S4 - [G-071] Fix METRICS.md row ordering:
insert_metrics_row()in newsrc/metrics.rs— inserts after|-----|separator, deduplicates stub rows for same Day/Session, cleaned up 9 existing duplicate rows — Issue #67 closed — Day 11 S3 - [G-070] Meta-system health check:
MetaHealthCheckmodule verifies predictions.json freshness, cycle_summary.json freshness, METRICS.md stale rows; surfaces in morning brief under META-SYSTEM section and Telegram /brief; 20 new tests — Issue #83 — Day 11 S2 - [G-069] LEARNINGS.md graduation: prune stale "Future fix" entries that are implemented, collapse duplicates, reduce context waste per session — Issues #84/#85 closed — Day 11 S1 JOURNAL.md summarization: when JOURNAL.md exceeds 15 entries,
/archive-journalREPL command archives older entries to JOURNAL_ARCHIVE.md keeping last 10; JournalArchiver module with 22 tests; ran live (56 entries archived) — Issue #69 — Day 10 S6 - [G-067] Pokémon GO events and promo codes in morning brief: fetch from ScrapedDuck JSON API (leekduck.com data source), show active events, upcoming (7 days), and promo codes in --brief and /brief — operator request — Day 10 S5
- [G-066] Failure pattern tracking: add
.axonix/failure_patterns.jsonstore (FailurePatternStore),/failuresREPL command, surface failure counts in morning brief — Issue #70 — Day 10 S5 - [G-065] Surface cycle_summary in morning brief: add last-session completed items to Brief::collect() and format_terminal/format_telegram output; add 15 new tests for LastSessionSummary — Day 10 S4
- [G-064] Add prediction calibration:
calibration_score()method to PredictionStore (hit rate, avg days early, direction bias); inject into system prompt; surface in morning brief — 17 new tests — Issue #72 — Day 10 S3 - [G-063] Caddy admin API health integration: add caddy_health() to health module, surface upstream status in morning brief (Issue #73) — Day 10 S2
- [G-060b] Wire --listen flag into main.rs and implement run_listener() async poll loop — VERIFIED IN CODE: run_listener() exists in listener.rs lines 210-361, --listen wired in cli.rs and main.rs — Issue #64 follow-up — Day 10 S1/S2
- [G-061] Add session velocity scoring to analyze_metrics.py — goals/session, tests/session, composite trend (Issue #75) — Day 10 S1
- [G-062] Add trigger field to METRICS.md rows — operator/community/self — tag at session start (Issue #76) — Day 10 S1
- [G-060] Design personal assistant architecture: ASSISTANT_ARCH.md written, Issue #64 responded,
src/listener.rs+src/conversation_memory.rsimplemented, EVOLVE_PROPOSED.md service entry added — Day 9 S11 - [G-059] Write PERSONALITY.md: self-authored document capturing how Axonix thinks, communicates, and makes decisions — written from zero based on 9 days of sessions — Roadmap Level 4 "Build at least one tool I decided to build myself without being asked" — Day 9 S10
- [G-058] Bluesky post history persistence: record every post to
.axonix/bluesky_history.json(date, text, uri, cid), add deduplication warning, show recent post count in morning brief — Roadmap Level 3 "Social learnings persisting across sessions" — Day 9 S9 - [G-057] Add health snapshot to morning brief: include CPU%, memory%, disk%, uptime in Brief::collect() and format_terminal/format_telegram output — Roadmap Level 4 "Know the NUC" — Day 9 S4
- [G-056] Fix brief.rs: update parse_metrics_row() column offsets for new 11-column METRICS.md format (Session column at col 2 shifts Date/Tokens/Tests/Notes by +1); add Session field to SessionSummary — Issue #59 follow-up — Day 9 S2
- [G-054] Fix METRICS.md: repair the malformed Day 9 S1 stub row (missing Session column), and prevent future broken rows by updating the analyze_metrics.py parser to detect and warn on malformed rows — Issue #57 — Day 9 S1
- [G-055] EVOLVE_PROPOSED.md: fix evolve.sh METRICS.md stub format (add S$SESSION column in lines 149/354/358), add --brief-telegram to cron morning run — Issue #57 + Issue #59 — Day 9 S1
- [G-051] Dashboard: surface analyze_metrics.py pattern analysis on axonix.live — render_metrics_patterns() added to build_site.py, new #patterns section on dashboard. Also fixed parse_metrics() column offset bug (Session column added Day 8 S5 shifted all indexes). Roadmap Level 2 "Patterns visible in METRICS.md" complete — Day 8 S6
- [G-052] Resolve prediction #1: "By Day 10, I will have resolved at least 3 community issues" — TRUE: 7 issues fixed by Day 8 S6 (#44, #45, #46, #48, #49, #50, #55), satisfied 2 days early — Day 8 S6
- [G-053] Twitter env vars — operator intentionally removed from docker-compose.yml and CAPABILITIES.md. Twitter is not an active integration. Do not re-add.
- [G-050] Fix METRICS.md: sort rows chronologically (Day+Session order), replace malformed
~?kentries with consistent notation, fix the table structure (Issue #55) — Day 8 S5 - [G-049] Dashboard: show current journal entry on axonix.live (Level 3 — "Dashboard tells a story a stranger could follow"); fetch latest journal heading + body from JOURNAL.md and render it in docs/index.html via build_site.py — Day 8 S4
- [G-047] Write scripts/analyze_metrics.py: read METRICS.md and produce pattern analysis (test growth rate, session cadence, lines-per-session trends) — Day 8 S4
- [G-048] Add /predict REPL command: create new predictions interactively without editing code — Day 8 S4
- [G-001] Track session metrics over time — Day 1 (first real data: Day 2)
- [G-002] Analyze metrics and identify biggest bottleneck — Day 2 Session 3
- [G-003] Build a public dashboard that shows goals, metrics, and journal — Day 3 Session 4
- [G-004] Make sessions observable in real time via live streaming — Day 6 S5 (confirmed: evolve.sh pipes to stream server, stream.axonix.live live)
- [G-006] Audit all unwrap() calls across codebase and replace with proper error handling
- [G-007] Extract ReplState struct to enable integration testing of REPL commands — Day 3 Session 1
- [G-008] Add
/skillscommand showing which skills are loaded — Day 3 Session 1 - [G-009] Add
/historycommand: show a numbered list of prompts from this session — Day 3 Session 2 - [G-010] Multi-device management: SSH into other home network machines — Day 3 Session 5
- [G-011] Expanded Telegram integration: accept commands + send inline responses — Day 3 Session 6
- [G-012] Post GitHub comments and commits as axonix-bot, not under owner's account — Day 2 Session 10
- [G-014] Token compression B and C — Day 3 Session 5
- [G-015] Telegram /status command: report session health from Telegram — Day 3 Sessions 8–10
- [G-016] Backfill missing sessions in METRICS.md and verify session tracking is reliable
- [G-017] Bluesky integration: free-tier social posting alternative to Twitter — Day 3 Session 11
- [G-018] Extend Telegram capabilities: /health command — Day 3 Session 11
- [G-019] Structured persistent memory: key-value store across sessions — Day 3 Session 13
- [G-020] Journal auto-post to GitHub Discussions — Day 4 Sessions 1–2
- [G-021] Prediction tracking: log predictions, compare against outcomes, build calibration data (Issue #24)
- [G-022] Morning brief: surface what matters before the day starts — Day 4 Sessions 6–7
- [G-023] Dashboard live goals + predictions: show active goals and open predictions on axonix.live — Day 5 S1
- [G-024] Inject memory + predictions into system prompt at startup for smarter sessions — Day 5 S2
- [G-025] Health watch with Telegram alerts: periodic health checks that notify when thresholds exceeded — Day 6 S2
- [G-026] Dashboard improvements: add charts/graphs for test count and token usage over time — Day 6 S3
- [G-027] Sub-agents: code_reviewer + community_responder wired into every session — Day 6 S4
- [G-028] Add /review REPL command to invoke code_reviewer sub-agent explicitly — Day 6 S5
- [G-005] Build a community interaction system — Day 7 S1 (/respond command, community_responder sub-agent; full loop: read issues, draft, post)
- [G-029] Resolve predictions: go through open predictions from Day 6 S3 and close them with actual outcomes — Day 7 S1
- [G-030] Push test count to 500: write targeted tests for under-covered modules — Day 7 S4 (506 tests passing)
- [G-031] Morning brief via Telegram on schedule: /brief command wired in all three session modes (Telegram, --prompt, piped); EVOLVE_PROPOSED.md documents cron schedule for operator — Day 7 S5/S6
- [G-033] Fix context window exhaustion: write cycle_summary.json at session end, load at startup — cycle_summary module, /summary command, system prompt injection all done — Day 7 S5
- [G-032] Self-written skill: write a new skill file from scratch (not seeded by operator) — skills/machine/SKILL.md written from scratch Day 7 S6
- [G-034] EVOLVE_PROPOSED.md: wire cycle_summary auto-write + morning brief schedule into evolve.sh — evolve.sh updated Day 7 S6
- [G-035] Add --write-summary CLI flag: write clean, accurate cycle_summary.json from real data (git stats, test count, active goals) at session end — Day 7 S7
- [G-036] Write skills/rust-patterns/SKILL.md: ownership/cloning, error handling, lifetimes, compiler errors (E0382/E0499/E0716), Cargo hygiene — Issue #42 closed, Day 7 S8
- [G-037] Improve ROADMAP.md Level 2: make metrics tracking reliable — METRICS.md rows often have '~?k' tokens and auto-generated notes; proposed EVOLVE_PROPOSED.md changes for operator to apply — Day 8 S1
- [G-038] README overhaul: rewrite README.md to be professional, accurate, and compelling — Issue #50 closed, Day 8 S1
- [G-039] EVOLVE_PROPOSED.md: commit-body enforcement before git push — Issue #48 closed, EVOLVE_PROPOSED.md written, Day 8 S1
- [G-040] Twitter write access: regenerate tokens with Read+Write scope so @AxonixAIbot can actually post session announcements — LEARNINGS.md documents fix, waiting on operator to apply
- [G-041] Dashboard: auto-post journal entries to GitHub Discussions — implemented via --discuss flag, G-020 done Day 4
- [G-042] /recap REPL command: post Bluesky thread summarizing the session (Issue #49) — BlueskyClient.post_reply(), /recap in repl.rs, 3-post thread — Day 8 S2
- [G-044] EVOLVE_PROPOSED.md: add METRICS.md backfill stub proposal (Issue #47) — operator applied it, Day 8 S2
- [G-043] Telegram session summary: --session-summary-telegram flag that reads cycle_summary.json and sends a compact message (Issue #46) — Day 8 S3
- [G-045] Issue #45: validate build_site.py output contains required HTML elements — validate_site.py added, Day 8 S3
- [G-046] Issue #44: add [profile.release] to Cargo.toml to reduce binary size — Day 8 S3
- [G-074] Give
--listenproactive work: GitHub issue polling every 15 min + daily brief to Telegram — Issue #92 — Day 11 S6 - [G-069] LEARNINGS.md graduation + JOURNAL.md archiver — Issues #84/#85 — Day 11 S1
- [G-070] Meta-system health check:
MetaHealthCheckmodule — Issue #83 — Day 11 S2 - [G-071] Fix METRICS.md row ordering:
insert_metrics_row()in newsrc/metrics.rs— Day 11 S3 - [G-072] Add
--insert-metrics-row <row>CLI flag — Day 11 S4 - [G-073] Fix morning brief recent sessions:
parse_recent_metrics()takes last N rows but METRICS.md is now newest-first; fix to take first N data rows; also clean duplicate S4 rows and resolve predictions #7/#9/#13 — Day 11 S5 - [G-076] Wire SQLite into memory.rs: MemoryStore write-through to axonix.db, JSON fallback — Prediction #18 — Day 12 S2
- [G-079] Wire
brief.rsinto AxonixDb: brief runs logged to sessions table, +4 tests — Predictions #20/#21 — Day 15 S1 - [G-078] NUC service monitor: --health flag reports Docker container status, Telegram alert on non-running, brief includes containers — Level 4 "Know the NUC" — Day 14 S1+S2
- [G-086] Dashboard: live session stream viewer — SSE panel on axonix.live connecting to stream.axonix.live
- [G-091] Dashboard: wire memory-search results into session orient panel — memory context panel in state grid, TF-IDF scoring vs active goal, sqlite3 query of axonix.db — Issue #103 — Day 17 S3
- [G-092] Dashboard: observations browser page — full memory list with tag filtering, recency order, client-side JS filter, nav link from index — Day 17 S4
- [G-110] Structured observations: Issue #104 implementation — Completed: Day 19 S2 (verified already in code from Day 19 S1). sobs_insert(), sobs_search(), sobs_list() in db.rs; /memory add/search/list in listener.rs + telegram.rs; 10+ tests.
- [G-098] Failure pattern dashboard panel — Completed: Day 19 S2 (verified already in code). render_failure_patterns() in build_site.py at line 478; panel shows top patterns with count and last-seen date.
- [G-099] Predictions dashboard: resolution rate badge — Completed: Day 19 S2 (verified already in code). render_predictions() in build_site.py at line 525; badge shows total/correct/rate from predictions.json.
- [G-105] Listener /history command (last 5 conversation turns) — Day 21 S1
- [G-100] Self-written skill: git activity summarizer — Day 21 S1
- [G-110] Semantic memory search via Ollama embeddings (Issues #103/#109) — Day 20 S1
- [G-102] Dashboard: session timeline SVG bar chart — Day 20 S1
- [G-151] Split lint.rs (580 lines) into lint/ sub-modules — Day 28 S2
- [G-152] Split pogo.rs (505 lines) into pogo/ sub-modules — Day 28 S2
- [G-156] Split conversation_memory.rs (453 lines) into sub-modules — Day 28 S4
- [G-157] Split github.rs (468 lines) into sub-modules — Day 28 S4