Write your first feature spec and push it to the Acai.sh dashboard. Equip your LLM agents with the acai CLI and teach them to follow a spec-first workflow.
You need to create a team at https://app.acai.sh (or on your self-hosted server).From the Team Home page, create an access token.Save the token to .env:
Read our spec-writing tutorial for a slightly more detailed introduction to writing specs the Acai way.In short, the spec is just an organized list of acceptance criteria.
# features/my-feature.feature.yamlfeature: name: user-auth product: enterprise-apicomponents: LOGIN: requirements: 1: Shows an email and password input 2: Includes a "Forgot Password" link 3: On success, navigates to the team overviewconstraints: AUTH: 1: Does not leak information about existence or absence of a user's email
Spec files must be named <feature-name>.feature.yaml and must be somewhere under the features/ directory in the root of your git project.
AI can help you draft specs, but nothing beats an organic, pasture-raised, hand-written spec. Spec-writing is where the act of software engineering really happens.
By writing specs in structured yaml, we can refer to each requirement with a unique and stable identifier. For example, user-auth.LOGIN.3. We call these IDs “ACIDs” (Acceptance Criteria Identifier).The Acai CLI scans your repo to find ACIDs in comments and in tests.
These simple refs help guide AI agents during implementation, assists code review and QA, and helps you enforce strong E2E test coverage.
animated-terminal.test.ts
// When we tag tests with requirement IDs, the acai.sh dashboard automatically tracks coverage!describe("Constraints", () => { // animated-terminal.DEV.1 - Dev constraint it("self-contained standalone component (no imports)", () => {});});describe("UI rendering", () => { // animated-terminal.FRAME.1 it("renders scrollable mock chat history", () => {}); // animated-terminal.FRAME.1-1 it("auto-scrolls ONLY if user is at bottom threshold", () => {}); // animated-terminal.FRAME.2 it("renders mock text input", () => {}); // animated-terminal.FRAME.2-1 it("ignores user typing and button interactions", () => {});});
Typically, LLMs are very good at annotating their work as they go, and are good at re-aligning it when the spec changes. Just make sure they have read the acai skill.
Acai scans the repo and pushes all specs and any references to specs / ACIDs.Log in to acai.sh to see an overview of your products, features and implementations. It is a helpful place to review coverage, flag issues, and to track specs and their implementations from PR to production.You (human or robot) can mark requirements as Completed when they are ready for review, Accepted when they pass your review, or Rejected if something was missed.
The acai server is open-source and containerized. You can host it yourself and point your CLI at it using an environment variable. See GitHub for more info.
# Example override, e.g. a local docker networkACAI_API_BASE_URL=http://caddy:80/api/v1# defaults to https://acai.sh/api/v1