FAQs
Quick answers to the most common Loom questions. New here? Start with What is Loom, then run Hello Loom.
Supported today (Alpha 1): local execution via loom run --local (Linux target), using host and Docker providers, caching, secrets, and includes/templates.
Planned: remote runners, runner pools, and broader environments.
Installation and setup
How do I install Loom and run my first workflow?
Use the canonical release-install procedure. It pins both an immutable release version and the reviewed installer revision for that release. Do not fetch the installer from main, omit the version, or pass latest.
The default install adds both loom and loom-mcp to ~/.local/bin.
Then follow Hello Loom for the first workflow, validation, local run, and where artifacts land.
Once set up, the standard invocation is:
loom run --local --workflow .loom/workflow.yml
What are the prerequisites?
- Always: a Linux environment for
loom run --localand a working Loom install on yourPATH(Hello Loom). - If your workflow uses
image:jobs: Docker installed with the daemon running. See Docker provider. - Workflow-specific: any language toolchains, CLIs, or credentials your scripts need. Loom runs them — it doesn't install them unless your workflow does.
Is Linux required?
Yes. Alpha 1 targets Linux for local execution. On macOS or Windows, run Loom inside a Linux environment. Docker-provider jobs (image: set) still work within that Linux context.
Execution and providers
Is remote execution supported?
Not today. Alpha 1 is local-only via loom run --local. See CLI run for canonical behavior.
What providers are supported?
| Provider | When used | Docs |
|---|---|---|
| Host | Jobs without image: — runs on your local shell | Host provider |
| Docker | Jobs with image: — runs inside a container | Docker provider |
Provider selection is automatic and per-job. See Providers.
Do I need Docker?
Only if your workflow uses the Docker provider (jobs with image:). Setup and requirements: Docker provider.
Workflow authoring
Do workflows support variables?
Yes — variables are a core concept. See Variables.
Do workflows support secrets?
Yes. Job-level secrets entries store provider references in workflow YAML. Loom redacts exact matches for resolved values in console/event output, receipt stdout/stderr, output-bearing errors, and provider lifecycle messages. Transformed values and raw declared artifacts are outside that protection, so inspect evidence before sharing it.
- Concepts → Secrets — mental model, injection modes, redaction
- Workflows → Secrets — YAML syntax, provider URIs, examples
Implemented providers: env://, keepass://, and op:// (1Password via Go SDK — no op CLI required).
How do I add secrets to a workflow?
Add a secrets block to a job; default.secrets is invalid. Each entry maps a name to a provider URI. This example checks the injected file without printing the value:
deploy:
stage: ci
target: linux
secrets:
API_TOKEN:
ref: env://DEPLOY_API_TOKEN
script:
- test -r "$API_TOKEN" && test -s "$API_TOKEN"
By default, file: true — the job receives a file path. Read it with cat "$VAR_NAME".
For the full authoring guide: Workflows → Secrets. For local setup patterns: Pattern: secrets for local development.
What do SECRETS_* error codes mean?
| Code | Meaning | Fix |
|---|---|---|
SECRETS_REQUIRED_MISSING | A required env var isn't set | Export it before running Loom |
SECRETS_REF_INVALID | The ref URI is malformed | Check the scheme (env://, keepass://, op://) |
SECRETS_PROVIDER_UNAVAILABLE | Provider not available (missing auth/config) | Verify provider config and credentials |
SECRETS_UNSAFE_DEBUG_TRACE | CI_DEBUG_TRACE=true + file: false secrets | Disable trace or switch to file: true |
Full reference with cause matrices: Secrets error codes.
Can I compose reusable workflow templates?
Yes. Use include to import template files and extends to inherit from hidden (.-prefixed) jobs:
include:
- local: .loom/templates/common.yml
check:
extends: .base
stage: ci
target: linux
script:
- pnpm i --frozen-lockfile
See Pattern: templates and includes and Includes and templates.
Caching
Does Loom support caching?
Yes. Cache configuration preserves directories such as package stores and build caches between runs. Loom restores a matching cache before running the script. Your package manager or build tool decides which work it can reuse; Loom still invokes the script.
- Cache concept — how caching works
- Workflows → Cache — YAML syntax, key design, policies
- Pattern: caching strategies — copy-pastable recipes for common use cases
What does --cache-diff compare?
Run with --cache-diff to compare a cache-off baseline with a cache-on variant in independent workspaces derived from the same pinned input snapshot:
loom run --local --cache-diff --workflow .loom/workflow.yml
The versioned declared-output/v1 contract compares node presence, status, exit code, and content manifests for declared cache paths and declared artifacts. Equality does not prove undeclared workspace side effects, stdout/stderr, timing, network behavior, or universal determinism.
After collecting complete evidence for both executions, Loom quarantines a participating cache-hit candidate for a divergent node only when exactly one eligible scope/key pair is associated with that node. It records ambiguous candidates without quarantine. This comparison does not establish universal cache safety. See Cache concept → Quarantine.
Troubleshooting
What should I read first when a run fails?
Use pointer-first diagnostics. Start with the Diagnostics ladder, then follow artifacts in order:
- Receipt — high-level metadata and run pointers: Receipts
- Manifest — what happened and where to find details: Runtime logs
- Structured events — the smallest "why it failed" evidence
- Only then fall back to raw stdout/stderr logs
For the formal schema: Runtime logs contract.
Where are run artifacts stored?
Under .loom/.runtime/:
| Artifact | Path | Docs |
|---|---|---|
| Receipts | .loom/.runtime/receipts/ | Receipts |
| Run logs | .loom/.runtime/logs/<run_id>/ | Runtime logs |
| Cache store | .loom/.runtime/cache/ | Cache concept |
Navigate via the receipt and manifests before opening large logs.
How do I find the run_id?
Two ways:
- Console output —
loom runprints therun_idand logs location. - Receipt filename — under
.loom/.runtime/receipts/, the receipt name includes therun_id. See Receipts contract.
What should I share when asking for help?
Start with What to share. As a rule of thumb:
- The command you ran (including flags)
- The
run_id(from console output or receipt) - The receipt path under
.loom/.runtime/receipts/ - The failing job/step pointer from the manifest (not a pasted wall of logs)
What Loom version should I include in a bug report?
Include the exact Loom binary you ran, any version string the CLI prints, and the run_id plus receipt/log pointers. See What to share.
CLI reference
Full CLI documentation: CLI overview.
Next steps
- Start here: Hello Loom
- Understand Loom: What is Loom
- Debug efficiently: Diagnostics ladder
- Handle secrets: Concepts → Secrets and Workflows → Secrets
- Optimize with caching: Cache concept and Caching strategies
- Compose workflows: Includes and templates
- Agent integration: Agent integration