Skip to main content

Norns

Agents work the columns. You decide what moves. Kanban orchestration with human gates.

Named after Urd, Verdandi, and Skuld.

CI PyPI Downloads Python Tests Coverage Ruff License: MIT

v0.0.3 · Site: yanchao1999.github.io/Norns · Backlog: ROADMAP.md

Downloads

norns-ide PyPI downloads trend

Install

Python 3.12+. The command is norns; the package is norns-ide (norns is taken on PyPI).

uv tool install norns-ide
# or
python3 -m pip install norns-ide

norns init    # prints an admin password; also stored in ~/.norns/config.toml
norns run     # http://127.0.0.1:8765

From this checkout (needs Node.js 20+ or Docker once, to compile the UI):

uv tool install .
norns init && norns run
uv sync --extra dev && uv run pre-commit install   # format, lint, tests on commit

norns run --no-window starts the server without a browser. Data lives under ~/.norns (--home / NORNS_HOME). norns init --force replaces config and deletes norns.db. Publishing: PUBLISH.md.

First run

  1. Log in as admin with the password from norns init.
  2. If there are no boards, the Control Room shows a short checklist and a Settings CTA.
  3. Create a board (includes a sample card), add DeepSeek / OpenAI / Cursor in Settings, optionally Bind git, then Run the sample card.
  4. If Clash or a company proxy breaks model calls, open Settings → Network and toggle Use system proxy (or set USE_SYSTEM_PROXY / [network] use_system_proxy in config.toml).
  5. Without a usable model key you stay in practice mode (banner + practice gate labels). Fake keys do not clear that banner — health probes the provider model list.

Features

  • Local Control Room in the browser (norns init / norns run); optional Electron window
  • Command Light cream theme (Night stub) with English i18n scaffolding
  • Visual machine editor: stages, parallel tracks, soft join, human gates vs auto-advance
  • Delivery Machine Card detail sheet: journey, confirm writes, Ask agent
  • Isolated per-stage agents (no shared chat memory); human confirms approve/reject
  • Encrypted connectors (OpenAI, Cursor, DeepSeek, GitHub, Jira, Polarion)
  • Live Cursor model catalog for Agent selection; wait UI counts down to Cursor timeout
  • System proxy toggle in Settings (honor Clash/corporate HTTP_PROXY / ALL_PROXY, or call models directly)
  • Per-column tool allowlists (Norns, sandbox, GitHub, Jira, Polarion, extra MCP)
  • Directory or hardened Docker sandbox copies under ~/.norns/sandboxes/
  • SQLite + in-process queue locally; PostgreSQL + Redis/ARQ when you need them
@startuml
skinparam monochrome true
actor Human
rectangle Board {
  rectangle "Stage 1" as S1
  rectangle "Stage 2" as S2
  rectangle "Stage 3" as S3
}
Human --> S1 : create / approve
S1 --> Human : handoff + recommend
Human --> S2 : confirm
S2 --> Human : handoff + recommend
Human --> S3 : confirm
@enduml

How it works

  • Boards / stages — workflow and per-column agents. Two default lines from a stage split a card (handoff.tracks). Later columns (Review, Merge, …) are a soft join: each fork arrives and runs on its own. Auto-start idle cards on a column until a human gate (or write confirm) stops it.
  • Sandbox — local workspace runs copy under ~/.norns/sandboxes/ (directory, hardened docker, or none). Host/Cursor file tools use the bind-mounted copy path; command isolation for docker is via the sandbox plugin (sandbox_run → docker exec). Allowlist sandbox for reproduce / env-build. Set [sandbox] backend in ~/.norns/config.toml.
  • Handoffs — the only structured context for the next stage. On a gate, recommendation is advisory until a person confirms. Practice runs are labeled and do not auto-advance to done without a real model.
  • Git bind — each board has a checkout path and/or git URL (path must exist; URL must look like a remote). Stage agents inherit the board repo unless the column Agent overrides it. GET /api/workspace?board_id= reflects that binding.
  • Connectors — Python libraries only; agents never see raw credentials. Empty tool allowlist means no tools. Failed stage runs leave the card blocked (same as reject).
  • Network / proxy — Settings → Network (or [network] use_system_proxy / USE_SYSTEM_PROXY). On: honor HTTP_PROXY / HTTPS_PROXY / ALL_PROXY (Clash socks:// is normalized to socks5://). Off: direct egress — useful on company networks when a local proxy breaks API calls.

Optional stack (Postgres, Redis, Vite): copy .env.example → .env, then docker compose up → UI at http://localhost:5173.

Release files for norns-ide 0.0.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for norns-ide 0.0.3
File Size Uploaded
norns_ide-0.0.3.tar.gz 540.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for norns-ide 0.0.3
File Interpreter ABI Platform
norns_ide-0.0.3-py3-none-any.whl Python 3 none any Details

Total release size: 856.4 kB

Release files / norns_ide-0.0.3.tar.gz

Download URL norns_ide-0.0.3.tar.gz
Size 540.0 kB
Tags Source
SHA-256 checksum
How to use checksums
7bbd1dfe640c86b02f67ac28f297b24a72a7214650f0d656e7731776a8830306
BLAKE2b-256 checksum
How to use checksums
070c318ffe4177f056f290de9718abbd76db89f0925aef9491803f3fc960f09d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 26, 2026.

Transparency log

Release files / norns_ide-0.0.3-py3-none-any.whl

Download URL norns_ide-0.0.3-py3-none-any.whl
Size 316.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
4a52c9d62bbb8c47966a901aed0f23db5b9030d9ac5a0031c94e4dec2d9587ad
BLAKE2b-256 checksum
How to use checksums
142dc9128b7abf01103ce9aaa4c21d14df16e241f4fc2c61478e7cac752806f6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 26, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.0.3 This release

2 release files

0.0.2

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page