Skip to main content

Odibi Anchor

Odibi Anchor is a provider-neutral reliability and evidence layer for engineering agents. It gives an agent a bounded, auditable lifecycle for selecting context, authorizing work, checking changes, and retaining evidence without coupling the workflow to one host.

Odibi Anchor requires Python 3.11 or newer and is licensed under Apache-2.0.

New installation? Follow the getting-started guide for package selection, launch-ready PortfolioV1 scaffolding, host setup, preparation, and recovery.

Install and run locally

python -m venv .venv
. .venv/bin/activate                 # Windows: .venv\Scripts\activate
python -m pip install "odibi-anchor==0.3.7"
anchor help

The anchor CLI emits deterministic JSON. One-shot execution does not preserve process state; use anchor batch or anchor shell for a sequence that shares a bootstrap:

printf '%s\n' '{"action":"status"}' '{"action":"audit_history"}' | anchor batch -

Check routing before bootstrap, or install the packaged agent contract into a repository:

anchor doctor
anchor setup-host amp --target /absolute/path/to/repository

For source development, clone the repository, create a virtual environment, and run python -m pip install -e '.[dev,mcp]'.

MCP quickstart (stdio)

Install the MCP extra and configure one long-lived stdio server:

python -m pip install "odibi-anchor[mcp]==0.3.7"
export ANCHOR_HOME=/absolute/writable/odibi-anchor-state
export ANCHOR_PROJECT_ID=my-project
export ANCHOR_PROJECT_ROOT=/absolute/path/to/my-project
python -m odibi_anchor.mcp_server

Equivalent client configuration:

{
  "command": "/absolute/path/to/python",
  "args": ["-m", "odibi_anchor.mcp_server"],
  "env": {
    "ANCHOR_HOME": "/absolute/writable/odibi-anchor-state",
    "ANCHOR_PROJECT_ID": "my-project",
    "ANCHOR_PROJECT_ROOT": "/absolute/path/to/my-project"
  }
}

The project must already be registered under ANCHOR_HOME. See runtime rollout and MCP integration for setup and operational details.

Databricks quickstart

Install the pinned public release in a Databricks notebook:

%pip install "odibi-anchor[databricks]==0.3.7"
dbutils.library.restartPython()

After one-time host setup, run the managed launcher with only the project ID. It selects local state, restores durable artifacts, binds the exact route, and advertises managed artifact actions. No source clone, host ID, portfolio path, or manually chosen ANCHOR_HOME is required:

import runpy

namespace = runpy.run_path(
    "/Workspace/Users/<user>/.assistant/agent_bootstrap.py",
    init_globals={"ANCHOR_PROJECT_ID": "my-databricks-project"},
)
anchor = namespace["anchor"]
startup = namespace["STARTUP_PACKET"]
assert startup["status"] == "ready"

If the installed distribution is missing or stale, the launcher returns the exact pinned latest-stable install and Python-restart remediation; run it and rerun the same launcher call. The anchor callable is process-bound and comes from the launcher namespace (or the return value of odibi_anchor.launch()); from odibi_anchor import anchor is intentionally unsupported. Run doctor only when additional startup diagnostics are needed.

Run anchor setup-host databricks --target /Workspace/Users/<user> once to install and subsequently reconcile the packaged instructions and launcher. Workspace targets are published and byte-verified through the Databricks Workspace API rather than the FUSE mount. Create a PortfolioV1 to keep host-specific project roots and state locations explicit instead of rediscovering them. See getting started and portfolio and durable state.

ANCHOR_HOME must be writable local filesystem storage outside the installed package/source checkout. Let portfolio preparation set it. On Databricks, /tmp is session-scoped and must not be treated as durable. Configure an approved durable snapshot root while keeping live state local; Anchor checkpoints successful authority writes and restores the absent SQLite database and managed project artifacts through verified immutable files. Do not run live SQLite state from Workspace Files, DBFS, Volumes, or another network/distributed filesystem. See portfolio and durable state and Databricks MCP guidance.

Import legacy v0.11.0 state

Legacy Context Workbench state is never selected or mutated implicitly. Import one exact v0.11.0 home into a new, non-overlapping Anchor home with the explicit two-step API:

