CLI for the Aethis developer API — author, test, and publish rule bundles
Project description
aethis-cli
CLI for the Aethis developer API — evaluate eligibility, author rule bundles, and publish from the terminal.
Install
pip install aethis-cli
Quick start
No sign-up needed. Decision tools work immediately.
# Evaluate eligibility against a published bundle
aethis decide -b <bundle_id> -i '{"space.crew.age": 35, "space.medical.cert_valid": true}'
# Inspect the input fields a bundle expects
aethis fields -b <bundle_id>
# Get human-readable rule descriptions
aethis explain -b <bundle_id>
Author your own rules
Rule authoring is invite-only private beta. Decision tools (aethis decide, aethis fields, aethis explain) work immediately with no sign-up — this section is for approved beta tenants. Request access →
# 1. Authenticate (creates a key via browser sign-in)
aethis account generate
# Or paste an existing key: aethis login
# 2. Initialise a project
mkdir my-rules && cd my-rules
aethis init
# 3. Add source documents and guidance
# (put PDFs/text in .aethis/sources/, hints in .aethis/guidance/hints.yaml)
# 4. Generate a rule bundle
aethis generate
# 5. Run test cases
aethis test
# 6. Publish the bundle
aethis publish
Try the example
A complete, runnable example is included in examples/spacecraft-crew-rules/:
cp -r examples/spacecraft-crew-rules my-first-rules && cd my-first-rules
aethis account generate
aethis generate --poll
aethis test
aethis decide -i '{"space.crew.species": "Human", "space.crew.age": 35, "space.crew.flight_hours": 600, "space.crew.has_pilot_license": true, "space.crew.has_gaa_exam": true, "space.medical.cert_valid": true, "space.mission.type": "suborbital", "space.crew.has_towel": true}'
See examples/spacecraft-crew-rules/README.md for details.
Commands
Decision (no API key required)
| Command | Description |
|---|---|
aethis decide -b <bundle_id> -i '<json>' |
Evaluate eligibility. Add --explain for trace output. |
aethis fields -b <bundle_id> |
Show input fields the bundle expects |
aethis explain -b <bundle_id> |
Human-readable rule descriptions |
Authoring
| Command | Description |
|---|---|
aethis init |
Initialise a new project in the current directory |
aethis generate [--poll] |
Upload sources + guidance, trigger generation |
aethis status |
Check generation job progress |
aethis test |
Run test cases against the latest bundle |
aethis publish [--force] |
Set the latest bundle as active |
Guidance (project-level)
Project guidance lives in .aethis/guidance/hints.yaml and is uploaded by aethis generate. These commands manage hints server-side after upload.
| Command | Description |
|---|---|
aethis guidance list |
List active hints for the current project |
aethis guidance export <file> |
Export the current project's hints to YAML |
aethis guidance import <file> |
Import hints from a YAML file |
aethis guidance deactivate <hint_id> |
Deactivate a specific hint |
Projects & bundles
| Command | Description |
|---|---|
aethis projects list |
List your projects |
aethis projects show <project_id> |
Show project details |
aethis projects archive <project_id> |
Archive a project |
aethis bundles list |
List published bundles |
aethis bundles archive <bundle_id> |
Archive a bundle |
Account
| Command | Description |
|---|---|
aethis account generate |
Create an API key via browser sign-in |
aethis account keys |
List your API keys (masked) |
aethis account revoke <key_id> |
Revoke a key |
aethis login |
Paste an existing key |
Project structure
After aethis init, your project looks like:
my-rules/
.aethis/
aethis.yaml # project config
state.json # tracked IDs (project, bundle, job)
sources/ # PDF/text source documents
guidance/
hints.yaml # guidance hints for the code synthesizer
tests/
scenarios.yaml # golden test cases
aethis.yaml
project: my-rules
api_key_env: AETHIS_API_KEY
base_url: https://api.aethis.ai
scenarios.yaml
tests:
- name: "Eligible — all requirements met"
inputs:
space.crew.age: 35
space.crew.flight_hours: 600
space.crew.has_pilot_license: true
expect:
outcome: eligible
- name: "Not eligible — no medical cert"
inputs:
space.medical.cert_valid: false
expect:
outcome: not_eligible
Environment variables
| Variable | Description | Required | Default |
|---|---|---|---|
AETHIS_API_KEY |
Your API key (ak_live_...) |
Authoring only | — |
AETHIS_BASE_URL |
API base URL | No | https://api.aethis.ai |
AETHIS_CLERK_DOMAIN |
Clerk domain override (development only) | No | clerk.aethis.legal |
Extending with plugins
aethis-cli discovers third-party plugins via Python entry points under the aethis_cli.plugins group. A plugin is any installed package that exposes a register(app: typer.Typer) -> None callable; at startup the CLI calls it with the root Typer app and the plugin attaches extra commands.
Example pyproject.toml:
[project.entry-points."aethis_cli.plugins"]
my_plugin = "my_package.plugin:register"
Example my_package/plugin.py:
import typer
def register(app: typer.Typer) -> None:
@app.command()
def hello() -> None:
typer.echo("hello from my plugin")
Staff-only tools (DSL source viewer, IAM registry, domain-guidance management, --base-url override) live in the private aethis-cli-internal package, installed on request.
Development
git clone https://github.com/aethis-ai/aethis-cli.git
cd aethis-cli
pip install -e ".[dev]"
pytest tests/ -v
Shell completions
# Install tab completion for your shell
aethis --install-completion bash # or zsh, fish, powershell
Troubleshooting
aethis generate times out but server continues
The server finishes even if your client disconnects. Wait 10–15 min, then run aethis bundles list — if the bundle appeared, run aethis test and aethis publish. Do not re-trigger generation; that creates a duplicate run.
aethis publish fails with "tests are failing"
publish refuses a bundle with failing tests. Fix with guidance + regenerate, or pass --force (not recommended for production).
422 Validation error on aethis decide
DATE fields must be passed as integer ordinals, not ISO strings. 2025-04-13 → 739354:
python3 -c "from datetime import date; print(date(2025,4,13).toordinal())"
Auth error: …
Your API key is missing, expired, or revoked. Run aethis login to paste a new one, or aethis account generate to create one.
403 Forbidden: missing scope
Your key lacks the required scope for the command. aethis whoami shows what your current key can do. Contact support to upgrade scopes.
Benchmarks
See how the engine compares to frontier LLMs on real-world eligibility rules: aethis-examples
License
MIT
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 aethis_cli-0.3.0.tar.gz.
File metadata
- Download URL: aethis_cli-0.3.0.tar.gz
- Upload date:
- Size: 39.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 |
4c9fbccf9e0f1cf1af5c4a27c9639fa13b22c9e104ce61c13a18bd1169355c18
|
|
| MD5 |
2500ac21d958dfcbca21254b226bb846
|
|
| BLAKE2b-256 |
94f58bad9a170b3cced93c34159f74be6623a7a8af6059245de9edff91496f03
|
Provenance
The following attestation bundles were made for aethis_cli-0.3.0.tar.gz:
Publisher:
publish.yml on Aethis-ai/aethis-cli
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
aethis_cli-0.3.0.tar.gz -
Subject digest:
4c9fbccf9e0f1cf1af5c4a27c9639fa13b22c9e104ce61c13a18bd1169355c18 - Sigstore transparency entry: 1340639489
- Sigstore integration time:
-
Permalink:
Aethis-ai/aethis-cli@dadd7c376ce51d01bc7b8fc8638f5c2981cc95ed -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/Aethis-ai
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@dadd7c376ce51d01bc7b8fc8638f5c2981cc95ed -
Trigger Event:
push
-
Statement type:
File details
Details for the file aethis_cli-0.3.0-py3-none-any.whl.
File metadata
- Download URL: aethis_cli-0.3.0-py3-none-any.whl
- Upload date:
- Size: 37.3 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 |
c69a12e66722679ce0b780f07a2e341ac9c7d977ba1f55079bc74e762a2ea49b
|
|
| MD5 |
1fa4d756cf2e64eef2b3fd6b8536ec8c
|
|
| BLAKE2b-256 |
f731f8bb6a1e926402f651d8cf2be4d9836af82d2117af5a1ac15fb4e60905ef
|
Provenance
The following attestation bundles were made for aethis_cli-0.3.0-py3-none-any.whl:
Publisher:
publish.yml on Aethis-ai/aethis-cli
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
aethis_cli-0.3.0-py3-none-any.whl -
Subject digest:
c69a12e66722679ce0b780f07a2e341ac9c7d977ba1f55079bc74e762a2ea49b - Sigstore transparency entry: 1340639496
- Sigstore integration time:
-
Permalink:
Aethis-ai/aethis-cli@dadd7c376ce51d01bc7b8fc8638f5c2981cc95ed -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/Aethis-ai
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@dadd7c376ce51d01bc7b8fc8638f5c2981cc95ed -
Trigger Event:
push
-
Statement type: