Self-hosted · Hermes Agent · runs 24/7

An agent that does
the work while
you sleep.

Felix is a personal AI agent that lives on its own machine and is reachable over chat. It holds a persistent memory of what it learns, loads written procedures the way a person reaches for a checklist, wakes itself on a schedule to do recurring work, and talks to real services through authenticated APIs.

2Scheduled jobs
3MCP integrations
64Skills loaded
0Unattended writes
How it fits together

Four layers, one loop

Nothing here is a black box. Every layer is a file you can read or a service you can swap out.

Interface
Chatconversation + delivery
CLIlocal terminal
Threadstopic-scoped sessions
▼
Agent core — Hermes (Nous Research)
Agent loop150 turns max
Persistent memorydurable facts
Skillswritten procedures
Schedulercron · heartbeat
▼
Data layer — MCP servers
Brokerageoauth · live account
Market dataprices · fundamentals
Newsheadlines · calendars
Notesmarkdown vault
▼
Output
Scheduled digestsdelivered to chat
Draft actionsnever auto-executed
Vault notesdated markdown
Shipped

What's already running

Live in production, running unattended under a supervisor process. Every claim below comes from the running system, not a design doc.

🌅Post-close digest

Wakes itself in the early morning and covers the previously completed US session. The schedule is deliberately anchored after the closing bell, so every figure it reports is a final closing price rather than an intraday wiggle. Leads with the performance block.

Live 5 days a week chat-aware chunking

📉Move triage

Compares everything it tracks against the prior close, then filters the noise into tiers — a large move becomes a headline, a moderate one becomes a watch item, and anything smaller stays silent unless news explains a build-up.

Live configurable watchlist

📰News attached to the move

For flagged items only, it pulls the one or two headlines most likely to explain the move and summarises them in its own words rather than pasting links. Anything on the always-cover list is included regardless of size.

Live primary + fallback source

🎯Drift check

Holds a target allocation in a config file and reports the gap between target and actual each morning, so rebalancing signals surface before they compound into a real overweight.

Live declared in config

🤖Scheduled action engine

A weekly job reads its written policy, checks a live external signal, applies the gate, and writes draft instructions through the broker API. Its output is handed to the digest job, so the user gets one coherent message instead of two competing ones.

Live draft-only chained jobs

⚡Documented override

An escape hatch from the gate: a named trigger can bypass the normal condition, but only for one designated item, and only when that trigger is written into policy. Everything else still obeys the gate.

Live explicit criteria

🧠Persistent memory

Two durable stores injected into every session — who the user is, and hard-won operational facts. It remembers that a particular auth flow has a short window and will fail if not completed promptly, so it doesn't relearn that lesson every week.

Live cross-session

📚64 skills

Procedural memory loaded only when relevant — scheduled digests, API integration guides, note-taking, email triage, version control, document generation (docx/pdf/xlsx/pptx), research, and delegation to external coding agents.

Live lazy-loaded

🛡️Calendar awareness

Both jobs check the market calendar before doing anything. On a holiday they return a literal suppression token and send nothing at all — no phantom "flat day" reports, no actions taken against a closed venue.

Live self-suppressing

🔧Self-repair playbook

An ops skill encodes the failure modes already hit and fixed — a crash loop from a missing lockfile, OAuth token expiry, stalled job heartbeats — so a repeat incident is a lookup rather than a fresh debugging session.

Live documented runbook
The recurring loop

What happens without anyone asking

Two scheduled jobs, deliberately sequenced. The weekly action job runs first and stores its result; the morning digest picks that result up and reports it — so one alert covers both the market and the decision.

WEEKLY · START OF WEEK

Signal check

Pull the live sentiment reading. Below the threshold, the period's action proceeds across every bucket. Above it, the action is skipped and the allocation rolls forward.

WEEKLY · START OF WEEK

Draft instructions written

Per-bucket instructions are created as drafts through the broker API and stamped with which rule triggered them — gate passed, override applied, or skipped / rolled over. Nothing reaches the venue without a human.

Encoded policy

Rules as a file, not as code

Behavioural rules live in a plain markdown policy document — human-readable, versioned, and authoritative. The skill only operationalises it, which means changing what the agent does is editing a text file rather than rewriting an agent.

Design patterns

Sentiment gate

Capital is only committed when an external reading sits below a declared threshold. The gate doesn't try to predict anything — it just refuses to act in one specific condition.

Rollover instead of expiry

A skipped period doesn't lose its allocation; the amount compounds into the next decision point. Skipping is deferral, not forfeiture.

Single-item override

A documented catalyst can bypass the gate for one designated item only. The exception is narrow, written down, and cannot leak into the other buckets.

Hard stop at period end

If the condition never clears, the accumulated amount is held rather than force-deployed to hit an arbitrary target. No pressure to spend.

Policy mechanics

HorizonLong-term; built to be boring and repeatable
CadenceFixed periodic tranches, not discretionary trades
Entry gateExternal sentiment threshold
Gate failsSkip, roll forward to the next decision point
Period ends gatedHold — never force an action
OverrideDocumented catalyst, single item only
Audit trailEvery decision stamped with the rule that fired

Why the gate exists at all

A fixed schedule deployed blindly acts the same at froth as it does at fear. Gating on sentiment isn't an attempt to time anything — it keeps dry powder for the periods when everything is on sale. And because a skipped amount rolls forward rather than expiring, a deferred period isn't lost capital, just a later entry. Over a long horizon the only difference is more shares for the same money.

Roadmap

Where this goes next

Ranked by how much manual work each item removes. Nothing here is committed — it's a working list.

Up next

  • Approval flow for draftsTurn a weekly draft into a one-tap confirm in chat — still agent-mediated, still nothing executed silently.
  • Full-coverage signal scanRun the catalyst checks across the whole tracked set every week, not only when the gate is closed.
  • Cost basis & distributions logTrack distributions and adjusted basis so the digest can report total return, not just day moves.

Later

  • Vault searchAsk questions across every note and digest the agent has ever written, instead of scrolling history.
  • Cross-domain reusePoint the same memory + schedule + integration pattern at an unrelated domain to prove the architecture generalises.
  • Live status dashboardA read-only view of job health, last run, and failure streaks — served as a static page.
Under the hood

Stack & operating model

AgentHermes Agent by Nous Research
RuntimeSelf-hosted, supervisor-managed, 24/7
Modeldeepseek-flash
Integrations3 MCP servers, HTTP and stdio
AuthOAuth for the live account, API keys for data
SchedulingCron with a heartbeat watchdog
DeliveryChat, with message-length-aware chunking
MemoryMarkdown stores + 64 lazy-loaded skills
# the whole operating loop, in one file
policy.md ← rules, versioned
└─ weekly-action ← drafts only
└─ context_from ─┐
daily-digest ← after the close
├─ brokerage MCP ← balances, positions, TWR
├─ market-data MCP ← closes, fundamentals
├─ news MCP ← headlines, calendars
└─ target config ← allocation + drift

→ one clear message, every morning

Guardrails baked in

Draft-only actions. Holiday suppression. A sentiment gate. Rollover instead of forced deployment. Every decision path records which rule fired — so any outcome can be traced back to the policy that produced it.