Skip to main content

Start the local Console

The open-source Console is a single-user local application. It includes the operator UI, API, migrations, and persistent SQLite storage in one Python package.

actionrail-console

The launcher:

  1. creates the data directory if it does not exist;
  2. applies database migrations;
  3. listens only on 127.0.0.1;
  4. opens http://127.0.0.1:8020 in the default browser.

No users, organizations, authentication flow, or sign-up are required for this local distribution.

Command options

actionrail-console --port 8020 --data-dir ~/.actionrail --no-open
OptionDefaultPurpose
--port8020Change the local HTTP port.
--data-dir~/.actionrailChoose where Console data and its generated secret key persist.
--no-openoffStart without opening a browser.
--versionPrint the installed Console version.

The process prints the resolved data directory and Console URL at startup. Press Ctrl+C for a normal shutdown.

What the Console manages

  • Agents — registered runtime identities, enforcement mode, coverage, and health;
  • Rules — policy and grounding configuration attached to tool arguments;
  • Sources — configured verification endpoints using SQLite, Postgres, MySQL, HTTP, or MCP adapters;
  • Activity — privacy-aware allow, hold, and block reports;
  • Reviews — human decisions for held actions;
  • Settings — local appearance and Console information.

The Console is not in the path of Source queries or tool execution. The SDK connects to Sources directly from the agent process.

Local trust boundary

The open-source Console binds to localhost and assumes the person with access to the machine is trusted. It is not a multi-user hosted deployment. Do not expose it directly to an untrusted network.

Persistent state

The default data directory is ~/.actionrail. Reusing that directory preserves agents, hashed agent keys, rules, Source metadata, decisions, and reviews between restarts.

Source secrets should appear only as references such as ${env:BILLING_DB_PASSWORD}. The environment variable resolves inside the SDK process; the credential value must not be stored in the Console.

Next, guard an operation with the direct Python runtime, or run the packaged LangGraph quickstart to register an agent and see a blocked action in Activity.