#The lore CLI
lore is the command-line client for Lore: it signs in to an instance, reads
and writes quests and folios, and builds, pushes and deploys apps from a laptop
or a CI job. This page lists every command group with what it is for and the
flags you will reach for first; lore <command> --help has the rest.
#Install
npm install -g @alepha/lore
lore --help
Inside an Alepha workspace that already depends on @alepha/lore,
yarn lore ... works without the global install.
#Signing in
| Where | How |
|---|---|
| A machine with a browser | lore login, then approve the code it prints. lore logout forgets it. |
| CI, or anything headless | Set LORE_API_KEY to an API key (ak_...) from your account's API keys page. |
| A self-hosted instance | Set LORE_URL to its address, for both of the above. |
lore login uses the OAuth device flow: it prints an address and a code to
enter there. The session is stored per instance in ~/.alepha/credentials.json,
refreshes itself, and ends after 30 days without a command, after 180 days at
most, or when you revoke it.
When a command runs, LORE_API_KEY wins over a stored login. With neither, the
command fails and says how to fix it: it never starts a login by itself, and
lore login refuses to run in CI, where nobody could approve the code.
#Choosing the project
Every project command looks for the project in this order:
--project <slug>(or-p);- the
LORE_PROJECTenvironment variable; - the nearest
.alepha/lore.json, found by walking up from the current directory.
.alepha/lore.json is written by lore project link <slug> and
lore project create <name>, and holds one field:
1{ "project": "my-project" }
#Conventions
- Names follow the MCP tools. The agent tool
quest_createislore quest create. Planning is covered: projects, epics, quests, folios and directories. Some tools have no command yet (feedback, automations, blights, sigils, app instances and release management), and a command can still take fewer flags than its tool (quest_createhasdueAt,lore quest createdoes not). - A delete needs
--yes. Nothing here prompts: an agent's shell has nothing to answer with. - Output is human-readable by default.
--output jsonprints JSON for scripts on the commands whose--helplists it: quests, folios and projects, but notlore deployorlore secrets, for instance. Logs go to standard error, so piping the output stays clean; a command that only logs, likelore secrets list, leaves standard output empty. - Long text (descriptions, folio content, messages) can be read from a file
with
@file, or from standard input with@-, on the flags whose help says so. - References. A quest is
12,Q12or'#Q12'(quoted, or the shell treats#as a comment). A folio isF12, an epic45orE45. The exception islore attachments push:--questand--foliotake the bare number. - Exit codes.
0success,1failure (including a partial write),3not signed in,4not allowed. A credential Lore rejects (expired or revoked) is3, and a refused permission4, on theproject,quest,folio,estate,registryandstackcommands; the others exit1for both.
#Environment variables
| Variable | What it does |
|---|---|
LORE_API_KEY |
The API key to authenticate with. Takes precedence over lore login. |
LORE_URL |
The instance. Defaults to https://lore.alepha.dev. |
LORE_PROJECT |
The project, when --project is not given. |
LORE_APP |
The app, for app commands. Defaults to the name in package.json, slugified. |
LORE_ENV |
The environment, for lore deploy and lore apps deploy. |
#Commands
#Projects
| Command | What it does |
|---|---|
lore project list |
The projects you are a member of. |
lore project info |
One project: its capabilities, areas and more. |
lore project context |
Orient yourself: areas, your quests, open epics, releases, folios and pinned folios. |
lore project activity |
What moved since --since <timestamp>, your own events included. |
lore project report [section] |
One Reports section as JSON, summary by default. --days N sets the period, 30 by default. |
lore project create <name> |
Create a project and link the current directory to it. --no-link skips the link. |
lore project link <slug> |
Link the current directory to an existing project. --force replaces another link. |
lore project merge |
Merge --source into --target, owners only. A dry run unless --no-dry-run: read the plan first. |
lore project create makes a project with the Deploy and watch apps
capability only, its Deploy apps option on and Track apps off. Turn on
the rest in the project's settings.
#Quests
| Command | What it does |
|---|---|
lore quest list |
Newest-updated first. --status, --tag, --epic, --search, --include-drafts, --limit (default 20, max 100), --offset. |
lore quest get <ref> |
One quest with its description, objectives (and their ids) and discussion. |
lore quest create |
--title, --area, --priority (required); --description, --size, --tag, --objective, --epic, --accept. |
lore quest update <ref> |
Change the title, description, area and other fields. |
lore quest accept <ref> |
Take the quest and start it. |
lore quest objective set <ref> |
Tick an objective by --objective <id>; --no-completed unticks it. |
lore quest comment add <ref> |
--body; --as <name> marks it as written by an agent. |
lore quest commit add <ref> |
--sha, --message, --repo. Records a commit, on a completed quest too. |
lore quest hold <ref> |
--reason, posted to the discussion. lore quest unhold <ref> lifts it. |
lore quest shelve <ref> |
Set a todo quest aside. lore quest unshelve <ref> brings it back. |
lore quest unassign <ref> |
Send an accepted quest back to todo. |
lore quest complete <ref> |
--message, --commit <sha> (repeatable), --waive <id>=<reason> for an objective not done. |
lore quest delete <ref> |
For good, with --yes. |
lore quest tags |
The tags the project uses. |
lore quest attachment get <ref> |
--attachment <id>, as quest get lists it. Prints text; --out <path> saves anything. |
lore quest update also takes --epic (0 takes it out) and --depends-on
(0 clears it); lore quest create takes --depends-on.
See Quests for the statuses and rules behind these.
#Epics
| Command | What it does |
|---|---|
lore epic list |
Every epic, whatever its status. |
lore epic get <ref> |
One epic: status, progress, plan and its folios. |
lore epic create |
--title (required); --description, --depends-on. Starts as a draft. |
lore epic update <ref> |
--title, --description, --depends-on (0 clears it). |
lore epic set status <ref> |
--status draft or ready. The other statuses follow from its quests. |
lore epic shelve <ref> |
Set it and its open quests aside. lore epic unshelve <ref> brings them back. |
lore epic delete <ref> |
With every quest in it, draft or ready only, with --yes. |
#Folios
| Command | What it does |
|---|---|
lore folio list |
Pinned first, then newest-updated. --epic narrows to one epic. |
lore folio get <ref> |
One folio: its summary and Markdown content. |
lore folio create |
--title, --summary, --content (required, @file works); --directory, --epic. |
lore folio search <query> |
The matches, each with a snippet. |
lore folio update <ref> |
--title, --summary, --content, --directory, --pinned, --epic (0 takes it out). |
lore folio history <ref> |
Its revisions; --output json carries their content. |
lore folio revert <ref> |
--revision <id>. What it replaces stays in the history. |
lore folio delete <ref> |
For good, with --yes. |
lore folio attachment list <ref> |
A folio's files. |
lore folio attachment rename <ref> |
--name, by the attachment's number. |
lore folio attachment delete <ref> |
With --yes, by the attachment's number. |
See Folios.
#Directories
| Command | What it does |
|---|---|
lore directory list |
What the root holds, or --directory <ref>. |
lore directory create <name> |
--parent to nest it. |
lore directory rename <ref> |
--name. |
lore directory move <ref> |
--parent, or the root without it. |
lore directory delete <ref> |
With --yes. --cascade also deletes everything it holds. |
#Attachments
lore attachments push ./chart.png --quest 1208
lore attachments push ./notes.pdf --folio 12 --name "Meeting notes.pdf"
One file per call, onto a quest or a folio. See Attachments.
#Releases
| Command | What it does |
|---|---|
lore releases check |
Fail when the open release tagged --tag still has unfinished quests. |
lore releases changelog |
Print that release's changelog as Markdown. |
lore releases cut |
Bump package.json (--bump takes major, minor or patch), prepend the notes to CHANGELOG.md, commit and tag, locally. |
lore releases publish |
Publish the release tagged --tag, if there is one. |
See Releases for how these fit in a release job.
The release's own record is here too, each naming it by --tag:
| Command | What it does |
|---|---|
lore releases list |
Every release, open and published. |
lore releases get |
One release, with its epics and quests. |
lore releases create |
Create one. --title, --description, --target-date. |
lore releases update |
Edit an open one. --new-tag moves its URL and breaks every shared link. |
lore releases attach |
Put an --epic or a --quest in it. An epic carries its quests. |
lore releases detach |
Take one out. |
lore releases reopen |
Undo a publication. |
lore releases set default |
Point the project's intake at --tag, or --clear it. |
lore releases delete |
Delete it. Needs --yes: a published release's frozen record exists nowhere else. |
lore releases changelog --frozen prints a release's changelog as Lore holds
it, published ones included. Without it the command serves a release job, and
refuses a published or incomplete release.
#Feedback
A reference is 120, P120 or '#P120'.
| Command | What it does |
|---|---|
lore feedback list |
The pending inbox, newest first. --status, --limit, --offset. |
lore feedback get <ref> |
One item: its report, where it was made from, files, quests and discussion. |
lore feedback attachment get |
Read a file: text is printed, --out saves anything. |
lore feedback comment add <ref> |
Comment, with --body. The reporter is told. --as <agent> marks it a machine's. |
lore feedback accept <ref> |
Accept it. Quests come from lore quest create --feedback <ref>. |
lore feedback reject <ref> |
Reject it. The row stays. |
#Blights and insights
A reference is 12 or B12.
| Command | What it does |
|---|---|
lore blight list |
The inbox: one row per root cause, open ones unless --include-resolved. |
lore blight resolve <ref> |
Close it for good. Check lore insights read --segment errors first: a later report never reopens it. |
lore blight forward <ref> |
Turn it into a new quest and close it. |
lore insights read |
Analytics, vitals and the error budget. --range, --segment, --traffic. |
#Automations
A rule is JSON, usually in a file (--rule @rule.json):
lore automation catalog names what it may hold. Every write takes the
--expected-revision you read, so a rule edited since is refused rather than
overwritten.
| Command | What it does |
|---|---|
lore automation catalog |
What a rule may say in this project. |
lore automation list |
The project's rules. --search, --state, --author-user-id. |
lore automation get <id> |
One rule, with its revision. |
lore automation create |
Create one, disabled. --enabled enables it in a second step. |
lore automation update <id> |
--title with --rule, or --enabled / --no-enabled alone. |
lore automation delete <id> |
Delete it. Needs --yes. |
lore automation test <id> |
Preview it, with no writes and no delivery. |
lore automation runs <id> |
Its retained runs. |
lore automation adoption preview <policy> |
What adopting a legacy policy would do. |
lore automation adopt <policy> |
Adopt it, permanently. Needs --confirm. |
lore automation variable list/set/delete/dependents |
The project's shared variables. |
#Quality
lore quality push sends the coverage and test totals of the last run to the
project's Quality report. --branch files them under another branch than
the checked-out one. It expects an Alepha project.
#Apps and deploys
| Command | What it does |
|---|---|
lore apps build |
Build this app for one or more deploy targets. |
lore deploy |
Deploy this app onto one of its environments. Without --tag it builds, pushes and deploys; with one it deploys that stored build. --env, --app, --sigil / --no-sigil. Same as lore apps deploy. |
lore apps redeploy |
Deploy a stored build onto every copy of the app whose environment ends with --suffix. |
lore apps destroy |
Take a copy down: --env and --confirm <app>/<env> are both required. |
lore deploy status |
Where a run got to, by --deployment, or a copy's newest by --app and --env. |
lore deploy rollback |
Go back to a --deployment. Code only: past a migration it needs --acknowledge-migrations. |
The deployed copies themselves, each named by --app and --env:
| Command | What it does |
|---|---|
lore apps instance list |
Every copy this project tracks. |
lore apps instance get |
One copy, with what it has unlocked. |
lore apps instance create |
Track a copy. Nothing is minted. --url, --ephemeral. |
lore apps instance update |
--new-app, --new-env, --url, or --estate-id (0 clears it). |
lore apps instance delete |
Forget a copy, its sigil and what it reported. It undeploys nothing. Needs --yes. |
A sigil is the key one copy reports with:
| Command | What it does |
|---|---|
lore sigil list |
Every key, with when it last reported. Never a token. |
lore sigil create |
Mint one for --app and --env, creating the copy if missing. Shown once. |
lore sigil rotate <id> |
Replace a token, keeping what it reported. Shown once. |
lore sigil delete <id> |
Delete it and that copy's analytics. Needs --yes. |
lore secrets manages the variables a deployed copy runs with. --env is
required, and no command ever prints a whole value (list shows a masked
prefix):
lore secrets set DATABASE_URL=postgres://... --env production
lore secrets set DATABASE_URL --env production # value read from $DATABASE_URL
lore secrets set --file .env.production --env production
lore secrets list --env production
lore secrets unset DATABASE_URL --env production
See Deploying an app for the whole flow.
#Artifacts
| Command | What it does |
|---|---|
lore artifacts push |
Pack the current build and push it. --tag, --app, --force. |
lore artifacts push-image |
Record a container image CI pushed, by --image and --digest. |
lore artifacts list |
What was built, one line per tag. --app, --tag, --limit. |
lore artifacts get |
One tag's builds and digests. --app, --tag, --runtime, --format. |
See Artifacts.
#Estates
| Command | What it does |
|---|---|
lore estate add <slug> |
Create a Bay estate, lend it to the project, and print the command to run on the machine. --label, --allow-deploys. |
lore estate list |
The estates lent to the project, and whether each is connected. |
See Estates.
#Container registries
| Command | What it does |
|---|---|
lore registry add <host> |
Store the project's credential for a registry. --username, and the token from standard input (--password-stdin) or --password @file. |
lore registry list |
Hosts and usernames, never a secret. |
lore registry remove <host> |
Forget the credential. |
#Stacks
A stack is a group of apps and services deployed together from one
compose.yml onto a Bay estate.
| Command | What it does |
|---|---|
lore stack create |
Create a stack with its default --estate, and upload its first revision from --file. |
lore stack deploy |
Deploy to an environment (-e, default production), uploading --file as a new revision first. --app with --tag deploys one member app. |
lore stack rollback |
Deploy an earlier revision again. Volumes and their data are untouched. |
lore stack destroy |
Forget an environment in Lore, and print the command that removes it from the machine. |
lore stack list |
The project's stacks and their environments. |
lore stack get |
One stack: routes, services and newest deploys of each environment. --env narrows it. Never a value. |
lore stack revisions |
A stack's revisions, newest first. |
lore stack secrets set/list/unset |
A stack environment's variables. set takes KEY=VALUE, KEY (read from $KEY), --file, or --generate for random values. |
lore stack route add/list/remove |
Serve a full domain from one service. |
lore stack ps |
The services: state, memory, restarts and image digest. |
lore stack logs <service> |
The tail of one service's logs. |
lore stack restart <service> |
Restart one service. |
--name picks the stack and defaults to the project slug. See
Stacks for Lore's side, and
Stacks in the Bay documentation for the file's format.