Skip to main content

Install

drwn install bootstraps a project by fetching all cards declared in card.lock into the local store, then writing effective project state. It is the standard first command after cloning a project.

Basic usage

drwn install

Reads .agents/drwn/card.lock, ensures every locked card is present in the local Git-backed store, then runs the same write pipeline as drwn write to materialize skills, MCP servers, and Cursor config.

If no card.lock is found, drwn install exits with an error and suggests drwn apply instead.

Flags

FlagDescription
--frozenFail instead of cloning, fetching, or modifying card.lock. Exits non-zero if any card needs to be fetched or if the lockfile would be updated.
--no-applyFetch and verify cards without writing downstream files. Reports card count and lockfile status; does not run drwn write.
--jsonEmit machine-readable JSON output.

Examples

# Typical first run after cloning
drwn install

# CI: fail if lock is stale or any card needs fetching
drwn install --frozen

# Resolve cards without writing downstream config
drwn install --no-apply

# Machine-readable output
drwn install --json

Exit codes

CodeMeaning
0All cards fetched; downstream state written (or skipped with --no-apply).
1One or more cards failed to fetch; errors reported per card. Also exits 1 when --frozen would require a clone, fetch, or lockfile update.

JSON output schema

{
"ok": true,
"cards": 3,
"applied": true,
"lockfileChanged": false
}

With --no-apply, applied is false. On failure, ok is false and the response includes "errors": [{ "card": "...", "message": "..." }].

Difference from drwn write

drwn install = fetch missing cards from lock + write downstream state.

drwn write = write downstream state only (cards must already be present in the store).

Use drwn install when you've just cloned a repo or when any card may not be present locally. Use drwn write for applying config changes when all cards are already in the store.

See also