from odibi_anchor import apply_legacy_import, plan_legacy_import

plan = plan_legacy_import(
    "/absolute/path/to/legacy-home",
    anchor_home="/absolute/path/to/new-anchor-home",
)
# Inspect the source, destination, schema set, and plan_id before approving the write.
result = apply_legacy_import(plan)

The importer fails closed on destination collisions, incompatible/newer schemas, symlinks, ambiguous managed-project targets, or open tasks. It copies project artifacts, rewrites only exact managed-project self-targets, and leaves the source unchanged. Legacy database history is preserved in a verified backup but is not activated: its branded task/memory payloads are not an Anchor runtime contract. The first Anchor launch creates fresh runtime ownership state; new tasks are established through the normal lifecycle.

Routing and concurrent runtimes

Server routing is an immutable binding between ANCHOR_PROJECT_ID and the exact canonical ANCHOR_PROJECT_ROOT. Startup verifies the ID, registered target, and requested root agree. If the root matches exactly one managed project, launch() can derive its ID; ambiguous roots fail closed and require an explicit ID. Once bound, changing environment variables or workspace/.active_project cannot redirect that process. .active_project is an interactive preference only—it is not routing authority.

Concurrent runtimes may share an ANCHOR_HOME only when it is a local filesystem that provides the required locking and atomic filesystem semantics. Do not place a concurrently shared home on DBFS, object storage, an NFS-like mount, or another network/distributed filesystem. Bind every process explicitly, use distinct project IDs for distinct roots, and use a separate per-project ANCHOR_HOME when local-filesystem guarantees are uncertain. A shared home does not make same-project conflicting writers safe.

Security and support

Odibi Anchor records operational state under ANCHOR_HOME; keep it outside source control and protect it as potentially sensitive. Never commit environment files, runtime databases, session records, or generated manifests.

For bugs and feature requests, use GitHub Issues. Security-sensitive reports should not include credentials, private repository content, or runtime state in a public issue.

See CONTRIBUTING.md, SECURITY.md, CHANGELOG.md, and LICENSE.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

odibi_anchor-0.3.7.tar.gz (3.3 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

odibi_anchor-0.3.7-py3-none-any.whl (2.8 MB view details)

Uploaded Python 3

File details

Details for the file odibi_anchor-0.3.7.tar.gz.

File metadata

  • Download URL: odibi_anchor-0.3.7.tar.gz
  • Upload date:
  • Size: 3.3 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for odibi_anchor-0.3.7.tar.gz
Algorithm Hash digest
SHA256 c63c13525100fa1a700fd74dd17f689da43b8d6c3c8f6891d67ca174537523ed
MD5 2a796c961005e363b08cbbc42df5ffc2
BLAKE2b-256 839fbab2e73050e2002307184d8bed6a22a8300bfb0f3550a1f5ff9ee5f3a4b9

See more details on using hashes here.

Provenance

The following attestation bundles were made for odibi_anchor-0.3.7.tar.gz:

Publisher: release.yml on henryodibi11/odibi-anchor

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file odibi_anchor-0.3.7-py3-none-any.whl.

File metadata

  • Download URL: odibi_anchor-0.3.7-py3-none-any.whl
  • Upload date:
  • Size: 2.8 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for odibi_anchor-0.3.7-py3-none-any.whl
Algorithm Hash digest
SHA256 abedef28c391e0ba0409339e8287626949e2cac2963fa66686d342665a36f25a
MD5 0a79af03c7678e9b33f1e97cb88cc833
BLAKE2b-256 b749f62057b8e8cd1a160be89fec3064beabc8905e1d7af425b8b02ef2e02a6f

See more details on using hashes here.

Provenance

The following attestation bundles were made for odibi_anchor-0.3.7-py3-none-any.whl:

Publisher: release.yml on henryodibi11/odibi-anchor

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

0.3.9

2 files

0.3.8

2 files

This release

0.3.7 This release

2 files

0.3.6

2 files

0.3.5

2 files

0.3.4

2 files

0.3.3

2 files

0.3.2

2 files

0.3.1

2 files

0.3.0

2 files

0.2.4

2 files

0.2.3

2 files

0.2.2

2 files

0.2.1

2 files

0.2.0

2 files

0.1.0

2 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