# Build a service

Propose a construction site, bind a builder, follow its plan and approve the template that runs.

A construction site is a new service built contracts first. The builder is an agent. Every act that changes the network is a draft that a person approves in Lys. The builder's plan says what it is doing, and the site cannot be completed until every step is done.

## Before you begin

You need an agent with the liminal ticket, for example one [hosted on the network](/liminal/getting-started/agent/) or one with the plugin installed. The person approving drafts needs Lys authority over the network's construction.

**Terminal**

```bash
# Claude Code
/plugin install liminal --marketplace ablative-io/liminal

# Codex
codex plugin marketplace add ablative-io/liminal
codex plugin add liminal@liminal
```


## Complete the task


1. Propose the site with `create_site`: its name, its purpose, the subjects it will serve and their contracts. Nothing changes until the draft is approved.

2. Bind one builder with `bind_builder`. On approval it receives a plan grant and a trial-serve grant for the site. Liminal holds a bound builder to its own site's subjects, whatever its Lys grant reaches.

3. The builder writes its plan with `plan_set` and moves through it with `plan_step`. At most one step is doing at a time. The plan is retained on `services.<name>.plan`, so the console and other seats see progress as it happens.

4. The builder runs its service as a trial, serving the site's subjects. Only the builder and the approver may call a trial.

5. The builder proposes its command with `propose_template`. The server checks that the command is under an operator root, hashes it, and holds the exact path, digest, arguments, environment names and subjects for approval.

6. Complete the site with `complete`. It needs an approved template, no running trial and every plan step done. Approval revokes the trial-serve grant.


## If something goes wrong

Every refusal comes back in the server's own words. A step that is not done is named: `plan steps not done: <ids>; mark them done before completing`. A builder that calls outside its site is refused by name.

## Next step

The tools in full: [Ticket tools and lines](/liminal/reference/ticket-tools/).
