Skip to content

The engine on its own

arvo-engine is the whole of Arvo except the window. It runs studies, keeps the data library, holds credentials, hosts live sessions and serves a local API — and it is a complete tool by itself. The desktop window is one client of that API, not the product.

If you already work in a terminal, an editor, or an agent, you may never need the window.

What it gives you without a GUI

  • Research with a verdict

    Run a study over a parameter search, selected out of sample and deflated against how many things were tried. The answer is Supported, NotSupported or Inconclusive, with advice you read before any number. Concepts →

  • A pinned data library

    Bars are fetched to files and pinned by content hash. A study never reads a vendor live, so the same study over the same library gives the same answer next year. Configure →

  • Live and paper sessions

    A finding's rule runs against a venue, audits its book against the broker every poll, freezes on a disagreement and waits for you. One kill switch. Command line →

  • An agent surface that cannot trade

    arvo-mcp-server exposes research over MCP. No tool names a credential, a source or an order. With Claude Code →

The four clients

Everything talks to one engine per user, over gRPC on loopback, behind a token the engine writes to engine.json.

flowchart TD
    E["arvo-engine<br/><small>studies · library · credentials · sessions</small>"]

    CLI["Command line<br/><small>arvo-engine session …</small>"]
    MCP["arvo-mcp-server<br/><small>Claude Code, Codex, any MCP client</small>"]
    PY["Python package<br/><small>arvo-client on PyPI</small>"]
    WIN["The window<br/><small>arvo-desktop</small>"]

    CLI --> E
    MCP --> E
    PY --> E
    WIN --> E

    E --> LIB[("Project folder<br/><small>data · evidence · rulesets · sessions</small>")]
    E --> KC[["OS keychain<br/><small>credentials, never in a file</small>"]]
    E --> V["Venues and vendors<br/><small>Alpaca · Robinhood · Yahoo</small>"]

    style E fill:#1f6feb,stroke:#1f6feb,color:#fff

The engine outlives every one of them. Close the window, end the agent's session, log out of the terminal — a schedule still runs and a live session still trades. That is a decision, not an accident: ADR-0018.

Two boundaries worth knowing before you start

The agent surface cannot reach money. arvo-mcp-server holds a token for the research service alone. A test in the engine enumerates every offered tool by name and fails the build if one appears whose name contains Fetch, Order, Trade, Share, Import, Key, Sign, Session or Halt. The guarantee is structural, not a policy in a prompt.

Real money needs a paper record first. A live executor is refused unless the same finding has run on paper for at least five days without diverging from its backtest. The gate is in the engine, so the CLI, the window and an agent are all held to it.

Where to go next

Install it, verify it, remove it Install
The project folder, engine.json, tokens, environment Configure
Every verb, with worked examples Command line
Attach it to Claude Code With Claude Code
Drive it from an editor and a terminal With VS Code
End-to-end runs you can copy Examples