Reliability for LLM agents through enforcement, not model size โ Agent-Contract-Kernel (ACK) + a fail-closed orchestration engine.
Project description
Ironclad
Reliability for LLM agents through enforcement, not model size. ๐ฆ๐ช Built in the UAE by MJWC-AI-LAB.
Try it โ describe an idea, let the agents build it
git clone https://github.com/GrokBuildMJW/ironclad.git && cd ironclad
pip install -e ".[engine]"
export GX10_BASE_URL=http://localhost:8000/v1 GX10_MODEL=your-model # your model endpoint
python engine/server.py & # 1) the orchestrator (the agent + state)
python engine/client.py --codedir . # 2) the client โ drives it; type what you want
# Read README.md and summarise it. / Build add(a,b) in calc.py with a pytest test, and run it.
The orchestrator (engine/server.py) runs the agent and holds state; the client
drives it from your machine. The recommended client is the TypeScript terminal client
in clients/ink/ โ a purpose-built renderer (ghost-free resize, native
scrollback/selection/copy, smooth streaming). engine/client.py shown above is the
zero-dependency Python line REPL (the legacy engine/tui.py is a full-screen alternative).
Code stays on your machine: the orchestrator's file/command tools are passed through to
the client and run on YOUR local files. The agents plan it, write the code, write the
test, and run it โ you describe, they build. No prior coding needed. Full walkthrough:
docs/self-maintenance.md.
Ironclad is a generic, model-agnostic framework for building reliable agentic systems. It pairs an Agent-Contract-Kernel (ACK) โ schema-as-single-source- of-truth, validateโreaskโretry, a generator and a preflight doctor โ with a lean orchestration engine that turns multi-step agent workflows into deterministic, fail-closed pipelines.
The guiding principle: a small fast model with hard schema/validation enforcement beats a large model you "trust" to format its output. You get production-grade tool-calling reliability without depending on any specific model or parser โ the kernel enforces the contract, not the weights.
๐ง Status: proven core, redesign landed (pre-release)
Ironclad's engine comes from a proven, in-production orchestrator and has now been rebuilt: single process โ headless server + thin client, containerized, with a reasoning-worker fan-out and a purpose-built TypeScript terminal client. The rebuild's pieces are wired and tested โ server/client split, a session-gated secure channel, governed parallelism, long-term memory, autoplan, and function-calling robustness (validateโreask on every tool call + recovery for models without native tool-calls). On top, the extension surface is shipped: an open plugin API (drop in a tool, no core fork), a bring-your- own code-agent CLI, a dev container that runs the whole suite as a build+test gate, and a beginner self-maintenance guide. Verified by 236 Python tests (227 offline + 9 live) plus 272 TypeScript client tests, and a full end-to-end run with a real code-agent.
It is still pre-release: single-tenant by design (no multi-user auth yet), no tagged
release, and APIs/layout/config may change. The DEV โ Prod โ Public promote pipeline that
hardens our own releases is in development (today it's a manual gated path). The
TypeScript terminal client is now bundled in the repo (clients/ink/,
build-from-source) and is the recommended client. Treat main as a development snapshot.
๐ Read these before relying on anything:
docs/status.mdโ honest per-component wiring status + load tests.docs/test-report.mdโ what was tested, results, and the issues found and fixed during the campaign (maximum transparency).docs/roadmap.mdโ what works today vs what's planned.
Reference environment. Ironclad is developed and exercised on an NVIDIA DGX
Spark (GB10, Blackwell sm_121, 128 GB unified memory) running a local vLLM
server with Qwen3.6-35B-A3B-NVFP4. Nothing is hard-wired to that box โ any
OpenAI-compatible endpoint works โ but the defaults (localhost:8000,
qwen3.6-35b), the throughput numbers and the constrained-decoding findings (NVFP4,
XGrammar on the CUDA 13 nightly) reflect that hardware. See
docs/dgx-spark.md for the full reference stack and a one-shot
bootstrap (scripts/spark-bootstrap.sh).
Why
- Contract-first. One Pydantic schema drives the prompt, the validator, the docs, and (where the hardware allows) constrained decoding. No drift between what you ask for and what you check.
- Fail-closed pipelines. Macro steps (e.g. task hand-off, advancement) do the mechanical file work deterministically in code, not in model turns โ fewer round-trips, no silent half-completions.
- Model-agnostic. Swap the orchestrator model freely; reliability comes from the kernel, not the weights.
- Standalone. No hidden dependency on any private deployment. Bring your own OpenAI-compatible endpoint (vLLM, etc.).
Demo
The recommended TypeScript client over the server/client split โ a turn streams live into the terminal's own scrollback, with a pinned status bar (model ยท throughput ยท tasks ยท watcher ยท connection). Illustrative frame from a real session:
โโโโโ Ironclad ยท Orchestrator Client
Ironclad CLI 0.1.0 ยท code . ยท โค3 agents
/help ยท exit ยท mouse selects/copies natively
> what is 17 times 23?
17 times 23 is 391.
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
>
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Ironclad ยท qwen3.6-35b ยท โ conn ยท โ watch โ auto ยท 0P/0IP/0D ยท 64 tok/s Developed in the UAE
Reply language is a setting (GX10_LANGUAGE โ en default, ar, fr, โฆ). The
model answers in the configured language regardless of the input language. Real output
with GX10_LANGUAGE=ar, same question:
> what is 17 times 23?
ุญุงุตู ุถุฑุจ 17 ูู 23 ูู 391.
/command routing (local + forwarded), find-in-buffer (Ctrl+F), native
scrollback/selection/copy and Ctrl+V paste are built in. Zero-Node Python clients (a
plain line REPL + the legacy full-screen TUI) ship alongside it.
Benchmarks
Measured on the reference stack โ a single NVIDIA DGX Spark (GB10) serving Qwen3.6-35B-A3B-NVFP4 via vLLM, driven over the LAN:
| Workload | Result |
|---|---|
| Reasoning fan-out, 8 independent prompts | 5.8ร faster than serial (1.2 s vs 7.1 s), ~118 tok/s aggregate |
| Conversational turn (single agent) | ~55โ68 tok/s, ~2.1 s mean latency |
| Structured emission (ACK, thinking-off) | 100% schema-valid in earlier measurement |
Reproduce with your own endpoint; numbers scale with the model and GPU. Full method
and the per-component wiring status live in docs/status.md.
A reliability layer, not another model
Ironclad doesn't compete with the open models โ it makes them dependable to build on. It's model-agnostic by design: reliability comes from the contract kernel (schema โ validate โ reask), not the weights. So it's a natural agent/reliability layer for regional open models like Falcon, Jais and K2 Think โ point it at any of them (running on other models) and get fail-closed pipelines, structured tool-calls and a thin local client, without forking or retraining anything.
A starting point to build on
Ironclad is a foundation, not a finished product โ a generic agentic core meant
to be extended. You extend it over one open, versioned contract โ the
plugin API: drop a tool into a skills/ directory, point
GX10_PLUGINS_DIR at it, and the agent picks it up without forking the core (the
coding CLI itself is swappable too โ bring your own). Concrete use
cases also dock on as vessels (see examples/demo-vessel/; a
generator scaffolds new ones), so a broad audience can build their own domain agents on a
reliable, self-hosted base rather than starting from scratch. The framework is built to
extend and maintain itself: its own agents can scaffold new plugins, and a
dev container runs the full suite as a build+test gate โ the
internal DEV โ Prod โ Public promote pipeline that hardens releases is in
development (today, a manual gated path). Realistic directions the architecture supports today:
- Edge & energy efficiency โ a small, enforced model on local/edge hardware instead of a large cloud one. That efficiency bet is the whole premise of the project.
- Education ยท healthcare ยท logistics โ build a vessel for your domain: reliable tool-using agents and retrieval/RAG assistants over your own data, kept on-prem.
The repo's job is to give you a working starting point, not to ship every vertical โ the verticals are yours to build.
New here, or not a developer? AI lets you turn an idea into working software โ and
Ironclad's own agents are the on-ramp: you describe what you want, they plan it, write
the code, write a test, and run it. Start with
docs/self-maintenance.md โ "describe an idea, let the
agents build it" โ whether you want to extend Ironclad with a plugin or repurpose the
whole thing for your own project.
Setup
Requires Python 3.10+ and an OpenAI-compatible endpoint (e.g. vLLM).
Install the library from PyPI:
pip install ironclad-ai # the ACK library (import ack)
pip install "ironclad-ai[engine]" # + the orchestration engine deps
Or clone for the full engine + clients (recommended while pre-release):
git clone https://github.com/GrokBuildMJW/ironclad.git
cd ironclad
python -m venv .venv && . .venv/bin/activate # Windows: .venv\Scripts\Activate.ps1
pip install -e ".[engine]" # ACK + engine (openai, prompt_toolkit)
# Point at your model endpoint (defaults: http://localhost:8000/v1, qwen3.6-35b):
export GX10_BASE_URL=http://localhost:8000/v1
export GX10_MODEL=your-served-model-name
export GX10_API_KEY=... # only if your endpoint needs one
# the orchestrator + the recommended TypeScript client (install globally, once; needs Node โฅ 22):
python engine/server.py &
( cd clients/ink && npm install && npm install -g . ) # global `ironclad`, like claude / kimi
ironclad --server http://localhost:8100 # runs in the current folder (codedir = cwd)
# zero-Node alternative: python engine/client.py --codedir . (legacy TUI: engine/tui.py)
- Full walkthrough, the server/client split, and the reference vLLM launch:
see
SETUP.mdโ including copy-paste shell shortcuts (so you can just typeironclad) for Windows PowerShell, macOS and Linux. - Let an AI coding agent set it up for you (deterministic, verifiable runbook):
see
AGENTS.md.
A runnable demo vessel lives in examples/demo-vessel/
โ a minimal, self-contained workspace showing a contract spec, a pipeline, and
the doctor preflight. Real vessels stay in the operators' own private repos.
Layout
ack/ # Agent-Contract-Kernel: case-spec, validated-emit, registry, doctor, generator
engine/ # orchestration engine: agent loop, task store, fail-closed macros
clients/ink/ # recommended TypeScript terminal client (build-from-source)
examples/demo-vessel # runnable example workspace
docs/ LICENSE NOTICE # guides + Apache-2.0
Roadmap
Honest split of what works today vs what is planned lives in
docs/roadmap.md; the per-component wiring status of shipped
features is in docs/status.md. In short:
- Today โ single-tenant, home-LAN trust. One operator, one principal, no authentication on the server (it trusts its network like the model port). Code stays on the client by construction.
- Phase d (done) โ secure, session-gated channel, still single-operator:
selectable trust profiles (
open/token/sealed), a client-managed tunnel option, and an explicit session that seals on disconnect. The token is a deployment secret, not a user login. Built, unit-tested, and live-verified over a real SSH tunnel on the reference GPU (seedocs/status.md). - Phase e (done) โ governed parallelism: server-side concurrent reasoning the
orchestrator actually uses (
/fanout+ an in-engineparallel_reasontool), made GPU-safe by a concurrency cap and a token-budget envelope so it can never over-subscribe a local box. Conservative defaults in core; model-matched in the deploy. - Extend it through itself (shipped surface; promote pipeline in development) โ an
open, versioned plugin API (
GX10_PLUGINS_DIR), a bring-your-own code-agent CLI (GX10_AGENT_CMD), a dev container build+test gate, and a beginner self-maintenance guide are shipped and tested. The internal three-stage DEV โ Prod โ Public promote pipeline that hardens our own releases is in development (today a manual gated path); the core stays inbound-closed (the only inbound is a bug report we reproduce โ fix โ ship). - Shipped โ the recommended terminal client. A TypeScript client on a purpose-built
renderer (ghost-free resize, smooth streaming, native-grade scrollback/selection/copy)
over the same HTTP/tool-bridge contract, now bundled in the repo
(
clients/ink/, build-from-source) and the recommended interactive UI. The Python REPL/TUI remain as legacy fallbacks. - Planned (Phase g) โ Identity & Authorization (multi-tenant): per-principal scope through tasks, memory namespaces, and data-source entitlements, with org/group RBAC via OIDC/SAML. This does not exist yet โ until it lands, treat enterprise/government use as single-tenant on trusted infrastructure.
- Also: broader tests, verified recipes for more local open models, RAG over local datasets, and a scalable-context memory layer โ a multi-tier system (bounded model window + a new short-term summary/cache tier + long-term retrieval) with rolling summarization and per-turn RAG, so total context exceeds the window while decode stays fast (see the roadmap), and a first tagged release.
Sovereign AI / local deployments. Ironclad is model-agnostic and fully self-hostable โ it talks to any OpenAI-compatible endpoint, so it already runs against locally-served open models (e.g. Falcon, Jais, K2 Think via vLLM โ see running on other models) with no cloud dependency and data kept on your own infrastructure.
Issues and discussions are welcome โ this is an early, openly-developed project.
License
Apache License 2.0 โ see LICENSE and NOTICE.
Copyright 2026 MJWC-AI-LAB and Ironclad contributors.
๐ฆ๐ช Built in the United Arab Emirates by MJWC-AI-LAB.
Project details
Release history Release notifications | RSS feed
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 ironclad_ai-0.0.2.tar.gz.
File metadata
- Download URL: ironclad_ai-0.0.2.tar.gz
- Upload date:
- Size: 68.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6f1e7502f253b46ffbff17082d58bfd9f3f6454c69269b35c17159cd9e3fb3a1
|
|
| MD5 |
e41868b1bfb08ae89ebcee5130ecdb08
|
|
| BLAKE2b-256 |
5d628f35bccadf0b959f6fc5f3e2959cce07481019ee7ede357c6f5cb8b97a18
|
Provenance
The following attestation bundles were made for ironclad_ai-0.0.2.tar.gz:
Publisher:
publish.yml on GrokBuildMJW/ironclad
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ironclad_ai-0.0.2.tar.gz -
Subject digest:
6f1e7502f253b46ffbff17082d58bfd9f3f6454c69269b35c17159cd9e3fb3a1 - Sigstore transparency entry: 1859744299
- Sigstore integration time:
-
Permalink:
GrokBuildMJW/ironclad@e33e2c304c2c1393df21f92a78f42b9c0bf5a364 -
Branch / Tag:
refs/tags/v0.0.2 - Owner: https://github.com/GrokBuildMJW
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@e33e2c304c2c1393df21f92a78f42b9c0bf5a364 -
Trigger Event:
release
-
Statement type:
File details
Details for the file ironclad_ai-0.0.2-py3-none-any.whl.
File metadata
- Download URL: ironclad_ai-0.0.2-py3-none-any.whl
- Upload date:
- Size: 72.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c7145b750ff27d6c5a7faf2b4304a3b5e12c989194787cb6bb27146956aa00e3
|
|
| MD5 |
5450e913f06920bbffcdf82daa3ed772
|
|
| BLAKE2b-256 |
0c9e251b9c49032589eec1437e0ada319ed37ddea898ea6cf9b13daad0e6d234
|
Provenance
The following attestation bundles were made for ironclad_ai-0.0.2-py3-none-any.whl:
Publisher:
publish.yml on GrokBuildMJW/ironclad
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ironclad_ai-0.0.2-py3-none-any.whl -
Subject digest:
c7145b750ff27d6c5a7faf2b4304a3b5e12c989194787cb6bb27146956aa00e3 - Sigstore transparency entry: 1859744316
- Sigstore integration time:
-
Permalink:
GrokBuildMJW/ironclad@e33e2c304c2c1393df21f92a78f42b9c0bf5a364 -
Branch / Tag:
refs/tags/v0.0.2 - Owner: https://github.com/GrokBuildMJW
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@e33e2c304c2c1393df21f92a78f42b9c0bf5a364 -
Trigger Event:
release
-
Statement type: