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.
First public release:
0.1.0. Odibi Anchor requires Python 3.11 or newer and is licensed under Apache-2.0.
Install and run locally
python -m venv .venv
. .venv/bin/activate # Windows: .venv\Scripts\activate
python -m pip install "odibi-anchor==0.1.0"
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 install-guidance /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.1.0"
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==0.1.0"
dbutils.library.restartPython()
Then bind local compute state and the exact Git folder checkout. No source clone is required:
import os
os.environ["ANCHOR_HOME"] = "/tmp/anchor-state" # local compute disk; session-scoped
os.environ["ANCHOR_PROJECT_ID"] = "my-databricks-project"
os.environ["ANCHOR_PROJECT_ROOT"] = "/Workspace/Users/<user>/<git-folder>"
from odibi_anchor import doctor, launch, register_project
startup = doctor()
if startup["next_operation"]["operation"] == "register_project":
registration = register_project(**startup["next_operation"]["arguments"])
anchor = launch(
anchor_home=os.environ["ANCHOR_HOME"],
project_id=os.environ["ANCHOR_PROJECT_ID"],
project_root=os.environ["ANCHOR_PROJECT_ROOT"],
)
orientation = anchor("orient", output_format="dict")
Run install_guidance(project_root) once when that repository should receive the packaged
.assistant skills and .assistant_instructions.md. Existing guidance is never overwritten.
ANCHOR_HOME must be writable local filesystem storage outside the installed package/source
checkout. On Databricks, /tmp is session-scoped and must not be treated as durable. Stop all
Anchor processes before copying a closed backup to durable storage such as a Volume; restore it
to qualified local storage before reuse. Do not run live SQLite state from Workspace Files,
DBFS, Volumes, or another network/distributed filesystem. The managed project must already
register the exact target root. See 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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file odibi_anchor-0.1.0.tar.gz.
File metadata
- Download URL: odibi_anchor-0.1.0.tar.gz
- Upload date:
- Size: 3.2 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9e58cbfb268ab631913160422cb7024bd07215ee8a37340c503ac5988e3e57d8
|
|
| MD5 |
6eac2cce8a48bdb63f6e45ed6afce977
|
|
| BLAKE2b-256 |
3a28ddfceadd270fa2bac1e9cd43e9f1b1501de742785b79d5625936c7dba767
|
Provenance
The following attestation bundles were made for odibi_anchor-0.1.0.tar.gz:
Publisher:
release.yml on henryodibi11/odibi-anchor
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
odibi_anchor-0.1.0.tar.gz -
Subject digest:
9e58cbfb268ab631913160422cb7024bd07215ee8a37340c503ac5988e3e57d8 - Sigstore transparency entry: 2788344951
- Sigstore integration time:
-
Permalink:
henryodibi11/odibi-anchor@b4aef7e2a14c3fe8a74f803613227dba623afe55 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/henryodibi11
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@b4aef7e2a14c3fe8a74f803613227dba623afe55 -
Trigger Event:
release
-
Statement type:
File details
Details for the file odibi_anchor-0.1.0-py3-none-any.whl.
File metadata
- Download URL: odibi_anchor-0.1.0-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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6d2437126f1869dbb65e0eafc746420cf714e7082923b4aa6f4f94caad3fc1e4
|
|
| MD5 |
3e4e00c640979d1d6e2b27b698e7796d
|
|
| BLAKE2b-256 |
d50cd009951455f078d14c25157d06140e4fb11ad9584682c2410cab80b018ab
|
Provenance
The following attestation bundles were made for odibi_anchor-0.1.0-py3-none-any.whl:
Publisher:
release.yml on henryodibi11/odibi-anchor
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
odibi_anchor-0.1.0-py3-none-any.whl -
Subject digest:
6d2437126f1869dbb65e0eafc746420cf714e7082923b4aa6f4f94caad3fc1e4 - Sigstore transparency entry: 2788345154
- Sigstore integration time:
-
Permalink:
henryodibi11/odibi-anchor@b4aef7e2a14c3fe8a74f803613227dba623afe55 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/henryodibi11
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@b4aef7e2a14c3fe8a74f803613227dba623afe55 -
Trigger Event:
release
-
Statement type: