CLI reference
Commands, arguments, flags, and behavior for the Lific command line interface.
The CLI reads the configured SQLite database. Commands for issues, projects, pages, exports, search, comments, modules, labels, and folders do not require a running HTTP server.
Global options
lific [--config <PATH>] [--db <PATH>] [--json] <COMMAND>--config <PATH>selects a configuration file. It replaces automatic configuration discovery.--db <PATH>overridesdatabase.pathfor the command.--jsonwrites JSON output. Data commands also select JSON output when standard output is not a terminal.
Clap also provides --help and --version.
Server and setup
start
Starts the HTTP server. The server provides the REST API, the /mcp endpoint, OAuth routes, and the embedded web UI when web assets are present.
lific start [--port <PORT>] [--host <HOST>]Arguments
- None.
Flags
-p, --port <PORT>overridesserver.port.--host <HOST>overridesserver.host.
mcp
Runs the MCP server over standard input and standard output. Logs are written to standard error.
lific mcpArguments
- None.
Flags
- None.
init
Creates a configuration file when one is missing. It creates and migrates the database. It creates an initial API key when no API key exists. It installs and starts a supported background service unless --no-service is passed.
Without --config or --here, the command uses the platform configuration and data directories. If ./lific.toml already exists, it uses that file. --here uses ./lific.toml and the default ./lific.db layout.
lific init [--no-service] [--here]Arguments
- None.
Flags
--no-servicecreates the configuration and database without installing or starting a background service.--herecreates or uses the instance in the current directory. It conflicts with--config.
service install
Installs and starts the background service for the selected configuration. On Linux, Lific supports a systemd user unit. On macOS, it supports a LaunchAgent.
lific service installArguments
- None.
Flags
- None.
service uninstall
Stops the background service and removes its service definition.
lific service uninstallArguments
- None.
Flags
- None.
service status
Reports whether the supported background service is installed and active. It exits with a nonzero status when the service is missing or inactive.
lific service statusArguments
- None.
Flags
- None.
service stop
Stops the background service without removing its definition.
lific service stopArguments
- None.
Flags
- None.
service restart
Restarts the background service. It starts an installed service when it is stopped.
lific service restartArguments
- None.
Flags
- None.
doctor
Checks the configuration, database, backups, local server, OAuth discovery, and MCP initialization. When server.public_url is set, it also checks its OAuth discovery endpoint. It exits with a nonzero status when any check fails.
lific doctor [--key <API_KEY>]Arguments
- None.
Flags
--key <API_KEY>performs an authorized MCP check. It falls back toLIFIC_API_KEYwhen the flag is omitted.
Authentication and client connection
login
Starts an OAuth device authorization flow. At an interactive terminal, it prints a verification URL and code, then polls until approval. Without a terminal or with --non-interactive, it writes the device details as JSON and exits. Use --complete to resume polling for an existing device code.
The server URL comes from --url, then server.public_url, then http://127.0.0.1:<port>.
lific login [--url <URL>] [--non-interactive] [--complete <DEVICE_CODE>] [--label <LABEL>] [--no-store]Arguments
- None.
Flags
--url <URL>sets the server base URL.--non-interactiveprints device authorization JSON and does not poll.--complete <DEVICE_CODE>polls an existing device code until it is approved, denied, or expired.--label <LABEL>sends a human-readable label for the approval page.--no-storeprints an approved token instead of storing it.
logout
Deletes the stored OAuth credential for a server. It attempts token revocation before deletion. A revocation failure does not stop credential deletion.
lific logout [--url <URL>]Arguments
- None.
Flags
--url <URL>sets the server base URL. The default URL resolution matcheslific login.
connect
Writes MCP connection settings into selected AI client configuration files. The command requires an existing Lific database. With no --client at an interactive terminal, it offers a client picker. A non-interactive invocation must name one or more clients and pass --yes.
Known client identifiers are opencode, claude-code, claude-desktop, cursor, vscode, codex, zed, gemini, windsurf, goose, and crush.
lific connect [--client <CLIENT>]... [--scope <SCOPE>] [--stdio] [--oauth] [--url <URL>] [--key <API_KEY>] [--user <USERNAME>] [--yes] [--dry-run] [--skip-agents]Arguments
- None.
Flags
--client <CLIENT>selects a client. Repeat the flag to select multiple clients.--scope <SCOPE>selectsglobalorproject. The default isglobal.--stdiowrites a local MCP configuration that runslific --db <PATH> mcp.--oauthwrites a remote configuration without an authorization header. The client performs its own OAuth flow. It conflicts with--stdioand--key.--url <URL>overrides the remote MCP URL. The default usesserver.public_urlwith/mcp, orhttp://127.0.0.1:<port>/mcp.--key <API_KEY>writes this API key instead of creating connection keys.--user <USERNAME>selects the owner for created connection identities.--yesskips interactive confirmation prompts.--dry-runprints the planned configuration changes without writing files or creating keys.--skip-agentsdoes not write or update./AGENTS.md.
agents-md
Creates or updates the marker-delimited Lific section in an AGENTS.md file. Repeating the command replaces the existing Lific section and preserves surrounding content.
lific agents-md [--path <PATH>] [--project <PROJECT>]Arguments
- None.
Flags
--path <PATH>selects the AGENTS.md file. The default is./AGENTS.md.--project <PROJECT>inserts a project identifier into generated CLI examples.
key create
Creates an API key. The plaintext key is displayed once.
lific key create --name <NAME> [--user <USERNAME>] [--expires <DATE_OR_DATETIME>]Arguments
- None.
Flags
-n, --name <NAME>sets the API key name.-u, --user <USERNAME>assigns the key to a user.-e, --expires <DATE_OR_DATETIME>sets an ISO 8601 expiry date or datetime. Omit it for no expiry.
key assign
Assigns an existing API key to a user.
lific key assign --name <NAME> --user <USERNAME>Arguments
- None.
Flags
-n, --name <NAME>selects the API key.-u, --user <USERNAME>selects the user.
key list
Lists API key metadata. It does not display key values.
lific key listArguments
- None.
Flags
- None.
key revoke
Revokes an active API key by name.
lific key revoke --name <NAME>Arguments
- None.
Flags
-n, --name <NAME>selects the API key.
key rotate
Replaces an API key with a new key of the same name. The old key is removed. The new plaintext key is displayed once.
lific key rotate --name <NAME>Arguments
- None.
Flags
-n, --name <NAME>selects the API key.
Instance and user administration
instance info
Prints instance settings, configured server details, and user counts.
lific instance infoArguments
- None.
Flags
- None.
instance set
Updates only the instance settings named by passed flags.
lific instance set [--name <NAME>] [--signups <BOOLEAN>] [--signup-domains <DOMAINS>] [--session-days <DAYS>] [--login-message <MESSAGE>] [--auto-login <BOOLEAN>] [--authz-enforced <BOOLEAN>]Arguments
- None.
Flags
--name <NAME>sets the instance name. Pass an empty string to clear it.--signups <BOOLEAN>opens or closes self-service signup.--signup-domains <DOMAINS>sets comma-separated email domains permitted for self-registration. Pass an empty string to allow any domain.--session-days <DAYS>sets login session lifetime in days. The accepted range is 1 through 365.--login-message <MESSAGE>sets the message on the authentication screen. Pass an empty string to clear it.--auto-login <BOOLEAN>enables or disables browser-only automatic admin login.--authz-enforced <BOOLEAN>enables or disables project-scoped authorization enforcement.
user create
Creates a user account. If no password flag is present, the command prompts for a password at a terminal or reads one line from standard input.
lific user create --username <USERNAME> --email <EMAIL> [--password <PASSWORD>] [--admin] [--bot]Arguments
- None.
Flags
-u, --username <USERNAME>sets the unique, case-insensitive username.-e, --email <EMAIL>sets the unique email address.-p, --password <PASSWORD>sets the password.--admingrants administrator privileges.--botmarks the account as a bot.
user list
Lists user accounts.
lific user listArguments
- None.
Flags
- None.
user set-password
Sets a user's password and clears that user's sessions. Password input follows the same prompt behavior as user create.
lific user set-password --username <USERNAME> [--password <PASSWORD>]Arguments
- None.
Flags
-u, --username <USERNAME>selects the user.-p, --password <PASSWORD>sets the new password.
user promote
Promotes a user to administrator.
lific user promote --username <USERNAME>Arguments
- None.
Flags
-u, --username <USERNAME>selects the user.
user demote
Demotes an administrator to a regular user.
lific user demote --username <USERNAME>Arguments
- None.
Flags
-u, --username <USERNAME>selects the user.
member list
Lists project members and roles.
lific member list --project <PROJECT>Arguments
- None.
Flags
-p, --project <PROJECT>selects the project.
member add
Grants a user access to one project or every existing project.
lific member add (--project <PROJECT> | --all) --user <USERNAME> [--role <ROLE>]Arguments
- None.
Flags
-p, --project <PROJECT>selects one project. It conflicts with--all.-u, --user <USERNAME>selects the user.-r, --role <ROLE>setsviewer,maintainer, orlead. The default isviewer.--allgrants access to every existing project. It conflicts with--project.
member role
Changes a member's role in a project.
lific member role --project <PROJECT> --user <USERNAME> --role <ROLE>Arguments
- None.
Flags
-p, --project <PROJECT>selects the project.-u, --user <USERNAME>selects the member.-r, --role <ROLE>setsviewer,maintainer, orlead.
member remove
Removes a user's project membership.
lific member remove --project <PROJECT> --user <USERNAME>Arguments
- None.
Flags
-p, --project <PROJECT>selects the project.-u, --user <USERNAME>selects the member.
Issue commands
issue list
Lists issues in a project. Filters are combined when multiple filters are passed.
lific issue list --project <PROJECT> [--status <STATUS>] [--priority <PRIORITY>] [--module <MODULE>] [--label <LABEL>] [--workable] [--limit <LIMIT>]Arguments
- None.
Flags
-p, --project <PROJECT>selects the project.-s, --status <STATUS>filters bybacklog,todo,active,done, orcancelled.--priority <PRIORITY>filters byurgent,high,medium,low, ornone.-m, --module <MODULE>filters by module name.-l, --label <LABEL>filters by label name.-w, --workableincludes only issues without unresolved blockers.--limit <LIMIT>limits results. The default is 50.
issue get
Prints one issue, including its description and issue relations.
lific issue get <IDENTIFIER>Arguments
<IDENTIFIER>is an issue identifier such asLIF-42.
Flags
- None.
issue create
Creates an issue in a project.
lific issue create --project <PROJECT> --title <TITLE> [--description <MARKDOWN>] [--status <STATUS>] [--priority <PRIORITY>] [--module <MODULE>] [--labels <LABELS>]Arguments
- None.
Flags
-p, --project <PROJECT>selects the project.-t, --title <TITLE>sets the issue title.-d, --description <MARKDOWN>sets the Markdown description. The default is empty.-s, --status <STATUS>setsbacklog,todo,active,done, orcancelled. The default isbacklog.--priority <PRIORITY>setsurgent,high,medium,low, ornone. The default isnone.-m, --module <MODULE>assigns a module by name.-l, --labels <LABELS>attaches comma-separated labels.
issue update
Updates the fields named by passed flags. --labels replaces all issue labels.
lific issue update <IDENTIFIER> [--title <TITLE>] [--description <MARKDOWN>] [--status <STATUS>] [--priority <PRIORITY>] [--module <MODULE>] [--labels <LABELS>]Arguments
<IDENTIFIER>is an issue identifier such asLIF-42.
Flags
-t, --title <TITLE>sets the title.-d, --description <MARKDOWN>sets the description.-s, --status <STATUS>sets the status.--priority <PRIORITY>sets the priority.-m, --module <MODULE>assigns a module by name.-l, --labels <LABELS>replaces labels with a comma-separated list.
Project commands
project list
Lists projects.
lific project listArguments
- None.
Flags
- None.
project get
Prints one project.
lific project get <IDENTIFIER>Arguments
<IDENTIFIER>is the project identifier.
Flags
- None.
project create
Creates a project.
lific project create --name <NAME> --identifier <IDENTIFIER> [--description <DESCRIPTION>]Arguments
- None.
Flags
-n, --name <NAME>sets the project name.-i, --identifier <IDENTIFIER>sets the project identifier. It is limited to five characters.-d, --description <DESCRIPTION>sets the description. The default is empty.
project update
Updates the project fields named by passed flags.
lific project update <IDENTIFIER> [--name <NAME>] [--description <DESCRIPTION>]Arguments
<IDENTIFIER>is the project identifier.
Flags
-n, --name <NAME>sets the name.-d, --description <DESCRIPTION>sets the description.
Page and folder commands
page list
Lists pages in one project. Omitting --project lists workspace pages.
lific page list [--project <PROJECT>] [--folder <FOLDER>] [--label <LABEL>]Arguments
- None.
Flags
-p, --project <PROJECT>filters to a project.-f, --folder <FOLDER>filters by folder name.-l, --label <LABEL>filters by label name.
page get
Prints one page.
lific page get <IDENTIFIER>Arguments
<IDENTIFIER>is a page identifier such asLIF-DOC-1orDOC-1.
Flags
- None.
page create
Creates a project page or workspace page. Labels are ignored for workspace pages.
lific page create --title <TITLE> [--project <PROJECT>] [--folder <FOLDER>] [--content <MARKDOWN>] [--labels <LABELS>]Arguments
- None.
Flags
-t, --title <TITLE>sets the page title.-p, --project <PROJECT>assigns the page to a project. Omit it for a workspace page.-f, --folder <FOLDER>assigns a folder by name.-c, --content <MARKDOWN>sets the Markdown content. The default is empty.-l, --labels <LABELS>attaches comma-separated labels to a project page.
page update
Updates the fields named by passed flags. --labels replaces all labels. Folder and label changes are not available for workspace pages.
lific page update <IDENTIFIER> [--title <TITLE>] [--content <MARKDOWN>] [--folder <FOLDER>] [--labels <LABELS>]Arguments
<IDENTIFIER>is a page identifier such asLIF-DOC-1.
Flags
-t, --title <TITLE>sets the title.-c, --content <MARKDOWN>sets the content.-f, --folder <FOLDER>moves the page to a folder by name.-l, --labels <LABELS>replaces labels with a comma-separated list.
folder list
Lists folders in a project.
lific folder list --project <PROJECT>Arguments
- None.
Flags
-p, --project <PROJECT>selects the project.
folder create
Creates a folder in a project.
lific folder create --project <PROJECT> --name <NAME>Arguments
- None.
Flags
-p, --project <PROJECT>selects the project.-n, --name <NAME>sets the folder name.
folder update
Renames a folder.
lific folder update --project <PROJECT> --name <NAME> --new-name <NEW_NAME>Arguments
- None.
Flags
-p, --project <PROJECT>selects the project.-n, --name <NAME>selects the current folder name.--new-name <NEW_NAME>sets the new folder name.
folder delete
Deletes a folder.
lific folder delete --project <PROJECT> --name <NAME>Arguments
- None.
Flags
-p, --project <PROJECT>selects the project.-n, --name <NAME>selects the folder.
Module and label commands
module list
Lists modules in a project.
lific module list --project <PROJECT>Arguments
- None.
Flags
-p, --project <PROJECT>selects the project.
module create
Creates a module in a project.
lific module create --project <PROJECT> --name <NAME> [--description <DESCRIPTION>] [--status <STATUS>]Arguments
- None.
Flags
-p, --project <PROJECT>selects the project.-n, --name <NAME>sets the module name.-d, --description <DESCRIPTION>sets the description. The default is empty.-s, --status <STATUS>setsbacklog,planned,active,paused,done, orcancelled. The default isactive.
module update
Updates the module fields named by passed flags.
lific module update --project <PROJECT> --name <NAME> [--new-name <NEW_NAME>] [--description <DESCRIPTION>] [--status <STATUS>]Arguments
- None.
Flags
-p, --project <PROJECT>selects the project.-n, --name <NAME>selects the current module name.--new-name <NEW_NAME>sets the new module name.-d, --description <DESCRIPTION>sets the description.-s, --status <STATUS>sets the status.
module delete
Deletes a module.
lific module delete --project <PROJECT> --name <NAME>Arguments
- None.
Flags
-p, --project <PROJECT>selects the project.-n, --name <NAME>selects the module.
label list
Lists labels in a project.
lific label list --project <PROJECT>Arguments
- None.
Flags
-p, --project <PROJECT>selects the project.
label create
Creates a label in a project.
lific label create --project <PROJECT> --name <NAME> [--color <HEX>]Arguments
- None.
Flags
-p, --project <PROJECT>selects the project.-n, --name <NAME>sets the label name.-c, --color <HEX>sets the color as a hexadecimal value. The default is#6B7280.
label update
Updates the label fields named by passed flags.
lific label update --project <PROJECT> --name <NAME> [--new-name <NEW_NAME>] [--color <HEX>]Arguments
- None.
Flags
-p, --project <PROJECT>selects the project.-n, --name <NAME>selects the current label name.--new-name <NEW_NAME>sets the new label name.-c, --color <HEX>sets the color as a hexadecimal value.
label delete
Deletes a label.
lific label delete --project <PROJECT> --name <NAME>Arguments
- None.
Flags
-p, --project <PROJECT>selects the project.-n, --name <NAME>selects the label.
Comments, search, and export
comment list
Lists comments on an issue.
lific comment list <IDENTIFIER>Arguments
<IDENTIFIER>is an issue identifier such asLIF-42.
Flags
- None.
comment add
Adds a Markdown comment to an issue. If --user is omitted, the command uses the first administrator, then the first user.
lific comment add <IDENTIFIER> --content <MARKDOWN> [--user <USERNAME>]Arguments
<IDENTIFIER>is an issue identifier such asLIF-42.
Flags
-c, --content <MARKDOWN>sets the comment content.-u, --user <USERNAME>sets the comment author.
search
Searches issues and pages. It can be limited to one project.
lific search <QUERY> [--project <PROJECT>] [--limit <LIMIT>]Arguments
<QUERY>is the search text.
Flags
-p, --project <PROJECT>limits results to a project.-l, --limit <LIMIT>limits results. The default is 20.
export issue
Exports one issue as Markdown files in an output directory.
lific export issue <IDENTIFIER> --output <DIRECTORY>Arguments
<IDENTIFIER>is an issue identifier such asLIF-42.
Flags
-o, --output <DIRECTORY>selects the output directory.
export page
Exports one page as Markdown files in an output directory.
lific export page <IDENTIFIER> --output <DIRECTORY>Arguments
<IDENTIFIER>is a page identifier such asLIF-DOC-1.
Flags
-o, --output <DIRECTORY>selects the output directory.
export project
Exports a project as Markdown files in an output directory.
lific export project <PROJECT> --output <DIRECTORY>Arguments
<PROJECT>is the project identifier.
Flags
-o, --output <DIRECTORY>selects the output directory.
Backup and restore
dump
Writes a self-contained backup archive. The archive contains a consistent database snapshot, attachment blobs, and manifest.json.
lific dump [--out <PATH>]Arguments
- None.
Flags
--out <PATH>selects a file or existing directory. The default writes the timestamped archive to the current directory.
restore
Restores a data set from an archive created by lific dump. Stop the server before using this command. Without --force, it refuses to overwrite an existing database. With --force, it moves the existing database aside before restoring.
lific restore <ARCHIVE> [--force]Arguments
<ARCHIVE>is the path to a.tar.gzarchive created bylific dump.
Flags
--forcepermits replacement of an existing database.
Import commands
import github
Imports GitHub issues from a repository. Pull requests are excluded. Repeated imports skip issues that were already imported from the same source.
lific import github --repo <OWNER/REPOSITORY> --project <PROJECT> [--state <STATE>] [--token <TOKEN>] [--map-open <STATUS>] [--map-closed <STATUS>] [--user <USERNAME>] [--dry-run]Arguments
- None.
Flags
--repo <OWNER/REPOSITORY>selects the source repository.--project <PROJECT>selects the destination Lific project.--state <STATE>selectsopen,closed, orall. The default isall.--token <TOKEN>sets the GitHub token. It falls back toGITHUB_TOKEN.--map-open <STATUS>maps open GitHub issues to a Lific status. The default isbacklog.--map-closed <STATUS>maps closed GitHub issues to a Lific status. The default isdone.--user <USERNAME>selects the owner of the import bot.--dry-runreports planned changes without writing data.
import linear
Imports issues from a Linear team. Repeated imports skip issues that were already imported from the same source.
lific import linear --team <TEAM> --project <PROJECT> [--token <TOKEN>] [--user <USERNAME>] [--dry-run]Arguments
- None.
Flags
--team <TEAM>selects the Linear team key.--project <PROJECT>selects the destination Lific project.--token <TOKEN>sets the Linear personal API key. It falls back toLINEAR_API_KEYand is required.--user <USERNAME>selects the owner of the import bot.--dry-runreports planned changes without writing data.
import jira
Imports issues from a Jira Cloud project. Repeated imports skip issues that were already imported from the same source.
lific import jira --site <SITE> --jira-project <JIRA_PROJECT> --project <PROJECT> [--email <EMAIL>] [--token <TOKEN>] [--user <USERNAME>] [--dry-run]Arguments
- None.
Flags
--site <SITE>selects the Jira site subdomain.--jira-project <JIRA_PROJECT>selects the Jira project key.--project <PROJECT>selects the destination Lific project.--email <EMAIL>sets the Jira account email. It falls back toJIRA_EMAILand is required.--token <TOKEN>sets the Jira API token. It falls back toJIRA_API_TOKENand is required.--user <USERNAME>selects the owner of the import bot.--dry-runreports planned changes without writing data.
Shell completion
completion
Writes completion definitions for one supported shell.
lific completion <SHELL>Arguments
<SHELL>is one ofbash,zsh,fish,powershell, orelvish.
Flags
- None.