LEMCSSH field guide
LEMCSSH exposes the reviewed LEMC command surface through stock OpenSSH. It is a restricted application endpoint, not a shell, bastion, SCP/SFTP service, or host login. Use it to register for the demo, discover authorized actions, run them, and inspect proof.
Register for the demo
No beta request is required. Register for the public demo at
demo.letemcook.dev with stock OpenSSH, use LEMCSSH to
run one reviewed Tool, and contact us
after the demo only if your team wants LEMC installed on its own
infrastructure.
Do not guess a host key or accept a changed fingerprint. Verify it out of band before the first connection.
Register for demo.letemcook.dev with SSH
Generate a distinct key, keep the private file local at mode 0600, and register only its public half through the LEMCSSH registration screen.
ssh-keygen -t ed25519 -a 64 -f ~/.ssh/lemc-demo
chmod 600 ~/.ssh/lemc-demo
# Verify the host-key fingerprint out of band.
# Register only ~/.ssh/lemc-demo.pub.
ssh -t -p 22 \
-i ~/.ssh/lemc-demo \
-o IdentitiesOnly=yes \
demo.letemcook.dev
LEMCSSH registration → Create demo account
The registration screen cannot run jobs, read product data, open a shell, or read storage. After the account is created, reconnect with the exact username from the confirmation.
Keep one verified SSH host configuration
Host demo.letemcook.dev
HostName demo.letemcook.dev
Port 22
User YOUR_EXACT_USERNAME
IdentityFile ~/.ssh/lemc-demo
IdentitiesOnly yes
StrictHostKeyChecking yes
Use this host configuration for every later command. A key is bound to one exact user and account; use a separate key and host configuration for another account.
Verify identity and discover actions
ssh demo.letemcook.dev auth whoami --format=json
ssh demo.letemcook.dev apps list --format=json
ssh demo.letemcook.dev jobs surface app \
--uuid APP_UUID \
--scope individual \
--format=json
auth whoamiconfirms the effective username and account.apps listreturns only apps authorized for this key.jobs surfacereturns the page, scope, recipe, stable action ID, and declared inputs.- Discovery does not grant permission. The server checks current authority again when the job is admitted.
Run and follow one reviewed action
ssh demo.letemcook.dev jobs run app \
--uuid APP_UUID \
--action ACTION_ID \
--set environment=production \
--follow \
--render json
Use only the action ID and declared form values returned by the surface. Do not select a runner, execution mode, host path, or arbitrary command. LEMC owns admission, isolation, scheduling, event persistence, and cleanup.
Inspect durable proof
ssh demo.letemcook.dev jobs status app \
--uuid APP_UUID \
--page 1 \
--scope individual \
--task-id TASK_ID \
--format=json
ssh demo.letemcook.dev jobs logs app \
--uuid APP_UUID \
--page 1 \
--scope individual \
--recipe "check release readiness" \
--task-id TASK_ID
ssh demo.letemcook.dev jobs artifacts list app \
--uuid APP_UUID \
--page 1 \
--scope individual \
--task-id TASK_ID
A complete caller checks the task ID, terminal status, terminal reason, system and recipe steps, logs, rendered output, artifacts, and cleanup result.
Build through the governed boundary
Accepted teams use the server-owned Builder through LEMCSSH. The agent never receives a Docker socket, host shell, or general container control plane. The agent sends a Dockerfile or source through bounded stdin. The Runner builds and tests in fresh jailed guests and returns managed image identity—including an immutable digest for cookbook pins.
- Discover contracts:
ssh HOST help --all --format=json, thenssh HOST builder images --help. - List managed images:
ssh HOST builder images list --format=json. - Compile and test with an explicit image and revision identity, for example
builder images compile-run IMAGE_UUID --expected-revision REVISION_UUID --idempotency-key REQUEST_UUID --follow, and send Dockerfile or source on bounded stdin. - Record the immutable digest the Builder returns. Cookbook YAML must pin that digest later.
- In recipe steps write
image: registry/.../name@sha256:<hex>(or the managed-digest form LEMC returns). Do not use:latest,:main, or any other mutable tag for hosted-untrusted runs.
ssh demo.letemcook.dev builder images --help
ssh demo.letemcook.dev builder images list --format=json
ssh demo.letemcook.dev builder images compile-run IMAGE_UUID \
--expected-revision REVISION_UUID \
--idempotency-key REQUEST_UUID \
--follow
Hosted-untrusted jobs require a digest-pinned image
(@sha256:…). A local Docker tag or remote
:latest is not production-ready. The SSH host is not a
bastion, SCP/SFTP endpoint, or administrative login—only the
published Builder and job commands apply. Full first-image steps:
Create the first Development Image.
Recipe secrets stay write-only and author-owned. The original
cookbook author binds each declared name in their User Secrets
catalog; values never appear in YAML. At job time LEMC injects each
bound value as a process environment variable with that exact name
(for example $TEAM1_GCP_SERVICE_ACCOUNT_JSON). Namespace
multi-team keys so two credentials never share one generic name.
Supply a value only through the write-only secret surface or bounded
stdin where the remote contract allows it; never put it in a prompt,
URL, argument list, log, or artifact. See
Secrets become environment variables
and
form fields → env.
Minimal agent loop
request beta access
→ register the invited key through LEMCSSH
→ verify the exact account
→ list authorized apps
→ inspect the action surface
→ run the returned action
→ follow events to terminal state
→ report the task ID and evidence
Keep planning and execution separate. The model can explain why it chose an action; LEMC supplies the evidence for what that action did.