OPENLOTUS

OpenLotus
  • For your agent
    vibe-to-ship skillCoreThe routine your agent runsConnect your agentMCP setup in 3 steps
    Where state shows up
    Progress MapYour project state, visualizedDashboardYour week, summarizedAgent WorkspaceTalk with the map loaded
  • Learn
    DocsNewFull guide, plain languageResearchMission, sources, analysisAgent primer (llms.txt)Point your agent at itHow it worksPair, watch, actFeaturesMap, dashboard, workspacevibe-to-ship guideGraph engineering, method deep-diveFAQsQuestions, answered
    Do
    vibe-to-ship guideGraph engineering, method deep-diveNew projectSet up in minutesPricingSimple, honest plans
  • PrivacyYour data, yoursTermsThe fine printContacthello@openlotus.ioGitHubOpen-source the skill
For your agent
  • vibe-to-ship skillThe routine your agent runs
  • Connect your agentMCP setup in 3 steps
Where state shows up
  • Progress MapYour project state, visualized
  • DashboardYour week, summarized
  • Agent WorkspaceTalk with the map loaded
Learn
  • DocsFull guide, plain language
  • ResearchMission, sources, analysis
  • Agent primer (llms.txt)Point your agent at it
  • How it worksPair, watch, act
  • FeaturesMap, dashboard, workspace
  • vibe-to-ship guideGraph engineering, method deep-dive
  • FAQsQuestions, answered
Do
  • vibe-to-ship guideGraph engineering, method deep-dive
  • New projectSet up in minutes
  • PricingSimple, honest plans
  • PrivacyYour data, yours
  • TermsThe fine print
  • Contacthello@openlotus.io
  • GitHubOpen-source the skill
Documentation

The manual for building on durable state.

OpenLotus keeps your project state in one live record — plans, decisions, evidence, and drift your agent can read over MCP. Your agent remembers what you decided, where reality drifted, and what to do next — without you re-explaining. This guide explains everything in plain language, with code you can copy.

Connect your agentvibe-to-ship skill

No jargon, no theory — just how to use it today.

On this page
Two ways to get set up

With the skill: say “set up OpenLotus” and it does the three files. Without it: copy the three blocks below — same result, one time. Pick one.

What is OpenLotus

Durable project state, independent of your agent. Not a chatbot, not a dashboard — the state layer that keeps work coherent.

The skill works great on its own — it organizes work so your agent can handle more at once. Paired with OpenLotus state, every plan it makes is anchored in your real project and every result lands where you can see it.

  • Progress map — the state tree
  • Dashboard — your week, verified
  • Workspace — talk with the map loaded
Progress mapLive · MCP
goal: ship the loop
decisions · 12
drift · 0%

Connecting your agent

Two ways to get connected. Let your agent configure itself, or set it up by hand in 2 minutes.

OpenLotus connects your local agent to your cloud project state through the Model Context Protocol (MCP).

Option A · AI-Assisted Setup (Zero Manual Work)

Just paste this prompt into your agent:

Read https://www.openlotus.io/llms.txt and set up OpenLotus for this project. Configure .mcp.json to run openlotus agent, add the AGENTS.md rules, and guide me through pairing.

Your agent reads the full specification from llms.txt, registers the MCP server in your config, adds the memory rules to your repository, and helps you complete pairing.

Option B · Manual Setup (3 Steps)
1Pair your repo

Run in your terminal at your repo root. Opens your browser to select or create a project.

npx openlotus pair
2Add the MCP server & restart agent

Add to your MCP config file (.mcp.json, .cursor/mcp.json, or opencode.json), then restart your agent.

{
  "mcpServers": {
    "openlotus": {
      "command": "npx",
      "args": ["openlotus", "agent"]
    }
  }
}
3Add rules to your repo

Paste into AGENTS.md or CLAUDE.md in your repo root so your agent records decisions and monitors drift.

AGENTS.md block (file, not chat)
## OpenLotus loop (standing rules)

Shared memory lives in OpenLotus via MCP tools: get_memory, get_reality,
get_drift, record_decision, record_constraint, report_failure, record_lesson,
write_scratchpad, read_scratchpad, manage_tasks, dismiss_drift,
resolve_failure, resolve_risk. The founder sees the same data on the web
dashboard. These rules apply to EVERY action and every prompt, not just
session start.

