Skip to main content

Archkeel

Architecture checks for coding agents.

Python 3.11+ CI PyPI MIT

Archkeel checks code against declared boundaries. It reports forbidden imports, misplaced types and gaps in static analysis, with source evidence for review.

Use it in your coding-agent harness or CI. Checks run locally and deterministically, without an LLM. They complement tests of runtime behavior.

Compass Flutter Target: five components, responsibilities and thirteen declared dependencies

Compass Flutter: declared components, responsibilities and dependencies. Explore this Target.

Explore observed code, declared architecture and their differences in one offline report. See ArchKeel's current Main report, updated by CI. Browse the Python, Dart and TypeScript demo reports, including UML PASS, FAIL and UNKNOWN examples.

The gallery leads with three complete source projects: Compass booking (111 Dart files), Python RealWorld (72 Python modules), and Nest RealWorld (41 prepared TypeScript inputs). Each links its authored Target, baseline and three source-only variants. Coverage, rule findings and UML results remain separate; the smaller runnable Flutter shop stays a control.

Start here

Requires Python 3.11+ and a Git repository with at least one commit. Run Archkeel with a Python version that meets your project's requirements.

uv tool install archkeel
archkeel skill install codex    # or claude

Then ask your coding agent:

Set up Archkeel for this repository. Read the architecture documents,
propose the boundaries, and let me decide which dependencies are allowed.

The skill guides the setup. init drafts components and interfaces; you decide the target architecture. Existing imports are evidence, not permission. You can delegate decisions to the agent, but its authorship is recorded separately. See the onboarding guide for setup and plugin installation.

For an existing setup:

archkeel report      # inspect code and evidence
archkeel validate    # check the contract

report writes architecture.json and an offline architecture.report.html. Read the verdicts: a report can exit 0 with failed or undecided rules. validate checks the contract; check also compares a submitted change with its published expectation. Use archkeel <command> --help for command options. Validation diagnoses only absent responsibilities on components explicitly marked decided_by: "architect"; non-empty prose is not proof that the stated responsibility is correct.

Review the evidence

Python RealWorld Target: nested article, comment and tag modules with declared relationships and cross-scope counts

Python RealWorld: drill down from components to the article, comment and tag modules. Explore this Target. Target shows declared intent; cross-scope relationships remain counted separately.

Use the report to inspect findings and source locations, then explore the components. Filters narrow the view without changing the verdicts.

archkeel report --only violations --component store
archkeel report --only calls --component store

Agents start with a focused architecture summary, then query the recorded snapshot:

archkeel report --only architecture --json
archkeel report --input test-artifacts/architecture/architecture.json --only architecture --json

Use --component with an id or scope from the summary, and --only violations for findings. Saved queries do not rescan or change the repository. See focused agent reports.

The explorer shows As-Is (observed code), Target (declared architecture), and Diff (their differences). These are views of one snapshot, not two revisions. Folders help navigation; they do not establish ownership or runtime behavior.

PASS means the required rules have complete evidence and no decided violation. UNKNOWN means evidence is missing. A rule can fail and still have undecided positions. A clean graph does not prove a good design.

Start with a forbidden import

The runnable Shop forbidden-pair fixture adds shop.render.text -> shop.store at shop/render/text.py:9. It reports DEP-RENDER-NO-STORE, rule.violated and closed_world.observed_forbidden:

make demo-architecture VARIANT=class-a-forbidden-dependency-pair OUTPUT=build/forbidden.json

The replay writes its report, then exits 2 because validation cannot accept the observed whole-pair ban. Remove the crossing or revisit the declared boundary with its owner; do not allow the forbidden pair just to make validation pass.

Catch changes that finding diffs miss

The runnable call coverage regression fixture shows a change that adds no forbidden import or cycle but makes a call harder to resolve:

 def run(key: str) -> int:
-    return first() + second()
+    handlers = {"first": first, "second": second}
+    return handlers[key]()

make demo runs this fixture. Resolved calls drop from 2 of 2 to 0 of 1 while new finding fingerprints stay at zero; Archkeel rejects the candidate because unresolved calls increase from 0 to 1.

