Shared base library for the Solo Founder OS agent stack — Source/MetricSample, baseline w/ rotation, HTTP retry, Anthropic client, notifiers (ntfy/Telegram/Slack), brief composer, testing helpers.
Project description
solo-founder-os
English | 中文
The 6-layer self-evolving agent stack a one-person company actually runs. Local-first. Zero cloud infra. Sub-$0.06/week autonomous spend.
What it does
Solo Founder OS is the shared library + CLI suite that runs the 11-agent indie-founder stack. Five things no other agent platform does together:
- Reads plain Python agents. No SDK injection. Agents write JSONL/markdown
to
~/.<agent>/; SFOS tails those files. No re-instrumentation. - Closes the L1↔L4↔L5↔L6 self-improving loop end-to-end. Reflexion logs feed an evolver that opens PR-gated proposals; an eval judge surfaces quality drift; a council deliberates on severe drops; the council's conclusions flow back into the evolver's Haiku prompt. All on cron.
- Local-first observability.
sfos-uiis a Streamlit dashboard reading the same JSONL files — no Phoenix instance, no Langfuse Docker, no LangSmith account. - Cron-aware, not request-aware. Built for agents that wake up Sunday morning, not real-time chatbots. Avoids the alert-fatigue anti-pattern.
- Solo-founder framing. "What needs you today" inbox, not enterprise team/project hierarchy.
Quick start
pip install 'solo-founder-os[anthropic,ui]'
# Schedule the weekly self-improvement loop on launchd:
sfos-cron install # pre-flight will refuse if SFOS isn't pip-installed
# Sun 08:00 sfos-eval judge skills with Sonnet
# Sun 08:30 sfos-council multi-perspective on severe drift
# Sun 09:00 sfos-evolver Haiku synthesizes PR proposals
# Sun 09:30 sfos-retro cross-agent weekly digest
# Open the local dashboard:
sfos-ui
# → http://localhost:8501
# Sync state across machines via git:
sfos-sync init git@github.com:you/sfos-state.git
sfos-sync push
That's it. No accounts. No cloud. Cost ceiling $0.06/week.
Production install (from source)
Until PyPI Trusted Publishing is configured per repo, install editable from your local clone:
git clone https://github.com/alex-jb/solo-founder-os.git ~/Desktop/solo-founder-os
cd ~/Desktop/solo-founder-os
pip install --user -e '.[anthropic,ui]'
pip install -e matters: launchd's neutral CWD won't see a dev tree
otherwise. sfos-cron install runs a sterile-import pre-flight that
refuses to write plists when this hasn't been done. Pass
--ensure-pip-install to make it auto-fix:
sfos-cron install --ensure-pip-install
If your stack agents' console scripts (e.g. payments-agent,
vc-outreach-agent) don't appear on PATH after install, the binaries
landed in ~/Library/Python/<version>/bin/ which most shells don't
include. Easiest fix:
ln -s ~/Library/Python/3.9/bin/payments-agent ~/.local/bin/
# (repeat per agent, or symlink the whole dir)
The 6-layer self-improving loop
L1 Reflexion ─┐ log_outcome(agent, task, FAILED, signal)
L2 Supervisor ─┤ launchd cron driver
L3 Skills ─┤ record_example(skill, inputs, output)
L4 Evolver ─┼─→ Haiku synthesizes PR proposals from
L5 Council ─┤ L1 patterns + L6 drift, with L5 council
L6 Eval (Sonnet) ─┘ deliberation injected as prompt context
Every Sunday morning the loop runs:
- 08:00 —
sfos-evaljudges the last 5record_examplerows per skill using a 5-axis Sonnet rubric (clarity / specificity / voice / accuracy / completeness). Persists per-skill scores. Detects drift > 0.5 vs prior week. - 08:30 —
sfos-council --auto-from-driftconvenes aBUG_TRIAGEmeeting (3 perspectives + 1 synthesis) for any skill whose mean dropped0.7. Saves notes to
council-meetings/. - 09:00 —
sfos-evolverscans reflexion logs for ≥3× recurring failure patterns AND reads L6 drift signals. For each, it asks Haiku for a concrete fix. If the L5 council deliberated on this skill, the synthesis is injected into the Haiku prompt as additional context — the patch reflects multi-angle reasoning, not one-shot guess. Output: markdown artifacts inevolver-proposals/(PR-gated; never auto-merged). - 09:30 —
sfos-retrowalks every agent's reflexion / preference / skill data and produces ONE markdown digest answering: who's running, what's each failing at most, which skills are bubbling up, which variants are winning their bandits.
Costs: ~$0.04/week for evals + ~$0.01/week for evolver + ~$0.005/week for council meetings (when drift is severe). Total <$0.06/week.
ICPL preference learning through the Inbox
The sfos-ui Inbox tab is the canonical HITL approval surface. When you
edit a draft before clicking ✅ Approve, the diff is logged as an ICPL
(In-Context Preference Learning) pair to ~/.<agent>/preference-pairs.jsonl.
Next time the same agent drafts a similar task, preference_preamble()
pulls those pairs as few-shot exemplars in the system prompt. The agent
drifts toward your voice without you writing a single new prompt.
Task disambiguation: task field in frontmatter wins; falls back to
platform (marketing-agent uses this for X / LinkedIn / Reddit), then
kind, then <slug>-draft.
CLI suite
| CLI | What it does |
|---|---|
sfos-doctor |
Health-check all known agent dirs |
sfos-supervisor |
L2 — find work for agents (auto-trigger) |
sfos-evolver |
L4 — propose PR-gated patches from reflexion + drift |
sfos-council |
L5 — multi-agent deliberation; --auto-from-drift mode |
sfos-eval |
L6 — Sonnet judges record_example rows |
sfos-retro |
Cross-agent weekly digest |
sfos-bus |
Cross-terminal markdown broadcast |
sfos-inbox |
HITL governance rail (CLI alternative to sfos-ui) |
sfos-cron install |
Schedule the 4-job Sunday loop on launchd |
sfos-ui |
Local Streamlit dashboard (4 tabs) |
sfos-sync |
Multi-machine git-based sync of ~/.solo-founder-os/ |
The stack (11 agents, 7 canonical layers)
| Layer | Agent |
|---|---|
| 1. Content / marketing | orallexa-marketing-agent |
| 2. Customer support | customer-support-agent |
| 3. Customer discovery | customer-discovery-agent |
| 4. Customer outreach (cold sales) | customer-outreach-agent |
| 5. Investor outreach | vc-outreach-agent |
| 6. Analytics + cost | funnel-analytics-agent, cost-audit-agent |
| 7. Monetization | payments-agent |
| (cross-cutting) | build-quality-agent, bilingual-content-sync-agent |
Each agent is its own pip package + CLI + optional MCP server. They share this library for HITL queue, Anthropic client, reflexion logging, skill distillation, and the L1–L6 loop primitives.
Test isolation
Set SFOS_TEST_MODE=1 in your test suite's conftest.py:
# tests/conftest.py
import os
os.environ.setdefault("SFOS_TEST_MODE", "1")
This gates log_outcome, record_example, and log_edit from writing to
~/.<agent>/ during pytest. Without it, agent test fixtures pollute
production reflexion data and feed false-positive proposals to L4 evolver.
(All 8 stack agents already adopt this.)
Privacy
- All state lives in
~/.<agent>/and~/.solo-founder-os/. sfos-syncships a default.gitignorethat excludesusage.jsonl,cron-logs/,cron/,bandit.sqliteso Stripe-shaped tokens, cost logs, and per-machine state never reach a remote git repo.- The Anthropic client logs cost (input/output tokens) to
usage.jsonl— never the prompt content. - The L4 evolver's safety gate refuses any patch touching
auth,secret,credential,smtp,stripe,billing,anthropic_client, ormigrationspaths even if Haiku tries to suggest them.
Why these design choices
- Streamlit, not React/FastAPI — research showed solo founders use
~30 min/day across 2 batches; real-time monitoring is alert-fatigue
anti-pattern at this volume.
st.fragment(run_every="3s")gives "live feel" via local polling, no second process. - Vertical timeline of file events, not chat-bubble metaphor — SFOS agents communicate ASYNCHRONOUSLY via files. Chat bubbles would misrepresent the architecture.
- Default cron threshold 0.7 for council, 0.5 for evolver — councils cost ~5 Haiku calls each. Stricter trigger keeps weekly autonomous spend under $0.06 even if drift is constantly firing.
- PR-gated, never auto-merged — the evolver writes markdown artifacts for review. Hard whitelist + blocklist on what files can be touched.
Status
v0.26 (2026-05-02). Production loop is live on the maintainer's machine; first auto-fire 2026-05-04 Sunday. 504 tests across the library; 1100+ tests across the full 11-agent stack.
License
MIT. Use freely.
🧩 Part of the Solo Founder OS stack
A growing collection of MIT-licensed agents that share solo-founder-os as their base — Source/MetricSample contracts, HITL queue, AnthropicClient, notifiers, scheduler. Each agent is independently useful; together they cover the full solo-founder workflow.
| Agent | What it does |
|---|---|
| build-quality-agent | Pre-push diff reviewer + local build runner — catches CI-killing changes before they ship |
| customer-discovery-agent | Reddit pain-point scraper + Claude clustering for product validation |
| funnel-analytics-agent | Daily brief + real-time alerts across 9 sources (Vercel, GitHub, Supabase, etc.) |
| vc-outreach-agent | Investor cold email drafter with HITL queue + SMTP sender |
| cost-audit-agent | Monthly bill audit across 6 providers with dollar-tagged waste findings |
| bilingual-content-sync-agent | EN ⇄ ZH i18n diff + Claude translate + HITL apply |
| orallexa-marketing-agent | AI marketing agent for OSS founders — auto-generate platform-specific marketing posts |
Each agent's own row is omitted from its README. Install whichever solve real problems for you.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file solo_founder_os-0.27.4.tar.gz.
File metadata
- Download URL: solo_founder_os-0.27.4.tar.gz
- Upload date:
- Size: 160.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c0ff3cbacf713cf0e17d5bda0753711cd4a01b407ca077c615f563c6f4c69c6c
|
|
| MD5 |
768d7cfb01210b672cf209b07e12438f
|
|
| BLAKE2b-256 |
b06212fe57a4ca48ae977890800461a4a0795b856b862308aa656fbe0a4cd716
|
Provenance
The following attestation bundles were made for solo_founder_os-0.27.4.tar.gz:
Publisher:
release.yml on alex-jb/solo-founder-os
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
solo_founder_os-0.27.4.tar.gz -
Subject digest:
c0ff3cbacf713cf0e17d5bda0753711cd4a01b407ca077c615f563c6f4c69c6c - Sigstore transparency entry: 1438944414
- Sigstore integration time:
-
Permalink:
alex-jb/solo-founder-os@26e01fdce06b1fa5437c2e88a17109554bfa6f91 -
Branch / Tag:
refs/tags/v0.27.4 - Owner: https://github.com/alex-jb
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@26e01fdce06b1fa5437c2e88a17109554bfa6f91 -
Trigger Event:
push
-
Statement type:
File details
Details for the file solo_founder_os-0.27.4-py3-none-any.whl.
File metadata
- Download URL: solo_founder_os-0.27.4-py3-none-any.whl
- Upload date:
- Size: 120.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
71b232d6f8b97dfc0feaf592ef81ded6804eb934f6b9af2889c19c1e1e2087bf
|
|
| MD5 |
5c6b0bbedca5ae7e6314a4ec875eece3
|
|
| BLAKE2b-256 |
50698976c79d2cf6ce2834b202c9ed00ff5f2e013b1bdba3b77e70eb5183a456
|
Provenance
The following attestation bundles were made for solo_founder_os-0.27.4-py3-none-any.whl:
Publisher:
release.yml on alex-jb/solo-founder-os
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
solo_founder_os-0.27.4-py3-none-any.whl -
Subject digest:
71b232d6f8b97dfc0feaf592ef81ded6804eb934f6b9af2889c19c1e1e2087bf - Sigstore transparency entry: 1438944419
- Sigstore integration time:
-
Permalink:
alex-jb/solo-founder-os@26e01fdce06b1fa5437c2e88a17109554bfa6f91 -
Branch / Tag:
refs/tags/v0.27.4 - Owner: https://github.com/alex-jb
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@26e01fdce06b1fa5437c2e88a17109554bfa6f91 -
Trigger Event:
push
-
Statement type: