Loading repository data…
Loading repository data…
YASSERRMD / repository
Rust-core agentic framework with durable journal, exactly-once replay, Ed25519 A2A identity, and MCP tool server. Bindings for Go, Python, TypeScript, .NET, and Java via C ABI.
Language-agnostic. Local-first. Production-ready.
Quickstarts | Architecture | Guides | Security | Changelog
Ancora is an open-source agentic framework built on a Rust core and exposed to every major language through a stable C ABI. It prioritises correctness, durability, and sovereignty over ease-of-use shortcuts.
| Property | Detail |
|---|---|
| Local-first | Defaults to Ollama / llama.cpp; cloud providers are additive |
| Durable by default | Append-only journal with exactly-once replay on crash |
| Language-agnostic | One engine, six bindings, zero drift |
| Air-gapped capable | Policy engine blocks all egress at the framework layer |
| Protocol-native | A2A agent cards, Ed25519 identity, MCP tool server |
The framework is structured in five layers:
Language Bindings Go | Python | TypeScript | .NET | Java
─────────────────────────────────────
C ABI ancora-ffi (cdylib + staticlib)
─────────────────────────────────────
Service Crates ancora-tools ancora-policy ancora-grpc
─────────────────────────────────────
Core Engine ancora-core (graph, journal, replay)
─────────────────────────────────────
Proto / Storage ancora-proto | SQLite / PostgreSQL
Full diagram: docs/spec/architecture.md
Pick your language:
Rust
[dependencies]
ancora-core = "0.1"
use ancora_core::runner::run_graph;
let journal = run_graph(&graph, "summarise this article").await?;
Python
pip install ancora
from ancora import Runtime
result = Runtime().run("summarise this article")
TypeScript
npm install @ancora/sdk
import { Runtime } from "@ancora/sdk";
const result = await new Runtime().run("summarise this article");
Go
go get ancora.io/sdk
rt, _ := ancora.NewRuntime()
result, _ := rt.Run("summarise this article")
Full per-language quickstarts: docs/quickstarts/index.md
| Crate | Description |
|---|---|
ancora-core | Graph executor, durable journal, replay, chaos tests, benchmarks |
ancora-proto | Protobuf wire spec and JSON mirror for journal events |
ancora-ffi | C ABI surface -- every language binding links this |
ancora-tools | Tool trait, ToolRegistry, MCP server, LangChain adapter |
ancora-policy | Air-gapped egress, data-residency allowlists, PII redaction |
ancora-grpc | A2A agent cards, Ed25519 identity, task lifecycle, handoff |
Language bindings: sdk/go sdk/python sdk/ts sdk/dotnet sdk/java
Every run is recorded in an append-only journal. On crash and restart the engine reconstructs state from the journal and resumes from the last durable checkpoint -- no duplicated side effects, no lost work.
// The engine skips activities already recorded in the journal.
// Re-run with the same run_id after a crash -- it just works.
let journal = run_graph(&graph, "run-42", input).await?;
Detailed explanation: docs/guides/durability.md
Ancora ships with a policy engine that enforces governance at the framework layer, not the tool layer.
use ancora_policy::policy::Policy;
// Air-gapped: block all outbound calls unconditionally.
let policy = Policy::new().air_gapped();
// Data residency: only EU endpoints.
let policy = Policy::new().allow_endpoint("https://eu.api.example.com");
Security threat model: docs/security/threat-model.md
Governance guide: docs/guides/governance.md
Agents expose themselves via a signed agent card at /.well-known/agent.json.
Cross-agent task delegation uses Ed25519-verified identity.
let identity = AgentIdentity::generate();
let card = AgentCard { name: "my-agent".into(), ..Default::default() };
let signed = sign_card(&identity, &card);
let client = A2aClient::new("remote-host", 8080);
client.fetch_and_verify_card().await?; // rejects unsigned cards
Ancora's ToolRegistry is exposed over HTTP JSON-RPC 2.0 with optional
bearer-token authentication.
let server = McpServer::new(registry).with_token("s3cr3t");
server.serve("0.0.0.0:3001".parse()?, shutdown_rx).await?;
# All Rust tests
cargo test --workspace
# Benchmarks
cargo bench -p ancora-core
# Cross-language conformance
bash test/xlang/run-all.sh
# Chaos and crash tests
cargo test -p ancora-core chaos
| Binding | Minimum |
|---|---|
| Rust (MSRV) | 1.75 |
| Go | 1.22 |
| Python | 3.9 |
| TypeScript | Node.js 18 |
| .NET | 8.0 |
| Java | 17 (LTS) |
Full matrix: docs/spec/platforms.md
| Guide | Description |
|---|---|
| Architecture | Layers, crates, data flow |
| Quickstarts | Code examples for all 6 languages |
| Orchestration | Graphs, branching, parallel nodes |
| Memory | Within-run and cross-run state |
| Durability | Crash recovery, exactly-once replay |
| Observability | OpenTelemetry spans, cost tracking |
| Governance | Air-gapped mode, PII, audit |
| Security | Threat model T1-T6 |
| Benchmarks | Performance methodology and results |
| Migration from LangGraph | Porting guide |
| Migration from CrewAI | Porting guide |
See CHANGELOG.md for the full release history.
See CONTRIBUTING.md for commit conventions, branch strategy, and the phase-based development process.
Apache-2.0. See LICENSE.
Built by YASSERRMD