Ossature
[!WARNING] Ossature is currently in its
0.xseries and should be considered unstable. APIs, spec formats, CLI flags, and internal behavior may change significantly between releases without prior deprecation. Pin your version and check the changelog before upgrading.
An open-source build system that turns specs into working code.
You describe what the software should do, review the plan Ossature generates, and build it step by step with an LLM generating the code under tight constraints. Your specs are the source and the generated code is the output, so when requirements change you edit the spec and rebuild only what changed. When a step breaks you fix that step and keep going instead of starting over.
Works with Anthropic, OpenAI, Mistral, Google, and most other hosted providers, as well as local models through Ollama.
Ossature (pronounced OSS-uh-cher) means the underlying framework or skeleton of a structure.
What it does
Ossature works from three kinds of files. Only the spec is required.
- SMD (spec) states what the software should do: requirements, examples, acceptance criteria.
- AMD (architecture) states how it fits together: components, their interfaces, and contracts each component has to hold.
- VMD (verification) holds test cases you write yourself, as concrete inputs and expected results.
The workflow is three commands:
ossature validateparses everything and checks it structurally. No LLM involved.ossature audithas an LLM read each spec, flag problems, and generate a build plan you can read and edit before anything runs.ossature buildruns the plan task by task. Each task generates a few files, runs its verify command, and on failure enters a fix loop. With review on, an LLM also checks the generated code against the spec and the component contracts before a task is done.
Builds are incremental, so changing one spec only rebuilds the tasks it affects, and an upstream change that leaves a spec's public interface unchanged doesn't pull its dependents along. When a spec has a VMD, the plan includes deterministic test tasks built from your cases. The LLM never sees the expected values, so the code can't be written to fit the tests; it has to actually pass them.
Quick start
Requires Python 3.14+.
uv tool install ossature
Or with pip:
pip install ossature
Set your LLM provider API key:
export ANTHROPIC_API_KEY="sk-ant-..."
# or OPENAI_API_KEY, MISTRAL_API_KEY, etc.
Create and build a project:
ossature init myproject && cd myproject
ossature new my-feature
# edit specs/my-feature.smd
ossature validate
ossature audit
ossature build
The default model is anthropic:claude-sonnet-4-6. To use a different model, set the model field in ossature.toml:
[llm]
model = "openai:gpt-5.2" # or mistral:devstral-latest, etc.
The API key you export must match the provider in your model string, so use OPENAI_API_KEY for an openai: model. See the configuration docs for per-role overrides and all available options.
Examples
See ossature-examples for complete projects with specs, build plans, and generated code.
Documentation
Full docs at docs.ossature.dev. The workflow guide walks through a complete project from init to generated code.
License
MIT
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 ossature-0.2.1.tar.gz.
File metadata
- Download URL: ossature-0.2.1.tar.gz
- Upload date:
- Size: 136.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
118d78c53bf334bb0d2c105c5a91ab38351144f2269f44fb226c7147b8b3934d
|
|
| MD5 |
cfbe4e2e2ed13a2a6e19c57e638136f5
|
|
| BLAKE2b-256 |
28e3ff72dcd9b7f4aa2a253a9abb2261117fbfd6fb65cc716a4fbe6b9ba5d107
|
Provenance
The following attestation bundles were made for ossature-0.2.1.tar.gz:
Publisher:
release.yml on ossature/ossature
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ossature-0.2.1.tar.gz -
Subject digest:
118d78c53bf334bb0d2c105c5a91ab38351144f2269f44fb226c7147b8b3934d - Sigstore transparency entry: 2329126701
- Sigstore integration time:
-
Permalink:
ossature/ossature@47dc2af02afea4d705e4eb2f336092bcbe5c5c12 -
Branch / Tag:
refs/tags/v0.2.1 - Owner: https://github.com/ossature
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@47dc2af02afea4d705e4eb2f336092bcbe5c5c12 -
Trigger Event:
push
-
Statement type:
File details
Details for the file ossature-0.2.1-py3-none-any.whl.
File metadata
- Download URL: ossature-0.2.1-py3-none-any.whl
- Upload date:
- Size: 185.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7ac49f53288e0dc118a7da0c8afe9f71bd76b1f57dde003732826c70b76740e4
|
|
| MD5 |
a863f86eb636b29f9b9ad82fa8b32829
|
|
| BLAKE2b-256 |
3d7fa1e73131c861e2699d2e2960b1f0aa0b4a9e07d950568900dfd87f28416c
|
Provenance
The following attestation bundles were made for ossature-0.2.1-py3-none-any.whl:
Publisher:
release.yml on ossature/ossature
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ossature-0.2.1-py3-none-any.whl -
Subject digest:
7ac49f53288e0dc118a7da0c8afe9f71bd76b1f57dde003732826c70b76740e4 - Sigstore transparency entry: 2329126759
- Sigstore integration time:
-
Permalink:
ossature/ossature@47dc2af02afea4d705e4eb2f336092bcbe5c5c12 -
Branch / Tag:
refs/tags/v0.2.1 - Owner: https://github.com/ossature
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@47dc2af02afea4d705e4eb2f336092bcbe5c5c12 -
Trigger Event:
push
-
Statement type: