docs/README.md
Let'em Cook!
Unhinged, Accelerated DevOps for Agents & Users LEMC turns versioned recipes into discoverable, bounded actions that people click and agents run with
LEMCSSH.
Key pages
- Home — Product overview, sheriff field notes, and the human/agent action model.
- Documentation — This clickable HTML field guide.
- Contact — Reach out if you want help scaling your team with Let'em Cook!.
- Instance guide — A LEMC instance at release 20261002v1 or later serves its own
/llms.txtand/llms-full.txtfor its commands and YAML.lemcli guidein the LEMCSSH shell prints the full guide.
1. Start here
- What is Let'em Cook!? — Cookbooks, pages, recipes, steps, and shared execution.
- Publish a cookbook and grant the team — First Development Image, Cookbook bundle, Provider integration binding, App install, team ACLs, and advanced multi-recipe Apps.
- Tutorials — Six ordered lessons with complete maintained source, expected output, and cleanup proof.
- Advanced examples — A Secret-backed GCP Cookbook with explicit teardown and cloud inventory proof.
- Operational use cases — BYOK WordPress migrations, corporate Nmap PDF reports, timed infrastructure, Terraform labs, restore drills, and Day-2 self-service.
- Deterministic computational units — The boundary, its limits, and why it helps agents.
Use the public demo
When you only need to run an already-reviewed Tool, open the browser
UI at
https://demo.letemcook.dev,
follow the stock OpenSSH path on the
homepage, or use the
LEMCSSH field guide. Machine-readable
copy lives at llms.txt.
- Prefer a browser? Open https://demo.letemcook.dev. Prefer stock OpenSSH? Register at
demo.letemcook.dev. No beta request is required. - Create a distinct Ed25519 key, keep the private file at mode
0600, and register only the public half. Add aHost demo.letemcook.devblock withUser,IdentityFile,IdentitiesOnly yes, andStrictHostKeyChecking yes. - A person signs up with
ssh -t demo.letemcook.dev. If OpenSSH asks for aPassword:, leave it empty and press Enter to open signup. Then setUserto the username that LEMC shows. - Verify the host-key fingerprint out of band. Pipe
lemcli help --all --format=jsonandlemcli auth whoami --format=jsontossh -T demo.letemcook.devin one batch (ssh -T demo.letemcook.dev <<'EOF'…EOF) to read the command manifest and confirm identity. A person can run the same lines in the shell thatssh demo.letemcook.devopens. LEMCSSH refuses a one-shot command after the host name. - Find the action with
apps search WORDS, or list authorized apps. Inspect an action surface, and run only a returned action ID with its declared--setvalues, a new--idempotency-key, and--follow. - Confirm task ID, terminal reason, system and recipe steps, logs, artifacts, and cleanup proof with
jobs status,jobs logs, andjobs artifacts list.
Create your first governed capability
Teams author over LEMCSSH or in the Web UI. Each change needs its account permission or grant. The steps below are the product order of operations. The full role split, review checklist, and sample cookbook YAML live in Publish a cookbook and grant the team.
1. First Development Image (Builder)
- Inspect remote contracts:
lemcli help --all --format=jsonandlemcli builder images --help. - Create the image with
lemcli builder images create --name NAME --description TEXT --format=json <<DOCKERFILE, the Dockerfile lines, and a closingDOCKERFILEline (an input block in a piped batch). Add each source file withbuilder images source-files put. - Build and test with
lemcli builder images compile-run IMAGE_UUID --expected-revision REVISION_UUID --idempotency-key REQUEST_UUID --follow. Wait for statesucceeded. - Bind the verified build to each step with
cookbooks images use-build, or save its exactlocal/USERNAME/IMAGE@sha256:DIGESTreference in the YAML. Hosted runs accept only LEMC registry digests. Do not use:latest,:main, another mutable tag, or an outside registry. - The SSH host is not a shell or Docker host. Builds run in fresh jailed guests under LEMC policy. Details: Build through the governed boundary.
2. First cookbook
- Keep one reviewable bundle:
cookbook.yaml, image sources, optionalterraform/, tests, and README. - Define each
provider: NAMErequirement once in the top-levelsecretsalias catalog. Each requirement also namessecret: USERNAME/SECRET_NAME. A recipe or callback lists only the aliases that it needs. - Point every step
image:at a verified Builder build,local/USERNAME/IMAGE@sha256:DIGEST, never:latest. Put exactly one step in eachnow,in,every, and callback. Hosted jobs do not run a sequence of steps. - Never place Secret values in Git, YAML, agent prompts, command arguments, logs, or artifacts. A Custom Provider requirement names an owner-qualified Secret but carries no value or binding.
- A human reviews least privilege, network boundary, idempotency, timeouts, teardown, and proof before promote.
3. First app
- Publish the reviewed Cookbook with
cookbooks lifecycle published COOKBOOK_UUID --value true. This needs the Cookbookeditgrant and a verified build on each Local Image step. - Review and approve the exact Provider Profile version. Create each owner-qualified Secret in the write-only User Secrets catalog.
- The Cookbook owner binds every selected Provider requirement on the Cookbook's Providers tab. The app needs no separate setup. Only a selected Custom Provider guest receives plaintext. Each
NOW,IN,EVERY, or callback job receives one validated direct alias map of its selected aliases throughLEMC_PROVIDER_RESULTS_YAMLand its fixed integration context. - Create the app with
apps create --cookbook-uuid COOKBOOK_UUID --name NAME. It keeps its own copy of the YAML.apps refresh, orapps versionsandapps sync, picks up later Cookbook changes.
4. Share with users and agents
- App owners grant only the teammate or agent scope that should run the action:
apps acls add APP_UUID --user-id IDgivesindividual, andapps acls toggle ... --permission sharedaddsshared. - A run grant does not grant cookbook edit, image publication, secret retrieval, or account administration. Account permissions are separate View and Create switches for Apps, Cookbooks, Development Images, Secrets, and Providers.
- Callers discover with
apps search,apps list, andjobs surface, then run withjobs run ... --follow. - Browser and LEMCSSH share one durable task identity, step stream, terminal reason, logs, and artifacts. Custom Provider Secret values stay in the selected owner catalog and admitted Provider guest. Callers receive the bounded result, fixed integration context, and redacted proof.
5. More advanced apps
- Split capabilities into separate recipes (create, list, delete, launch-from-image) instead of one unbounded shell surface.
- Use callbacks and timed or recurring jobs for cleanup, TTL destroy, and governed child jobs with preflight and proof.
- Keep Terraform or other durable state under authorized
/lemcmounts so later jobs hydrate reviewed state. See Recipe state and LEMC verbs. - Expand form inputs carefully. A hosted guest drops
lemc.envlines, so do not depend on them. Use a reviewed Provider for Secret-backed work. - Prefer small, named recipes with explicit proof over a multi-purpose tool that looks like a scanner shell.
2. Humans and agents
- MCP integration vs LEMC's operating model — Governed supply chain, dynamic authority, isolation, human/agent usability, and durable evidence.
- LEMCSSH field guide — Discover, submit, follow, inspect, and retrieve.
3. Runtime and output
- Architecture — Server-owned execution, isolation, event fanout, and storage.
- Themes — Managed export, upload, preview, and promote of token-and-PNG bundles; account-admin selection; and agent authority.
- Recipe state and LEMC verbs — Wire format
verb.name;payload, form fields → env, Provider results and context, durable workspaces, artifacts, and visible output. - Form fields → env — Field types,
variablevsname, value not label, and non-secret precedence. - Builder over LEMCSSH — Bounded stdin, jailed compile, digest pin; not a shell or Docker host.
Agent quick path
- Fetch
/llms.txtfor the machine-readable map and both demo and author paths. - Authenticate with the target LEMC server.
- List authorized apps, then inspect an action surface with
lemcli jobs surface ... --format=json. - Choose a returned action ID and supply only its declared form values. Skip an action that
jobs surfacemarksneeds_setup. - Run it with
lemcli jobs run ... --action <action-id> --follow --render plain. - Confirm task ID, terminal reason, steps, logs, and artifacts.
- When authoring, follow the first-capability steps above and the publish guide before promoting digests or ACLs.
Execution mode, runner selection, and isolation policy are server/operator decisions. Clients do not choose them per request.