CLI commands (local, run in your repo):
- npx openlotus pair       one-time: link this repo to a cloud project
- npx openlotus bootstrap  one-time: seed the map from README/PROGRESS/AGENTS
- npx openlotus sync       push a fresh reality snapshot to the dashboard
- npx openlotus status     print latest observed state + drift
- npx openlotus agent      MCP server over stdio (what your harness launches)
- npx openlotus version    print the installed CLI version

1. Boot: at the START of any work session or non-trivial prompt, call
   get_memory + get_drift before planning anything. If findings exist, fix
   blockers and risks before new work. Then run npx openlotus sync and call
   get_drift again to confirm the finding cleared. Do not dismiss
   reality-derived findings; dismiss only findings reality cannot clear,
   such as an unsupported claim you have now backed with evidence. If the
   map has no goal yet, set one first. A project without a goal is not set up.
2. Decisions: whenever a direction choice is made (stack, scope, schema,
   tradeoff), call record_decision immediately with a title and why. Do not batch.
3. Founder notes: whenever the founder says something worth keeping that is
   not yet a decision, task, or constraint (a stray idea, a preference,
   something to check later), call write_scratchpad immediately. Check
   read_scratchpad before asking the founder something they may already
   have answered.
4. Tasks: track real work with manage_tasks. Create on starting, update
   status as it moves (queued/running/done/failed/pending), set due dates,
   mark done the moment it is done. Never leave a finished task open.
5. Reality check: after completing meaningful work, call get_reality and
   mention surprises (unexpected dirty files, TODO spikes). npx openlotus
   sync pushes the same snapshot to the dashboard.
6. Close the loop: after a fix, run npx openlotus sync and call get_drift; a
   reality-derived finding clears itself. Call dismiss_drift only for
   findings reality cannot clear. When a recorded failure is fixed, call
   resolve_failure. When a risk is handled, resolve it. Fixed items must
   disappear from the record. Never leave solved problems looking open.
7. PROGRESS.md: update after each milestone or plan change so the file
   matches the map. If they disagree, the map wins and the file gets fixed.
8. Failures and constraints: when an approach fails, call report_failure
   (never retry the same strategy silently). When a boundary is set, call
   record_constraint. Never bury constraints or failures in decision prose.
9. Stale over silent: if context is missing, call get_memory again instead
   of guessing. Never invent project state from chat history alone.

Append this to AGENTS.md at the repo root. Claude Code also reads it via @AGENTS.md in CLAUDE.md.

Give your agent the full picture in one link

llms.txt is a plain-language primer on OpenLotus — what the loop is, how supervision works, how to pair and use MCP. Paste it to any agent and it understands OpenLotus without you explaining anything.

Open llms.txt
  • One prompt does it all with the vibe-to-ship skill
  • One command pairing with browser auth
  • Standard MCP config works across Cursor, Claude Code, & OpenCode
  • Permanent memory via repo markdown rules
How It Connects
1. Local Reality
Senses git commits, branches, dirty state, and file structure without sending secrets.
2. Shared Memory
Reads and appends to your ProgressMap so your agent never forgets past architectural decisions.
3. Live Drift Detection
Alerts your agent when code drifts away from planned milestones before bad code gets merged.

Pairing a project

Browser-based, no flags. Run one command, pick a project on the web.

Run npx openlotus pair — it opens your browser to /pair. Log in — or create an account if you don’t have one — then pick a project.

Existing project? Choose it from the list. This repo is now linked to it.
New? Click “New project”, name it, and we link it automatically.

No --email --password flags. The browser handles auth; the CLI just waits for your pick.

  • Auth URL opens in your browser
  • Creates a new project if you need one
  • Links this local repo to your choice
PairingWaiting for browser…
Acme · saasSelect
+ New project
CLI: npx openlotus pair → browser → pick → done.

What is mcp.json?

A small config file that tells your agent how to start OpenLotus.

Think of it as a launcher. It says: “when you start, run this command to talk to OpenLotus.” You create it once. After that the agent has the tools in every session.

mcp.json → npx openlotus agent → your agent sees get_memory, get_drift, get_reality, record_decision, and the rest of the tool catalog

