Barbarian Agent Agency · Infrastructure Overview · Updated 2026-07-25
One machine, four layers. Layers 1 and 2 are the box and its rails. Layer 3 is deterministic logic: computed answers, same input, same output, checkable. Layer 4 is fuzzy: LLM-led judgment that scores, drafts and proposes, but never executes on its own. Every behavior in the system lives in exactly one of these layers, and knowing which one is how you reason about it.
Layer 1 · System
Layer 2 · Tooling & Process (deterministic rails: schedule, transport, store)
Layer 3 · Python Code (deterministic logic: computed answers)
Layer 4 · Agentic Engagement (fuzzy: LLM-led judgment)
Coach Pass 2 (Haiku scores news 1 to 5 against the canon), Daily Takes writer + adversarial verify pass, Coach dialogue on Fundamentals + Scorecard. Judgment, not computation: numbers pass through from data verbatim.
Reads everything (memory + code mirrors), writes only records and proposals through the intake queue. Holds no git credential: the fuzzy layer holds no keys.
LLM output is advisory, never auto-executed. Deterministic rails execute on schedule; fuzzy judgment scores, drafts and proposes; Mark approves anything outbound or destructive. No Level 4 autonomy.
Proprietary risk dashboard. React + Cloudflare Worker proxying FastAPI data.
global-scorecard.riskdimensions.io
Multi-asset tear sheets, BTC optimizer, correlation analysis.
portfolio.riskdimensions.io
US debt, deficit, maturity stack & the compounding divergence. Cloudflare Worker: 20-min exploding trial gate (PIN-gated) plus admin PIN + same-origin sovereign API proxy.
sovereign.riskdimensions.io
Single-name research view. Tabs: General / Detail / Comps / Scatter / Bar-Line / Valuing Bitcoin / Bitcoin Network / Stablecoins / Historical Coach, plus a multi-turn Coach dialogue. CF Worker on the Sovereign gate pattern: FMP proxy + Anthropic Coach + Coin Metrics community (BTC/ETH/stablecoin metrics). Valuing Bitcoin tab carries a Cross-Network Comps table (BTC vs ETH vs stablecoins).
fundamentals.riskdimensions.io
The flagship product — a non-stationarity scanner. Same data, three lenses (over time / vs others / vs itself); Pulse / Rationale / Coach inherited from the Scorecard. Two buy lanes: direct + Kestrel for Firms (white-label; "Aviary" retired). Repo riskdimensions/Kestrel; app + landing pending a domain split before deploy.
kestrel.riskdimensions.io (provisioning)
Brand + marketing. Authored on the laptop, deployed via Wrangler (no git auto-deploy; verified 2026-07-25).
riskdimensions.io
The Macro Case for Bitcoin. Co-hosted with Bill.
markrconnors.substack.com
rd_readonly: SELECT on sovereign + barbarian allowlistseat_* scratch schema (write only there)barbarian.db_seats · mig 080barbarian.api_seats)CEO. Mark's thinking partner. Strategy, synthesis, drafting. Powered by Claude.
External Events Curator: PENDING
Pass 2 scorer with calibration loop — validates taxonomy, scores 1–5 against Mark's frameworks, writes Mark View editorial line at score ≥4. Canon built; SQL/n8n/report not yet wired.
COO. System health monitoring: weekly digest Mon 6:45 AM ET. Agent coordination, workflow audit, drift detection, sync log tracking. Reads all repos via mirrors, writes only via the intake queue. Runs the hermes-agent harness; code/paths/services keep the hermes slug on disk, the agent is Alfred in prose.
Scribe. Email ingestion, classification, CRM. Tiered triage output. Hot-intent bridge to BAAEC pipeline live. Contacts pipeline: Postgres master → Notion CRM view.
Emissary. Portfolio analytics, data pipelines, price feeds. Powers Scorecard. Haiku-based Pass 2 scorer live. Authors market_observations.ts.
Content production. Podcast, social, Substack support. Spec in progress.
Approval inbox. Agent proposes → Mark approves → n8n executes → Postgres logs. Handlers: notion_update, git_commit (re-wired to systemd 2026-06-23), email_draft. Pending: calendar_move, file_write. script_run ARCHIVED 2026-06-23 — unsafe, do not recreate.
The power is not in any single agent or piece of code. It is in the orchestration — and in Mark's ongoing engagement that compounds it over time.
Scored news compounds into thesis evidence. Each story is distilled to a market-moving action, united across its arc, and tested against RD's canonical frameworks — support or challenge.
Tables: story_acts · actions · action_frameworks · frameworks (16 lenses) · Agents: event_action_resolver · event_framework_mapper · framework_health_report
121 supporting / 3 challenging (2026-07-24)PENDING Calibration email not yet wired — canon + scorer live, automated weekly report is next.
The canon file is the intellectual moat. It encodes Mark's worldview — 40 years of market pattern recognition — in executable form. Every calibration session makes it more precise. This cannot be replicated without Mark's ongoing engagement. It is uniquely his.
The scoring rubric. Prose, not code. Edits here change Coach's behavior on the next run — no deploy, no ticket. docs/coach_externalevents_curator_canon.md
Planned: weekly email Mon 7:00 AM. 7-day aggregated view of Coach's scoring decisions vs. Mark's worldview. Surfaced / Buried / Logic Flags / Action items. Not yet wired.
Admin view at /news on the Scorecard. Full fmp_news table with score badges, Score≥4 filter, and Mark View on hover.
Every LLM-fronted surface, what model it runs, where its prompt lives, what data it reads, and what governs it. One substrate, many mouths: the interactive surfaces all read the same intel context, and the published takes feed back into it, so no surface can contradict another's published data.
GET /api/intel/context LIVEOne context, ~18 blocks, assembled per request and injected into every interactive Coach mode: data freshness (read first), editorial order (TradFi, then Bitcoin, then digital assets; never the word "crypto"), Mark's hot takes, the published Quantimental Takes with their verbatim evidence, prioritized principals, the linkage cascade (move to cause), the full outlier table (every flagged symbol, all asset classes), macro releases with results, G-4 cross-read, mega-cap earnings, player info, the live fiscal backdrop, rolling differentials, featured indicators, sector breadth, the forward 7-day calendar, the news backdrop, and the framework coda.
Anything a card publishes is visible to the Coach asked about it, by construction. Rules registry: docs/coach_doctrine.md (G1-G10, V1-V8); executable governor: agents/coach/coach_render_policy.py.
A separately gated Equity audit: country/domicile active-name counts, positive-cap counts, and aggregate issuer market capitalization. It is Equity-only and aggregate-only; it does not expose individual securities or API credentials.
Open secured Data Resources → Access remains separate from API-seat authorization.
| Surface | Runs | Model | Prompt source | Data inputs | Governance |
|---|---|---|---|---|---|
| RD Intel Pulse (free) | Scorecard worker, /api/coach scan |
Claude Sonnet | Coach Canon + scan template (worker) | scorecard summary + live RSS wire + full intel context | editorial order + vocabulary via intel text |
| Rationale (subscriber) | Scorecard worker, read | Claude Sonnet | Canon + read template | + Substack research digest + full intel context | same |
| Coach chat (client) | Scorecard worker, ask | Claude Sonnet | Canon + ask template | + user question, high-signal reads, forward calendar | same |
| Quantimental Takes | server take_generator, daily 19:00 ET |
Claude Haiku | shared governor + task prompt + adversarial verify pass | per-section outlier slice + framing + calendar catalysts (news gated off) | FULL: governor + verify + structural (verbatim numbers, lead-order tier sort, major-token gate, lookback discipline) |
| Fundamentals Coach | Fundamentals worker, /api/coach |
Claude Sonnet | own prompt + server-side FMP tool loop | live FMP + on-page data | not yet governed, no intel context (known gap) |
| Coach Pass 2 (batch) | server pass2_scorer, every 5 min |
Claude Haiku | curator canon | unscored news | feeds every surface above; raw scores never shown to clients |
| Barbarian / Intel Brief | server scout agents, daily | none (deterministic) | n/a | scored tables | n/a at generation |
Every judgment Mark has encoded — symbol weights, themes, player maps, couplet rules — is exposed here as a clickable tool, not a code file. Adjust a scaler, add a theme, re-route output: one click, no deploy. These tools compound the intel machine with every session.
docs/admin_index.htmlIntel Configuration
Symbol weights, player→symbol map, couplet rules, weather regimes, investment themes, output routing. DB-backed Phase 2 — changes take effect on next scorer run (≤5 min).
Tables: barbarian.intel_scalers · 166+ rows · 6 scaler types
Mark's active thesis + reference material from Notion. Feeds Coach Pass 2 context at score ≥4.
Tables: barbarian.hot_takes · Notion DB 111ba5a5...
Score thresholds driving Scorecard / SM / NBP Podcast. Currently greyed in Intel Engine CP. Trigger: when Producer agent is live.
Tables: barbarian.intel_scalers (output_routing type)
Monitoring & Universe
All tracked symbols — scorecard_active, scorecard_blocks routing, market cap, reference data. The universe definition.
Table: barbarian.securities · Route: /securities
Full fmp_news table — filter by score, tags, date, symbol. Coach Pass 2 output visible here. Events Calendar tab live (4/28).
Table: barbarian.fmp_news
G-10 eco releases + central bank meetings + earnings + IPO. Filter by region, event type, impact, ticker, sector. ~14k earnings rows tickered + sector-tagged via FMP profile (mig 020). Grouped by date with beat/miss surprise tracking. UI filter pending.
Tables: barbarian.macro_calendar · barbarian.fmp_symbol_meta (13.8k symbols, 2026-05-01)
n8n workflow inventory, cron schedule audit (UTC→ET), change log, golden snapshot status.
Tables: barbarian.workflow_snapshots · workflow_change_log
Weekly scoring drift view. Framework hallucination and voice drift detection. Trigger: after calibration loop is wired.
Table: barbarian.agent_integrity_log
Data Tables — Future Client-Facing Tabs
Live data sources powering the current admin monitors. Each will surface as a tab in a client-facing product.
FMP + 47-source RSS ingested every 4h. Pass 2 scored (Haiku), tagged by sentiment / player lens / framework theme. Currently surfaced in News Monitor admin view.
Table: barbarian.fmp_news · Admin: Scorecard /news ↗
Macro events, Fed meetings, Treasury auctions, earnings. Events tab live in Scorecard /news as of 4/28. Forward calendar for context-aware scoring.
Table: barbarian.macro_calendar · Admin: Scorecard /news → Events tab ↗
Earnings calendar from FMP `/api/v3/earning_calendar` — ~14k forward-14d rows with ticker + GICS sector (99.97% coverage). Sector enrichment via `barbarian.fmp_symbol_meta` (13.8k FMP equities profile-bulk, 2026-05-01). Feeds forward calendar context for Pass 2 scoring + sector-filterable client view (UI pending).
Tables: barbarian.macro_calendar (event_type='earnings') · barbarian.fmp_symbol_meta · Source: FMP profile-bulk + earning_calendar
Institutional knowledge base. CLAUDE.md, agent specs, frameworks, first principles, brand assets. Loaded into every AI session automatically. The permanent record of how RD thinks and operates.
Session-by-session learning. Feedback, preferences, project state, and validated decisions written to persistent memory files. Compounds across every Claude Code session — the system gets smarter with every interaction.
The foundational structure of the Intelligence Engine. Institutional memory is written once and feeds
both models and harnesses: the laptop CLIs (Claude, Codex, Gemini) and Alfred, the server-side agent
harness, each run a frontier model booted from the same corpus. Three shared source files carry the operating context: agents_primer.md
(how to work: hard rules, memory lane, digest format), agents_architecture.md (what you are
working on: products, infra, endpoints) and agents_rights_*.md (rights, forked by surface
autonomy, never by vendor). The memory cards in memory/*.md carry the compounding knowledge.
Each model has its own entry file, but the entry file is only a loader: the content behind it is
identical everywhere.
One corpus in rd-memory: memory cards (one file per fact, indexed by MEMORY.md), the
primer, the architecture map, the rights files. No model holds a private fork of doctrine. Edits land
in the source files only; the generated copies are never edited by hand.
Claude: CLAUDE.md pulls the shared files live via @import
at every session start, so it can never go stale. Codex reads AGENTS.md,
Gemini reads GEMINI.md: both generated snapshots, assembled from the same
sources by context.ps1. Alfred reads an hourly read-only mirror on the
server (alfred_context_mirror.sh).
Any Claude session with rd-memory as primary repo auto-loads the brief. Codex launches through
start_codex.ps1, which fast-forwards its dedicated git worktree (branch
codex-work), regenerates the brief and copies it in, so Codex never boots blind. However
many sessions a model has open, they all read the same memory.
Generated briefs carry a sha256 stamp of their sources; check_guard_liveness.ps1 turns
RED when a snapshot drifts. Claude sessions are denied blind stages at the tool call (hooks); Codex,
which has no per-command permission layer, is contained in its own worktree so a sweep can only collect
its own work. Prevention where possible, containment where not.
docs/claude_memory_architecture.htmldocs/counterparty_risk_architecture.htmlliveness/current.md (generated, timestamped, fails to UNKNOWN, never a stale snapshot) through the guarded intake queue · docs/liveness_artifact_spec.md
Cross-surface memory pipeline. Every CLI/Cowork/Chat session ends with close → Coach scores items 1–5 →
SQL INSERT to barbarian.memory_intake_queue → the native drainer (barbarian-memory-drainer.timer, every 3 min; the n8n runner retired 2026-07-06) claims rows,
routes by score and writes files to /srv/barbarian/rd-memory, then commits, rebases and pushes in one atomic pass (the /mnt/rd-memory symlink still resolves). Laptop git pull → all surfaces pick up new memory. Notion is no longer in the autonomous path; it stays
only for human-decision queues (BAAEC, Clerk ambiguity).
Surface load: CLI auto-loads CLAUDE.md + memory/*.md from disk ·
Cowork loads CLAUDE.md via Global Instructions + /loadrd · /loadops · /loadvoice · /loadframeworks skills ·
Chat uses Project Knowledge upload (RD Operations, New Barbarians). Manual refresh on Cowork + Chat when CLAUDE.md changes.
Spec: docs/cowork_to_cli_sync_spec.md (v3) · docs/cowork_session_closer.md (v2) · Migration: sql_backfill/019_memory_intake_queue.sql
Closed-loop, pull-only for code. Author on the laptop → push to GitHub → the server pulls. Both memory (rd-memory-pull.timer) and agent code (barbarian-agency-pull.timer, barbarian-api-pull.timer) auto-pull hourly (--ff-only, as user barbarian) — live since 2026-06-27. The only sanctioned server→GitHub write is rd-memory (memory intake loop). Never live-edit agent code on the server. SSH keyless replaced the retired SMB/robocopy path; the old LAN IP is dead for WSL services.
113 tables + 16 views (barbarian) · Clerk · Analyst · Scout · Mixed · Notion CRM layer · External sources · All data flows · ERD may lag schema additions