check compares the accepted and candidate commits, checks the contract, and verifies the candidate against an expectation published before submission. Publication order needs trusted host records. A local replay checks supplied records without authenticating them. The reference explains the commit protocol and its limits.

Keep a target the code has not reached

Record existing violations, review the file, then reject new ones in CI:

archkeel validate --baseline known-violations.json --write-baseline
archkeel validate --baseline known-violations.json

Known violations remain FAIL. After fixing them, rewrite the baseline in the same change. New or increased violations require explicit --accept-new; do not use it to hide a regression. See the target-first guide for the full workflow.

Try a reproducible example

git clone https://github.com/rapiddweller/archkeel.git
cd archkeel
make demo
make demo-onboarding

make demo rejects a coverage regression and a late expectation, then shows a passing candidate. make demo-onboarding replays setup on a two-level shop using committed decision fixtures; it performs no live approvals. More cases are in the demo catalog.

Scope and limits

Archkeel observes static source in configured roots. Python support covers imports, calls, and declared boundaries. Dart records declarations, members, signatures and bounded source relationships through a Python-hosted Tree-sitter parser. Dart analysis needs no Dart SDK or setup command. TypeScript also records lexical UML declarations and statically bound relationships; ambiguous bindings and unsupported constructs remain UNKNOWN. TypeScript roots may name files or directories. Archkeel does not prove runtime behavior, performance, or the quality of every design decision. Separate test trees need their own scan and contract.

Exit meanings are defined per command.

Read the docs.

Development

Python, TypeScript and Dart analysis use the Python installation. Building or running the Flutter demo itself still requires Flutter; report generation does not.

make check              # lint, types, tests
make gate               # also build, isolated installs and self-validation
make browser-install
make report-browser OUTPUT=test-artifacts/report-browser

Archkeel checks its own architecture contract using fresh observations on every test run. See CONTRIBUTING.md.

MIT © 2026 Rapiddweller Asia Co., Ltd. Maintained by Alexander Kell.

Metadata

Release files for archkeel 1.1.1

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

Source distribution (sdist)

Source distribution for archkeel 1.1.1
File Size Uploaded
archkeel-1.1.1.tar.gz 1.1 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for archkeel 1.1.1
File Interpreter ABI Platform
archkeel-1.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 2.2 MB

Release files / archkeel-1.1.1.tar.gz

Download URL archkeel-1.1.1.tar.gz
Size 1.1 MB
Tags Source
SHA-256 checksum
How to use checksums
e0af41f7ae388493da8568d9e9957c6e3886e51a2f2320f9b58fe2428fb79396
BLAKE2b-256 checksum
How to use checksums
41c0160f6f6c3e05ca7aee73d652938286dc3c9f145359932e3420614f634c9e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.13 {"installer":{"name":"uv","version":"0.12.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

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 Oct 10, 2026.

Transparency log

Release files / archkeel-1.1.1-py3-none-any.whl

Download URL archkeel-1.1.1-py3-none-any.whl
Size 1.1 MB
Tags Python 3
SHA-256 checksum
How to use checksums
b3b9e33389e5097a49c6bf8c7d9546dc4c4be2aba025f10fc3c1ef072fd0b848
BLAKE2b-256 checksum
How to use checksums
25afbfae853fabfbd5f87edaa2c99ccb9ea064114269e35d61d35f593f69b189
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.13 {"installer":{"name":"uv","version":"0.12.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

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 Oct 10, 2026.

Transparency log

Release history Release notifications | RSS feed

2.0.0

2 release files

1.1.2

2 release files

This release

1.1.1 This release

2 release files

1.1.0

2 release files

1.0.0

2 release files

0.9.0

2 release files

0.8.6

2 release files

0.8.5

2 release files

0.8.4

2 release files

0.8.3

2 release files

0.8.2

2 release files

0.8.1

2 release files

0.8.0

2 release files

0.7.0

2 release files

0.6.1

2 release files

0.6.0

2 release files

0.5.1

2 release files

0.5.0

2 release files

0.4.1

2 release files

0.4.0

2 release files

0.3.0

2 release files

0.2.0

2 release files

0.1.0

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