The same snippet lives in the homepage “Connect your agent” section. The skill writes the file for you if it's missing.

Permanent Memory Rules

Append these standing memory rules to your repo rules file so your agent records decisions and monitors drift automatically:

AGENTS.md block (file, not chat)
## OpenLotus loop (standing rules)

Shared memory lives in OpenLotus via MCP tools: get_memory, get_reality,
get_drift, record_decision, record_constraint, report_failure, record_lesson,
write_scratchpad, read_scratchpad, manage_tasks, dismiss_drift,
resolve_failure, resolve_risk. The founder sees the same data on the web
dashboard. These rules apply to EVERY action and every prompt, not just
session start.

CLI commands (local, run in your repo):
- npx openlotus pair       one-time: link this repo to a cloud project
- npx openlotus bootstrap  one-time: seed the map from README/PROGRESS/AGENTS
- npx openlotus sync       push a fresh reality snapshot to the dashboard
- npx openlotus status     print latest observed state + drift
- npx openlotus agent      MCP server over stdio (what your harness launches)
- npx openlotus version    print the installed CLI version

1. Boot: at the START of any work session or non-trivial prompt, call
   get_memory + get_drift before planning anything. If findings exist, fix
   blockers and risks before new work. Then run npx openlotus sync and call
   get_drift again to confirm the finding cleared. Do not dismiss
   reality-derived findings; dismiss only findings reality cannot clear,
   such as an unsupported claim you have now backed with evidence. If the
   map has no goal yet, set one first. A project without a goal is not set up.
2. Decisions: whenever a direction choice is made (stack, scope, schema,
   tradeoff), call record_decision immediately with a title and why. Do not batch.
3. Founder notes: whenever the founder says something worth keeping that is
   not yet a decision, task, or constraint (a stray idea, a preference,
   something to check later), call write_scratchpad immediately. Check
   read_scratchpad before asking the founder something they may already
   have answered.
4. Tasks: track real work with manage_tasks. Create on starting, update
   status as it moves (queued/running/done/failed/pending), set due dates,
   mark done the moment it is done. Never leave a finished task open.
5. Reality check: after completing meaningful work, call get_reality and
   mention surprises (unexpected dirty files, TODO spikes). npx openlotus
   sync pushes the same snapshot to the dashboard.
6. Close the loop: after a fix, run npx openlotus sync and call get_drift; a
   reality-derived finding clears itself. Call dismiss_drift only for
   findings reality cannot clear. When a recorded failure is fixed, call
   resolve_failure. When a risk is handled, resolve it. Fixed items must
   disappear from the record. Never leave solved problems looking open.
7. PROGRESS.md: update after each milestone or plan change so the file
   matches the map. If they disagree, the map wins and the file gets fixed.
8. Failures and constraints: when an approach fails, call report_failure
   (never retry the same strategy silently). When a boundary is set, call
   record_constraint. Never bury constraints or failures in decision prose.
9. Stale over silent: if context is missing, call get_memory again instead
   of guessing. Never invent project state from chat history alone.

Append this to AGENTS.md at the repo root. Claude Code also reads it via @AGENTS.md in CLAUDE.md.

  • One JSON snippet, one path to fix
  • Makes the tool catalog appear in every session
  • Skill writes it if it’s missing
mcp.json
{
  "mcpServers": {
    "openlotus": {
      "command": "npx",
      "args": ["openlotus", "agent"]
    }
  }
}

Save it at the path your harness reads (.mcp.json, .cursor/mcp.json, or opencode.json), then restart the agent.

The vibe-to-ship skill

A 5-step routine your agent follows to ship without drift — built from real shipping expertise, packaged as graph engineering.

Beat 1 — Boot: connect to state, load guardrails.
Beat 2 — Triage: compare your stated plan to git reality.
Beat 3 — Act: fan out workers, dedupe, synthesize.
Beat 4 — Verify: fresh-context skeptics + compiler anchors.
Beat 5 — Learn: commit the updated tree.

If a triage shows nothing actionable, the skill stops in ~5k tokens — it doesn’t burn credits running nothing.

Read the full skill guide →
  • Open-source, drop-in for Claude Code & OpenCode
  • If setup missing, Beat 1 finishes pairing first
  • Manual or agent-driven — your choice
