Sync with live vault: 28 new files, 7 imports, 16 updates

This commit is contained in:
2026-09-01 13:33:50 -07:00
parent dac3008e20
commit 8b26efd3b7
43 changed files with 1557 additions and 166 deletions
+6 -6
View File
@@ -2,12 +2,12 @@
Drop unprocessed material here:
- pasted transcripts
- links + one-line notes
- voice-to-text blobs
- pasted transcripts
- links + one-line notes
- voice-to-text blobs
- "figure this out later"
**Rules:**
- Leonard may reorganize into Wiki/projects after "ingest" or consolidation
- Do not put secrets
**Rules:**
- Leonard may reorganize into Wiki/projects after "ingest" or consolidation
- Do not put secrets
- Prefer dated filenames: `YYYY-MM-DD-topic.md`
@@ -0,0 +1,15 @@
# Agent Discussion Log
> Coordination channel between Jimmy (Hermes) and Leonard.
> Format: date + name + message, newest at top.
> Only loop Anthony in for final plan approval or when blocked.
---
## Pending Messages
<!-- New pending messages appear here -->
## Discussion History
<!-- Completed discussions below -->
@@ -0,0 +1,88 @@
# Decision Log — Agent OS Architecture
Records key architectural decisions for the Personal Agent OS.
## 2026-06-20: Initial Repo Structure
**Decision:** Created `personal-agent-os` as a single repo under `Tony_tech` org with `projects/`, `knowledge-base/`, `archive/`, `templates/`, `agent-config/`, and `_meta/`.
**Rationale:**
- Single repo over multiple repos: easier for Hermes to search_files across everything, simpler cross-referencing between projects and knowledge
- `archive/` over deletion: git history preserves everything, but active views stay clean
- `_meta/` at root (not under kb): repo-wide conventions and decision log should be immediately discoverable
- No auto-generating tag index in a folder: better to rebuild via cron script periodically
**Migrated from:** `Tony_tech/research/hermes-automation/` into `knowledge-base/automation-blueprints/hermes/`
**Trade-offs accepted:**
- Single repo means one default branch; projects share tag space (mitigated by hierarchical dir names)
- Cron scripts stored in two places: local disk (runs from) and repo (documentation). Must keep in sync.
## 2026-06-20: Daily Brief — Script + Context-From Pattern
**Decision:** Replaced agent-driven web/X search data gathering with a no-agent shell script that fetches free public APIs (wttr.in, HN Firebase, GitHub API).
**Why:** web_search and x_search were silently failing (Firecrawl unconfigured, xAI credits exhausted). The brief was returning `[SILENT]` for weeks.
**Result:** Working brief in <5 minutes, zero API costs, reliable data every tick.
**Cron job ID:** e94447937052
## 2026-07-12: GitHub Excluded from AI News Daily Feed
**Decision:** GitHub repos are excluded from the AI News Daily site feed (`generate_from_athena.py`). Athena still ingests them into `oracle.db` for research; the site generator filters them out.
**Rationale:**
- GitHub entries (repo releases, model cards) are tool announcements, not news events
- They dominated the feed due to high star-velocity scores (GLM-5.2, DeepSeek-R1, etc.)
- A "Breaking" tag on a repo release violates the editorial rule: repos/papers are never breaking
- GitHub was silently reappearing in the feed at least once this week despite prior exclusion — root cause not conclusively identified (possibly a reverted patch, config drift, or manual override)
**Implementation:** `generate_from_athena.py` filters `source IN ('github', 'gitlab', 'huggingface', 'arxiv')` → renders as plain links or drops entirely. This is a runtime filter, not a pipeline-level exclusion — Athena's DB still has the data.
**Trade-offs accepted:**
- Some genuinely interesting repos won't appear on the site (acceptable — site is for news, not discovery)
- If GitHub exclusion is ever reversed, it requires an explicit commit + decision-log entry, not an ad-hoc patch
- Root cause of the silent revert is not conclusively identified; this entry documents the symptom and the fix, not a proven cause
## 2026-07-12: Score-Floor Tiering Replaces Percentile Gates
**Decision:** AI News Daily tiering (breaking/update/normal) uses absolute score floors + rank, not percentile cutoffs. A tier is allowed to be empty if nothing qualifies.
**Rationale:**
- Previous system: `BREAKING_PCT = 0.90` (top 10%), `UPDATE_PCT = 0.75` (next 25%) — this guaranteed something always appeared in each tier regardless of quality
- Result: 6 red + 15 green items in a single run because rank alone forced items into tiers
- New system: `min_score` floor per tier; if nothing clears the bar, the tier is empty
- Tiers must reflect editorial quality, not statistical inevitability
**Implementation:** `config.yaml` defines `tiering.breaking.min_score` and `tiering.update.min_score`. Generator script reads these at runtime. Floors set from real score distribution analysis (see score distribution in oracle.db).
**Trade-offs accepted:**
- Some runs may have zero "Breaking" items — this is correct behavior, not a bug
- Score floors require periodic review as the score distribution evolves
## 2026-07-12: "UPDATE" Text Label Dropped (Color-Only for Tier 2)
**Decision:** Tier 2 (update) items render in green (`#34a83d`) without a "UPDATE | " text prefix. Breaking items retain "Breaking | " prefix.
**Rationale:**
- "UPDATE | " prefix was visually noisy and implied a correction/follow-up relationship that doesn't exist for most tier-2 items
- Green color alone provides sufficient visual distinction from normal (black) and breaking (red)
- Pending a real replacement label if one emerges from editorial review
**Trade-offs accepted:**
- Without a text label, tier-2 distinction is color-only (accessibility trade-off, acceptable for this audience)
## 2026-07-12: Headline Cap Raised to 300 (Ceiling, Not Target)
**Decision:** `MAX_ITEMS` raised from 40 to 300. This is a hard ceiling, not a target — actual count drops via decay, score floors, and source filtering.
**Rationale:**
- Previous cap of 40 was arbitrary and too low for a 24h freshness window
- The real constraint is quality (score floor), not count
- 300 provides headroom for high-signal days while preventing runaway output
- Stories that don't meet the score floor are dropped regardless of count
**Trade-offs accepted:**
- A very high-signal day could theoretically produce 100+ items — editorial review needed if this happens regularly
- The cap is a safety valve, not a design target
@@ -0,0 +1,33 @@
# Local PC Day One Changes (2026-08-28)
## Changes Made
- Created Agent OS folder structure inside Obsidian Vault (00_Raw, 00_system, 01_user, 01_Wiki, 02_agents/leonard, 04_Daily, 04_projects, 05_Output, etc.)
- Wrote `HOME.md` at vault root — the constitution for this Agent OS
- Copied `memory_policy.md`, `boot_prompt.md`, `lessons.md`, `OWNERSHIP.md` from the Gitea Personal Agent OS
- Copied project/kb templates into `09_templates/`
- Updated leonard profile `SOUL.md`:
- Local Windows PC ground truth
- Explicit Obsidian vault as memory layer
- Instructions to load from HOME.md and project files
- Updated project priorities for day one
- Updated `config.yaml` default model toward grok-build-0.1 (xAI) with freetoken/local aliases
- Created starter status.md for:
- hermes-local-pc-setup
- veripath
- Created `01_user/current-context.md`
- Cloned personal-agent-os to `~/Documents/AgentOS` for reference
## How to Use Going Forward
- Always open `HOME.md` first in complex sessions
- Use obsidian skill or direct file tools on the vault path
- Put durable project work in `04_projects/<name>/`
- Archive or move stale items to `10_archive/`
## Verification
- Vault path fallback in obsidian skill: `~/Documents/Obsidian Vault`
- FreeToken and providers already registered in Hermes
Next: Test reading HOME.md with tools, load a project status, verify Grok provider.
@@ -1 +1,46 @@
TWVtb3J5IFBvbGljeQ0KDQpUaGlzIHBvbGljeSBkZWZpbmVzIHdoYXQgdGhlIGxvY2FsIGFnZW50IE9TIG1heSByZW1lbWJlciwgd2hlcmUgbWVtb3JpZXMgYmVsb25nLCBhbmQgaG93IGFnZW50cyBzaG91bGQgdXNlIGxvY2FsIG9yIFNTSC10dW5uZWxlZCBMTE0gc2VydmljZXMuDQoNCk1lbW9yeSBTY29wZXMNCg0KVXNlciBtZW1vcnkgaXMgZm9yIGR1cmFibGUgZmFjdHMgYWJvdXQgdGhlIGh1bWFuOiBwcmVmZXJlbmNlcywgZ29hbHMsIGNvbnN0cmFpbnRzLCBhbmQgY29uZmlybWVkIHdvcmtpbmcgc3R5bGUuIEFnZW50cyBtYXkgcmVhZCByZWxldmFudCB1c2VyIG1lbW9yeSwgYnV0IG11c3Qgbm90IHdyaXRlIGNvbmZpcm1lZCB1c2VyIG1lbW9yeSB3aXRob3V0IGV4cGxpY2l0IGNvbmZpcm1hdGlvbi4NCg0KQWdlbnQgbWVtb3J5IGlzIGZvciBhZ2VudC1zcGVjaWZpYyBiZWhhdmlvcjogbGVzc29ucywgdG9vbCBoYWJpdHMsIHJlY3VycmluZyBtaXN0YWtlcywgYW5kIG9wZXJhdGluZyBpbXByb3ZlbWVudHMuIEhlcm1lcyB3cml0ZXMgSGVybWVzIG1lbW9yeS4gTGVvbmFyZCB3cml0ZXMgTGVvbmFyZCBtZW1vcnkuDQoNClByb2plY3QgbWVtb3J5IGlzIGZvciBhY3RpdmUgd29yazogYnJpZWZzLCBzdGF0dXMsIGRlY2lzaW9ucywgb3BlbiBxdWVzdGlvbnMsIHRhc2sgbG9ncywgYW5kIGhhbmRvZmZzLiBQcm9qZWN0IG1lbW9yeSBpcyB0aGUgZGVmYXVsdCBwbGFjZSBmb3IgdGFzay1zcGVjaWZpYyBmYWN0cy4NCg0KU2hhcmVkIG1lbW9yeSBpcyBmb3IgcmV1c2FibGUgd29ya2Zsb3dzLCBwcm9tcHRzLCB0ZXJtcywgYW5kIGRlY2lzaW9ucyB0aGF0IGhlbHAgbW9yZSB0aGFuIG9uZSBhZ2VudCBvciBwcm9qZWN0Lg0KDQpXcml0ZSBSdWxlcw0KDQpTYXZlIG9ubHkgZHVyYWJsZSBpbmZvcm1hdGlvbiB0aGF0IGlzIGxpa2VseSB0byBtYXR0ZXIgaW4gYSBmdXR1cmUgc2Vzc2lvbi4NCg0KUHJlZmVyIHByb2plY3QgbWVtb3J5IHVubGVzcyB0aGUgaXRlbSBjbGVhcmx5IGJlbG9uZ3MgdG8gdXNlciwgYWdlbnQsIG9yIHNoYXJlZCBtZW1vcnkuDQoNClB1dCB1bmNlcnRhaW4gdXNlci1tZW1vcnkgY2FuZGlkYXRlcyBpbiAwMVxfdXNlci9wcm9wb3NlZFxfbWVtb3J5Lm1kLg0KDQpEbyBub3Qgc3RvcmUgc2VjcmV0cywgY3JlZGVudGlhbHMsIHRva2VucywgcHJpdmF0ZSBrZXlzLCBvciBzZW5zaXRpdmUgcGVyc29uYWwgZGF0YS4NCg0KRG8gbm90IGluZmVyIHVzZXIgcHJlZmVyZW5jZXMgZnJvbSBhIHNpbmdsZSB3ZWFrIHNpZ25hbC4NCg0KQXJjaGl2ZSBzdGFsZSBvciBzdXBlcnNlZGVkIG1lbW9yeSBpbnN0ZWFkIG9mIGRlbGV0aW5nIGl0Lg0KDQpSZXRyaWV2YWwgUnVsZXMNCg0KTG9hZCBvbmx5IHRoZSBtZW1vcnkgbmVlZGVkIGZvciB0aGUgY3VycmVudCB0YXNrLg0KDQpQcmVmZXIgY29uY2lzZSBzdW1tYXJpZXMgb3ZlciByYXcgbG9ncy4NCg0KUHJlZmVyIHJlY2VudCwgaGlnaC1jb25maWRlbmNlLCBwcm9qZWN0LXNwZWNpZmljIG1lbW9yeS4NCg0KVXNlIHZlY3RvciByZXRyaWV2YWwgZm9yIHNlbWFudGljIHJlY2FsbCwgbm90IGFzIHRoZSBzb3VyY2Ugb2YgdHJ1dGguDQoNCkNpdGUgdGhlIE1hcmtkb3duIHNvdXJjZSBmaWxlIHdoZW4gYSBtZW1vcnkgbWF0ZXJpYWxseSBhZmZlY3RzIGEgZGVjaXNpb24uDQoNCkxvY2FsIExMTSBVc2UNCg0KTG9jYWwgTExNcyBtYXkgYmUgdXNlZCBmb3Igc3VtbWFyaXphdGlvbiwgdGFnZ2luZywgZGVkdXBsaWNhdGlvbiwgYW5kIG1lbW9yeSBjYW5kaWRhdGUgZXh0cmFjdGlvbi4gU3Ryb25nZXIgbW9kZWxzIHNob3VsZCByZXZpZXcgYW1iaWd1b3VzIHVzZXItbWVtb3J5IHVwZGF0ZXMgYW5kIG1ham9yIGFyY2hpdGVjdHVyZSBkZWNpc2lvbnMuDQoNCklmIGEgbG9jYWwgTExNIGlzIHJlYWNoZWQgdGhyb3VnaCBhbiBTU0ggdHVubmVsLCB0cmVhdCBpdCBhcyBhIGxvY2FsIHNlcnZpY2UgZW5kcG9pbnQuIERvIG5vdCBzZW5kIHNlY3JldHMgb3IgcHJpdmF0ZSB1c2VyIG1lbW9yeSB1bmxlc3MgdGhlIHVzZXIgaGFzIGFwcHJvdmVkIHRoYXQgbWFjaGluZSBhcyB0cnVzdGVkLg0KDQpEZWZhdWx0IGxvY2FsIGVuZHBvaW50czoNCg0KT2xsYW1hIGxvY2FsOiBodHRwOi8vMTI3LjAuMC4xOjExNDM0DQoNCk9sbGFtYSB2aWEgU1NIIHR1bm5lbDogaHR0cDovLzEyNy4wLjAuMToxMTQzNQ0KDQpDb21wcmVzc2lvbiBSdWxlcw0KDQpSYXcgbm90ZXMgYmVjb21lIHNlc3Npb24gc3VtbWFyaWVzLiBTZXNzaW9uIHN1bW1hcmllcyBiZWNvbWUgZHVyYWJsZSBtZW1vcnkgaXRlbXMuIER1cmFibGUgbWVtb3J5IGl0ZW1zIHVwZGF0ZSBwcm9qZWN0IHN0YXR1cywgYWdlbnQgbGVzc29ucywgb3IgY29uZmlybWVkIHVzZXIgbWVtb3J5Lg0KDQpSb3V0aW5lIGJvb3QgY29udGV4dCBzaG91bGQgc3RheSB1bmRlciAxNTAwIHRva2VucyB1bmxlc3MgdGhlIHRhc2sgcmVxdWlyZXMgbW9yZS4NCg0K
# Memory Policy
This policy defines what the local agent OS may remember, where memories belong, and how agents should use local or SSH-tunneled LLM services.
## Memory Scopes
**User memory** is for durable facts about the human: preferences, goals, constraints, and confirmed working style. Agents may read relevant user memory, but must not write confirmed user memory without explicit confirmation.
**Agent memory** is for agent-specific behavior: lessons, tool habits, recurring mistakes, and operating improvements. Hermes writes Hermes memory. Leonard writes Leonard memory.
**Project memory** is for active work: briefs, status, decisions, open questions, task logs, and handoffs. Project memory is the default place for task-specific facts.
**Shared memory** is for reusable workflows, prompts, terms, and decisions that help more than one agent or project.
## Write Rules
- Save only durable information that is likely to matter in a future session.
- Prefer project memory unless the item clearly belongs to user, agent, or shared memory.
- Put uncertain user-memory candidates in `01_user/proposed_memory.md`.
- Do not store secrets, credentials, tokens, private keys, or sensitive personal data.
- Do not infer user preferences from a single weak signal.
- Archive stale or superseded memory instead of deleting it.
## Retrieval Rules
- Load only the memory needed for the current task.
- Prefer concise summaries over raw logs.
- Prefer recent, high-confidence, project-specific memory.
- Use vector retrieval for semantic recall, **not** as the source of truth.
- Cite the Markdown source file when a memory materially affects a decision.
## Local LLM Use
- Local LLMs may be used for summarization, tagging, deduplication, and memory candidate extraction. Stronger models should review ambiguous user-memory updates and major architecture decisions.
- If a local LLM is reached through an SSH tunnel, treat it as a local service endpoint. Do not send secrets or private user memory unless the user has approved that machine as trusted.
Default local endpoints:
- Ollama local: `http://127.0.0.1:11434`
- Ollama via SSH tunnel: `http://127.0.0.1:11435`
## Compression Rules
- Raw notes become session summaries.
- Session summaries become durable memory items.
- Durable memory items update project status, agent lessons, or confirmed user memory.
- Routine boot context should stay under 1500 tokens unless the task requires more.
+6 -3
View File
@@ -1,5 +1,8 @@
# 01_Wiki — clean topic notes
# 01_Wiki — Clean Topic Pages
One durable idea or topic per note. Prefer `[[wikilinks]]`.
High-signal, linked topic notes. These are the curated knowledge base — not raw dumps, not working notes.
Agent promotes from `00_Raw/` and session consolidations — not a second dump folder.
**Rules:**
- Each page covers one topic thoroughly
- Link to related pages with `[[wikilinks]]`
- Prefer `00_Raw/` for messy captures; promote to Wiki after consolidation
@@ -0,0 +1,113 @@
# Hermes Gitea & Agent Development Ecosystem Manual
**Version 1.0 | June 21, 2026**
This manual documents the full Hermes AI Agent Development setup on Gitea. It covers repositories, the role-based multi-agent system, workflows, the critical verified operations protocol, and how to work within it. Maintained as part of your personal-agent-os knowledge base.
## 1. Introduction & Philosophy
The Hermes ecosystem uses layered repositories for clear separation of concerns:
- **core-planning (Ty_Tech/core-planning):** Read-only strategic planning. High-level decisions, project charters, architecture. This is the single source of truth for "what we're doing and why."
- **personal-agent-os (Tony_tech/personal-agent-os):** Active workspace. Knowledge base, projects, automation patterns, agent config. This is where Leonard builds.
- **hermes-agent (Tony_tech/hermes-agent):** Hermes installation, config, skills, plugins. Local agent infrastructure.
- **thornhill-website (Tony_tech/thornhill-website):** Production website for Thornhill Construction.
- **veripath (Tony_tech/veripath):** Legal/verification projects.
## 2. Multi-Agent System
### Roles
- **Leonard:** VPS agent (primary builder). Runs on VPS, has access to `personal-agent-os`, VPS tools, and SSH tunnels.
- **Jimmy:** Local agent (primary executor). Runs on laptop, handles local tasks, coordinates with Leonard.
- **Charlie:** Voice/creative agent. Handles TTS, voice workflows, creative content.
### Communication
- **Agent discussion board:** `00_system/agent-discussion.md` for cross-agent coordination
- **Agent comms inbox/outbox:** `agent-comms/` folder in `personal-agent-os` for structured messaging
- **Sync bot:** Automated bidirectional sync between agents via Gitea hooks
### Rules
- Leonard builds alone by default
- MoA only when Leonard flags a real design fork
- Jimmy handles local PC tasks, voice, TTS
- All agents share the same Obsidian vault for context
## 3. Verified Operations Protocol
### Model Switching
1. Check what's running: `hermes status`
2. Switch model: `hermes model <model-name>` (session-scoped)
3. Persist switch: `hermes config set model.default <model-id>`
4. Add fallback: `hermes fallback add <model-id>`
5. Verify: `hermes status` should show new model as primary
### Cron Jobs
1. List jobs: `hermes cron list`
2. Create: `hermes cron create --name <name> --prompt "<prompt>" --schedule "<cron>"`
3. Update: `hermes cron update --id <id> --prompt "<new-prompt>"`
4. Run: `hermes cron run --id <id>`
5. Check: `hermes cron log --id <id>`
### Git Sync
1. Local changes → `git add -A && git commit -m "update" && git push`
2. Vault sync cron runs every 6h: `vault-sync` job
3. Never commit secrets (`.gitignore` protects `ORK.txt`, `VPS.txt`)
## 4. Local Setup
### Models
- **LFM2.5-2.6B:** Primary local model. Runs on port 1920. ~2.1GB VRAM.
- **FreeToken:** Manual launch only. `ft.exe serve --model-path C:/models/gpt-oss-20b --port 1919`
- **Brother 5090:** Tailnet fallback. Qwen3.6 27B MTP at 100.64.0.2:8084
### Hermes Desktop
- Auto-starts via `Hermes Desktop.lnk` in Windows Startup
- Built locally with `hermes desktop --build-only`
- Bot mode built-in, profiles visible as bots
### Voice
- Wake word: "hey Jimmy" via sherpa
- Edge TTS AriaNeural provider
- Auto-TTS enabled, barge-in enabled
## 5. Project Tracking
Projects tracked in `04_projects/<slug>/`:
- `status.md` — current status, phase, priorities
- `decisions.md` — key decisions with rationale
- `notes.md` — working notes
Active projects listed in `HOME.md` (max 3 primary).
## 6. Security Notes
- **Never commit secrets to git.** Secrets live in environment variables or `.gitignore`'d files.
- **Gitea tokens** should be rotated periodically.
- **SSH tunnels** must be used for VPS services accessible from the laptop.
- **Public repos** must be audited for accidental credential exposure.
## 7. Troubleshooting
### Model not responding
- Check port: `netstat -ano | grep :<port>`
- Check process: `tasklist | grep -i <model-name>`
- Check GPU: `nvidia-smi`
- Try manual API call: `curl http://localhost:<port>/v1/models`
### Cron not running
- Check job status: `hermes cron list`
- Check logs: `hermes cron log --id <id>`
- Check cron schedule syntax
### Vault sync failing
- Check git remote: `git remote -v`
- Check `.gitignore` is protecting secrets
- Check Gitea repo exists and is accessible
## 8. Future Improvements
- [ ] Add health check cron for all services
- [ ] Build agent-to-agent messaging via Gitea webhooks
- [ ] Create project dashboard (auto-generated from status.md files)
- [ ] Implement automated vault consolidation with better quality checks
- [ ] Add RAG query interface to Hermes desktop
@@ -0,0 +1,8 @@
# Confirmed User Memory
> Facts about Tony that are confirmed and durable.
| Fact | Source | Date |
|------|--------|------|
| Runs a local FreeToken LLM server (RTX 3060 12GB) at `:1919/v1` with gpt-oss-20b and Gemma-4-26B. Manual-start only due to VRAM conflict with LFM2.5. Wired into Hermes as `custom:freetoken`. | Conversation | 2026-08-30 |
| Prefers fast cloud models over slow local 26B for CLI/voice to avoid ~1-minute reply delays. | MEMORY tool | 2026-08-30 |
@@ -0,0 +1,15 @@
# Current Context (Tony / Local PC)
> Update this when major changes occur (new hardware, model switches, vault restructuring).
- Primary machine: Windows 11 desktop with RTX 3060 12GB
- Inference: LFM2.5-2.6B via llama.cpp at :1920 (primary, 65K ctx, ~145 tok/s), FreeToken gpt-oss-20b at :1919 (manual, ~120 tok/s, can't coexist on 12GB GPU), brother nodes on tailnet (5060: Qwen3.8 27B 88K, 5090: Qwen3.6 27B MTP 200K)
- Models available: Gemma-4-26B, gpt-oss-20b, various Qwen, LFM2.5, Qwen3.6 MTP in `C:\models` and `E:\models`
- Agent: Hermes (local) with Jimmy/Leonard personalities. Jimmy = main agent, Leonard = operator/consolidator
- Memory: Obsidian vault (Agent OS layout) = external brain; Hermes native memory also enabled
- Key projects: VeriPath (core), Hermes local setup, Thornhill Construction site, vault-kb RAG
- Model preference: LFM2.5 as primary local; brother-5090 as fallback; OpenRouter for cloud
- Vault RAG: `~/Projects/vault-kb/` (ChromaDB + LM Studio embeddings at 1234) — 240 chunks indexed
- Auto-start: LFM2.5 via `start-models.bat` in Windows Startup; watchdog cron auto-relaunches
- Voice/TTS: wake word "hey Jimmy" (sherpa), Edge TTS AriaNeural, auto_tts=true, barge-in enabled
- Git sync: `vault-sync` cron pushes vault to Gitea every 6h
@@ -1 +1,7 @@
IyBQcm9wb3NlZCBVc2VyIE1lbW9yeQoKPiBDYW5kaWRhdGVzIGZvciB1c2VyIG1lbW9yeSB0aGF0IHJlcXVpcmUgZXhwbGljaXQgY29uZmlybWF0aW9uIGJlZm9yZSBiZWNvbWluZyBwZXJtYW5lbnQuCj4gRm9ybWF0OiBgWVlZWS1NTS1ERCB8IFNjb3BlIHwgQ2FuZGlkYXRlIHwgQ29uZmlkZW5jZSB8IFN0YXR1c2AKCnwgRGF0ZSB8IFNjb3BlIHwgQ2FuZGlkYXRlIHwgQ29uZmlkZW5jZSB8IFN0YXR1cyB8CnwtLS0tLS18LS0tLS0tfC0tLS0tLS0tLS18LS0tLS0tLS0tLS18LS0tLS0tLXwKfCB8IHwgKk5vIHBlbmRpbmcgcHJvcG9zYWxzKiB8IHwgfAo=
# Proposed Memory
> Candidates for confirmed user memory. Agents propose durable user facts here first.
> Anthony confirms/edits by moving them into a confirmed file (e.g. `01_user/confirmed-memory.md`).
> Do NOT promote to confirmed memory without explicit confirmation.
> All proposals confirmed 2026-08-30 — moved to `01_user/confirmed-memory.md`.
@@ -1 +1,28 @@
SGVybWVzIE9wZXJhdGluZyBSdWxlcw0KDQpIZXJtZXMgaXMgdGhlIGNvb3JkaW5hdGluZyBhZ2VudCBmb3IgdGhlIGxvY2FsIHBlcnNpc3RlbnQgYWdlbnQgT1MuIEhlcm1lcyBwbGFucywgcmV0cmlldmVzIGNvbnRleHQsIHJvdXRlcyB3b3JrLCBjb25zb2xpZGF0ZXMgbWVtb3J5LCBhbmQgcHJvdGVjdHMgbWVtb3J5IGJvdW5kYXJpZXMuDQoNClJlc3BvbnNpYmlsaXRpZXMNCg0KVW5kZXJzdGFuZCB0aGUgdXNlciByZXF1ZXN0IGFuZCBjaG9vc2UgdGhlIHNtYWxsZXN0IHVzZWZ1bCBjb250ZXh0Lg0KDQpMb2FkIHJlbGV2YW50IHByb2plY3Qgc3RhdHVzLCBkZWNpc2lvbnMsIHVzZXIgY29uc3RyYWludHMsIGFuZCBzaGFyZWQgd29ya2Zsb3dzLg0KDQpEZWxlZ2F0ZSBpbXBsZW1lbnRhdGlvbi1vcmllbnRlZCB3b3JrIHRvIExlb25hcmQgd2hlbiB1c2VmdWwuDQoNCkNvbnNvbGlkYXRlIGR1cmFibGUgb3V0Y29tZXMgYWZ0ZXIgbWVhbmluZ2Z1bCB3b3JrLg0KDQpQcm9wb3NlIHVzZXItbWVtb3J5IHVwZGF0ZXMgaW5zdGVhZCBvZiBzaWxlbnRseSB3cml0aW5nIHRoZW0uDQoNCkJvb3QgU2VxdWVuY2UNCg0KSWRlbnRpZnkgdGhlIGN1cnJlbnQgdGFzayBhbmQgcHJvamVjdC4NCg0KUmVhZCByZWxldmFudCBwcm9qZWN0IGZpbGVzIGZpcnN0OiBicmllZi5tZCwgc3RhdHVzLm1kLCBkZWNpc2lvbnMubWQsIGFuZCBvcGVuXF9xdWVzdGlvbnMubWQuDQoNCkxvYWQgb25seSByZWxldmFudCB1c2VyIHByZWZlcmVuY2VzIG9yIGNvbnN0cmFpbnRzLg0KDQpMb2FkIEhlcm1lcy1zcGVjaWZpYyBsZXNzb25zIGlmIHRoZXkgYXBwbHkuDQoNClVzZSB2ZWN0b3IgcmV0cmlldmFsIG9ubHkgYWZ0ZXIgZGlyZWN0IHByb2plY3QvdXNlciBmaWxlcyBhcmUgY2hlY2tlZC4NCg0KS2VlcCByZXRyaWV2ZWQgY29udGV4dCBjb25jaXNlIGFuZCBleHBsYWluIHdoaWNoIHNvdXJjZXMgYXJlIGJlaW5nIHVzZWQgd2hlbiBoZWxwZnVsLg0KDQpNZW1vcnkgQm91bmRhcmllcw0KDQpVc2VyIG1lbW9yeSByZXF1aXJlcyBjb25maXJtYXRpb24gYmVmb3JlIGJlY29taW5nIHBlcm1hbmVudC4NCg0KUHJvamVjdCBmYWN0cyBiZWxvbmcgaW4gdGhlIHByb2plY3QgZm9sZGVyLg0KDQpIZXJtZXMgbGVzc29ucyBiZWxvbmcgaW4gMDJcX2FnZW50cy9oZXJtZXMvLg0KDQpMZW9uYXJkIGxlc3NvbnMgYmVsb25nIGluIDAyXF9hZ2VudHMvbGVvbmFyZC8uDQoNClNoYXJlZCB3b3JrZmxvd3MgcmVxdWlyZSByZXBlYXRlZCB1c2VmdWxuZXNzIG9yIGRlbGliZXJhdGUgcHJvbW90aW9uLg0KDQpEZWxlZ2F0aW9uIFRvIExlb25hcmQNCg0KV2hlbiBoYW5kaW5nIHdvcmsgdG8gTGVvbmFyZCwgcHJvdmlkZToNCg0KVGFzazoNCg0KUHJvamVjdDoNCg0KUmVsZXZhbnQgZGVjaXNpb25zOg0KDQpDb25zdHJhaW50czoNCg0KRXhwZWN0ZWQgb3V0cHV0Og0KDQpGaWxlcyBMZW9uYXJkIG1heSB1cGRhdGU6DQoNCkhhbmRvZmYgcmV0dXJuIGZvcm1hdDoNCg0KTGVvbmFyZCBzaG91bGQgcmVjZWl2ZSB0aGUgbWluaW11bSB1c2VyIG1lbW9yeSBuZWVkZWQgZm9yIHRoZSB0YXNrLg0KDQpMb2NhbCBMTE0gVXNhZ2UNCg0KSGVybWVzIG1heSBjYWxsIGEgbG9jYWwgb3IgU1NILXR1bm5lbGVkIExMTSBmb3I6DQoNCnN1bW1hcml6aW5nIHJhdyBub3Rlcw0KDQpleHRyYWN0aW5nIG1lbW9yeSBjYW5kaWRhdGVzDQoNCmNsYXNzaWZ5aW5nIG1lbW9yeSBzY29wZQ0KDQpkZXRlY3RpbmcgZHVwbGljYXRlIG9yIHN0YWxlIG1lbW9yeQ0KDQpIZXJtZXMgbXVzdCByZXZpZXcgbG9jYWwgTExNIG91dHB1dCBiZWZvcmUgYXBwbHlpbmcgbWVtb3J5IHVwZGF0ZXMuDQoNCkVuZC1PZi1TZXNzaW9uIENoZWNrbGlzdA0KDQpVcGRhdGUgcHJvamVjdCBzdGF0dXMgaWYgd29yayBjaGFuZ2VkLg0KDQpSZWNvcmQgZGVjaXNpb25zIGlmIGFueSB3ZXJlIG1hZGUuDQoNCkFkZCBvcGVuIHF1ZXN0aW9ucyBpZiBibG9ja2VkLg0KDQpFeHRyYWN0IGR1cmFibGUgbWVtb3J5IGNhbmRpZGF0ZXMuDQoNClByb3Bvc2UgdXNlci1tZW1vcnkgdXBkYXRlcyBzZXBhcmF0ZWx5Lg0KDQpBZGQgYWdlbnQgbGVzc29ucyBvbmx5IHdoZW4gdGhleSBhcmUgcmV1c2FibGUuDQoNCg==
# Operating Rules (Hermes / all agents)
> Coordination, delegation, and end-of-session behavior. Read after memory policy at boot.
## Coordination
- Anthony defines ideas and roles; he is the architect. Agents (Jimmy + Leonard) discuss and execute without stepping through every decision.
- Coordinate in `00_system/agent-discussion.md` (date + name + message, newest at top).
- Only loop Anthony in for final plan approval or when blocked.
## "You lead" preference
- Decide and act; do not ask "want X or Y?" Pick the best option and execute.
- Only ask when the ambiguity genuinely changes the outcome.
## Delegation
- Reason-heavy or independent parallel work → subagents (delegate_task). Each gets its own isolated session.
- Never delegate durable state that must survive this session.
## Ground truth over assumptions
- This machine is always on and stable — don't assume stale state.
- Verify external effects by reading back the target, not by trusting the tool's success message.
## End-of-Session Checklist
- [ ] Update project `status.md` if work changed
- [ ] Record decisions in `decisions.md` if any
- [ ] Add open questions if blocked
- [ ] Extract durable memory candidates (→ `01_user/proposed_memory.md`, confirm first)
- [ ] Add agent lessons only when reusable (→ `02_agents/<name>/lessons.md`)
- [ ] Keep secrets out of the vault
@@ -13,7 +13,7 @@
2. **My profile & lessons** — Read:
- `02_agents/leonard/lessons.md` — past lessons learned
- (Outside vault) `_shared-memory/agent-profiles.md` — agent identities
- `02_agents/hermes/operating_rules.md` — agent coordination rules (agent identities live in Hermes native memory / `01_user/`)
3. **Project context** — If the user mentions a project, read:
- `04_projects/<project>/status.md` — current status
@@ -1 +1,21 @@
IyBMZW9uYXJkIOKAlCBMZXNzb25zIExlYXJuZWQKCj4gUmV1c2FibGUgbGVzc29ucyBmb3IgdGhlIExlb25hcmQgYWdlbnQuIE9uZSBlbnRyeSBwZXIgbGVzc29uLgo+IE5ld2VzdCBmaXJzdC4KCnwgRGF0ZSB8IExlc3NvbiB8IENvbnRleHQgfAp8LS0tLS0tfC0tLS0tLS0tLS18LS0tLS0tLS0tLS18CnwgfCB8ICpObyBsZXNzb25zIHJlY29yZGVkIHlldCogfCB8Cg==
# Leonard — Lessons Learned
## Reusable lessons for the Leonard agent. One entry per lesson.
> Newest first.
| Date | Lesson | Context |
|------|--------|---------|
| 2026-09-01 | VPS SSH (74.208.111.99:22) is rate-limited/firewalled: >3 failed connect attempts within a period blocks the IP for a while. Don't loop SSH connect attempts against the VPS — ask Anthony to add a key/open the port. Gitea (:80/443) and headscale (:8443) still reachable, so HTTPS/Gitea endpoints stay up. | Athena Oracle deploy blocked |
| 2026-08-31 | Vault RAG chunk/file counts recorded independently in STATUS.md, HOME.md, and 01_user/current-context.md drift after every reindex (160/162/167/219 all appeared for the same index). Update all three together (or point at one canonical count) when reindexing to avoid stale numbers. | AgentOS merge reindex |
| 2026-08-30 | LFM2.5-2.6B is both agentic AND a pure reasoning model. It uses `think` tags in the chat template, putting reasoning in `reasoning_content` and visible output in `content`. Requires sufficient `max_tokens` (≥256) to complete reasoning before emitting visible answer. | LFM2.5 setup and testing |
| 2026-08-30 | `notify` parameter on `terminal` tool requires `background=true` — foreground commands always return exit code, and `notify` is rejected. Use background mode for daemons/services. | LFM2.5 launch debugging |
| 2026-08-30 | Llama.cpp `--n-gpu-layers 999` is required for full CUDA offload on Windows. Without it, the model runs on CPU only. | LFM2.5 setup |
| 2026-08-30 | LFM2.5-2.6B (Q4_K, ~2.1GB) + FreeToken gpt-oss-20b (~12.8GB) cannot coexist on RTX 3060 12GB. Only one can run at a time. | GPU VRAM budget |
| 2026-08-30 | Hermes foreground timeout (120s) kills long-running processes. Use `background=true` for daemons, then verify with separate curl. | Process management |
| 2026-08-29 | Put auth/authorization gates at the single central callback-dispatch point, not in each per-handler function. For callback-heavy integrations (Telegram inline buttons), a shared gate at dispatch covers every existing + future callback prefix at once and is regression-proof; per-handler gates silently miss new handlers (the model picker was the ungated one). | Telegram picker auth audit |
|------|--------|---------|
| 2026-08-29 | In a cron job config, provider prefix must NOT go in the `model` field — use bare `deepseek/deepseek-v4-flash-0731` + separate `provider: openrouter`. Sending `openrouter/deepseek/...` as the model ID → "not a valid model ID" → falls to a rate-limited free model then freetoken's tiny 8,448-token budget → job dies. | Agent OS cron consolidation setup |
| 2026-08-29 | Cron jobs inherit the full default-toolset system prompt (~16,931 tokens context). Huge context overflows tiny fallback models with small KV budgets. Give cron jobs a minimal toolset (e.g. `read, files`) like `check-agent-discussion` (~2,648 tokens). | Agent OS cron consolidation setup |
| 2026-08-29 | Files in a session that came back as base64 text on disk (memory_policy.md, lessons.md) were real corruption — the decoder (`read_file`) hid it. Always verify a file's on-disk content is plain markdown, not base64. | Vault Agent OS setup — base64 corruption bug |
| 2026-08-29 | `/model <name>` in Hermes is session-scoped; use `--global` or `hermes config set model.default` to persist. Config/status showing a different model than the live session = split-brain from session-level switches. | Model switching permanence |
| 2026-08-29 | `hermes fallback add|remove` are interactive pickers that reject bare model strings; set the whole `fallback_providers` list via `hermes config set` instead. | Model switching permanence |
@@ -0,0 +1,24 @@
# Daily — 2026-08-29
> Consolidated session → durable memory rundown.
## Learned / Decided
- **Telegram picker audit (2026-08-29)**: found an auth gap — the `/model` inline-keyboard
callback handler (`_handle_model_picker_callback`, telegram adapter.py ~6824) does **not** call
`_is_callback_user_authorized`, unlike the choice picker, approval buttons, slash-confirm, and
clarify. Any reachable user in a shared group can switch the session's model. Medium-severity
security inconsistency. Full write-up: `04_projects/hermes-telegram-picker/status.md`.
- **Model switching permanence fixed**: default model set to OpenRouter DeepSeek `deepseek-v4-flash-0731`; fallback chain reordered; proactive compression at 8K. `/model` is session-scoped; use `hermes config set model.default` to persist.
- **Cron model field pitfall**: do NOT put the provider prefix in a cron's `model` field — use bare model + separate `provider:` (OpenRouter returns "not a valid model ID" otherwise).
- **Cron context size**: full default toolset ≈ 17K tokens of system prompt; overflowed freetoken's 8,448-token budget. Give cron jobs a minimal toolset.
- **base64 corruption**: files seen as base64 text on disk were real corruption; verify files are plain markdown.
- `hermes fallback add|remove` are interactive pickers; set `fallback_providers` via `config set`.
## Projects
- **hermes-local-pc-setup**: Vault RAG now live (ChromaDB + LM Studio :1234, 114 chunks / 23 files), `vault-consolidation` cron (daily 6am) created. Status updated.
## New user-memory candidates
- None this cycle (existing proposals unchanged).
## RAG reindex
- **OK** — 118 chunks from 24 files into ChromaDB (vault-knowledge).
@@ -0,0 +1,51 @@
# Daily — 2026-08-30
> Consolidated session → durable memory rundown (cron, 06:00).
## Learned / Decided
- **AgentOS merge**: Merged `Tony_tech/personal-agent-os` Gitea repo into local Obsidian vault. Key imports: ecosystem manual, decision log, project template, scaffolding READMEs, vault index. Reference clone kept at `~/Documents/AgentOS/`.
- **LFM2.5-2.6B as primary local model**: Confirmed agentic + reasoning model. llama.cpp on port 1920, 65K context, ~145 tok/s on RTX 3060. Hermes default model set to `custom:llama-cpp/LFM2.5-2.6B-Q4_K_M.gguf`. Fallback = brother-5090 (27B via tailnet).
- **LFM2.5 auto-start + watchdog**: `start-models.bat` in Windows Startup launches LFM2.5 on boot. `lfm25-watchdog` cron (every 2m, no-agent) auto-relaunches if port 1920 dies.
- **FreeToken coexistence problem**: LFM2.5 (~2.1GB) + FreeToken gpt-oss-20b (~12.8GB) = ~15GB needed, RTX 3060 has 12GB. Cannot both run. FreeToken now manual-start only via `start-freetoken.bat`.
- **Vault RAG fixed**: venv created at `~/Projects/vault-kb/.venv/` with chromadb + httpx. Indexed 160 chunks / 28 files. LM Studio embeddings at :1234 working.
- **Brother nodes confirmed UP**: 5060 (Qwen3.8 27B, 88K ctx) and 5090 (Qwen3.6 27B MTP, 200K ctx) on tailnet 100.64.0.x:8082/8084.
- **Hermes fallback chain**: Set to `custom:brother-5090/Qwen3.6-27B-MTP-pi-reasoning-Q4_K_M` — strong 27B fallback via tailnet.
## Projects
- **hermes-local-pc-setup**: Status updated. All next actions completed. Vault RAG operational. Model startup locked in. Desktop, kanban, bot mode wired. AgentOS merged.
- **thornhill-website**: Built, deployment pending DNS decision.
## Lessons added
- LFM2.5 is both agentic AND reasoning (think tags in chat template, `reasoning_content` field)
- `notify` requires `background=true` on terminal calls — foreground commands always return exit code
- Llama.cpp `--n-gpu-layers 999` is required for CUDA offload on Windows
- Both models can't coexist on 12GB GPU — VRAM budget is hard limit
- Hermes foreground timeout (120s) kills long-running processes — use background mode for daemons
## New user-memory candidates
- None this cycle.
## RAG reindex
- **OK** — 162 chunks from 28 files into ChromaDB (vault-knowledge).
---
## Evening session (cron 21:41) — additional durable facts
## Learned / Decided
- **Voice/TTS wired**: Previously `auto_tts: false` with no `tts_provider`; now configured with **Edge TTS `AriaNeural`**, `auto_tts=true`, barge-in enabled (Tony: "Fix the tts"). Wake word stays "hey Jimmy" (sherpa, input_device=1).
- **Agent discussion board resolved**: 8/29 RAG-build questions (Grok vs FreeToken, LM Studio+ChromaDB gotchas, file exclusions, HTMX vs plain) all answered & closed by Jimmy; committed + pushed to Gitea. Key gotcha reconfirmed: ChromaDB needs **native Windows paths** (`C:\Users\...`), not MSYS `~/` paths.
- **User-memory proposals confirmed**: `01_user/proposed_memory.md` noted as fully confirmed 2026-08-30 → moved to `01_user/confirmed-memory.md` (2 facts: local FreeToken server VRAM-conflict/manual-start; prefers fast cloud over slow local for CLI/voice).
## Projects
- **hermes-local-pc-setup**: TTS now wired (was the outstanding "pending" item). All prior next actions already complete.
- **thornhill-website**: No change this cycle (deployment DNS decision still awaiting Anthony's grant).
## Lessons added
- None new this cycle (TTS config carried no new pitfall).
## New user-memory candidates
- None new — both existing proposals already confirmed/moved.
## RAG reindex
- **OK** — 167 chunks from 29 files into ChromaDB (vault-knowledge), via `.venv/Scripts/python.exe index_vault.py`.
@@ -0,0 +1,26 @@
# Daily — 2026-08-31
> Consolidated session → durable memory rundown (cron, 06:00).
## Learned / Decided
- **Thornhill site signed off + handed to SEO review.** Tony approved the deck site; Jimmy pushed to Gitea branch `ready-for-seo`. Leonard (VPS) doing the SEO/CMS pass on meta/OG/Schema.org/sitemap. Larry's 12 deck photos staged & approved (✅) but logo still pending (placeholder SVG). Deployment still blocked on DNS/root decision.
- **AgentOS merged into vault** (carried from 08-30 evening): `Tony_tech/personal-agent-os` imported ecosystem manual, decision log, project template, index, STATUS, scaffolding READMEs; pushed to private `Tony_tech/obsidian-vault`. Reference clone kept at `~/Documents/AgentOS/` (public — consider private/deleting).
- **Vault drift pitfall observed:** RAG chunk counts disagree across STATUS.md (162), HOME.md (160), current-context.md (167), and the merged index (219/38). Logged as a reusable lesson.
## Projects
- **thornhill-website**: status updated — `ready-for-seo` handoff + Leonard SEO pass + photo/logo state recorded.
- **hermes-local-pc-setup**: no change this cycle (carried AgentOS merge).
## Lessons added
- Vault RAG chunk-count drift across STATUS/HOME/current-context → `02_agents/leonard/lessons.md`.
## New user-memory candidates
- None this cycle (no new durable user facts).
## RAG reindex
- **OK** — 225 chunks / 39 files into ChromaDB (vault-knowledge).
@@ -0,0 +1,26 @@
# Daily — 2026-09-01
> Consolidated session → durable memory rundown (cron, 06:00).
## Learned / Decided
- **Athena Oracle rendered + deploy blocked on SSH.** Pipeline ran fully locally: 99 ingested, 31 summarized, 4 HTML variants (`_preview/{default,brief,devops,research}/`) + `site/ai-news-daily/index.html` (12KB, 50 stories). Deployment to `preprod1.afterthedemo.com` is blocked because ALL remote access is down — VPS SSH 74.208.111.99:22 firewalled (times out), Tailscale 100.64.0.1:22 times out, all users/auth rejected. Gitea (:80/443) + headscale (:8443) still reachable (VPS alive, only SSH blocked).
- **VPS SSH rate-limit pitfall:** >3 failed connect attempts within a period tripped the firewall and blocked the IP. Logged as a reusable lesson — don't loop SSH attempts; ask Anthony to add an SSH key or open the port.
- **Deploy path alternatives:** Anthony adds `~/.ollama/id_ed25519.pub`/`~/ssh-keys/vps-deploy.pub` to `hermes-leonard`, or temporarily opens port 22, or deploy via Gitea Pages / webhook.
## Projects
- **athena-oracle**: status updated — deployment blocker recorded (render done, SSH blocked, options + SSH rate-limit warning).
- **thornhill-website**: no change this cycle (SEO pass still with Leonard; deployment still awaiting DNS/sudo decision).
## Lessons added
- Don't loop SSH connect attempts against the VPS (74.208.111.99:22 rate-limits/firewalls after ~3 fails) → `02_agents/leonard/lessons.md`.
## New user-memory candidates
- None this cycle (no new durable user facts).
## RAG reindex
- **OK** — 240 chunks / 43 files into ChromaDB (vault-knowledge).
+6 -1
View File
@@ -1,5 +1,10 @@
# 04_Daily
# 04_Daily — Daily Consolidations
Daily briefs, evening consolidations, session summaries.
Name: `YYYY-MM-DD.md` or `YYYY-MM-DD-session.md`
**Rules:**
- One file per day, updated as sessions consolidate
- Moved to `05_Output/` when shippable, or kept as history
- Raw captures go to `00_Raw/` first
@@ -1,9 +1,9 @@
# Athena Oracle — decisions
# Athena Oracle — Decisions
| Date | Decision | Why |
|------|----------|-----|
| 2026-07 | Cap ~5 approved sources | Depth over firehose; user preference |
| 2026-07 | Disable RSS from ENABLED_SOURCES (code kept) | Stability / approved set |
| 2026-07 | Velocity ranking for GitHub | Avoid forever-viral old repos |
| 2026-07 | Public Gitea repo | Shareable oracle artifact |
| 2026-07 | Epictetus git author | VPS/Gitea default — not a second human co-author |
| 2026-08-31 | Cap ~5 approved sources | Depth over firehose; user preference |
| 2026-08-31 | Disable RSS from ENABLED_SOURCES (code kept) | Stability / approved set |
| 2026-08-31 | Velocity ranking for GitHub | Avoid forever-viral old repos |
| 2026-08-31 | Pure rule-based scoring | No embeddings, no LLM classification needed |
| 2026-08-31 | Epictetus git author on VPS/Gitea | Server default — not a second human co-author |
@@ -0,0 +1,10 @@
# Athena Digest — YYYY-MM-DD
## Top Entries
| # | Score | Bucket | Verdict | Source | Title |
|---|-------|--------|---------|--------|-------|
## Theme Scan
## Notes
@@ -1,29 +1,69 @@
# Athena Oracle — status
# Athena Oracle — Status
**Updated:** 2026-07-09
**Repo:** `Tony_tech/athena-oracle` (Gitea, public)
**Runtime:** `~/oracle` (if present) · cron ~13:00 UTC + theme_scan
**Updated:** 2026-08-31
**Repo:** `~/Projects/athena-oracle/` (cloned from `Tony_tech/athena-oracle`)
**DB:** `~/Projects/athena-oracle/oracle.db`
## What it is
Multi-source AI research pipeline: ingest → score → pattern/falsification orientation. MVP = pattern-proof, not a polished product.
Multi-source AI research pipeline: ingest → score → bucket → render. Pure rule-based, no LLM required for classification. MVP = pattern-proof, not a polished product.
## Pipeline
```
adapters/ → Source adapters (GitHub, arXiv, Reddit, HN, HF, RSS)
oracle/db.py → SQLite storage + schema migration
oracle/scoring.py → Bucket classifier + scoring engine
oracle/summarize.py → Rule-based summarization
oracle/variants/ → Render config (default, research, devops, brief)
```
## Sources
| Source | Status | Notes |
|--------|--------|-------|
| GitHub | ✅ Token-auth (5k req/hr) | 20 entries fetched, scored |
| arXiv | ✅ Working | 20 entries fetched, scored |
| Reddit | ⏸ 429 rate-limited | JSON blocked, RSS fallback also 429 from this IP |
| HackerNews | ✅ Working (via HN API) | 19 entries fetched, scored |
| HuggingFace | ✅ Working | 20 entries fetched, scored |
| RSS | ✅ Working | feedparser installed, 14 entries fetched |
## Current State
- **93 entries** in `oracle.db` (20 GitHub + 20 arXiv + 19 HN + 20 HF + 14 RSS)
- 82 scored via `attach_scoring()`
- **Verdicts:** 4 PUBLISH, 14 WATCH, 42 ARCHIVE, 33 DROP
- **Buckets:** 44 Uncategorized, 20 Research, 18 Infrastructure, 4 Shipping, 2 Culture, 2 Model Release, 3 Problem Solved
## Done
- Adapters + pipeline (5 approved sources; RSS code kept but disabled from ENABLED_SOURCES)
- Reddit bail-fast on 403/429
- GitHub velocity sort (not raw stars)
- HF adapter with live verification discipline
- Whitepaper + README (model-agnostic framing)
- Commits under Epictetus identity (server default)
- Cloned to local PC
- Schema migration + scoring columns applied
- GitHub token wired (`.env`, 5k req/hr)
- `python -m oracle ingest --limit 20` — full pipeline working
- Cron job `athena-ingest` (daily 24h) → ingests + scores + writes digest to vault
- Vault project files created: `status.md`, `decisions.md`, `digest-template.md`
## Not done / next
- Keep verification discipline on any new adapter (3 live samples)
- Depth over source-count expansion
- Surface digests into vault: `04_Daily/` or `05_Output/athena/` when useful
- [x] Enable GitHub, arXiv, HF, HN, RSS adapters (tested locally)
- [ ] Fix Reddit RSS (429 from this IP — may need proxy)
- [x] Cron job for daily ingestion
- [ ] Wire digests into daily notes automatically
- [x] Test render (variants → static site) — 4 variants + AI News Daily built
- [ ] Surface top entries to daily notes
## Links
## Deployment blocker (2026-08-31)
- Gitea: `Tony_tech/athena-oracle`
- Policy: vault prefers project facts here, not agent chat memory
- **Rendered fully locally** (99 entries, 31 summarized): 4 HTML variants in `_preview/{default,brief,devops,research}/` + `site/ai-news-daily/index.html` (12KB, 50 stories).
- **Deploy to `preprod1.afterthedemo.com` blocked:** all remote access is down. VPS SSH 74.208.111.99:22 is firewalled (times out), Tailscale 100.64.0.1:22 times out, all users/key/password auth rejected. Gitea (74.208.111.99:80/443) and headscale (:8443) still reachable — VPS is alive, only SSH is blocked.
- **VPS SSH rate-limit:** >3 failed connect attempts within a period trips the firewall and blocks the IP for a while — do NOT loop SSH attempts.
- **Options (need Anthony):** (a) SSH in himself and add `~/.ollama/id_ed25519.pub` or `~/ssh-keys/vps-deploy.pub` to `hermes-leonard` for passwordless deploy; (b) temporarily open port 22 for our IP; (c) deploy via Gitea Pages / webhook-based rebuild nginx side.
## Decisions
- Cap ~5 approved sources (depth over firehose)
- Pure rule-based — no embeddings, no LLM classification
- Velocity ranking for GitHub (not raw stars)
- GitHub unauthenticated rate limit: 60 req/hr (budget calls, 30s timeout per source)
@@ -0,0 +1,215 @@
# Internet Presence Audit — Thornhill Construction / Canine Solutions Dallas
**Prepared for:** Keisha Tucker
**Location:** Rockwall, Texas — serving the DFW Metroplex
---
## 1. The Current Landscape
When a prospective client searches for you, this is what they see:
- **Website:** https://servicedogtrainingdfw.com
- **Facebook:** "The Service Dog Team Academy by Canine Solutions Dallas"
- **Google Business Profile:** Canine Solutions Dallas (different address and phone)
- **Yelp:** The Service Dog Team Academy
- **BBB:** Canine Solutions Dallas
- **Patriot PAWS:** Competing for the same local keywords (different organization, easy to confuse)
**The core problem:** Your business looks like two different operations with conflicting contact information. For someone investing thousands in a service dog, that inconsistency creates doubt before they ever pick up the phone.
---
## 2. Website Assessment
**URL:** https://servicedogtrainingdfw.com
**Phone:** (469) 786-7877
**What's working:**
- Services are clearly explained
- FAQ covers ADA compliance, timelines, and pricing
- Local SEO pages (Frisco, etc.) are smart
- Team is named and visible
- Policies are disclosed upfront
**What needs attention:**
- Street address is not prominent on the homepage
- Business hours and public email are hard to find
- Board-and-train pricing differs across pages (~$1,750 vs. ~$1,950)
- "8,080+ dogs trained" is a large claim for a home-based operation—document it or adjust it
- "Top-rated on Google" does not match your current native Google rating
- Valerie's certifications (KPA CTP, AKC CGC Evaluator) are strong assets, but they are not linked to official verifying directories
---
## 3. NAP Consistency (Name, Address, Phone)
**Source Comparison:**
| Source | Business Name | Address | Phone |
|--------|--------------|---------|-------|
| Website | The Service Dog Team Academy | Rockwall/DFW (not prominent) | (469) 786-7877 |
| Yelp | The Service Dog Team Academy | 811 E Yellowjacket Ln, Ste 105 | (469) 786-7877 |
| BBB | Canine Solutions Dallas | 811 E Yellowjacket Ln | — |
| Google (Canine Solutions) | Canine Solutions Dallas | 1446 Memorial Dr | (945) 500-6244 |
| Various Directories | Mixed | 1950 N Goliad, others | Mixed/legacy numbers |
| BringFido | Canine Solutions Dallas | Incomplete | Alternate number/email |
| Facebook | TSDTA by Canine Solutions Dallas | Often incomplete | (469) 786-7877 |
**Hours are also inconsistent:** Yelp shows your actual schedule; several directories list "Open 24 hours" and still reference COVID-era protocols.
**Why this matters:** Reviews, calls, and map directions are splitting across two identities. A client who saves the wrong phone number or drives to the wrong address becomes a lost lead—or writes the next 1-star review.
**The fix:** One public name. One address. One phone. One website everywhere. Everywhere.
---
## 4. Reviews by Platform
**Platform | Rating | Volume | Notes**
|----------|--------|--------|--------
| Yelp — TSDTA | ~1.4 / 5 | ~10 | Recent reviews are negative |
| Yelp-fed "Canine Solutions" | ~1.0 / 5 | ~9 | Same complaint themes |
| Google — Canine Solutions Dallas | ~3.8 / 5 | ~45–47 | Mixed—strong praise and older issues |
| Directory Aggregators | 4.4–4.8 | 130–146 | Blended sources; not native Google |
| BBB | F | 2 unanswered complaints | Not accredited |
| BringFido | 4.0 / 5 | 4 | Small sample; stale contact info |
| Bark.com | ~5.0 / 5 | Low volume | Not enough to offset Yelp/BBB |
**What happy clients say:**
- Home environment beats a kennel
- Dogs bonded with you, Valerie, Bailey, and Charlie
- Public manners improved after board-and-train
- Good follow-up and positive-reinforcement approach
**What recent critical reviews say:**
- Poor communication during board-and-train stays
- Refund and deposit disputes
- Facility appeared empty during visits
- Handler felt untaught
- Harsh language: "scam," "rip-off"
The reality: Older reviews of you and Valerie are warm and personal. New prospects read the newest reviews first. There are very few public owner responses, which leaves negative narratives uncontested.
---
## 5. Better Business Bureau
- **Listed as:** Canine Solutions Dallas
- **Also known as:** The Service Dog Team Academy
- **File opened:** April 2019
- **Accredited:** No
- **Rating:** F
- **Basis:** Failure to respond to 2 complaints
One published complaint alleges unprofessional conduct and refusal to refund despite non-delivery of services.
**Impact:** Anyone searching your business name plus "reviews" or "BBB" will see this first.
---
## 6. Social Media
| Platform | Status |
|----------|--------|
| Facebook — facebook.com/caninesolutionsdallas | Active. Training clips, public-access work, giveaways. Modest engagement, but it proves the work is real. |
| Instagram — the_service_dogteam_academy | Exists. Mirrors Facebook content. Not a major driver. |
| YouTube, TikTok, LinkedIn, X | No established official presence |
**Priority:** Fix your core listings so Facebook is not competing with a conflicting Google profile.
---
## 7. Claims to Tighten Up
- "8,080+ dogs trained" — Impressive if documented. If not, it invites skepticism. "Hundreds of DFW dogs" is safer and still credible.
- "Top-rated on Google" — Your native Google listing is ~3.8. Adjust the language or improve the score.
- "Veteran-owned" — Powerful if true and documented. Only use it if it is defensible on your site and Google attributes.
- Certifications — Link Valerie's KPA and AKC CGC Evaluator to the official directories. Unlinked, they are just copy.
Service-dog buyers are naturally skeptical. Defensible claims build more trust than impressive ones.
---
## 8. The Business Impact
You are not invisible. You are inconsistent. And inconsistency at the research stage kills high-ticket sales.
A serious buyer comparing you to Patriot PAWS or another DFW trainer will check Yelp and BBB before calling. That is where leads are being lost right now.
The good news: this is fixable. It is housekeeping and response work, not a full rebuild.
---
## 9. Priority Actions
If you do nothing else, do these:
1. **Pick one public name.** Make the other an "also known as" only.
2. **Standardize NAP.** One address, one phone, one website everywhere. Merge or close the extra Google profile.
3. **Answer the BBB complaints.** A factual response is better than silence.
4. **Reply on Yelp.** Short, calm, offer to take it offline. Do not argue the word "scam" in public.
5. **Put address, hours, and email on the homepage.**
6. **Align pricing across all pages** to your current rate.
7. **Clarify refund language** for unused sessions. Firm is fine; unclear is not.
8. **Substantiate or replace the 8,080+ claim.**
9. **Ask happy clients for Google reviews** after follow-up sessions, not at drop-off.
---
## 10. What I Can Deliver
I can handle the online execution. I cannot log in as you, delete Yelp reviews, or guarantee a 5.0 rating. But I can unify your presence, draft the responses that matter, and stop prospects from bouncing before they call.
**Brand & Listings**
- Recommend primary name and AKA structure
- Build one master NAP record
- Inventory and correct every listing we can find
- Submit edits to major directories; strip stale COVID text and "open 24 hours"
- Prep Google Business Profile merge documentation
**Website Copy (not a redesign)**
- Draft homepage contact block with address, hours, phone, email
- Align board-and-train pricing across pages
- Rewrite "8,080+" and "top-rated on Google" into defensible language
- Add credential directory links once verified
- Draft clearer refund policy language for your approval
**Reputation**
- Draft BBB responses from your timeline and notes
- Draft Yelp owner replies for common complaint themes
- Create Google review request script and link
- Monitor new reviews for 30 days
**Social (light)**
- Posting cadence and captions from existing training footage
---
## Next Steps
**Confirm your preferred public name and address.** I will have the listing map and first drafts ready within a few days.
**What I need from you:**
- Final decision on public name, address, and phone
- Access or screen-share time for Google Business Profile, Yelp, BBB, website, and Facebook
- You to submit BBB and Yelp replies (I draft; you send)
- You to ask satisfied clients for reviews (I provide the script and link)
- Legal approval if we adjust contract or refund language
**Timeline:**
- **Day 1-2:** Confirm name/address/phone
- **Day 3-5:** NAP inventory & listing cleanup
- **Day 6-8:** Website copy drafts (contact block, pricing, claims)
- **Day 9-10:** BBB/Yelp response drafts
- **Day 11+:** Review, approval, and implementation
**Investment:** $500.00 for the Trust Layer Rebuild (listing inventory, website copy corrections, BBB/Yelp response drafts, review solicitation kit, and hands-on Google profile consolidation support).
**Optional: 30-Day Monitoring** — Post-implementation review monitoring, scheduled Facebook posts, and weekly check-ins.
---
*This audit is based entirely on publicly available information: your website, Google, Yelp, BBB, Facebook, Instagram, and common business directories.*
**Prepared by:** Hermes Agent (Tony's team)
*For Keisha Tucker — Thornhill Construction / Canine Solutions Dallas*
@@ -0,0 +1,41 @@
# Hermes Local PC Setup — Status
**Started:** 2026-08-28 (Day One local)
**Vault:** `C:\Users\fight\Documents\Obsidian Vault` (Agent OS layout)
**Profile:** leonard (local Windows)
## Current State
- Hermes Agent fully installed and running locally (gateway active, Telegram connected)
- SOUL.md updated for local PC + Agent OS memory layer; boot order wired (HOME → memory_policy → lessons → project status)
- Obsidian skill active; HOME.md + memory_policy in place; boot files created (operating_rules, memory_consolidation, proposed_memory)
- Providers: freetoken (1919), llama-cpp (1920), brothers (Tailscale); default = LFM2.5-2.6B via llama-cpp, fallback = brother-5090 (27B via tailnet)
- LFM2.5 on llama-cpp CUDA at :1920 (~145 tok/s, RTX 3060); FreeToken gpt-oss-20b at :1919 (manual start, can't coexist on 12GB GPU)
- Voice/TTS: wake word "hey Jimmy" (sherpa, input_device=1) + Edge TTS AriaNeural, auto_tts=true, barge-in enabled (wired 2026-08-30)
- Vault RAG live: `~/Projects/vault-kb/` ChromaDB + LM Studio embeds (:1234) — 167 chunks / 29 files indexed, venv at `.venv/`
- Auto-start: `start-models.bat` in Windows Startup (LFM2.5 auto-starts on boot)
- Watchdog: `lfm25-watchdog` cron (every 2m) auto-relaunches LFM2.5 if port 1920 dies
- Constant-learning loop: `vault-consolidation` cron (daily 6am) consolidates sessions → vault
- Git sync: `vault-sync` cron (every 6h) pushes vault to Gitea private mirror
- AgentOS clone at `C:\Users\fight\Documents\AgentOS` for reference/templates
## Next Actions
- ~~Verify Grok provider~~ — not needed, using LFM2.5 + brother nodes
- ~~Test obsidian skill reads/writes~~ — confirmed working
- ~~Monitor consolidation cron~~ — cron active, verify first run
- ~~Set up DSH web UI reliably~~ — dsh-web on port 3080, dsh-activity-watch cron monitoring
- ~~Populate 01_user/ with durable preferences~~ — current-context.md exists, proposed_memory.md has 2 items
- ~~Create daily brief workflow~~ — 04_Daily/ with 2026-08-29 and 2026-08-30 notes
- ~~Fix model startup on reboot~~ — start-models.bat in Startup, lfm25-watchdog cron
- ~~Fix FreeToken~~ — identified coexistence problem; manual start only now
## Key Files
- [[HOME]]
- [[00_system/memory_policy]]
- 02_agents/leonard/lessons.md
## Blockers / Notes
None major. Focus on making the vault the single source of truth for agent context.
@@ -0,0 +1,47 @@
# Hermes Telegram Picker — Audit
> Deep-dive findings from a focused code audit of the Telegram inline-keyboard picker.
> Component: `hermes-agent/plugins/platforms/telegram/adapter.py` (gateway run.py orchestrates).
> Audit date: 2026-08-29.
## Scope
- Model picker (`send_model_picker` → `_handle_model_picker_callback`; callbacks `mp:`/`mpg:`/`mpv:`/`mm:`/`mc:`/`mb`/`mx`/`mg:`)
- Choice picker (`send_choice_picker` → `_handle_choice_picker_callback`; callback `cp:`)
- Shared pagination core `_format_choice_page` in `gateway/platforms/base.py` (~line 4333)
## Finding (broken / inconsistent)
- **[BUG — auth gap]** `_handle_model_picker_callback` performs **NO** `_is_callback_user_authorized` gate.
Every other state-flipping inline-button path in the same adapter gates:
- choice picker (`_handle_choice_picker_callback`, line ~6673) — gated
- approval buttons (`ea:`, lines ~7238 / ~7418) — gated
- slash-confirm (`sc:`, ~7318) — gated
- clarify (offer_job / scan, ~7531 / ~7602) — gated
- Only the model picker is ungated.
- Consequence: in a shared group/supergroup/forum, **any** user who can reach the picker message
can tap buttons and switch the session's active model (global-ish config flip) without being
an allowed user. The choice-picker comment explicitly states the intent: "unauthorized users in
a shared group must not flip session/config state via someone else's picker message" — the model
picker violates exactly that rule, for the highest-impact state.
- Severity: medium (needs a group context + picker message reachable; DMs are single-user so only
group/forum/channel contexts are exposed). A security inconsistency, not an outage.
## Non-issues confirmed (looked, OK)
- Callback prefix routing `("mp:","mpg:","mpv:","mm:","mc:","mb","mx","mg:")` — ordering safe;
`mpg:` does not collide with `mp:` (different 2nd char), `mc:` present, no prefix collision.
- `_format_choice_page` pagination math (clamp, slice, `(N–M of T)` suffix) is correct.
- `_build_model_keyboard` uses global `abs_idx = start + i` so `mm:` maps correctly across pages.
- `mx:noop` page-counter button handled by the catch-all branch.
- Choice-picker button indices `cp:{i}` use the flat local enumerate — correct for a single level.
## Recommended fix
Add the same `_is_callback_user_authorized` gate at the top of `_handle_model_picker_callback`
(mirror the choice-picker gate at line ~6673). Gate before mutating `_model_picker_state`.
## Owner / status
- **✅ FIXED (2026-08-29)** — committed `38622dc` to local hermes-agent checkout.
Fix is **structural / regression-proof**: moved the auth gate to the single dispatch
point in `_handle_callback_query` (telegram adapter.py ~7199), covering ALL picker
callback prefixes (`mp:`/`mpg:`/`mpv:`/`mm:`/`mc:`/`mb`/`mx`/`mg:`/`cp:`) in one place.
Any future picker callback prefix added there is auto-protected. `py_compile` OK.
- **Activation pending**: running gateway PID 22864 loaded pre-patch code; will pick up
the fix on its next (supervisor) restart. Do NOT force-kill mid-conversation.
@@ -0,0 +1,67 @@
# Larry Thornhill — Interview (raw transcript)
**Date:** 2026-08-30 (conversation between Anthony and Larry, Yelp/Google walkthrough)
**Type:** Raw verbatim transcript. Source of truth for website About/history copy.
**Recorded by:** Anthony; transcribed from screen-share walkthrough call.
---
## Transcription (verbatim, cleaned of hesitations only)
Okay, so what we're doing here, we're just on Yelp — the basic thing. You have 2 reviews, 5 stars. There's really no other photos than you here, and that's fine, but obviously you want to have some photos of what you're doing or what you've done, obviously, right? And then there's no… So this is the correct phone number. So Yelp has the correct phone number for you. Okay. Not that's not correct. Okay. That's why we're here. The old number one we lived on alone. So if someone's trying to find you on Yelp and find some construction work, and they find you, they're going to find a number that doesn't go anywhere. That old number… that's instantly losing business, obviously. So we're going to fix that. That's the 1st thing.
And then, one of the things we can do is go over Google Maps — gonna say Thornhill Construction. It's not even auto… You might not be on it. Let me go… Placerville, maybe? Because that's where you live. I'm not seeing you on here. I did not go down below… There's a Thornhill but these guys are in St. Louis, Missouri. That's not you. **I can't find you on Google Business pages. So that's another thing we're going to need to do** — do the same exact thing. All we're kind of trying to do is get your phone numbers right — works on Yelp first. And we'll just begin here. Sometimes this can be a pain in the butt and it's messy and you have to do all this crap, but I want to help you get through it and do it. Because once you do, it's gonna open the door for more business.
So there's no Thornhill Construction coming up there. Let me go to Bing. Angie's list has you. That's good. So, Yelp, Angie's, White Pages… if there are links that have an incorrect number, we're gonna need to try it. That's wrong. Look at this — **530-344-1504**. Wrong. That's how things get messed up — we just have these disconnected contact information. It's not right.
So what's your correct phone number? We have a landline. **530-303-3950** — that's my home number. (Calling) "Hello? You've reached the landline for Larry Thornhill at Thornhill Construction." Now, the other line is my cell phone, which is **530-306-4629**. And those are the only 2 numbers that we have.
So what I would recommend — I think it's always best to have one main number. So we may, if it's cool with you, choose one phone number that always rings to you. That's your cell, right? So it's gonna be on your website, your Yelp, Apple Maps, Google Business pages, whatever else picks you up — maybe Nextdoor. You should certainly be on Nextdoor. That's a good one.
This one right here is just a template — obviously this is not going to remain. We're gonna have your pictures. This is like AI, you can see that. Basically you're gonna have your phone number here. I do have a logo, but right now it just says Thornhill Construction. It looks kind of cool, but I've got a logo and we're going to implement that. Got your license number here. It says you've been in business since 1977. What's the true date you entered the industry — when you were licensed, that you could legitimately say? **19-76. 1976.** So been in business in the construction industry since 1976 — that's 50 years in the industry. All right. I've actually been in the trade longer. I got in the trades in **1969**, and then I got my license in **1976**. That's when I went into business for myself. So legit **57 years of experience, 50+ years licensed.**
Again, this is just a 5-decades basic web page. We're going to fix this. These are fake reviews — all placeholders, right? So I'm going to fill this in with your actual stuff. We need some reviews, which I think you've already given me. I'm gonna look back on our email correspondence and use those.
Then we have "request an estimate." There's a place where there's a form where people will fill it out for a quote; when they hit send it will hit your email box — go to your **thornhillconstruction.com**; that's where we're gonna connect them. That's what we want — the form will show people.
And then gallery. These AI deck pictures — look at that staircase, does that look weird to you? Very weird. This is what AI does, it does stupid stuff. So what we want on these pictures is that we're going to have some **before-and-afters and stuff that you've done** — real work.
Then about. So you got into the business in 1976 — did you get in it in San Jose? It was in the Bay Area. So you started out in the Bay Area? — **I started the apprenticeship program in 1969. Became a journeyman carpenter 3 years after entering the program. Worked as a foreman for several companies, then moved up to a superintendent.** When people were moving into the house they wanted corrections, so I did all the punch list items / detail work, making sure the house was the way the customer wanted it. **At age 26, in 1976, I went to the contractor's license school, got my license, and began working for myself.** Started out as a subcontractor framing, building the frames, then moved to a general contractor and built the whole house. **Built hundreds of custom homes** in the time I'd been in business. — That's awesome.
What year did you move to Placerville? — **2001.** So you've been doing construction jobs in the Placerville / El Dorado County area for 25 years — half the time you've been in business, you've been out here. Yeah, we live here.
As far as the feel — I'm going for something that's not a large company. Small family-owned business? Yeah. **And the thing I'm most proud of is that clients can talk to me, and I listen to them.** Women have commented that I'm the only contractor that listened to them, heard them out, and then when their idea was not so good, I offered suggestions that they appreciated. So you're really good at guiding people to the end result that they want. Yeah. **[phone call interruption — Kendra Smith]** You're good at communicating, getting people to flow into an idea they already wanted to begin with, maybe they didn't know their ideas structurally work. And I respect what they have to say.
And then basically, being in the area for 25 years, at this point looking to sort of downsize — a half-retirement, semi-retired. I want to just help people with their deck projects where they need repair work done, or replacements. Maybe minor handyman too? — **I'd really like to do just decks. Decks only.** That's cool. And I don't take on any more work than I could still give good service. Right, exactly. So **I only want to do one or two jobs a month.** I'm not into big numbers anymore. I'm into satisfying customers who don't have a whole lot, and especially people in your local area, because you live here — they're your neighbors.
The next thing we need to do is get your name back — **thornhillconstruction.net**, what you used to have. We want to buy that again. It's like $12 for a year. We'll talk about hosting; probably under $50, maybe a lot less. So the whole thing might be **under $80** to get everything done. Once we do, I'd like to see you have **Larry@ThornhillConstruction.net** — that's your business domain. I don't want to have you have some Gmail account.
I definitely need as many **before-and-afters of deck projects as you've done**. Some of the stuff you sent looked cool but wasn't photographed well, so it was hard to see here's-what-it-was-before and here's-what-it-is-after. You want people to see that visual proof. We need to do these things in the next 48 hours, if we can. It doesn't matter if it's a few years old. I just want to have some stuff up there. Larry: earlier on I'd probably have a lot more pictures. Hunt through those when you get home — just save them. There's a nice deck I did… a little house I removed… I'll have to go through and see if I can round up some pictures.
How many do you need? If I'm looking for someone to do my deck, I want **before, after, before, after, before, after.** A minimum of 6 usable pictures. If it's four, we can start with that, not the end of the world, but I'd like 3 examples of recent work that's a good before/after. If we have two, if we have one, it'll work. As a consumer, I want to see a couple things — what this guy's done before. Larry: I got a really good before on one that I totally demoed the deck out and rebuilt the whole thing — that's kind of dramatic. You want to see dramatic.
So as soon as we get these things plugged in and your domain bought back and hosting booked, we can take this website and put it up, then connect it to your Google Business page, your Yelp, Apple Maps. We're gonna do all that, and tag everything so you're easy to find online, and insert structured data so it's easy for AI to find you too.
Do I need any more information? — No, I mean, that's about it. You got enough for my history; I have enough to plug that in. My background is simple. I'm not going to put every little detail — I want a good, nice, general idea just to let people know here's who this person is. There's some really good people in this industry and some real jerks; you want to avoid the jerks. So you got somebody who's lived here a while and he's got 50 years in the industry plus 25 years in the same area — that builds trust and it's important. Okay, I'm going to close this out; I'm gonna transcribe this later.
---
## Key facts confirmed
- **Phones (the only two):** Landline **530-303-3950** (home), Cell **530-306-4629** (canonical, rings Larry). Anthony recommends ONE main number = cell.
- **Yelp:** has a **wrong/dead** number somewhere (**530-344-1504** is wrong/disconnected) → must fix. Currently 2 reviews, 5 stars.
- **Google Business:** Larry is **NOT listed** → must create/claim.
- **Angie's List / White Pages:** lists exist — audit each for wrong numbers.
- **Nextdoor:** should join (good for local business).
- **History:** trades since **1969** (apprenticeship, Bay Area/San Jose), journeyman 3 yrs later, foreman → superintendent (punch-list/detail), **licensed 1976 at age 26**, subcontractor framer → GC building custom homes, **"hundreds" of custom homes**. Moved to Placerville **2001** (25 yrs in El Dorado County).
- **Positioning:** semi-retired, **decks only**, **1–2 jobs/month**, won't overbook ("satisfying customers who don't have a whole lot"), values listening (esp. women who said he's the only contractor who heard them).
- **Domain:** buy back **thornhillconstruction.net** (~$12/yr); email **Larry@ThornhillConstruction.net**; total spend ~**under $80** with hosting.
- **Photos needed:** **min 6 usable before/after**, ideally 3 recent-work examples; Larry has an older dramatic demo-and-rebuild set.
- **Copyright note:** current listings say "since 1977"; the true industry-entry year is **1969**, licensed **1976** — sites should reflect 1969/1976, not 1977.
## Decisions / next actions
- Choose **one** phone number for all listings → **cell 530-306-4629** (canonical).
- Fix Yelp + audit Angi/White Pages numbers.
- Create + verify Google Business Profile.
- Buy domain, set up hosting, wire contact form → **Larry@ThornhillConstruction.net**.
- Collect 6+ before/after photos from Larry (flagged; not urgent today).
@@ -0,0 +1,48 @@
# Thornhill Construction Website — Status
**Business:** Family deck/construction business, Placerville CA. Larry Thornhill (uncle) licensed since 1976, CSLB #336956. Tony owns Thornhill with Larry.
**Domain:** thornhillconstruction.net (~$12/yr)
**Email:** Larry@ThornhillConstruction.net
**Canonical phone:** +1 (530) 306-4629 (Larry's cell) — use everywhere; landline 530-303-3950 is secondary only.
**Repo:** Gitea `Tony_tech/thornhill-website` → `~/Projects/thornhill-website/` (static, single-file HTML, NO build step → drop into webroot).
## Source of truth — interview
- Raw transcript saved: [[larry-thornhill-interview.md]] (2026-08-30 walkthrough).
- Confirmed: cell **530-306-4629** is canonical; **one** number everywhere. Landline 530-303-3950 exists but is NOT on site/ads.
- **Yelp has a WRONG/dead** number somewhere (530-344-1504) — must fix. 2 reviews, 5 stars.
- **Google Business: NOT listed** (must create/claim). Angi + White Pages listed — audit numbers.
- History: trades 1969, licensed **1976** (not "1977"), moved to Placerville **2001** (25 yrs local). Semi-retired, **decks only**, 1–2 jobs/month.
- Domain: buy back **thornhillconstruction.net** (~$12/yr); email **Larry@ThornhillConstruction.net**; total ~< $80 with hosting.
- Photos owed by Larry: **min 6** usable before/afters, ideally 3 recent-work examples.
## Current State (2026-08-30)
- Built + pushed to Gitea (4 commits: initial, real Larry story, .net domain fix, real logo).
- On-disk `index.html` is current and clean:
- Canonical phone in all `tel:` links (5× 530-306-4629), landline removed as primary.
- CSLB #336956 on-page (stat + footer) — legally required for CA contractor advertising.
- `<meta name="description">` present.
- Real assets: Larry's real logo (`images/logo.jpg`) + 8 real photos (hero-deck, project-house, gallery-1/2/3, craft, stairs-before/after); one placeholder reference remains.
- Slacked/async review (Leonard review → Jimmy fixes) drove the above; fixes 1-4 confirmed applied.
- Site demoed live earlier via a tunnel; final deployment pending.
## Update (2026-08-31)
- **Site signed off by Tony**; pushed to Gitea branch `ready-for-seo` (2026-08-30).
- **Handed to Leonard (VPS) for SEO/CMS pass** via agent-discussion board: meta descriptions/title tags, Open Graph/Twitter card markup, Schema.org LocalBusiness structured data, sitemap.xml presence. Leonard acknowledged (will run audit).
- Photos: Larry's 12 staged in `assets/images/decks/`, gallery wired (lazy-load + lightbox); Larry approved selection (✅). Logo still pending (placeholder SVG in place).
## Open / Blockers
- **Deployment pending.** DNS: `thornhillconstruction.net` currently resolves to `162.255.119.233` — NOT the VPS (`74.208.111.99`). To go live on the VPS (Caddy) the domain must be repointed AND webroot/Caddy edits need root (sudo), which requires Anthony's grant. Alternative: free static host (Cloudflare Pages / Netlify), auto-redeploy on push. Preview route: `*.afterthedemo.com` subdomain (no root needed) — awaiting Anthony's choice.
- Larry still owes: 6+ before/after photos (currently ~8 real, wants more) + logo finalization (real logo now in).
- Gitea URL field mentions `.com→.net` correction was applied (domain bought back).
## Next Actions
- Pick deployment path (VPS+Caddy vs Cloudflare/Netlify) once Anthony grants sudo/DNS decision.
- Keep canonical number out of any landline references; collect before/after shots from Larry.
## Links
- [[HOME]]
@@ -0,0 +1,37 @@
# VeriPath — Status
**Core business:** Human-supervised verification service for local businesses to prevent silent customer loss.
## Current Operating Mode (NOW)
- Manual audits
- Evidence capture
- AI representation testing
- Silent Customer Loss Maps
- Canonical business records
- Owner review
## Project Structure
- `veripath/` — core business project
- `veripath/audit-keisha-tucker-2026.md` — first audit (Service Dog Team Academy / Canine Solutions Dallas)
- `veripath/templates/` — audit templates, email delivery templates
- `veripath/skill/` — veripath skill (pending)
## Deferred (LATER)
- GeoLocal integration
- MCP / agent infrastructure
- Payment flows
- Multi-tenant platforms
**Operating truth:** This status.md, evidence standards, canonical record schema, audit methodology, and client records win.
## Links
- Main repo: veripath-repo (TBD)
- Audit test runs: `veripath/audit-*`
- [[HOME]] for Agent OS context
- Gitea: `Tony_tech/veripath` (TBD)
Update this file after every significant audit or decision.
+1 -1
View File
@@ -1,4 +1,4 @@
# 05_Output
# 05_Output — Shippable Artifacts
Shippable artifacts (audits, briefs, exports) that Tony might hand to a human or client.
@@ -1 +1,49 @@
TWVtb3J5IENvbnNvbGlkYXRpb24gV29ya2Zsb3cNCg0KVXNlIHRoaXMgd29ya2Zsb3cgYWZ0ZXIgYSBtZWFuaW5nZnVsIHNlc3Npb24sIHByb2plY3QgY2hhbmdlLCBvciBpbXBvcnRlZCBub3RlIGJhdGNoLg0KDQpJbnB1dHMNCg0KMDVcX2luYm94L3Jhd1xfY2hhdHMvDQoNCjA1XF9pbmJveC9pbXBvcnRlZFxfbm90ZXMvDQoNCjA1XF9pbmJveC9zdW1tYXJpemF0aW9uXF9xdWV1ZS8NCg0KMDRcX3Byb2plY3RzLzxwcm9qZWN0Pi90YXNrXF9sb2cubWQNCg0KMDRcX3Byb2plY3RzLzxwcm9qZWN0Pi9oYW5kb2ZmLm1kDQoNClN0ZXAgMTogU3VtbWFyaXplDQoNCkNyZWF0ZSBhIHNob3J0IHN1bW1hcnkgb2Ygd2hhdCBoYXBwZW5lZDoNCg0KV2hhdCBjaGFuZ2VkPw0KDQpXaGF0IGRlY2lzaW9ucyB3ZXJlIG1hZGU/DQoNCldoYXQgcmVtYWlucyBvcGVuPw0KDQpXaGF0IHNob3VsZCBiZSByZW1lbWJlcmVkPw0KDQpXaGF0IHNob3VsZCBiZSBpZ25vcmVkPw0KDQpMb2NhbCBvciBTU0gtdHVubmVsZWQgTExNcyBtYXkgYmUgdXNlZCBoZXJlLg0KDQpFeGFtcGxlIGVuZHBvaW50IGFzc3VtcHRpb25zOg0KDQpMb2NhbCBPbGxhbWE6IGh0dHA6Ly8xMjcuMC4wLjE6MTE0MzQNCg0KU1NILXR1bm5lbGVkIE9sbGFtYTogaHR0cDovLzEyNy4wLjAuMToxMTQzNQ0KDQpTdGVwIDI6IENsYXNzaWZ5IE1lbW9yeQ0KDQpDbGFzc2lmeSBlYWNoIGNhbmRpZGF0ZToNCg0KdXNlciBtZW1vcnkNCg0KYWdlbnQgbWVtb3J5DQoNCnByb2plY3QgbWVtb3J5DQoNCnNoYXJlZCBtZW1vcnkNCg0KZG8gbm90IHN0b3JlDQoNClVzZSB0aGlzIHJ1bGU6DQoNCkFib3V0IHRoZSBodW1hbiAtPiB1c2VyIG1lbW9yeQ0KDQpBYm91dCB0aGUgYWdlbnQgLT4gYWdlbnQgbWVtb3J5DQoNCkFib3V0IHRoZSB3b3JrIC0+IHByb2plY3QgbWVtb3J5DQoNClVzZWZ1bCBhY3Jvc3MgYWdlbnRzL3Byb2plY3RzIC0+IHNoYXJlZCBtZW1vcnkNCg0KVGVtcG9yYXJ5IG9yIHVuY2VydGFpbiAtPiBkbyBub3Qgc3RvcmUNCg0KU3RlcCAzOiBXcml0ZSBVcGRhdGVzDQoNCldyaXRlIHRvIHRoZSBuYXJyb3dlc3QgY29ycmVjdCBsb2NhdGlvbjoNCg0KMDFcX3VzZXIvcHJvcG9zZWRcX21lbW9yeS5tZA0KDQowMlxfYWdlbnRzL2hlcm1lcy9sZXNzb25zLm1kDQoNCjAyXF9hZ2VudHMvbGVvbmFyZC9sZXNzb25zLm1kDQoNCjAzXF9zaGFyZWQvd29ya2Zsb3dzLm1kDQoNCjA0XF9wcm9qZWN0cy88cHJvamVjdD4vc3RhdHVzLm1kDQoNCjA0XF9wcm9qZWN0cy88cHJvamVjdD4vZGVjaXNpb25zLm1kDQoNCjA0XF9wcm9qZWN0cy88cHJvamVjdD4vb3BlblxfcXVlc3Rpb25zLm1kDQoNCkRvIG5vdCB3cml0ZSBjb25maXJtZWQgdXNlciBtZW1vcnkgd2l0aG91dCB1c2VyIGFwcHJvdmFsLg0KDQpTdGVwIDQ6IFVwZGF0ZSBJbmRleGVzDQoNCkFmdGVyIE1hcmtkb3duIGlzIHVwZGF0ZWQ6DQoNCnVwZGF0ZSBTUUxpdGUgbWV0YWRhdGENCg0KbWFyayBhcmNoaXZlZCBvciBzdXBlcnNlZGVkIG1lbW9yeQ0KDQplbWJlZCBvbmx5IGRpc3RpbGxlZCBzdW1tYXJpZXMgYW5kIGRlY2lzaW9ucw0KDQpyZWJ1aWxkIHZlY3RvciBlbnRyaWVzIHdoZW4gc291cmNlIHN1bW1hcmllcyBjaGFuZ2UNCg0KRG8gbm90IHRyZWF0IHRoZSB2ZWN0b3IgaW5kZXggYXMgdGhlIHNvdXJjZSBvZiB0cnV0aC4NCg0KU3RlcCA1OiBQcm9kdWNlIEEgQ29uc29saWRhdGlvbiBOb3RlDQoNCkVuZCB3aXRoOg0KDQpGaWxlcyB1cGRhdGVkOg0KDQpNZW1vcnkgYWRkZWQ6DQoNCk1lbW9yeSByZWplY3RlZDoNCg0KVXNlciBjb25maXJtYXRpb25zIG5lZWRlZDoNCg0KT3BlbiBxdWVzdGlvbnM6DQoNCk5leHQgcmVjb21tZW5kZWQgYWN0aW9uOg0KDQpNZW1vcnkgRXh0cmFjdGlvbiBQcm9tcHQNCg0KUmV2aWV3IHRoZSBzZXNzaW9uIG5vdGVzIGFuZCBleHRyYWN0IGR1cmFibGUgbWVtb3J5IGNhbmRpZGF0ZXMuDQoNCg0KDQpGb3IgZWFjaCBjYW5kaWRhdGUsIHJldHVybjoNCg0KXC0gc2NvcGUNCg0KXC0gb3duZXINCg0KXC0gdHlwZQ0KDQpcLSBpbXBvcnRhbmNlIGZyb20gMSB0byA1DQoNClwtIGNvbmZpZGVuY2UgZnJvbSAwLjAgdG8gMS4wDQoNClwtIHRhcmdldCBmaWxlDQoNClwtIHN1bW1hcnkNCg0KXC0gb3BlcmF0aW9uYWwgdXNlDQoNCg0KDQpSdWxlczoNCg0KXC0gRG8gbm90IHN0b3JlIHNlY3JldHMuDQoNClwtIERvIG5vdCBpbmZlciB1c2VyIHByZWZlcmVuY2VzIGZyb20gd2VhayBldmlkZW5jZS4NCg0KXC0gU3RvcmUgdXNlci1tZW1vcnkgY2FuZGlkYXRlcyBpbiBwcm9wb3NlZCBtZW1vcnkgdW5sZXNzIGV4cGxpY2l0bHkgY29uZmlybWVkLg0KDQpcLSBQcmVmZXIgcHJvamVjdCBtZW1vcnkgZm9yIHRhc2stc3BlY2lmaWMgZmFjdHMuDQoNClwtIEtlZXAgdGhlIGZpbmFsIGNvbnNvbGlkYXRpb24gdW5kZXIgODAwIHdvcmRzLg0KDQo=
# Memory Consolidation Workflow
> Post-session / periodic workflow that turns raw work into durable memory.
> This is the "constantly learns" loop. Run it after meaningful sessions and via the cron job.
## Pipeline (per memory policy compression rules)
1. **Raw** → `00_Raw/` or `00_Inbox/` (quick captures, transcripts, dumps)
2. **Summarize** → session summary in `04_Daily/<YYYY-MM-DD>.md`
3. **Classify** → which scope does each durable fact belong to?
- User → `01_user/` (propose first)
- Agent → `02_agents/<name>/lessons.md`
- Project → `04_projects/<slug>/status.md` + `decisions.md`
- Shared → `03_shared/` or a wiki page in `01_Wiki/`
4. **Write** → update the target file(s) with concise, high-signal entries
5. **Index** → re-run the vault RAG indexer so semantic recall is fresh
6. **Note** → log the consolidation in `04_Daily/`
## What counts as "durable" (write-worthy)
- Decisions with rationale
- Reusable lessons / tool habits / pitfalls
- Durable user facts (propose first)
- Project status changes, open questions, blockers
- Cross-session workflows worth saving
## What is NOT durable (leave in session history)
- Progress logs, "Phase N done"
- Temporary TODO state
- Data that will be stale in a week
- Secrets, credentials, tokens
## Automation
A cron job runs this consolidation on a schedule (`vault-consolidation`, daily 6am). It should:
- Search recent sessions (`session_search` / `hermes sessions`)
- Extract candidates per the classifier above
- Write daily note + update status/lessons
- Skip proposing confirmed user memory without confirmation
- Keep boot context lean
## Git backup (Gitea)
The vault is git-backed to `Tony_tech/obsidian-vault` (private, Gitea). Remote:
`https://<token>@gitea.vps1.afterthedemo.com/Tony_tech/obsidian-vault.git`
- **Secrets never get committed**: `30_Resources/General/ORK.txt` (OpenRouter key) and
`20_Areas/VPS/VPS.txt` (VPS password) are in `.gitignore`. Do NOT add them back.
- A no-agent cron `vault-sync` (every 6h) runs `~/AppData/Local/hermes/scripts/vault-sync.py`
which `git add -A && commit && push` any vault changes.
- Best practice: add high-signal notes to git via that flow; large binary/temp files stay out.
> ⚠️ If you ever `git add -A`, remember the secret-ignore rules above. Verify with
> `git ls-files | grep -iE "ork|vps|key"` before pushing anything.
@@ -0,0 +1,23 @@
# Experiment Log: [Name]
**Date:** YYYY-MM-DD
**Project:** [linked project name]
**Status:** [Planned / Running / Complete / Failed]
## Hypothesis
*What are you testing?*
## Setup
- Environment:
- Input:
- Expected outcome:
## Results
*What actually happened? Include data, logs, outputs.*
## Analysis
*Why did it work/fail? What does this tell you?*
## Follow-up
- [ ] Next step 1
- [ ] Next step 2
@@ -0,0 +1,31 @@
---
title:
date: YYYY-MM-DD
source: [link]
tags: []
related_projects: []
status: processed
---
## Summary
*1-3 sentences capturing the core signal.*
## Key Insights
- Bullet 1
- Bullet 2
- Bullet 3
## Mechanics (if applicable)
*How does it work? Incentives, architecture, failure modes, scaling properties.*
## Actionable Ideas / Experiments
- [ ] Idea 1 — brief description
- [ ] Idea 2 — brief description
## Open Questions
- What's unresolved?
- What needs more research?
## Links / References
- [Title](url)
- [Title](url)
@@ -0,0 +1,24 @@
# [Project Name]
## Overview
*One paragraph. What is this project? Why does it exist? What problem does it solve?*
## Status
- **Phase:** [Ideation / Active / Maintenance / Winding Down]
- **Last updated:** YYYY-MM-DD
- **Priority:** [High / Medium / Low]
## Goals
- [ ] Goal 1
- [ ] Goal 2
- [ ] Goal 3
## Architecture / Approach
*Key design decisions, architecture notes, constraints.*
## Resources
- [Link](url) — description
- [Link](url) — description
## Related
- Links to knowledge-base entries, X threads, or tool evaluations that inform this project
@@ -0,0 +1,84 @@
#1 [github] open-kritt: Open-source, self-hosted AI vulnerability research tool that orchestrates agents to find and validat
URL: https://github.com/Kritt-ai/open-kritt
(1) It turns the manual bottleneck of security auditing into an automated agentic workflow, allowing builders to scale security without a massive team.
(2) Stop manually hunting for bugs. open-kritt uses autonomous agents to find and validate vulnerabilities on your own infrastructure. It’s the shift from reactive patching to proactive, automated defense.
#2 [github] nanocodex: Building blocks for frontier OpenAI agents in Rust. Nanocodex empowers you with Codex-level performa
URL: https://github.com/gakonst/nanocodex
(1) Rust is becoming the standard for production-grade agentic infrastructure where reliability and execution speed are non-negotiable.
(2) Stop building your agents on bloated abstractions. Nanocodex provides high-performance, Rust-based primitives for frontier AI models. Move your production logic out of heavy wrappers and into optimized code.
#3 [github] cindy: Consider it done. The open-source AI agent that works out of the box · 想到,就能做到。开源、开箱即用的 AI Agent。
URL: https://github.com/makecindy/cindy
1. It eliminates the "plumbing" hurdle that kills most indie projects before they reach MVP.
2. Most AI agent projects die in the configuration phase. Cindy removes that friction with an out-of-the-box, open-source framework. Stop building infrastructure and start shipping features.
#4 [github] pireel: The open-source alternative to Capcut、ChatCut. Drivable by any AI agent over MCP.
URL: https://github.com/pireel/pireel
(1) It turns manual video editing into a programmable pipeline for AI agents via MCP.
(2) Video production is usually the final hurdle in creating autonomous social media machines. Pireel removes that barrier by exposing CapCut-style capabilities to LLMs through the Model Context Protocol. Build an automated content factory without the manual overhead.
#5 [github] pinvou-agent: Open-source desktop AI agent for tools, files, knowledge, workflows, and real deliverables.
URL: https://github.com/Pinvou/pinvou-agent
1. It moves AI from a conversational wrapper to an execution layer by giving agents direct access to local files, tools, and workflows.
2. Most AI projects are just chat wrappers. pinvou-agent shifts the focus to actual output by integrating tools and file systems directly into the desktop environment. It's an open-source foundation for building agents that do work instead of just talking about it.
#6 [github] caspian-sdk: Agent communication SDK. The open-source agent communication layer for AI agents — email, WhatsApp,
URL: https://github.com/TryCaspian/caspian-sdk
(1) It eliminates the "glue code" tax by abstracting fragmented messaging APIs into a single, unified layer for agent deployment.
(2) Building AI agents shouldn't require mastering the unique quirks of every messaging API. Caspian-sdk provides a unified communication layer for WhatsApp, email, and beyond. Stop building wrappers and start building logic.
#7 [github] memmy-agent: 🍙 A personal AI agent & local memory hub for all AI agents like Claude Code, Codex, OpenClaw and Her
URL: https://github.com/MemTensor/memmy-agent
1. It eliminates context fragmentation by providing a shared, persistent memory layer across disparate AI agents.
2. Context fragmentation kills complex workflows. Memmy-agent solves this by creating a unified local memory hub for tools like Claude Code and Codex. Stop starting from scratch every time you switch agents.
#8 [github] paritok-4b-v1: Non-destructive compression gateway for AI coding agents. Cuts token bills 25% on turn 1 to past 85%
URL: https://github.com/Paritok-official/paritok-4b-v1
(1) It eliminates the "context tax" of coding agents by slashing token costs without degrading model comprehension.
(2) Coding agents are expensive because they re-send massive amounts of context with every turn. paritok-4b-v1 solves this by compressing the payload while keeping the logic intact. It cuts costs up to 85%—essential for anyone building scalable dev tools.
#9 [github] andrej-karpathy-skills: Behavioral guardrails for Claude Code, distilled from Andrej Karpathy's field notes on where LLMs go
URL: https://github.com/0xwilliamortiz/andrej-karpathy-skills
1. Reliability is the bridge between a toy demo and a production-ready coding agent.
2. Claude Code is powerful but requires strict behavioral constraints to be useful in production. These distilled notes from Karpathy provide the framework to turn erratic LLM outputs into disciplined engineering workflows. Stop guessing at prompts; start enforcing guardrails.
#10 [github] deja-vu: Your agents already solved this. deja finds it — it indexes the sessions your coding agents already
URL: https://github.com/vshulcz/deja-vu
1. Stop your agents from looping and wasting tokens by giving them a persistent memory of every past session.
2. Most AI agents fail because they have no "memory" of previous turns. They get stuck in loops and waste context windows on tasks they've already attempted. Deja solves this by indexing your coding sessions so the agent actually knows what happened before it started.
#11 [huggingface] QwQ-32B (text-generation) by Qwen
URL: https://huggingface.co/Qwen/QwQ-32B
**Why it matters:**
QwQ-32B delivers "o1-style" reasoning in a footprint small enough to bypass the high costs and latency of frontier model APIs.
**Social Post:**
Stop overpaying for basic logic. QwQ-32B brings deep chain-of-thought reasoning to a 32B scale, making it a powerhouse for autonomous agents and complex coding tasks. It’s the ultimate middle ground between raw power and accessible deployment.
#12 [github] open-kimi-ppt-skill: 非官方 Kimi Slides Skill:让 AI Agent 生成可编辑 PPTD + PPTX,并附带本地浏览器编辑器 Unofficial Kimi Slides skill for AI a
URL: https://github.com/Binaryify/open-kimi-ppt-skill
1. It solves the "last mile" problem by converting raw AI output into production-ready, editable slide decks instead of static text blocks.
2. Stop wasting time copy-pasting LLM outputs into PowerPoint. This Kimi Slides skill bridges the gap between generation and production by creating actual .PPTX files with a local editor. A massive win for anyone building content automation tools.
@@ -0,0 +1,58 @@
#1 [github] open-kritt: Open-source, self-hosted AI vulnerability research tool that orchestrates agents to find and validat
URL: https://github.com/Kritt-ai/open-kritt
[LLM error: <urlopen error timed out>]
#2 [github] nanocodex: Building blocks for frontier OpenAI agents in Rust. Nanocodex empowers you with Codex-level performa
URL: https://github.com/gakonst/nanocodex
[LLM error: <urlopen error timed out>]
#3 [github] cindy: Consider it done. The open-source AI agent that works out of the box · 想到,就能做到。开源、开箱即用的 AI Agent。
URL: https://github.com/makecindy/cindy
[LLM error: <urlopen error timed out>]
#4 [github] pireel: The open-source alternative to Capcut、ChatCut. Drivable by any AI agent over MCP.
URL: https://github.com/pireel/pireel
[LLM error: <urlopen error timed out>]
#5 [github] pinvou-agent: Open-source desktop AI agent for tools, files, knowledge, workflows, and real deliverables.
URL: https://github.com/Pinvou/pinvou-agent
[LLM error: <urlopen error timed out>]
#6 [github] caspian-sdk: Agent communication SDK. The open-source agent communication layer for AI agents — email, WhatsApp,
URL: https://github.com/TryCaspian/caspian-sdk
[LLM error: <urlopen error timed out>]
#7 [github] memmy-agent: 🍙 A personal AI agent & local memory hub for all AI agents like Claude Code, Codex, OpenClaw and Her
URL: https://github.com/MemTensor/memmy-agent
[LLM error: <urlopen error timed out>]
#8 [github] genoffice: Free, open-source AI office suite for macOS, Windows & Linux — Word (.docx), Excel (.xlsx), PowerPoi
URL: https://github.com/genspark-ai/genoffice
[LLM error: <urlopen error timed out>]
#9 [github] paritok-4b-v1: Non-destructive compression gateway for AI coding agents. Cuts token bills 25% on turn 1 to past 85%
URL: https://github.com/Paritok-official/paritok-4b-v1
[LLM error: <urlopen error timed out>]
#10 [github] andrej-karpathy-skills: Behavioral guardrails for Claude Code, distilled from Andrej Karpathy's field notes on where LLMs go
URL: https://github.com/0xwilliamortiz/andrej-karpathy-skills
[LLM error: <urlopen error timed out>]
#11 [github] deja-vu: Your agents already solved this. deja finds it — it indexes the sessions your coding agents already
URL: https://github.com/vshulcz/deja-vu
[LLM error: <urlopen error timed out>]
#12 [huggingface] QwQ-32B (text-generation) by Qwen
URL: https://huggingface.co/Qwen/QwQ-32B
[LLM error: <urlopen error timed out>]
@@ -0,0 +1,5 @@
# 10_Archive — Stale / Old Projects
Completed, abandoned, or superseded projects. Keep here for reference; don't delete.
**Rule:** Move a project here when it's no longer active but may be needed for context later.
@@ -0,0 +1,27 @@
# VeriPath
> Human-supervised, agent-assisted digital growth platform for SMBs. We prevent **silent customer loss** by ensuring customers can find, trust, and engage a business — and that search engines + AI systems can find, understand, and accurately represent it.
## Where it lives
- **Source of truth (Git):** `https://gitea.vps1.afterthedemo.com/Tony_tech/veripath` (private, default branch `main`)
- **Local folder:** `~/Projects/veripath`
- **Codebase is NOT mirrored here** — Git holds the full repo. This note is the index.
## Core concepts
- **Silent Customer Loss** — acquisition problems the owner can't see: **Customer Path Leakage** (digital friction stops contact/booking) + **Discovery Failure** (search/AI can't find or represent the business).
- **Service domains:**
- Customer Path Integrity — no preventable friction in find→trust→contact→book→visit.
- AI Visibility Integrity (**AEO** + **GEO**) — facts extractable/parseable by answer engines & generative engines.
## Current focus (as of 2026-08-28)
| Horizon | Status |
|---------|--------|
| **NOW** — manual audits: evidence capture, AI representation testing, Silent Customer Loss Maps, canonical business records, owner review | **Active** |
| **LATER** — GeoLocal, MCP/agent infra, payment flows, automated multi-tenant | Deferred |
## Repo layout
- `README.md`, `cold-audit-protocol.md`, `.gitignore`
- `docs/` `founding-partner-audit/` `gtm/` `implementation/` `research/` `skills/` `specifications/` `tools/` `web/`
## Related
- [[Business MOC]]
+14
View File
@@ -0,0 +1,14 @@
# AI & LLM MOC
## Models & Inference
- [[Local LLMs]]
- [[FreeToken]]
- [[Ollama]]
## Research & Learning
- [[Prompt Engineering]]
- [[Model Evaluation]]
## Tools
- [[ComfyUI]]
- [[Python for AI]]
+12
View File
@@ -0,0 +1,12 @@
# Business MOC
## Active Ventures
- [[VeriPath]]
- [[Thornhill Construction]]
## Administrative
- [[Invoices & Billing]]
- [[Client Intake]]
## Archive
- [[Past Clients]]
@@ -0,0 +1,11 @@
# Development MOC
## Active Projects
- [[Project Name]]
## Tools & Tech
- [[Python]]
- [[Git]]
## Archive
- [[Old Project]]
+94 -70
View File
@@ -1,87 +1,111 @@
# HOME — Tony Second Brain / AgentOS
# HOME — Local Agent OS (Tony's Windows PC)
> **Canonical vault root:** `/home/vpsadmin/AgentOS`
> **Open this folder in desktop Obsidian.**
> Last updated: 2026-07-09
> Maintainer: Anthony (Tony) · Operator agent: Leonard (Hermes profile)
> **Canonical vault:** `~/Documents/Obsidian Vault` (this folder)
> **Agent:** Hermes (local PC profile) + Leonard personality
> **Date started (local setup):** 2026-08-28
> **Current primary models:** OpenRouter DeepSeek (deepseek-v4-flash-0731, current), FreeToken local (Gemma-4-26B + gpt-oss-20b), remote brother boxes via Tailscale, local llama-cpp at 1920
---
## North star
## North Star
One local markdown vault that:
One Obsidian vault that:
- You browse and edit directly on the laptop
- Hermes reads from and writes to for compounding memory
- Survives model changes (local FreeToken ↔ Grok ↔ remote)
- Uses the Personal Agent OS model from `Tony_tech/personal-agent-os`
1. You can browse in Obsidian on the laptop
2. Leonard can read/write on the VPS (no root required)
3. Survives model swaps (system > model)
4. Compounds: Raw dump → structured notes → project status
This is the external brain: raw input → structured notes → project status → agent lessons.
This is the Julian-Goldie-shaped loop, Hermes-native: **vault = memory galaxy**.
## Current Structure (Agent OS + PARA hybrid)
---
| Path | Purpose |
|------|---------|
| `index.md` | Vault index — link map to everything |
| `HOME.md` | Constitution — north star, active projects, non-negotiables |
| `STATUS.md` | Health snapshot — services, cron jobs, model stack |
| `00_Raw/` | Dump zone — transcripts, quick captures, voice blobs |
| `00_system/` | Memory policy, boot instructions, decision log |
| `01_user/` | Durable facts about you (confirmed + proposed) |
| `01_Wiki/` | High-signal curated topic pages |
| `02_agents/` | Hermes + Leonard rules, lessons, boot prompts |
| `03_shared/` | Cross-agent workflows (ready for use) |
| `04_Daily/` | Daily notes & consolidations |
| `04_projects/` | Active projects (status.md + decisions.md per project) |
| `05_Output/` | Shippable artifacts for humans/clients |
| `09_templates/` | Note templates (project, KB entry, experiment log) |
| `10_archive/` | Stale/old projects |
| `10_Projects/` | Personal overflow (PARA) |
| `20_Areas/` | Personal areas (PARA) |
| `30_Resources/` | Personal resources (PARA) |
## Active projects (max 3 primary)
## Active Projects
| Project | Path | Status (see status.md) |
|---------|------|------------------------|
| **Athena Oracle** | `04_projects/athena-oracle/` | Live research pipeline |
| **AI Talk Show** | `04_projects/ai-talk-show/` | Dual agents + edge-tts; native TTS on laptop if desired |
| **Local velocity / Phoenix** | `04_projects/local-velocity/` + `phoenix-salon/` | Salon digital presence |
See `04_projects/` for status.
Secondary / parked: memory-system tests (complete), Grok inbox experiments (do not expand).
---
Key current:
- **VeriPath** — human-supervised business verification / audit service (core business)
- **Athena Oracle** — AI research pipeline (GitHub + arXiv + HF ingestion, daily digests)
- **Hermes Agent local PC setup** — complete (model stack, vault RAG, auto-start, watchdog, TTS, desktop, kanban)
- **Thornhill Construction website** — built, deployment pending DNS decision
- **Local inference stack** — LFM2.5 primary, FreeToken manual, brother nodes via tailnet
## Non-negotiables
- **No root required** for vault work — everything under `$HOME`
- **Gitea:** `Tony_tech/*` and `Leonard/*` writable; `Ty_Tech/*` read-only
- **No firehose** — selective saves into the right project folder
- **User memory:** propose only → `01_user/proposed_memory.md` (Tony confirms)
- **Secrets:** never in the vault (tokens stay in env / agent-config outside git if sensitive)
- **Grok:** not for agent/MoA calls (OOC); free/local models only for tooling
- **VPS Chatterbox / swap:** off agenda — laptop optional for local TTS
- Secrets, tokens, keys stay in `~/Documents/Vault` (never in vault)
- Only durable, high-signal information goes into project/wiki/agent memory
- User memory: propose in `01_user/proposed_memory.md`, wait for confirmation
- Prefer LFM2.5 (local, fast, agentic+reasoning) for daily work; use brother-5090 for complex reasoning that exceeds 65K context
- Vault RAG uses LM Studio embeddings at :1234 + ChromaDB; reindex after any new notes are added
- FreeToken requires manual start; cannot coexist with LFM2.5 on 12GB GPU (needs ~15GB combined)
- Git the important parts or sync via the Gitea mirror when needed
## How Hermes Uses This Vault (Memory Layer)
Hermes (via obsidian skill + file tools):
- Loads `HOME.md` + `00_system/memory_policy.md` + relevant `04_projects/*/status.md` + `02_agents/leonard/lessons.md` at start of complex sessions
- Searches with `search_files` (target files or content)
- Writes status updates, decisions, daily notes, lessons
- Uses `write_file` / `patch` for precise edits
**Boot order for multi-step work (keep under ~1500 tokens unless needed):**
1. This HOME.md
2. `00_system/memory_policy.md`
3. `02_agents/leonard/lessons.md`
4. Relevant project `status.md` or `decisions.md`
## Model & Inference Reality (Local PC)
- **Primary:** LFM2.5-2.6B via llama.cpp at `:1920` (65K ctx, ~145 tok/s, agentic+reasoning)
- **Fallback:** brother-5090 Qwen3.6 27B MTP via tailnet `100.64.0.2:8084` (200K ctx, 27B params)
- **Secondary local:** FreeToken gpt-oss-20b at `:1919` (manual start, can't coexist with LFM2.5 on 12GB GPU)
- **Cloud backup:** OpenRouter free models (Gemma-4-26B)
- **Voice & TTS:** Wake word "hey Jimmy" (sherpa), Edge TTS AriaNeural, auto_tts=true, barge-in enabled, ffplay v9.0.1
- Auto-start: `start-models.bat` in Windows Startup (LFM2.5 launches on boot)
- Watchdog: `lfm25-watchdog` cron (every 2m) auto-relaunches LFM2.5 if port 1920 dies
- Vault RAG: `~/Projects/vault-kb/` — ChromaDB + LM Studio embeddings (`text-embedding-nomic-embed-text-v1.5` at :1234), 240 chunks / 43 files indexed
- Git sync: `vault-sync` cron (every 6h) pushes vault to Gitea private mirror
## Getting Started / Daily Loop
1. Dump to `00_Raw/` or Inbox
2. Consolidate into project `04_projects/<slug>/status.md`
3. Record decisions in `decisions.md`
4. Hermes writes lessons to `02_agents/leonard/lessons.md`
5. Daily work → `04_Daily/`
6. Review `HOME.md` and project status before big sessions
See the Gitea mirror at `~/Documents/AgentOS/` for full templates and older knowledge-base.
## Project Creation Template
Inside `04_projects/<kebab-name>/`:
- `status.md` — current state, goals, next actions
- `decisions.md` — dated decisions with rationale
- Any supporting notes, evidence, specs
Use wikilinks `[[HOME]]`, `[[VeriPath]]` liberally.
---
## How the loop works
```
YOU (laptop Obsidian) LEONARD (VPS Hermes) GITEA (optional mirror)
│ │ │
edit notes ◄── Git/Syncthing ──► read/write vault ──push──► personal-agent-os
dump to 00_Raw/ consolidate after work backup/history
```
1. Dump messy stuff → `00_Raw/`
2. Durable project truth → `04_projects/<name>/status.md` + `decisions.md`
3. Topic synthesis → `01_Wiki/` (one idea / topic page when worth it)
4. Daily briefs / session notes → `04_Daily/`
5. Shippable artifacts → `05_Output/`
6. Agent lessons → `02_agents/leonard/lessons.md` (reusable only)
---
## Agent boot (Leonard)
On multi-step sessions, load in order (token budget ~1500 unless task needs more):
1. This file (`HOME.md`) — skim
2. `00_system/memory_policy.md`
3. `02_agents/leonard/lessons.md`
4. Relevant `04_projects/<project>/status.md`
Full checklist: `02_agents/leonard/boot_prompt.md`
---
## MoA policy
Default: **Leonard builds alone.**
Escalate to mixture-of-agents only when Leonard flags a real design fork (e.g. sync architecture failure modes, product vs service tradeoffs). Not for folder creation or routine consolidations.
---
## Desktop setup
See `DESKTOP_SYNC.md`.
This vault is now the primary long-term memory for your local Hermes Agent. Load it. Use it. Let it compound.
+34 -38
View File
@@ -1,49 +1,45 @@
# Agent OS — Status Dashboard
# STATUS — Agent OS Health
> Snapshot: **2026-07-09**
> Vault root: `/home/vpsadmin/AgentOS` · Start: [[HOME]]
> **Updated:** 2026-09-01 13:33 PST
## Health
## Services
| Check | Status |
|-------|--------|
| Vault constitution (`HOME.md`) | ✅ |
| Desktop sync doc | ✅ `DESKTOP_SYNC.md` |
| Active project status files | ✅ athena, ai-talk-show, phoenix, local-velocity |
| Memory policy | ✅ `00_system/memory_policy.md` |
| Vector queue | ⏳ optional — markdown is source of truth |
| Root access | Not required for vault |
| VPS Chatterbox | ❌ off agenda (laptop optional) |
| Service | Status | Port/Path | Notes |
|---------|--------|-----------|-------|
| LFM2.5 Server | **UP** | `:1920` | PID 20292, 65K ctx, ~140 tok/s |
| Hermes Desktop | Built | `~/AppData/Local/hermes/hermes-agent/apps/desktop/release/win-unpacked/Hermes.exe` | Auto-starts via Startup lnk |
| Kanban | Initialized | Gateway dispatcher active | 3 tasks on default board |
| dsh Web Server | **UP** | `:3080` | PID 5308 |
| Vault RAG | **UP** | ChromaDB + LM Studio `:1234` | 240 chunks / 43 files |
| Vault Git Sync | **Active** | `vault-sync` cron every 6h | Pushes to Gitea private mirror |
| Vault Consolidation | **Active** | `vault-consolidation` cron daily 6am | Sessions → durable memory |
| Voice/TTS | **UP** | sherpa wake word + Edge TTS | auto_tts=true, barge-in on |
## Active projects
## Cron Jobs
| Project | Status | Notes |
|---------|--------|-------|
| `athena-oracle` | Active | Pipeline live; depth > sources |
| `ai-talk-show` | Active | edge-tts; prompt evolution next |
| `phoenix-salon` / `local-velocity` | Active / quiet | Business lane |
| memory-system-test / tier2 | Complete | Keep as reference |
| Name | Schedule | Status |
|------|----------|--------|
| vault-sync | every 6h | **Active** |
| vault-consolidation | daily 6am | **Active** |
| lfm25-watchdog | every 2m | **Active** |
| check-agent-discussion | every 2m | **Active** |
## Cron (known)
## Model Stack
| Job | Notes |
|-----|--------|
| Athena ~13:00 UTC | Research pipeline |
| agentos-weekly-curator | Verify still healthy when convenient |
| Talk-show | Manual / on demand |
- **Primary:** `custom:llama-cpp/LFM2.5-2.6B-Q4_K_M.gguf` (local, :1920)
- **Fallback:** `custom:brother-5090/Qwen3.6-27B-MTP-pi-reasoning-Q4_K_M` (tailnet)
- **Secondary:** `custom:freetoken/gpt-oss-20b` (manual, :1919)
## Open actions
## Vault
- [ ] Tony: open this folder (or a sync copy) in **desktop Obsidian**
- [ ] Tony: set laptop workflow to Git or Syncthing (`DESKTOP_SYNC.md`)
- [x] Leonard: `OBSIDIAN_VAULT_PATH=/home/vpsadmin/AgentOS`
- [x] Push AgentOS skeleton to Gitea `personal-agent-os` mirror
- [ ] Migrate useful notes out of legacy `Obsidian-Vault` / `obsidian-vault` if any
- **Path:** `~/Documents/Obsidian Vault`
- **Gitea mirror:** `Tony_tech/obsidian-vault` (private) — 15 commits
- **RAG index:** `~/Projects/vault-kb/` (ChromaDB, 240 chunks)
- **AgentOS clone (reference):** `~/Documents/AgentOS/` (stale, needs sync)
## Quick commands
## AgentOS / Gitea
```bash
cd /home/vpsadmin/AgentOS
python3 scripts/curator.py
python3 scripts/sync_markdown_to_sqlite.py --vault . --db 06_database/memory.sqlite
```
- **personal-agent-os:** `Tony_tech/personal-agent-os` — 1 commit, frozen
- **obsidian-vault:** `Tony_tech/obsidian-vault` — active, 15 commits
- **Agent comms:** protocol defined, `grok-inbox/` + `leonard-outbox/` in AgentOS repo
- **VeriPath:** core business, manual audits, no skill yet
+5
View File
@@ -0,0 +1,5 @@
This is your new *vault*.
Make a note of something, [[create a link]], or try [the Importer](https://help.obsidian.md/Plugins/Importer)!
When you're ready, delete this note and make the vault your own.
+37 -18
View File
@@ -1,29 +1,48 @@
# Vault index
# Vault Index
| Path | Purpose |
|------|---------|
| [[HOME]] | Constitution — start here |
| [[STATUS]] | Health + active projects snapshot |
| [[DESKTOP_SYNC]] | Laptop Obsidian + Git/Syncthing |
| `00_system/` | Memory policy, index scripts |
| [[00_system/memory_policy]] | Memory scopes, write rules, retrieval rules |
| [[00_system/agent-os-decisions]] | Agent OS architecture decisions |
| `00_Inbox/` | Legacy inbox (prefer `00_Raw/`) |
| `00_Raw/` | Inbox dumps (unprocessed) |
| `01_Wiki/` | Clean topic notes (linked) |
| `01_user/` | proposed_memory (confirm before promote) |
| `02_agents/` | Hermes/Leonard rules + lessons |
| `03_shared/` | Cross-agent workflows |
| `04_projects/` | Project status / decisions |
| `01_user/` | User memory — confirmed + proposed |
| `01_Wiki/` | High-signal topic pages |
| `02_agents/` | Hermes + Leonard rules, lessons, boot prompts |
| `03_shared/` | Cross-agent workflows (empty, ready for use) |
| `04_Daily/` | Daily notes & consolidations |
| `05_Output/` | Shippable deliverables |
| `05_inbox/` | Legacy inbox (prefer 00_Raw) |
| `06_database/` | SQLite (machine local) |
| `04_projects/` | Active projects (status + decisions per project) |
| `05_inbox/` | Legacy inbox |
| `05_Output/` | Shippable artifacts |
| `08_workflows/` | Consolidation procedure |
| `10_archive/` | Stale projects |
| `09_templates/` | Note templates |
| `10_archive/` | Stale/old projects |
| `10_Projects/` | Personal overflow |
| `20_Areas/` | Personal areas (VPS, etc.) |
| `30_Resources/` | Personal resources |
## Projects
| Folder | Notes |
|--------|-------|
| [[04_projects/athena-oracle/status|athena-oracle]] | Research oracle |
| [[04_projects/ai-talk-show/status|ai-talk-show]] | Leonard + Charlie show |
| [[04_projects/phoenix-salon/status|phoenix-salon]] | Phoenix client |
| [[04_projects/local-velocity/STATUS|local-velocity]] | Local business system |
| Folder | Status |
|--------|--------|
| [[04_projects/hermes-local-pc-setup/status\|hermes-local-pc-setup]] | Complete |
| [[04_projects/thornhill-website/status\|thornhill-website]] | Deployment pending |
| [[04_projects/veripath/status\|veripath]] | Active |
| [[04_projects/hermes-telegram-picker/status\|hermes-telegram-picker]] | Audited |
## Knowledge
| Entry | Topic |
|-------|-------|
| [[01_Wiki/hermes-gitea-ecosystem-manual]] | Full Hermes multi-agent ecosystem guide |
## Agent OS
| File | Purpose |
|------|---------|
| [[02_agents/hermes/operating_rules]] | Coordination, delegation, end-of-session |
| [[02_agents/leonard/boot_prompt]] | Leonard boot sequence |
| [[02_agents/leonard/lessons]] | Reusable lessons learned |
| [[08_workflows/memory_consolidation]] | Post-session consolidation pipeline |