Skip to main content
Authoring is invite-only private beta. You need an Aethis API key with authoring scopes and a model-provider key. Keep both on your server. Do not put either key in browser code, source files, tool transcripts, or issue comments.
Continue from agent setup and your first decision. This tutorial makes a one-field synthetic ruleset. It gives the literal asynchronous REST lifecycle first, then the matching MCP sequence. Review the source and complete test suite before generation. The final decision must identify the publication you just created.

Before you start

Use a Bash server shell with curl and jq. Disable shell tracing and load these environment variables securely:
Keep credentials out of command arguments. This helper sends headers through standard input to curl; do not enable verbose output or shell tracing. Each request is bounded. The generation poll has a separate 15-minute deadline.
Use an owned, private namespace; aethis/ is reserved for first-party rulesets. Save the project and job identifiers below. A client timeout does not cancel a server job: inspect that exact job before restarting or cleaning up.

The reviewed source and test oracle

Save this source as adult-access.md exactly as written:
Review the field vocabulary before generation. This source has one expected field: applicant_age_years of type integer. The two reviewed boundary cases are 18 → eligible and 17 → not_eligible. The source deliberately makes no claim about negative values; test malformed values separately as an input-error control instead of inventing a rule.

REST: the asynchronous authoring lifecycle

1

Create an empty project

2

Upload the reviewed source

3

Discover and review fields

Stop if discovery is incomplete, has critical gaps, or does not return applicant_age_years as an integer. Correct the approved source or add targeted guidance, then repeat discovery. Do not generate until a reviewer has accepted the field vocabulary.
4

Store reviewed tests

5

Start one generation job and retain its id

This endpoint starts an asynchronous job. Do not start another job because the client stops waiting. Poll the exact job through project status.
6

Wait for the recorded job

7

Run the tests, publish safely, and decide

The test run must report both reviewed cases passed before publish. The publish request leaves force_unsafe false. A failed test gate returns a structured 422; fix the candidate rather than bypassing it.
force_unsafe: true bypasses a failing stored-test gate and records an audit event. It is not the internal-only override for a binding presence-polarity finding; an ordinary authoring key cannot use that override. Neither belongs in this tutorial.

MCP: the same review gates

Install the current MCP server through the CLI. Before starting your coding agent, securely load PARTNER_QA_ANTHROPIC_KEY in the environment inherited by the agent and its MCP child process. The install command configures Aethis access; it does not copy this provider variable into the MCP configuration. Restart the agent from that prepared shell. A desktop agent launched elsewhere needs the same variable supplied through its secure process environment.
Tell your agent to use the same reviewed source and tests. The MCP server takes a provider-key reference, never the raw value:
MCP 0.17.4’s aethis_generate_and_test polls the project’s current job; it does not enforce equality with its original job ID. Keep one writer per project and inspect aethis_generation_status before retrying after a timeout. Use the REST sequence above when you need an executable exact-job guarantee. The convenience flow does not remove the field, test, publication-identity and decision gates.

What counts as complete

Keep the project id, generation job id, test rows, published ruleset id and decision envelope. A completed job is not a successful tutorial until the reviewed tests pass and the final decision contains the published identity. Next: compare versions and replay a pinned composition.