5-beat loop
1. Bootconnect
2. Triagereconcile 4 findings
3. Actdiamond: 15m→15s
4. Verifyskeptics
5. Learndebrief

What triage does & why

Triage is the honest check before your agent moves.

It compares what you said you’d do (the tree) to what actually happened (git, dirty files, TODOs) and outputs a High / Watch / Noise list.

High — fix today
Watch — monitor
Noise — looked at, ignored

Without triage, agents invent a plan. With it, they start from the last verified reality.

Run with: “Run vibe-to-ship triage” or let the Beat 1 auto-check run.

  • Catches drift before acting
  • Early exit when nothing actionable
  • Reconciles declared vs observed
Triage output
High — pairing not set up
Watch — TODO debt 14 markers
Noise — submodule commits

Hooks & safety net

Hooks enforce the loop even when the agent forgets.

Optional safety net: your agent automatically checks for drift when it starts, so it flags problems before it acts. No extra cost, works even if the agent ignored the earlier rules.

{ "hooks": { "SessionStart": ["npx openlotus status"] } }

There’s also a built-in safety net without hooks: if the map drifts from git (e.g., 12 uncommitted files while the milestone claims done), the next get_drift flags it as risk. Drift is information, not failure.

  • SessionStart: prints drift at boot
  • Budget cap: switches to report-only at 80%
  • Max 3 fix attempts, then escalate
Safety net without prompting
Daily triage2 runs / 100k tokens
Budget throttleearly exit <5k tokens

CLI reference

Six commands, one binary. Everything the agent needs, plus the two one-time setup commands.

Run any of them with npx openlotus <command> inside a paired repo. Environment overrides: OPENLOTUS_EMAIL, OPENLOTUS_PASSWORD, OPENLOTUS_BASE_URL.

Agent contract on every prompt: read state first, set the project goal if blank, write founder notes to the scratchpad, track work as tasks with statuses and due dates, and close addressed drift plus fixed failures and risks so solved items disappear.

  • Same binary serves CLI and MCP
  • sync/status never block your agent
  • bootstrap makes the map useful on day one
openlotus CLI
pairlink this repo to a project (browser flow)
bootstrapseed map from README/PROGRESS/AGENTS
syncsense + push reality, print drift
statuslatest observed state + drift
agentMCP server over stdio (what mcp.json runs)
versionprint CLI version

Timestamps

Every action is stamped. No anonymous edits.

Milestones, decisions, risks, evidence, milestones — each carries createdAt. Snapshots carry capturedAt + syncCount. Reviews carry lastReviewAt.

You see them as relative times in the dashboard and absolute times when you expand a node.

  • Milestones · decisions · evidence: createdAt
  • Snapshots: capturedAt + syncCount
  • Reviews: lastReviewAt, trajectory
State row
Ship durable state2026-08-22 12:30
Evidence: 5 invited visitors14m ago

Permanent history

Your full history, in full detail. Forever.

Every decision, constraint, and lesson stays exactly as recorded — on every plan, including Free. No event budgets, no expiry, no summarizing old entries away to fit a tier. We never punish persistence.

  • Full detail forever, on every plan
  • No event budgets, no expiry
  • Search your whole record
Day 1Day 1,000
Full detailFull detail

Same detail on day 1 and day 1,000 — nothing expires, nothing compacts.

Security

Your code never leaves your machine.

OpenLotus reads your work’s shape — what changed, what you decided, where things drift — not your files. get_reality sends counts and branch names, never file bodies. Tools are capability-scoped (e.g., github.read), never “all access.”

  • Never reads file contents
  • Per-tool capability checks
  • Pairs are per-project, not per-org
Tool policy
github.readallowed
filesystem.writedenied
OpenLotus

Your agent never starts from zero. You always know what it did.

Product

  • Progress Map
  • Dashboard
  • Agent Workspace
  • Pricing

Company

  • Workspace
  • New project
  • Changelog

Resources

  • Research
  • vibe-to-ship guide
  • FAQs
  • CLI pairing
  • Community

Contact

  • hello@openlotus.io
OpenLotus

© 2026 OpenLotus. All rights reserved.

GitHubXPrivacyTerms