Skip to content
Clor / Docs

Command reference

Browse every public command and flag

Public commands

This reference is generated from the same command tree as the shipped CLI. Hidden operational commands are excluded.

clor

Fast web research, AI text/image/audio inference, social-platform research, email, cloud files, encrypted secrets, and bulk domain name checking, and more

One CLI with many services: web research, inference across Claude/GPT/Gemini/ElevenLabs (text, images, audio), social-platform reads, email over IMAP/SMTP, cloud-stored files with Unix-style verbs, encrypted JSON secrets, and bulk domain name checking, and more. New here? Run `clor account login` first (browser approval; the issued API key is saved automatically and reused by every subcommand). Then run `clor <subcommand> --help` on any group to see flags, output shapes, and runnable examples. `clor --long-help` dumps every subcommand's help in one shot if you want the whole tree.

Usage
clor [flags]
FlagDescription
--clor-direxplicit path to the clor home directory holding config, state, and caches (overrides $CLOR_DIR; defaults to ~/.clor)
--configexplicit path to the TOML config file (overrides --clor-dir); defaults to <clor-dir>/config.toml
--helphelp for clor
--impersonaterun commands as another team member by user id, like sudo (requires team admin, or a delegate grant from that member)
--profileAPI-key profile to use for this command (overrides CLOR_PROFILE and the persisted default_profile); manage with `clor account profile`
--stderr-filewrite stderr to this file instead of the terminal
--stderr-formatstderr format for progress/diagnostic events: text (logfmt with event= leader), jsonl (one JSON object per line), or json (single pretty-printed object) Default text
--stdout-filewrite stdout to this file instead of the terminal
--stdout-formatstdout format: text (logfmt with event= leader), jsonl (one JSON object per line), or json (single pretty-printed object) Default text

clor account

Sign in, see who is signed in (whoami), credit balance, recharge settings, and per-service usage

Read-only views of the account behind the current API key: who is signed in, account name and recharge settings, credit balance, and recent per-service spend.

Usage
clor account [flags]
FlagDescription
--helphelp for account

clor account claim

Complete a sign-in approval by polling the token printed by `account login`

Single poll by default: status=pending|approved|cancelled|expired. On approved, persist the issued API key and report who is signed in. With --wait, block-poll until a terminal state or TTL elapses.

Usage
clor account claim <TOKEN> [flags]
FlagDescription
--helphelp for claim
--waitblock until the claim is approved, cancelled, or expires (default: true at an interactive terminal, false otherwise)

clor account credit

Inspect the account's prepaid credit balance

Usage
clor account credit [flags]
FlagDescription
--helphelp for credit

clor account credit show

Show the current credit balance in USD with the last-updated timestamp and dashboard URL

Usage
clor account credit show [flags]
FlagDescription
--helphelp for show

clor account delegate

Grant, list, and revoke the members who can run commands as you with --impersonate

A delegate is a member allowed to run commands as you with the --impersonate flag, like sudo scoped to acting as you. Team admins can already act as any member, so delegating is for giving one specific member (a shared support or automation account) that power without making them an admin. Use when: - you want a support or automation account to run work as you - you want to see who can act as you, or who you can act as - you want to revoke a delegate you granted earlier Subcommands: add Allow a member to run commands as you list Show who can act as you and who you can act as remove Revoke a member's permission to run commands as you Output: every subcommand supports --stdout-format text|jsonl|json (default text, logfmt with event= leader).

Usage
clor account delegate [flags]
FlagDescription
--helphelp for delegate

clor account delegate add

Allow a member to run commands as you

Pass the member's user id. A team admin can list member ids with admin user list. Once added, that member can run commands as you with the --impersonate flag. Re-adding an existing delegate is a no-op.

Usage
clor account delegate add <DELEGATE USER ID> [flags]
FlagDescription
--helphelp for add

clor account delegate list

Show who can run commands as you (granted) and who you can run as (received)

Two sections. Granted is the members who may act as you. Received is the members you may act as, the user ids valid for --impersonate. JSON keys: granted, received.

Usage
clor account delegate list [flags]
FlagDescription
--helphelp for list

clor account delegate remove

Revoke a member's permission to run commands as you

Usage
clor account delegate remove <DELEGATE USER ID> [flags]
FlagDescription
--helphelp for remove

clor account info

Show the account's name, id, auto-recharge state, and credits dashboard URL

Usage
clor account info [flags]
FlagDescription
--helphelp for info

clor account key

Create narrower API keys scoped to specific services and an optional expiry

Issue a new API key that is no more powerful than the key you are signed in with. The new key's capabilities must be a subset of your own, and it can expire sooner than yours but never later. Use it to give a node or a single workflow only the access it needs. Use when: - you want a per-node credential that runs spaces but cannot edit them - you want a key that can reach only one service, like drive - you want a key that expires automatically Subcommands: create Issue a new scoped, optionally expiring key Output: every subcommand supports --stdout-format text|jsonl|json (default text, logfmt with event= leader).

Usage
clor account key [flags]
FlagDescription
--helphelp for key

clor account key create

Issue a new API key scoped to the given capabilities with an optional expiry

Issue a new key whose capabilities are a subset of the signed-in key's. A capability is a service slug (drive) or a service and action (claw:run). Tags are the runner identity this key carries; a key needs a host= tag to claim and run claws on a node, plus any role tags. Tags are the creator's choice and need not fit the signed-in key's tags. The plaintext key is printed once and cannot be retrieved later, so capture it now.

Usage
clor account key create [flags]
FlagDescription
--capabilitya service slug (drive) or service:action (claw:run); repeatable Default []
--expireslifetime before the key stops working (e.g. 30m, 24h, 7d); omit for no expiry
--helphelp for create
--namelabel for the new key
--taga runner tag this key carries; a key needs a host= tag to run claws (host=db-1, gpu); repeatable, omit for a key that runs no claws Default []

clor account login

Sign in by approving a browser link, or pass a key directly with --key

Three modes: - --key clor_xxx: verify the supplied key and store it in the target profile (pair with --profile NAME to name the account). Scriptable, no browser. - No API key set: allocate an approval claim and print the URL plus the `clor account claim <TOKEN>` resume command. With --wait, block until approved and persist the issued key. - Key already set: verify it and report who is signed in. At an interactive terminal with --stdout-format text (default), the URL opens in the system browser and the command waits for approval. Pass --wait=false to print and exit; --no-browser (env CLOR_NO_BROWSER=1) to skip the browser pop.

Usage
clor account login [flags]
FlagDescription
--helphelp for login
--keyverify and store this API key (clor_xxx) directly instead of the browser flow; pair with --profile to name the account
--key-standard-inputread the API key from standard input, verify it, and store it
--no-browserdo not auto-open the approval URL in the system browser; print it for the user to open manually (env: CLOR_NO_BROWSER=1)
--waitafter starting a claim, block until the user approves, cancels, or it expires (default: true at an interactive terminal, false otherwise)

clor account logout

Sign out by removing the stored API key and node identity from this machine

Usage
clor account logout [flags]
FlagDescription
--helphelp for logout

clor account me

Show the user identity attached to the current API key (id, email, name, picture)

Usage
clor account me [flags]
FlagDescription
--helphelp for me

clor account profile

List, switch, and remove the API-key profiles stored on this machine

Each profile is one API key for one account, the way AWS profiles work. The active profile is chosen by the --profile flag, then CLOR_PROFILE, then the persisted default profile. Add a profile with `clor account login --key clor_xxx --profile NAME`. Use when: - the user holds keys for several accounts and wants to see them - the user wants to change which account is used by default - the user wants to drop a profile they no longer use Subcommands: list List stored profiles with active and default markers use Set the default profile used when no flag or env is given remove Delete a stored profile Output: every subcommand supports --stdout-format text|jsonl|json (default text, logfmt with event= leader).

Usage
clor account profile [flags]
FlagDescription
--helphelp for profile

clor account profile list

List stored profiles with active and default markers

Usage
clor account profile list [flags]
FlagDescription
--helphelp for list
--revealshow the verbatim API key instead of a redacted preview

clor account profile remove

Delete a stored profile and its key

Usage
clor account profile remove <NAME> [flags]
FlagDescription
--helphelp for remove

clor account profile use

Set the default profile used when no flag or environment override is given

Usage
clor account profile use <NAME> [flags]
FlagDescription
--helphelp for use

clor account ssh-key

Add, list, and remove SSH public keys available when creating machines

Save SSH public keys once, then select their fingerprints whenever you create a machine. Each key is available only to your account in the active team. Use when - you want to save an SSH public key for repeated machine creation - you need the fingerprint for a machine creation request - you want to remove a key you no longer use Subcommands add Store an SSH public key for machine selection list List SSH keys available when creating machines remove Remove an SSH key by its fingerprint Output. Every subcommand supports --stdout-format text|jsonl|json. Text output is logfmt with an event leader.

Usage
clor account ssh-key [flags]
FlagDescription
--helphelp for ssh-key

clor account ssh-key add

Store an SSH public key for machine selection

Usage
clor account ssh-key add <PUBLIC_KEY> [flags]
FlagDescription
--fileread the public key from this file
--helphelp for add
--namelabel for this SSH key

clor account ssh-key list

List SSH keys available when creating machines

Usage
clor account ssh-key list [flags]
FlagDescription
--helphelp for list

clor account ssh-key remove

Remove an SSH key by its fingerprint

Usage
clor account ssh-key remove <FINGERPRINT> [flags]
FlagDescription
--helphelp for remove

clor account usage

Show recent usage with a per-service spend and request-count breakdown

Returns total cost in USD, request count, and one row per service (search, inference, drive, etc.) over a chosen window. Pick the window with --since.

Usage
clor account usage [flags]
FlagDescription
--helphelp for usage
--sincehow far back to look (e.g. 30s, 90m, 24h, 7d, 2w, 1w3d) Default 24h

clor agent

Save Claude and Codex settings, credentials, and skills, install them into your local agent

Everything about the coding agents your spaces run. Save reusable, typed settings for Claude or Codex and install them into your local agent, store the OAuth tokens and API keys a space authenticates with, and save SKILL.md skills your agents pick up in every space. Use when: - you want to save a Claude or Codex settings profile and reuse it - you want to push a saved settings profile into your local ~/.codex/config.toml or Claude settings files - a space must run as a specific Claude or Codex account - you want to save a SKILL.md once and have every space's agent use it Subcommands: config Save, edit, and install typed Claude and Codex settings credential Store coding-agent OAuth tokens and API keys skill Save reusable agent skills, install them into the local agents Output: every subcommand supports --stdout-format text|jsonl|json (default text, logfmt with event= leader).

Usage
clor agent [flags]
FlagDescription
--helphelp for agent

clor agent config

Save, edit, and install typed Claude and Codex settings on your team

Reusable, typed settings for a coding agent, saved on your team. Each config is one agent type (claude or codex) carrying a typed settings body. Save several per type, edit one atomically by exporting the full JSON, changing it, and importing it back, and install a config into your local agent by merging it into ~/.codex/config.toml or ~/.claude/settings.json and ~/.claude.json, plus the user-configurable behavior prompt into ~/.codex/AGENTS.md or ~/.claude/CLAUDE.md below Clor's managed space context. Use when: - you want to save a Claude or Codex settings profile and reuse it - you want to edit a saved config's model, reasoning effort, or sandbox mode - you want to push a saved config into your local agent Subcommands: create Save a new config of a given type list List the team's saved configs show Show one config by id or name export Print a config's full JSON for editing import Replace a config's body from edited JSON install Merge a config into the local agent's settings file delete Delete a config Output: every subcommand supports --stdout-format text|jsonl|json (default text, logfmt with event= leader).

Usage
clor agent config [flags]
FlagDescription
--helphelp for config

clor agent config create

Save a new agent config of a given type

Creates one config of the given type under a name unique to your team. Supply the typed body as JSON on stdin or with --stdin-file; when omitted an empty template is saved that you can fill in later with export and import. Several configs per type are allowed.

Usage
clor agent config create [flags]
FlagDescription
--helphelp for create
--namename for the config, unique within your team
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead
--typeagent this config targets (claude|codex)

clor agent config delete

Delete an agent config by id or name

Permanently removes one saved config. This does not change native agent files written by an earlier installation.

Usage
clor agent config delete <ID> [flags]
FlagDescription
--helphelp for delete

clor agent config export

Print an agent config's full JSON body for editing

Prints the config's typed body as indented JSON with every field shown, including empty ones, so you can edit it and pipe the result back through `agent config import`. This is the export half of the atomic edit round trip; the body is the exact shape import reads.

Usage
clor agent config export <ID> [flags]
FlagDescription
--helphelp for export

clor agent config import

Replace an agent config's body from edited JSON

Reads a JSON config body from stdin or --stdin-file and atomically replaces the config, the import half of the export, edit, import round trip. The whole body is swapped, never merged. The config type is immutable; pass --name to rename the config at the same time.

Usage
clor agent config import <ID> [flags]
FlagDescription
--helphelp for import
--namerename the config while replacing its body
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead

clor agent config install

Merge an agent config into the local agent's native settings

Fetches the config from your team, checks the local agent binary is a supported minimum version or newer, then merges the config's managed keys into ~/.codex/config.toml or Claude's ~/.claude/settings.json and ~/.claude.json files. The agent's global instructions file, ~/.codex/AGENTS.md or ~/.claude/CLAUDE.md, gets an installer-managed block of Clor-owned space context followed by the config's user-configurable behavior prompt, both as plain text at the top, leaving every other byte in that file untouched. Outside a space only the behavior prompt is written and any earlier Clor context block is removed. It also trusts the space root and current directory in the agent's native project settings and completes Claude onboarding. Existing authentication, project, and unknown settings are preserved. Honors CODEX_HOME and CLAUDE_CONFIG_DIR.

Usage
clor agent config install <ID> [flags]
FlagDescription
--helphelp for install

clor agent config list

List the team's saved agent configs by id, name, and type

Metadata for every config your team has saved: id, name, type, and schema version. Use `agent config show` or `agent config export` to see one config's typed body.

Usage
clor agent config list [flags]
FlagDescription
--helphelp for list

clor agent config show

Show one agent config by id or name

Resolves the argument as a config id or, failing that, a config name, and prints its metadata and typed body. Use `agent config export` when you want only the body JSON to edit.

Usage
clor agent config show <ID> [flags]
FlagDescription
--helphelp for show

clor agent credential

Store agent OAuth tokens and API keys for Claude and Codex, then run spaces as that account

Password manager for coding-agent credentials. Each credential is a sealed token (a Claude or Codex OAuth token, or an Anthropic or OpenAI API key) tagged with its runtime and stored under a name. Attach one to a space and the daemon injects the matching environment variable into the spawned agent at run time, so the agent authenticates as that account on any host without a local sign-in. The token stays encrypted in the vault and is never copied onto the space, so rotating it once updates every space that uses it. Credential types: Claude Subscription Token: --runtime claude --oauth-token (injects CLAUDE_CODE_OAUTH_TOKEN) Anthropic API Key: --runtime claude --api-key (injects ANTHROPIC_API_KEY) Codex Access Token: --runtime codex --oauth-token (injects CODEX_ACCESS_TOKEN) OpenAI API Key: --runtime codex --api-key (injects OPENAI_API_KEY) Use when: - a space must run as a specific Claude or Codex account, or on a host that is not signed in locally - you want to bring your own Claude/Codex subscription or Anthropic/OpenAI API key to an unattended space - you need to rotate a token in one place across every space that uses it Subcommands: create Save an agent OAuth token or API key under a name list List saved credentials with their runtime and type show Show one credential's runtime and type without revealing the token test Validate a saved credential's token against its provider update Rotate the token, type, or runtime of a saved credential delete Permanently remove a saved credential Output: every subcommand supports --stdout-format text|jsonl|json (default text, logfmt with event= leader).

Usage
clor agent credential [flags]
FlagDescription
--helphelp for credential

clor agent credential create

Save an agent OAuth token or API key under a name for spaces to authenticate with

Supply exactly one of --oauth-token or --api-key. The token form pairs with --runtime to pick the environment variable the daemon injects. claude with an oauth token sets CLAUDE_CODE_OAUTH_TOKEN, claude with an api key sets ANTHROPIC_API_KEY, codex with an oauth token sets CODEX_ACCESS_TOKEN, and codex with an api key sets OPENAI_API_KEY. Re-running with the same name rotates the credential in place. How to get each token: Claude Subscription Token (--runtime claude --oauth-token) Run Claude Code agents on your Claude subscription using an OAuth token 1. Install Claude Code and sign in to your Claude subscription 2. Run `claude setup-token` in your terminal to start the OAuth flow 3. Approve the request in the browser, then copy the token that begins with sk-ant-oat- Anthropic API Key (--runtime claude --api-key) Run Claude Code agents against the Anthropic API with a long-lived API key 1. Open the Anthropic Console API keys page https://console.anthropic.com/settings/keys 2. Create a new API key and copy the value that begins with sk-ant- Codex Access Token (--runtime codex --oauth-token) Run Codex agents with a ChatGPT access token 1. In the active Business workspace, open Workspace settings → Permissions & roles as an owner or admin https://chatgpt.com/admin/access-tokens 2. Under Access tokens, turn on Allow users to create access tokens 3. Under Codex Local, turn on Allow members to use Codex Local 4. Create an access token (a one-year expiration is recommended) and paste it here OpenAI API Key (--runtime codex --api-key) Run Codex agents against the OpenAI API with a long-lived API key 1. Open the OpenAI platform API keys page https://platform.openai.com/api-keys 2. Create a new secret key and copy the value that begins with sk-

Usage
clor agent credential create <NAME> [flags]
FlagDescription
--api-keylong-lived provider API key
--helphelp for create
--oauth-tokenagent OAuth token from an interactive sign-in
--runtimeagent the credential authenticates (claude|codex)

clor agent credential delete

Permanently remove a saved credential

Permanent: no soft-delete or recovery window. Spaces referencing this credential by name fall back to machine file credentials on their next run.

Usage
clor agent credential delete <NAME> [flags]
FlagDescription
--helphelp for delete

clor agent credential list

List saved agent credentials by name without revealing any token

Metadata only (id, name, runtime, type, last access); tokens stay encrypted in the vault. Runtime and type come from plaintext labels, so listing never decrypts a token and never updates a credential's last access. Use `credential show` to decrypt one credential.

Usage
clor agent credential list [flags]
FlagDescription
--helphelp for list

clor agent credential show

Show one credential's runtime and type without revealing the token

Decrypts the credential to report its runtime and type and the environment variable the daemon would inject. The token value itself is never printed. Use `clor secret get` if you must read the raw token.

Usage
clor agent credential show <NAME> [flags]
FlagDescription
--helphelp for show

clor agent credential test

Validate a saved credential's token against its provider

Decrypts the credential and checks its token. API keys are validated with a short live call to the provider; subscription tokens are checked for the expected format. The token value itself is never printed. The command succeeds whenever the check runs and reports the verdict in the valid field; valid=false means the token was rejected or could not be confirmed. A non-zero exit means the credential could not be read.

Usage
clor agent credential test <NAME> [flags]
FlagDescription
--helphelp for test

clor agent credential update

Rotate the token, type, or runtime of a saved credential

Updates only the fields you pass. Supply a new --oauth-token or --api-key to rotate the token (at most one), and/or --runtime to retarget the agent. Unset fields keep their current value. The credential must already exist.

Usage
clor agent credential update <NAME> [flags]
FlagDescription
--api-keyrotate to a new provider API key
--helphelp for update
--oauth-tokenrotate to a new OAuth token
--runtimeretarget the agent the credential authenticates (claude|codex)

clor agent skill

Save reusable agent skills on your team and install them into Claude Code and Codex

Reusable skills for your coding agents, saved on your team. A skill is one SKILL.md, inline markdown installed as <slug>/SKILL.md into each agent's skills directory, or a source URL stored for reference. Spaces attach your visible skills at create; inside a space, install writes them into ~/.claude/skills and ~/.codex/skills. Use when: - you want to save a SKILL.md so every space's agent picks it up - you want to sync a skills directory from a file tree (import) - a space environment should install its attached skills at startup Subcommands: create Save a new skill from a SKILL.md file or a source URL list List the team's saved skills show Show one skill by id, name, or slug export Print a skill's SKILL.md markdown import Upsert a skill from a SKILL.md file install Write a space's attached skills into the local agents uninstall Remove the skills a previous install wrote delete Delete a skill Output: every subcommand supports --stdout-format text|jsonl|json (default text, logfmt with event= leader).

Usage
clor agent skill [flags]
FlagDescription
--helphelp for skill

clor agent skill create

Save a new agent skill from a SKILL.md file or a source URL

Creates one skill under a name unique to your team. Pass a SKILL.md file to store its full contents as the skill markdown; the file's frontmatter fills the name and description unless the flags override them. Pass --url instead to store a source URL without a body.

Usage
clor agent skill create [FILE] [flags]
FlagDescription
--descriptionwhat the skill does and when an agent should use it
--helphelp for create
--namename for the skill, unique within your team
--share-teamshare the skill with the rest of the team
--urlskill source URL to store instead of inline markdown

clor agent skill delete

Delete an agent skill

Usage
clor agent skill delete <ID> [flags]
FlagDescription
--helphelp for delete

clor agent skill export

Print an agent skill's SKILL.md markdown

Prints the skill's stored markdown verbatim, the editable form import reads back. A url skill has no markdown body; use `agent skill show` to see its source URL.

Usage
clor agent skill export <ID> [flags]
FlagDescription
--helphelp for export

clor agent skill import

Upsert an agent skill from a SKILL.md file

Reads a SKILL.md file and saves it as a skill: created when absent, replaced whole when present. The file's frontmatter fills the name and description unless the flags override them. Matching is by --slug when given, otherwise by name. --slug is the official directory sync's key and is accepted only from the official team's own key.

Usage
clor agent skill import <FILE> [flags]
FlagDescription
--descriptionoverride the frontmatter description
--helphelp for import
--nameoverride the frontmatter name
--slugstable upsert key for the official directory sync

clor agent skill install

Write a space's attached skills into the local agents' skills directories

Fetches the skills attached to this space and writes each markdown skill as <slug>/SKILL.md under ~/.claude/skills and ~/.codex/skills (honoring CLAUDE_CONFIG_DIR and CODEX_HOME). The space id comes from CLOR_SPACE_ID or --space; authentication is the normal key resolution, which inside a managed space is the space identity key. Re-running converges: skills removed from the space are removed locally, tracked by a receipt so nothing installed another way is touched. URL skills are listed but not installed.

Usage
clor agent skill install [flags]
FlagDescription
--helphelp for install
--spacespace id to install skills for (defaults to CLOR_SPACE_ID)

clor agent skill list

List the team's saved agent skills by id, name, and type

Metadata for every skill visible to you: your own, the team-shared rows, and the official directory. Use `agent skill show` or `agent skill export` to see one skill's markdown.

Usage
clor agent skill list [flags]
FlagDescription
--helphelp for list

clor agent skill show

Show one agent skill by id, name, or slug

Resolves the argument as a skill id or, failing that, a skill name or official slug, and prints its metadata. Use `agent skill export` when you want only the SKILL.md markdown.

Usage
clor agent skill show <ID> [flags]
FlagDescription
--helphelp for show

clor agent skill uninstall

Remove the skills a previous install wrote from the local agents

Removes every skill directory the install receipt lists under ~/.claude/skills and ~/.codex/skills, plus the receipt itself. Skills installed any other way are never touched. Purely local; no request is made.

Usage
clor agent skill uninstall [flags]
FlagDescription
--helphelp for uninstall

clor bluesky

Post to Bluesky and read it: timeline, feeds, threads, search, follow, like, notifications, direct messages

Speaks the AT Protocol directly to a Bluesky server, authenticated with a handle and an app password stored as a typed secret. Covers reading (timeline, custom and author feeds, threads, search, profiles), posting with rich-text links, hashtags, mentions, replies, quotes, images, and video, the social graph (follow, block, mute), engagement (like, repost), notifications, and direct messages. Use when: - the user wants to read their Bluesky timeline, a profile, a thread, or search posts - the user wants to post, reply, quote, like, repost, or delete - the user wants to follow, unfollow, block, or mute accounts - the user wants to read notifications or send and read direct messages Subcommands: account Manage saved Bluesky credentials timeline Read the home timeline feed List, read, and browse feeds thread Read a post and its replies post Create a post, reply, or quote pin Pin one of your posts to the top of your profile unpin Remove the pinned post from your profile card Preview a URL's link-card metadata before posting video Upload a video and track its transcode job delete Delete one of your posts search Search public posts profile Show, search, or update profiles follow Follow an account unfollow Stop following an account follower List who follows an account following List who an account follows block Block, unblock, and list blocked accounts mute Mute, unmute, and list muted accounts like Like a post unlike Remove your like repost Repost a post unrepost Remove your repost notification Read notifications and mark them seen chat Read and send direct messages Output: every subcommand supports --stdout-format text|jsonl|json (default text, logfmt with event= leader).

Usage
clor bluesky [flags]
FlagDescription
--helphelp for bluesky

clor bluesky account

Manage saved Bluesky credentials (handle, app password) used by every Bluesky subcommand

Credentials are stored as a typed secret (handle, app password, optional service host). Once saved, every Bluesky subcommand picks them up automatically (or via --account when more than one is configured). App passwords are generated in the Bluesky app under Settings, Privacy and Security, App Passwords. They bypass two-factor prompts, so no email-code step is needed. Never store the real account password here. Use when: - the user wants to register a Bluesky account for the CLI to use - the user wants to see which Bluesky accounts are saved - the user wants to inspect or rotate stored credentials - the user wants to remove a Bluesky account Subcommands: add Save or update a Bluesky account by handle and app password list List saved Bluesky accounts visible to the caller get Read one saved Bluesky account, with the raw JSON in json mode delete Permanently remove a saved Bluesky account by name Output: every subcommand supports --stdout-format text|jsonl|json (default text, logfmt with event= leader).

Usage
clor bluesky account [flags]
FlagDescription
--helphelp for account

clor bluesky account add

Save or update a Bluesky account by handle and app password for use by other Bluesky subcommands

[NAME] defaults to the handle itself; re-running with the same name updates in place. The app password is generated in the Bluesky app under Settings, Privacy and Security, App Passwords. It looks like xxxx-xxxx-xxxx-xxxx, applies only to API access, can be revoked independently, and bypasses two-factor prompts. Pass it on --app-password directly, or pipe it via --stdin-format text to keep it out of shell history. --service only needs setting for self-hosted servers; the default entryway routes to whichever server actually holds the repository.

Usage
clor bluesky account add [NAME] [flags]
FlagDescription
--app-passwordapp password from the Bluesky app (Settings, Privacy and Security, App Passwords), not the account password
--handleBluesky handle, e.g. you.bsky.social (required)
--helphelp for add
--serviceAT Protocol service host (default https://bsky.social; set only for self-hosted servers)
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead

clor bluesky account delete

Permanently remove a saved Bluesky account by name

After deletion the other Bluesky subcommands can no longer use the account unless re-added or supplied via --credentials-file or --stdin-format json.

Usage
clor bluesky account delete <NAME> [flags]
FlagDescription
--helphelp for delete

clor bluesky account get

Read a saved Bluesky account; pass --stdout-format json for the raw JSON including the app password

Default logfmt drops the app password; `--stdout-format json` returns the raw bluesky-account JSON suitable for piping into `clor bluesky <SUBCOMMAND> --stdin-format json`.

Usage
clor bluesky account get <NAME> [flags]
FlagDescription
--helphelp for get

clor bluesky account list

List saved Bluesky accounts with id and name

Metadata only (id, name, last access); app passwords stay encrypted server-side. Use `account get` to retrieve the full JSON.

Usage
clor bluesky account list [flags]
FlagDescription
--helphelp for list

clor bluesky block

Block and unblock accounts, and list the accounts you block

Blocking hides both directions: the account cannot see or interact with your posts, and theirs disappear from your views. Use when: - the user wants to block or unblock an account - the user wants to see who they have blocked Subcommands: add Block an account by handle or DID remove Unblock an account by handle or DID list List the accounts you block Output: every subcommand supports --stdout-format text|jsonl|json (default text, logfmt with event= leader).

Usage
clor bluesky block [flags]
FlagDescription
--helphelp for block

clor bluesky block add

Block one or more accounts by handle or DID in a single session

Usage
clor bluesky block add <HANDLE>... [flags]
FlagDescription
--accountsecret name to load credentials from (omit to auto-pick the only saved account)
--credentials-fileread bluesky-account JSON from this path instead of secrets (- for stdin)
--helphelp for add
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead

clor bluesky block list

List the accounts you block

Usage
clor bluesky block list [flags]
FlagDescription
--accountsecret name to load credentials from (omit to auto-pick the only saved account)
--credentials-fileread bluesky-account JSON from this path instead of secrets (- for stdin)
--cursorresume from a cursor returned by a previous call
--helphelp for list
--limitmaximum accounts to return (1-100 per call, paginated above 100) Default 50
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead

clor bluesky block remove

Unblock one or more accounts by handle or DID in a single session

Usage
clor bluesky block remove <HANDLE>... [flags]
FlagDescription
--accountsecret name to load credentials from (omit to auto-pick the only saved account)
--credentials-fileread bluesky-account JSON from this path instead of secrets (- for stdin)
--helphelp for remove
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead

clor bluesky card

Preview a URL's link-card metadata before posting: title, description, thumbnail

Preview the link card Bluesky would build for a URL, without posting. The card service returns the title, description, and a resized thumbnail image URL, so you can see what a post's card will look like and decide whether to override a field or supply your own thumbnail. Use when: - the user wants to see a URL's card title, description, and thumbnail before posting - the user wants to check whether a URL has a thumbnail so they can generate one when it does not - a workflow builds a post's link card in steps rather than in one shot Subcommands: extract Extract the title, description, and thumbnail for a URL Output: every subcommand supports --stdout-format text|jsonl|json (default text, logfmt with event= leader).

Usage
clor bluesky card [flags]
FlagDescription
--helphelp for card

clor bluesky card extract

Extract the title, description, and thumbnail Bluesky would show for a URL

Query the card service for the title, description, and thumbnail image URL Bluesky would show for <URL>. When image is empty the URL has no thumbnail; generate one and pass it to `clor bluesky post --link-card-thumbnail`. likely_type and error report how the card service classified the URL.

Usage
clor bluesky card extract <URL> [flags]
FlagDescription
--helphelp for extract

clor bluesky chat

Read and send direct messages: list conversations, read one, send a message

Direct messages are served by your own data server, not the public appview, so these subcommands proxy through it automatically. Use when: - the user wants to see their direct-message conversations - the user wants to read the messages in a conversation - the user wants to send someone a direct message Subcommands: list List your direct-message conversations read Read the messages in one conversation send Send a direct message to an account Output: every subcommand supports --stdout-format text|jsonl|json (default text, logfmt with event= leader).

Usage
clor bluesky chat [flags]
FlagDescription
--helphelp for chat

clor bluesky chat list

List your direct-message conversations with their members and unread counts

Usage
clor bluesky chat list [flags]
FlagDescription
--accountsecret name to load credentials from (omit to auto-pick the only saved account)
--credentials-fileread bluesky-account JSON from this path instead of secrets (- for stdin)
--cursorresume from a cursor returned by a previous call
--helphelp for list
--limitmaximum conversations to return (1-100 per call, paginated above 100) Default 30
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead

clor bluesky chat read

Read the messages in one conversation, oldest first

<CONVERSATION> is a conversation id from `clor bluesky chat list`. Messages are returned oldest first so a thread reads top to bottom.

Usage
clor bluesky chat read <CONVERSATION> [flags]
FlagDescription
--accountsecret name to load credentials from (omit to auto-pick the only saved account)
--credentials-fileread bluesky-account JSON from this path instead of secrets (- for stdin)
--helphelp for read
--limitmaximum messages to return (1-100) Default 50
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead

clor bluesky chat send

Send a direct message to an account by handle or DID

Opens or reuses the one-to-one conversation with <HANDLE> and sends <TEXT>. The recipient must allow direct messages from you.

Usage
clor bluesky chat send <HANDLE> <TEXT> [flags]
FlagDescription
--accountsecret name to load credentials from (omit to auto-pick the only saved account)
--credentials-fileread bluesky-account JSON from this path instead of secrets (- for stdin)
--helphelp for send
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead

clor bluesky delete

Delete one of your own posts by its at:// URI

<URI> is an at:// post URI, e.g. the one printed by `clor bluesky post`. Only records in your own repository can be deleted.

Usage
clor bluesky delete <URI> [flags]
FlagDescription
--accountsecret name to load credentials from (omit to auto-pick the only saved account)
--credentials-fileread bluesky-account JSON from this path instead of secrets (- for stdin)
--helphelp for delete
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead

clor bluesky feed

List saved feeds, read a custom or pinned feed, and read an account's posts

Read the custom and pinned feeds you follow in the app, and the author feed of any single account. A custom feed is an algorithmic feed generator (the kind you pin in the Bluesky app); the author feed is one account's own posts and reposts. Use when: - the user wants to read one of their saved or pinned feeds by name - the user wants to read a feed generator by its at:// URI - the user wants to see which feeds an account has saved or pinned - the user wants one account's own posts and reposts Subcommands: list List your saved and pinned feeds read Read the posts in a custom or pinned feed author Read the posts authored by one account Output: every subcommand supports --stdout-format text|jsonl|json (default text, logfmt with event= leader).

Usage
clor bluesky feed [flags]
FlagDescription
--helphelp for feed

clor bluesky feed author

Read the posts authored by one account, newest first

<HANDLE> is a handle (you.bsky.social) or a DID. Returns that account's own posts and reposts, the same feed shown on their profile.

Usage
clor bluesky feed author <HANDLE> [flags]
FlagDescription
--accountsecret name to load credentials from (omit to auto-pick the only saved account)
--credentials-fileread bluesky-account JSON from this path instead of secrets (- for stdin)
--cursorresume from a cursor returned by a previous call
--helphelp for author
--limitmaximum posts to return (1-100 per call, paginated above 100) Default 30
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead

clor bluesky feed list

List your saved and pinned feeds

Lists every feed saved to your account with a pinned= flag for the ones you have pinned. Feed-generator display names are resolved, so the name= attr matches what you see in the app. Pass a name or the uri= value to feed read.

Usage
clor bluesky feed list [flags]
FlagDescription
--accountsecret name to load credentials from (omit to auto-pick the only saved account)
--credentials-fileread bluesky-account JSON from this path instead of secrets (- for stdin)
--helphelp for list
--pinned-onlylist only the feeds you have pinned
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead

clor bluesky feed read

Read the posts in a custom or pinned feed, newest first

<FEED> is an at:// feed-generator URI, or the display name of a feed saved to your account (matched case-insensitively). Run feed list to see your saved feeds and their at:// URIs.

Usage
clor bluesky feed read <FEED> [flags]
FlagDescription
--accountsecret name to load credentials from (omit to auto-pick the only saved account)
--credentials-fileread bluesky-account JSON from this path instead of secrets (- for stdin)
--cursorresume from a cursor returned by a previous call
--helphelp for read
--limitmaximum posts to return (1-100 per call, paginated above 100) Default 30
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead

clor bluesky follow

Follow one or more accounts by handle or DID in a single session

Pass any number of handles or DIDs; they are all followed within one session, so following back a whole list of accounts is one call rather than one login per account. Passing DIDs skips handle resolution, so piping DIDs from `follower list` is the fastest path. A target that fails does not stop the rest.

Usage
clor bluesky follow <HANDLE>... [flags]
FlagDescription
--accountsecret name to load credentials from (omit to auto-pick the only saved account)
--credentials-fileread bluesky-account JSON from this path instead of secrets (- for stdin)
--helphelp for follow
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead

clor bluesky follower

List the accounts that follow an account

Use when: - the user wants to see who follows them or another account Subcommands: list List the accounts that follow a handle (defaults to your own) Output: the list subcommand supports --stdout-format text|jsonl|json (default text, logfmt with event= leader).

Usage
clor bluesky follower [flags]
FlagDescription
--helphelp for follower

clor bluesky follower list

List the accounts that follow an account, defaulting to your own

With --not-following, only followers you do not follow back are returned, which is the candidate set for a follow-back: pipe their DIDs into `clor bluesky follow` to follow them all in one session.

Usage
clor bluesky follower list [HANDLE] [flags]
FlagDescription
--accountsecret name to load credentials from (omit to auto-pick the only saved account)
--credentials-fileread bluesky-account JSON from this path instead of secrets (- for stdin)
--cursorresume from a cursor returned by a previous call
--helphelp for list
--limitmaximum accounts to return (1-100 per call, paginated above 100) Default 50
--not-followingreturn only followers you do not follow back
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead

clor bluesky following

List the accounts an account follows

Use when: - the user wants to see who they or another account follows Subcommands: list List the accounts a handle follows (defaults to your own) Output: the list subcommand supports --stdout-format text|jsonl|json (default text, logfmt with event= leader).

Usage
clor bluesky following [flags]
FlagDescription
--helphelp for following

clor bluesky following list

List the accounts an account follows, defaulting to your own

Usage
clor bluesky following list [HANDLE] [flags]
FlagDescription
--accountsecret name to load credentials from (omit to auto-pick the only saved account)
--credentials-fileread bluesky-account JSON from this path instead of secrets (- for stdin)
--cursorresume from a cursor returned by a previous call
--helphelp for list
--limitmaximum accounts to return (1-100 per call, paginated above 100) Default 50
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead

clor bluesky like

Like one or more posts by their at:// URIs in a single session

Pass any number of at:// post URIs; they are all liked within one session. A post that fails does not stop the rest.

Usage
clor bluesky like <URI>... [flags]
FlagDescription
--accountsecret name to load credentials from (omit to auto-pick the only saved account)
--credentials-fileread bluesky-account JSON from this path instead of secrets (- for stdin)
--helphelp for like
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead

clor bluesky mute

Mute and unmute accounts, and list the accounts you mute

Muting hides an account's posts from your views without telling them or restricting them. It is private and one-directional. Use when: - the user wants to mute or unmute an account - the user wants to see who they have muted Subcommands: add Mute an account by handle or DID remove Unmute an account by handle or DID list List the accounts you mute Output: every subcommand supports --stdout-format text|jsonl|json (default text, logfmt with event= leader).

Usage
clor bluesky mute [flags]
FlagDescription
--helphelp for mute

clor bluesky mute add

Mute one or more accounts by handle or DID in a single session

Usage
clor bluesky mute add <HANDLE>... [flags]
FlagDescription
--accountsecret name to load credentials from (omit to auto-pick the only saved account)
--credentials-fileread bluesky-account JSON from this path instead of secrets (- for stdin)
--helphelp for add
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead

clor bluesky mute list

List the accounts you mute

Usage
clor bluesky mute list [flags]
FlagDescription
--accountsecret name to load credentials from (omit to auto-pick the only saved account)
--credentials-fileread bluesky-account JSON from this path instead of secrets (- for stdin)
--cursorresume from a cursor returned by a previous call
--helphelp for list
--limitmaximum accounts to return (1-100 per call, paginated above 100) Default 50
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead

clor bluesky mute remove

Unmute one or more accounts by handle or DID in a single session

Usage
clor bluesky mute remove <HANDLE>... [flags]
FlagDescription
--accountsecret name to load credentials from (omit to auto-pick the only saved account)
--credentials-fileread bluesky-account JSON from this path instead of secrets (- for stdin)
--helphelp for remove
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead

clor bluesky notification

Read notifications (likes, reposts, follows, replies, mentions) and mark them seen

Use when: - the user wants to see who liked, reposted, followed, replied to, or mentioned them - the user wants to clear the unread notification badge Subcommands: list List recent notifications, optionally only unread ones seen Mark all notifications as seen as of now Output: every subcommand supports --stdout-format text|jsonl|json (default text, logfmt with event= leader).

Usage
clor bluesky notification [flags]
FlagDescription
--helphelp for notification

clor bluesky notification list

List recent notifications, optionally only unread ones or only certain reasons

--reason filters to one or more notification reasons (like, repost, follow, mention, reply, quote, starterpack-joined). A reply-bot, for example, lists only mention and reply notifications to decide what to answer.

Usage
clor bluesky notification list [flags]
FlagDescription
--accountsecret name to load credentials from (omit to auto-pick the only saved account)
--credentials-fileread bluesky-account JSON from this path instead of secrets (- for stdin)
--cursorresume from a cursor returned by a previous call
--helphelp for list
--limitmaximum notifications to return (1-100 per call, paginated above 100) Default 30
--reasonfilter to these reasons (like|repost|follow|mention|reply|quote|starterpack-joined), repeatable or comma-separated Default []
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead
--unread-onlyreturn only notifications you have not seen

clor bluesky notification seen

Mark all notifications as seen as of now

Usage
clor bluesky notification seen [flags]
FlagDescription
--accountsecret name to load credentials from (omit to auto-pick the only saved account)
--credentials-fileread bluesky-account JSON from this path instead of secrets (- for stdin)
--helphelp for seen
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead

clor bluesky pin

Pin one of your posts to the top of your profile by its at:// URI

Sets the pinnedPost on your app.bsky.actor.profile record to the post at <URI>, which the Bluesky app shows at the top of your profile. Pinning replaces any previously pinned post. Only your own profile is changed; the rest of it (display name, description, avatar, banner) is preserved. Prints the updated profile record's at:// URI.

Usage
clor bluesky pin <URI> [flags]
FlagDescription
--accountsecret name to load credentials from (omit to auto-pick the only saved account)
--credentials-fileread bluesky-account JSON from this path instead of secrets (- for stdin)
--helphelp for pin
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead

clor bluesky post

Create a post, optionally as a reply or quote, with images, a video, or a link card

Links, #hashtags, and @mentions in <TEXT> are detected and turned into rich-text facets automatically; mentions resolve to the right account. --reply and --quote take an at:// post URI. --image may be repeated up to four times; pair each with --image-alt in the same order for accessibility. --video-job embeds a finished upload from `clor bluesky video upload`. --link-card attaches a link card for a URL, rendered as a unified box with a thumbnail, title, and domain; the title, description, and thumbnail are fetched automatically and each --link-card-* flag overrides one field. A post carries at most one of images, a video, or a link card, and any of them can pair with a --quote. Prints the new post's at:// URI.

Usage
clor bluesky post <TEXT> [flags]
FlagDescription
--accountsecret name to load credentials from (omit to auto-pick the only saved account)
--credentials-fileread bluesky-account JSON from this path instead of secrets (- for stdin)
--helphelp for post
--imagepath to an image to attach (repeatable, up to 4) Default []
--image-altalt text for the image at the same position (repeatable) Default []
--languageBCP 47 language tag of the post text, e.g. en (repeatable) Default []
--link-cardattach a link card (app.bsky.embed.external) for this URL, fetching its title, description, and thumbnail
--link-card-descriptionoverride the link-card description
--link-card-no-fetchskip the metadata fetch and build the card from --link-card plus the override flags
--link-card-thumbnailuse this local image file as the link-card thumbnail instead of the fetched one
--link-card-titleoverride the link-card title
--quoteat:// URI of a post to quote
--replyat:// URI of a post to reply to
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead
--video-altalt text for the embedded video
--video-aspect-ratioaspect ratio of the video as W:H, e.g. 16:9
--video-captionWebVTT caption track as <FILE>:<LANG>, e.g. ./captions.vtt:en (repeatable) Default []
--video-jobembed the finished video from this upload job uid (from `clor bluesky video upload`)

clor bluesky profile

Read and update Bluesky profiles: show one account, or update your own

Show any account's profile, or update your own display name, description, avatar, and banner. Use when: - the user wants to see an account's bio and follower counts - the user wants to change their own display name or bio - the user wants to set a new avatar or banner image Subcommands: show Show one or more profiles (defaults to your own) search Search for accounts by name, handle, or bio keyword update Update your own display name, description, avatar, banner, or handle Output: every subcommand supports --stdout-format text|jsonl|json (default text, logfmt with event= leader).

Usage
clor bluesky profile [flags]
FlagDescription
--helphelp for profile

clor bluesky profile show

Show one or more profiles with follower counts, defaulting to your own

With no arguments, shows your own profile. Pass any number of handles or DIDs to hydrate them all in one session (batched 25 per call), which is how a bot turns a list of follower DIDs into follower counts. Each result carries a following= flag for whether you follow that account.

Usage
clor bluesky profile show [HANDLE]... [flags]
FlagDescription
--accountsecret name to load credentials from (omit to auto-pick the only saved account)
--credentials-fileread bluesky-account JSON from this path instead of secrets (- for stdin)
--helphelp for show
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead

clor bluesky profile update

Update your own display name, description, avatar, banner, or handle

Only the flags you pass change; everything else, including an existing avatar or banner, is preserved. --avatar and --banner take image file paths. --handle changes the account handle, for example to a custom domain you own. A custom-domain handle is verified against its DNS or well-known DID document before the change unless you pass --force.

Usage
clor bluesky profile update [flags]
FlagDescription
--accountsecret name to load credentials from (omit to auto-pick the only saved account)
--avatarpath to a new avatar image
--bannerpath to a new banner image
--credentials-fileread bluesky-account JSON from this path instead of secrets (- for stdin)
--descriptionnew profile description (pass empty to clear)
--display-namenew display name (pass empty to clear)
--forceskip the DNS and well-known verification and change the handle regardless
--handlenew account handle, for example a custom domain you own
--helphelp for update
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead

clor bluesky repost

Repost one or more posts by their at:// URIs in a single session

Pass any number of at:// post URIs; they are all reposted within one session. A post that fails does not stop the rest.

Usage
clor bluesky repost <URI>... [flags]
FlagDescription
--accountsecret name to load credentials from (omit to auto-pick the only saved account)
--credentials-fileread bluesky-account JSON from this path instead of secrets (- for stdin)
--helphelp for repost
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead

clor bluesky thread

Read a post and its reply tree, flattened depth-first with a depth attribute

<URI> is an at:// post URI, e.g. one printed by `clor bluesky timeline` or `clor bluesky post`. In text and jsonl the root sits at depth=0 and each reply carries depth=N; in json the nested thread is preserved.

Usage
clor bluesky thread <URI> [flags]
FlagDescription
--accountsecret name to load credentials from (omit to auto-pick the only saved account)
--credentials-fileread bluesky-account JSON from this path instead of secrets (- for stdin)
--depthhow many reply levels below the post to include Default 6
--helphelp for thread
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead

clor bluesky timeline

Read the home timeline of posts from accounts you follow, newest first

Usage
clor bluesky timeline [flags]
FlagDescription
--accountsecret name to load credentials from (omit to auto-pick the only saved account)
--credentials-fileread bluesky-account JSON from this path instead of secrets (- for stdin)
--cursorresume from a cursor returned by a previous call
--helphelp for timeline
--limitmaximum posts to return (1-100 per call, paginated above 100) Default 30
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead

clor bluesky unfollow

Stop following one or more accounts by handle or DID in a single session

Pass any number of handles or DIDs; the matching follow records are deleted within one session. A target you do not follow, or one that fails, does not stop the rest.

Usage
clor bluesky unfollow <HANDLE>... [flags]
FlagDescription
--accountsecret name to load credentials from (omit to auto-pick the only saved account)
--credentials-fileread bluesky-account JSON from this path instead of secrets (- for stdin)
--helphelp for unfollow
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead

clor bluesky unlike

Remove your like from one or more posts by their at:// URIs in a single session

Usage
clor bluesky unlike <URI>... [flags]
FlagDescription
--accountsecret name to load credentials from (omit to auto-pick the only saved account)
--credentials-fileread bluesky-account JSON from this path instead of secrets (- for stdin)
--helphelp for unlike
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead

clor bluesky unpin

Remove the pinned post from your profile

Clears the pinnedPost on your app.bsky.actor.profile record. The rest of your profile is preserved. Reports not-pinned when no post is pinned.

Usage
clor bluesky unpin [flags]
FlagDescription
--accountsecret name to load credentials from (omit to auto-pick the only saved account)
--credentials-fileread bluesky-account JSON from this path instead of secrets (- for stdin)
--helphelp for unpin
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead

clor bluesky unrepost

Remove your repost of one or more posts by their at:// URIs in a single session

Usage
clor bluesky unrepost <URI>... [flags]
FlagDescription
--accountsecret name to load credentials from (omit to auto-pick the only saved account)
--credentials-fileread bluesky-account JSON from this path instead of secrets (- for stdin)
--helphelp for unrepost
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead

clor bluesky video

Upload a video, track its transcode job, then embed it in a post

Attaching a video to Bluesky is asynchronous. A file is handed to the video service, which transcodes it as a background job and yields a video blob once it finishes. Upload first, then embed the finished job in a post with post --video-job <UID>. Use when: - the user wants to attach a video to a Bluesky post - the user wants to check whether an in-progress video upload has finished Subcommands: upload Upload a video file and start its transcode job status Check the transcode state of a video upload job Output: every subcommand supports --stdout-format text|jsonl|json (default text, logfmt with event= leader).

Usage
clor bluesky video [flags]
FlagDescription
--helphelp for video

clor bluesky video status

Check the transcode state of a video upload job

Reports the job state and progress, and once transcoding finishes the resulting video blob (cid and size). Embed a finished job in a post with post --video-job <UID>.

Usage
clor bluesky video status <UID> [flags]
FlagDescription
--accountsecret name to load credentials from (omit to auto-pick the only saved account)
--credentials-fileread bluesky-account JSON from this path instead of secrets (- for stdin)
--helphelp for status
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead

clor bluesky video upload

Upload a video file and start its transcode job

Hands an mp4 to the video service, which transcodes it as a background job and returns a job uid immediately. Embed the finished video in a post with post --video-job <UID>. Pass --wait to block until the job finishes instead of polling video status yourself.

Usage
clor bluesky video upload <FILE> [flags]
FlagDescription
--accountsecret name to load credentials from (omit to auto-pick the only saved account)
--credentials-fileread bluesky-account JSON from this path instead of secrets (- for stdin)
--helphelp for upload
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead
--timeoutmax time to wait when --wait is set (e.g. 30s, 5m) Default 5m0s
--waitpoll the transcode job to completion before returning

clor connection

List the GitHub, Linear, and Slack accounts connected to this account

Read-only views of the provider accounts (GitHub, Linear, Slack) connected to the signed-in account. Connections are linked and managed on the team Connections page; this surface lists them so commands and scripts can pick one by id. Use when: - you need a connection id to pass to another command (clor github auth --connection ...) - you want to check which provider accounts are connected before starting work Subcommands: list List connected provider accounts Output: every subcommand supports --stdout-format text|jsonl|json (default text, logfmt with event= leader).

Usage
clor connection [flags]
FlagDescription
--helphelp for connection

clor connection list

List connected provider accounts

Usage
clor connection list [flags]
FlagDescription
--helphelp for list

clor domain

Bulk-classify domain names as available, taken, or unknown across hundreds of TLDs at huge scale

Mass domain availability lookups, no rate limits. A 100,000-domain bulk request returns in 1-2s. Supported TLDs return available or taken; unsupported return unknown. Follow up with "verify" for a stricter recheck of the available tail.

Usage
clor domain [flags]
FlagDescription
--helphelp for domain

clor domain lookup

Check one or many domain names as available, taken, or unknown in a single bulk call

Status values: - taken: registered. ~1 in 65,000 false alarms. - available: not currently registered. NOT the same as "registrable today". Premium, reserved, and recently-dropped names all read available. Confirm with a registrar. - unknown: TLD not supported, so the service did not check it. Stdin: one-per-line text (--stdin-format text), or JSON array (--stdin-format json). Inputs >100,000 auto-split into chunks.

Usage
clor domain lookup [DOMAIN] [flags]
FlagDescription
--helphelp for lookup
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead

clor domain tld

Discover which top-level domains the bulk lookup service can check

Usage
clor domain tld [flags]
FlagDescription
--helphelp for tld

clor domain tld list

List the TLDs the service checks, ordered by US-biased popularity

Ranked by US-biased popularity (Tranco top-1M frequency with US institutional and tech-startup TLDs hoisted). --limit 0 returns every supported TLD.

Usage
clor domain tld list [flags]
FlagDescription
--helphelp for list
--limitmax TLDs to return (0 for all) Default 100

clor domain verify

Check domain names with a stricter pass that reduces false-positive available results

Same input/output shape as "lookup" but slower per domain. Use on the narrow tail of a pipeline (candidates "lookup" already flagged as available), not on bulk inputs.

Usage
clor domain verify [DOMAIN] [flags]
FlagDescription
--helphelp for verify
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead

clor drive

Store, share, and link cloud files in personal and shared drives with ACL grants, public links, and Unix verbs (ls, cp, mv, rm, df)

Drive paths are relative to the drive root, so use notes/q1.md, not /notes/q1.md, drive://notes/q1.md, or notes//q1.md. Files live in scoped drives, addressed by these filesystem paths, managed with Unix-style verbs (ls, cp, mv, rm, stat). Every account has a personal drive per user plus a shared account drive, with optional ACL grants for cross-user access and public token links. Uploads and downloads stream directly to storage, not through the CLI.

Usage
clor drive [flags]
FlagDescription
--helphelp for drive

clor drive cp

Server-side copy a file to a new drive path; bytes never flow through the CLI

Server clones object storage directly; the new file is independent of the source. Trailing slash on <DESTINATION> means "copy into this directory and keep the source's basename". Use --destination-drive to land in a different drive.

Usage
clor drive cp <SOURCE> <DESTINATION> [flags]
FlagDescription
--destination-drivewhich drive the copy lands in ("team" or a user UUID); defaults to the source's drive
--drivewhich drive to target ("team" or a user UUID); defaults to your user drive
--helphelp for cp
--ttldelete the copy this much time after it lands (e.g. 24h, 168h) Default 0s

clor drive df

Show every drive the caller can access along with its file count, total size, and capacity

Includes the caller's personal drive, the shared account drive, and drives reached via share grants. Admins see every personal drive in the account.

Usage
clor drive df [flags]
FlagDescription
--helphelp for df

clor drive download

Download a file by drive path or composite id to a local path or stdout

Streams bytes from object storage via a short-lived signed URL. Saves to the file's basename in the cwd by default; --out picks a path, --stdout pipes the bytes. <PATH> may be a drive path or composite id.

Usage
clor drive download <PATH> [flags]
FlagDescription
--drivewhich drive to target ("team" or a user UUID); defaults to your user drive
--helphelp for download
--outwrite the bytes to this local path (defaults to the file's name in the cwd)
--stdoutstream the bytes to stdout instead of a file

clor drive info

Print full metadata for one file by drive path or composite id

Returns id, name, size, content type, status, ETag, owner, retention TTL, expiry, and timestamps. Use stat instead when the target might be a directory or missing.

Usage
clor drive info <PATH> [flags]
FlagDescription
--drivewhich drive to target ("team" or a user UUID); defaults to your user drive
--helphelp for info

clor drive ls

List files and subdirectories at a drive path (root by default)

Lists direct children plus a synthesized directories array. --recursive flattens every descendant (no directories array); --tree renders an indented tree with depth markers in text/jsonl modes.

Usage
clor drive ls [PATH] [flags]
FlagDescription
--cursornext_cursor returned by a prior page
--drivewhich drive to target ("team" or a user UUID); defaults to your user drive
--helphelp for ls
--include-deletedinclude deleted files (still within the retention window) in the listing
--limitmax files per page (1-1000); zero uses the server default
--prefixfilter to files whose name starts with this prefix
--recursiveinclude every descendant of the path; omit the directories array
--treerender a recursive listing as an indented tree (implies --recursive)

clor drive mv

Move or rename a file in a drive, preserving its identity and existing links

File id, ETag, and public links survive the move. <SOURCE> may be a drive path or composite id; <DESTINATION> is always a path. Trailing slash on the destination means "move into this directory and keep the source's basename".

Usage
clor drive mv <SOURCE> <DESTINATION> [flags]
FlagDescription
--drivewhich drive to target ("team" or a user UUID); defaults to your user drive
--helphelp for mv

clor drive retention

Set or clear a file's auto-delete TTL, measured from upload completion

When the window elapses the file is soft-deleted automatically (still restorable via undelete for a grace period). --ttl sets the window; --clear-ttl keeps the file indefinitely.

Usage
clor drive retention <PATH> [flags]
FlagDescription
--clear-ttlremove the retention TTL
--drivewhich drive to target ("team" or a user UUID); defaults to your user drive
--helphelp for retention
--ttlretention starting from upload completion (e.g. 24h, 720h) Default 0s

clor drive rm

Delete a file from a drive (recoverable by default, --hard for immediate purge)

Soft delete by default: restorable via undelete within the retention window. --hard purges immediately and irreversibly.

Usage
clor drive rm <PATH> [flags]
FlagDescription
--drivewhich drive to target ("team" or a user UUID); defaults to your user drive
--hardpurge immediately rather than leaving recoverable
--helphelp for rm

clor drive share

Grant, list, and revoke ACL access to files or path prefixes in a drive

A grant says "this principal (account or user) can read or write that target (one file, path prefix, or whole drive)". Use `drive link` instead for shareable public URLs.

Usage
clor drive share [flags]
FlagDescription
--helphelp for share

clor drive share grant

Grant read or write access on a file, a path prefix, or a whole drive

Pick exactly one target (--file-id, --path, or --all-drive) and exactly one principal (--team or --user). --permission is read|write.

Usage
clor drive share grant [flags]
FlagDescription
--all-driveshare the entire drive (sets target_path to empty)
--drivedrive that holds the target ("team" or a user UUID)
--file-idshare a specific file (composite id); mutually exclusive with --path
--helphelp for grant
--pathshare a path prefix; empty path with --all-drive means the whole drive
--permissionpermission level (read|write) Default read
--teamprincipal team id
--userprincipal user id

clor drive share ls

List ACL share grants on a drive, file, or path prefix

Each row shows the target (drive plus file/path), the principal (account or user), the permission level, and the grant id needed for revoke.

Usage
clor drive share ls [flags]
FlagDescription
--cursornext_cursor returned by a prior page
--drivefilter by target drive
--file-idfilter by target file id
--helphelp for ls
--limitmax rows per page (1-1000); zero uses the server default
--pathfilter by target path (set to "" to match drive-wide grants)

clor drive share mine

List ACL share grants where the caller is the principal (what's been shared with me)

Returns grants where the caller (or the caller's account) is the principal: which other users' or accounts' files the caller can reach.

Usage
clor drive share mine [flags]
FlagDescription
--helphelp for mine

clor drive share revoke

Revoke an existing ACL share grant by id

Revocation is immediate; principals lose access on the next API call.

Usage
clor drive share revoke <SHARE> [flags]
FlagDescription
--drivedrive that holds the share
--helphelp for revoke

clor drive stat

Distinguish file vs directory vs missing for a drive path in one round trip

Returns type=file|directory|missing in one round trip (missing is still 200 OK, no exception). When type=file, full metadata is included under "file". No positional argument stats the drive root.

Usage
clor drive stat [PATH] [flags]
FlagDescription
--drivewhich drive to target ("team" or a user UUID); defaults to your user drive
--helphelp for stat

clor drive undelete

Restore a recently soft-deleted file to its prior state

Size, ETag, ACL grants, retention TTL, and public links are restored unchanged. If the path was reused by a new file the restore returns 409; target by composite id to disambiguate. Must happen before retention window elapses.

Usage
clor drive undelete <PATH> [flags]
FlagDescription
--drivewhich drive to target ("team" or a user UUID); defaults to your user drive
--helphelp for undelete

clor drive upload

Upload a local file to a drive path, overwriting any existing file there

Streams to object storage via a short-lived signed URL, then records metadata in the drive. <PATH> defaults to the basename of <FILE>; a trailing slash means "drop into this directory and keep the basename". Existing non-deleted files at the same path are overwritten in place, preserving file id and links.

Usage
clor drive upload <FILE> [PATH] [flags]
FlagDescription
--content-typeMIME type to bind to the upload URL
--drivewhich drive to target ("team" or a user UUID); defaults to your user drive
--helphelp for upload
--ttldelete this much time after upload completes (e.g. 1h, 24h, 720h) Default 0s

clor email

Read, search, send, and triage email over IMAP and SMTP

Speaks IMAP4rev1 and SMTP submission with SASL PLAIN over TLS, so it works against Gmail/Workspace, Outlook/Microsoft 365, Fastmail, iCloud, Dovecot, and similar. Trash/Sent/Drafts/Junk folders are discovered via SPECIAL-USE, never hardcoded per provider. Refer to them by role name in --folder and --to (Drafts, Sent, Trash, Junk, Archive, All) and they resolve to the provider's real mailbox.

Usage
clor email [flags]
FlagDescription
--helphelp for email

clor email account

Manage saved email-account credentials (address, hosts, password) used by every email subcommand

Credentials are stored as a typed secret (address, IMAP/SMTP host/port, auth). Once saved, every email subcommand picks them up automatically (or via --account when more than one is configured). Gmail/Workspace, Outlook/365, and iCloud all reject regular account passwords over IMAP/SMTP. Generate a provider-specific app password (Google: https://myaccount.google.com/apppasswords; Outlook: https://account.microsoft.com/security; iCloud: https://appleid.apple.com) and pass it via --stdin-format text.

Usage
clor email account [flags]
FlagDescription
--helphelp for account

clor email account add

Save or update an email account (address, IMAP/SMTP hosts, password) for use by other email subcommands

IMAP/SMTP hosts auto-detect for known providers (gmail.com, outlook.com, icloud.com, fastmail.com); pass --imap-host/--smtp-host explicitly otherwise. [NAME] defaults to the address itself; re-running with the same name updates in place. Gmail, Google Workspace, iCloud, and Yahoo do not accept the regular account password for IMAP/SMTP. They require a provider-issued app-specific password instead: - Gmail / Workspace: https://myaccount.google.com/apppasswords (requires 2-Step Verification turned on). Generate a 16-character password and pass it as --password. The spaces shown in Google's UI can be kept or stripped; both work. - iCloud: https://account.apple.com -> Sign-In and Security -> App-Specific Passwords. - Yahoo: account security settings -> Generate app password. If a user gives you their real account password and the provider needs an app password, point them at the URL above and ask them to paste the generated one back. Pass it on --password directly. Stdin (--stdin-format text) is still supported when you need to avoid the shell history.

Usage
clor email account add [NAME] [flags]
FlagDescription
--addressemail address (required)
--auth-methodauthentication method (only password is supported today) Default password
--display-namedisplay name used on the From header (e.g. "Leo")
--helphelp for add
--imap-hostIMAP host (auto-detected for known providers like gmail.com)
--imap-portIMAP port (auto-detected; 993 for implicit TLS)
--passwordIMAP/SMTP password. For Gmail/Workspace, iCloud, and Yahoo, this must be a provider-issued app-specific password (see Long help for the per-provider URL), not the user's regular account password
--smtp-hostSMTP host (auto-detected for known providers like gmail.com)
--smtp-portSMTP port (auto-detected; 465 for implicit TLS)
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead

clor email account delete

Permanently remove a saved email account by name

After deletion the other email subcommands can no longer use the account unless re-added or supplied via --credentials-file or --stdin-format json.

Usage
clor email account delete <NAME> [flags]
FlagDescription
--helphelp for delete

clor email account get

Read a saved email account's credentials; pass --stdout-format json for the raw JSON including password

Default logfmt drops the password; `--stdout-format json` returns the raw email-account JSON suitable for piping into `clor email <SUBCOMMAND> --stdin-format json`.

Usage
clor email account get <NAME> [flags]
FlagDescription
--helphelp for get

clor email account list

List saved email accounts with id and name

Metadata only (id, name, last access); passwords stay encrypted server-side. Use `account get` to retrieve the full JSON.

Usage
clor email account list [flags]
FlagDescription
--helphelp for list

clor email account update

Update fields on a saved email account (e.g. display name) without re-supplying unchanged values

Loads the stored account, overwrites only the fields whose flags were explicitly passed, and writes the result back. Pass `--display-name ""` to wipe an existing display name.

Usage
clor email account update <NAME> [flags]
FlagDescription
--addressemail address
--auth-methodauthentication method (only password is supported today) Default password
--display-namedisplay name used on the From header (pass "" to wipe)
--helphelp for update
--imap-hostIMAP host
--imap-portIMAP port
--passwordIMAP/SMTP password (provider-issued app-specific password for Gmail/Workspace, iCloud, Yahoo)
--smtp-hostSMTP host
--smtp-portSMTP port

clor email delete

Move messages to Trash (recoverable) or expunge them permanently with --permanent

Default moves messages to Trash (resolved via SPECIAL-USE, so recoverable from the user's mail client). --permanent flags \Deleted and expunges immediately, no recovery path.

Usage
clor email delete <UID>... [flags]
FlagDescription
--accountsecret name to load credentials from (omit to auto-pick the only saved account)
--credentials-fileread email-account JSON from this path instead of secrets (- for stdin)
--foldersource mailbox; role names (Drafts, Sent, Trash, Junk, Archive, All) resolve per provider Default INBOX
--helphelp for delete
--permanentexpunge instead of moving to Trash
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead

clor email draft

Compose a message and save it to the Drafts mailbox without sending

Builds the same RFC 822 message as `email send` but never hands it to SMTP. Instead it IMAP APPENDs to the Drafts mailbox (resolved via SPECIAL-USE, never hardcoded) with the \Draft flag, so the message shows up in the user's normal mail client ready to review, edit, and send. --to is optional: a draft can be staged before its recipients are known, and a subject-only draft is valid. Same body/attachment flags as `email send`. Subject: keep it short and specific so it sits cleanly in an inbox list and is easy to search for later. Lead with the concrete thing ("HN digest 2026-05-28", "Site down: example.com", "Stripe receipt $129.40"), not the framing ("Daily report", "Update", "FYI"). Avoid junk-flavored words ("urgent", "important"), all caps, and emoji at the start. Aim for under ~60 characters.

Usage
clor email draft [flags]
FlagDescription
--accountsecret name to load credentials from (omit to auto-pick the only saved account)
--attachattachment file path (repeatable) Default []
--bccBcc recipient (repeatable) Default []
--bodyplain-text body (mutually exclusive with --body-file)
--body-fileread plain-text body from a file (- for stdin)
--ccCc recipient (repeatable) Default []
--credentials-fileread email-account JSON from this path instead of secrets (- for stdin)
--from-namedisplay name on the From header for this send only (e.g. "HN Digest Bot"); overrides the saved account's display name without changing it
--helphelp for draft
--html-fileread HTML body from a file (added as multipart alternative)
--in-reply-toIn-Reply-To header (Message-ID of the parent)
--referencesReferences header (repeatable; chain of parent Message-IDs) Default []
--reply-toReply-To header
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead
--subjectSubject header
--torecipient address (repeatable; required for send) Default []

clor email folder

List, create, rename, and delete IMAP mailboxes and Gmail labels

Manage the mailboxes on an account. On Gmail these mailboxes are the account's labels, so creating a folder creates a label and deleting one removes it. Use when: - the user wants to see the mailboxes/labels on an account before reading or moving messages - the user wants to create, rename, or delete a mailbox or a Gmail label Subcommands: list List every mailbox and Gmail label with message and unseen counts create Create a mailbox, or a label on Gmail rename Rename a mailbox, or a label on Gmail delete Delete a mailbox, or remove a label on Gmail Output: every subcommand supports --stdout-format text|jsonl|json (default text, logfmt with event= leader).

Usage
clor email folder [flags]
FlagDescription
--helphelp for folder

clor email folder create

Create an IMAP mailbox, which is a new label on Gmail accounts

Usage
clor email folder create <NAME> [flags]
FlagDescription
--accountsecret name to load credentials from (omit to auto-pick the only saved account)
--credentials-fileread email-account JSON from this path instead of secrets (- for stdin)
--helphelp for create
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead

clor email folder delete

Delete an IMAP mailbox, removing a label on Gmail while its messages stay in All Mail

On standard IMAP this discards the messages the mailbox contains. On Gmail it only detaches the label; the messages remain in All Mail.

Usage
clor email folder delete <NAME> [flags]
FlagDescription
--accountsecret name to load credentials from (omit to auto-pick the only saved account)
--credentials-fileread email-account JSON from this path instead of secrets (- for stdin)
--helphelp for delete
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead

clor email folder list

List every mailbox and Gmail label with message and unseen counts

Names returned are the exact strings `email move` and `email list --folder` expect.

Usage
clor email folder list [flags]
FlagDescription
--accountsecret name to load credentials from (omit to auto-pick the only saved account)
--credentials-fileread email-account JSON from this path instead of secrets (- for stdin)
--helphelp for list
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead

clor email folder rename

Rename an IMAP mailbox, which renames a label on Gmail accounts

Usage
clor email folder rename <OLD> <NEW> [flags]
FlagDescription
--accountsecret name to load credentials from (omit to auto-pick the only saved account)
--credentials-fileread email-account JSON from this path instead of secrets (- for stdin)
--helphelp for rename
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead

clor email label

Tag and untag Gmail messages with labels without moving them out of the inbox

Gmail lets a single message carry many labels at once. These subcommands add and remove a label on specific messages while leaving them where they are, which plain mailbox moves cannot do. They target Gmail accounts; other providers should use `clor email move` instead. Create the label itself with `clor email folder create` first. Use when: - the user wants to label or unlabel Gmail messages while keeping them in the inbox - the user is organizing a Gmail inbox with multiple overlapping labels Subcommands: add Apply a Gmail label to one or more messages, leaving them in place remove Remove a Gmail label from one or more messages, keeping them in All Mail Output: every subcommand supports --stdout-format text|jsonl|json (default text, logfmt with event= leader).

Usage
clor email label [flags]
FlagDescription
--helphelp for label

clor email label add

Apply a Gmail label to one or more messages, leaving them in place

Adds the label to messages identified by their UIDs in --folder (default INBOX) without moving them. Create the label first with `clor email folder create`. Gmail-only; other providers should use `clor email move` instead.

Usage
clor email label add --label <NAME> <UID>... [flags]
FlagDescription
--accountsecret name to load credentials from (omit to auto-pick the only saved account)
--credentials-fileread email-account JSON from this path instead of secrets (- for stdin)
--foldersource mailbox the UIDs belong to; role names (Drafts, Sent, Trash, Junk, Archive, All) resolve per provider Default INBOX
--helphelp for add
--labellabel to apply (required)
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead

clor email label remove

Remove a Gmail label from one or more messages, keeping them in All Mail

The UIDs are scoped to the label's own mailbox, since Gmail assigns each mailbox its own UIDs. Get them with `clor email list --folder <NAME>`. Removing a label never deletes the message; it stays in All Mail. Gmail-only.

Usage
clor email label remove --label <NAME> <UID>... [flags]
FlagDescription
--accountsecret name to load credentials from (omit to auto-pick the only saved account)
--credentials-fileread email-account JSON from this path instead of secrets (- for stdin)
--helphelp for remove
--labellabel to remove (required)
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead

clor email list

List the most recent messages in an IMAP mailbox or Gmail label

Sorted newest first, with UID, sender, subject, date, read/flagged, size. --since accepts durations (7d, 24h), RFC3339, or Unix seconds. Use the UIDs with `email read`, `mark`, `move`, or `delete`.

Usage
clor email list [flags]
FlagDescription
--accountsecret name to load credentials from (omit to auto-pick the only saved account)
--credentials-fileread email-account JSON from this path instead of secrets (- for stdin)
--foldermailbox to list; role names (Drafts, Sent, Trash, Junk, Archive, All) resolve per provider Default INBOX
--helphelp for list
--limitmax messages to return (1-1000) Default 25
--sinceonly messages received after this point: duration (e.g. 30s, 90m, 24h, 7d, 2w, 1w3d), RFC3339 (2026-05-04T00:00:00Z), or Unix seconds (1746460800)
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead
--unread-onlyonly return messages without \Seen

clor email mark

Set or clear the read and flagged ("starred") flags on one or more messages

Pass exactly one of --read/--unread and/or one of --flagged/--unflagged. Both pairs can be supplied in the same call.

Usage
clor email mark <UID>... [flags]
FlagDescription
--accountsecret name to load credentials from (omit to auto-pick the only saved account)
--credentials-fileread email-account JSON from this path instead of secrets (- for stdin)
--flaggedadd the \Flagged flag
--foldermailbox the UIDs belong to; role names (Drafts, Sent, Trash, Junk, Archive, All) resolve per provider Default INBOX
--helphelp for mark
--readadd the \Seen flag
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead
--unflaggedremove the \Flagged flag
--unreadremove the \Seen flag

clor email move

Move one or more messages from a source mailbox into a destination mailbox or label

Role names (Drafts, Sent, Trash, Junk, Archive, All) resolve to the provider's real mailbox; exact names from `email folder list` work too (Gmail labels look like `[Gmail]/All Mail`). Atomic server-side: a failed move never leaves messages in both mailboxes.

Usage
clor email move <UID>... [flags]
FlagDescription
--accountsecret name to load credentials from (omit to auto-pick the only saved account)
--credentials-fileread email-account JSON from this path instead of secrets (- for stdin)
--foldersource mailbox; role names (Drafts, Sent, Trash, Junk, Archive, All) resolve per provider Default INBOX
--helphelp for move
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead
--todestination mailbox (required); role names (Drafts, Sent, Trash, Junk, Archive, All) resolve per provider

clor email read

Show full headers and body for one message by UID

Returns headers, flags, plain-text body, and optionally the HTML alternative. Body output capped at 32 KB by default to bound agent context; raise with --max-bytes (0=unlimited), or use --headers-only (no body fetch over the wire) or --raw (full RFC 822, may include base64 attachments).

Usage
clor email read <UID> [flags]
FlagDescription
--accountsecret name to load credentials from (omit to auto-pick the only saved account)
--credentials-fileread email-account JSON from this path instead of secrets (- for stdin)
--foldermailbox the UID belongs to; role names (Drafts, Sent, Trash, Junk, Archive, All) resolve per provider Default INBOX
--headers-onlyskip body fetch entirely; return metadata only
--helphelp for read
--include-htmlinclude the HTML alternative in addition to text/plain
--max-bytescap each body part at N bytes (0 for unlimited); truncates at a UTF-8 rune boundary Default 32000
--rawwrite the raw RFC 822 bytes to stdout (overrides --stdout-format; output may include base64-encoded attachments and run to many MB, check size_bytes from list/search first)
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead

clor email reply

Reply to a message, auto-deriving Subject, recipients, and threading headers

Subject defaults to "Re: ...", recipients default to the parent's From (or Reply-To), and In-Reply-To/References headers are populated from the parent. --to-all Ccs every other recipient ("reply all"). Same body/attachment flags as `email send`.

Usage
clor email reply <UID> [flags]
FlagDescription
--accountsecret name to load credentials from (omit to auto-pick the only saved account)
--attachattachment file path (repeatable) Default []
--bccBcc recipient (repeatable) Default []
--bodyplain-text body (mutually exclusive with --body-file)
--body-fileread plain-text body from a file (- for stdin)
--ccCc recipient (repeatable) Default []
--credentials-fileread email-account JSON from this path instead of secrets (- for stdin)
--foldermailbox the parent UID belongs to; role names (Drafts, Sent, Trash, Junk, Archive, All) resolve per provider Default INBOX
--from-namedisplay name on the From header for this send only (e.g. "HN Digest Bot"); overrides the saved account's display name without changing it
--helphelp for reply
--html-fileread HTML body from a file (added as multipart alternative)
--in-reply-toIn-Reply-To header (Message-ID of the parent)
--no-save-sentskip the IMAP APPEND to the Sent mailbox after delivery (Gmail saves automatically and is always skipped)
--referencesReferences header (repeatable; chain of parent Message-IDs) Default []
--reply-toReply-To header
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead
--subjectSubject header
--torecipient address (repeatable; required for send) Default []
--to-allCc every other recipient on the parent message ("reply all")

clor email send

Compose and send a new email message with optional HTML body and file attachments

Body source: --body, --body-file (- for stdin), or --html-file (combine an html-file with a text body for a multipart alternative). On success the message is appended to the Sent folder unless the provider auto-saves (Gmail) or --no-save-sent is passed. Subject: keep it short and specific so it sits cleanly in an inbox list and is easy to search for later. Lead with the concrete thing ("HN digest 2026-05-28", "Site down: example.com", "Stripe receipt $129.40"), not the framing ("Daily report", "Update", "FYI"). Avoid junk-flavored words ("urgent", "important"), all caps, and emoji at the start. Aim for under ~60 characters. From header: --from-name overrides the saved account's display name for this send only (the stored account is untouched). Use it to make the source obvious in the recipient's inbox when sending automated reports or notifications, so the From column reads "Personalized Tech Report <leo@example.com>" instead of a bare address. Prefer this over stuffing the source into --subject; the subject stays free to describe the actual content.

Usage
clor email send [flags]
FlagDescription
--accountsecret name to load credentials from (omit to auto-pick the only saved account)
--attachattachment file path (repeatable) Default []
--bccBcc recipient (repeatable) Default []
--bodyplain-text body (mutually exclusive with --body-file)
--body-fileread plain-text body from a file (- for stdin)
--ccCc recipient (repeatable) Default []
--credentials-fileread email-account JSON from this path instead of secrets (- for stdin)
--from-namedisplay name on the From header for this send only (e.g. "HN Digest Bot"); overrides the saved account's display name without changing it
--helphelp for send
--html-fileread HTML body from a file (added as multipart alternative)
--in-reply-toIn-Reply-To header (Message-ID of the parent)
--no-save-sentskip the IMAP APPEND to the Sent mailbox after delivery (Gmail saves automatically and is always skipped)
--referencesReferences header (repeatable; chain of parent Message-IDs) Default []
--reply-toReply-To header
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead
--subjectSubject header
--torecipient address (repeatable; required for send) Default []

clor email thread

Fetch every message in the same Gmail conversation as a given UID (Gmail-only)

Uses Gmail's X-GM-THRID IMAP extension. Non-Gmail accounts return an error pointing at `clor email search --subject` as a fallback.

Usage
clor email thread <UID> [flags]
FlagDescription
--accountsecret name to load credentials from (omit to auto-pick the only saved account)
--credentials-fileread email-account JSON from this path instead of secrets (- for stdin)
--foldermailbox to search across (defaults to Gmail's All Mail label) Default [Gmail]/All Mail
--helphelp for thread
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead

clor environment

Manage reusable Environments

Reusable definitions for creating spaces. An Environment contains the repository, agents, scripts, Environment Variables, and workspace layout that future spaces snapshot at launch. Its canonical version-1 TOML is the complete advanced editing surface. Use when - you want to list or inspect reusable space setups - you want to create or atomically update an Environment from TOML - you want to duplicate, share, claim, or delete an Environment Subcommands list List personal and Team Environments show Show one Environment and its unresolved launch choices create Create a personal Environment from TOML export Print canonical version-1 TOML import Atomically replace an Environment from TOML duplicate Copy an Environment into your personal library share Share a personal Environment with the Team claim Claim a Team Environment as personal delete Delete an Environment Output supports --stdout-format text|jsonl|json on every subcommand (default text, logfmt with event= leader).

Usage
clor environment [flags]
FlagDescription
--helphelp for environment

clor environment claim

Claim a Team Environment as personal

Usage
clor environment claim <ID> [flags]
FlagDescription
--helphelp for claim

clor environment create

Create a personal Environment from TOML

Usage
clor environment create <FILE> [flags]
FlagDescription
--helphelp for create

clor environment delete

Delete an Environment at its loaded revision

Usage
clor environment delete <ID> [flags]
FlagDescription
--helphelp for delete

clor environment duplicate

Duplicate an Environment into your personal library

Usage
clor environment duplicate <ID> [flags]
FlagDescription
--helphelp for duplicate

clor environment export

Print canonical version-1 Environment TOML

Usage
clor environment export <ID> [flags]
FlagDescription
--helphelp for export

clor environment import

Atomically replace an Environment from TOML

Usage
clor environment import <ID> <FILE> [flags]
FlagDescription
--helphelp for import

clor environment list

List personal and Team Environments

Usage
clor environment list [flags]
FlagDescription
--helphelp for list

clor environment share

Share a personal Environment with the Team

Usage
clor environment share <ID> [flags]
FlagDescription
--helphelp for share

clor environment show

Show one Environment and its unresolved launch choices

Usage
clor environment show <ID> [flags]
FlagDescription
--helphelp for show

clor github

Use connected GitHub accounts for tokens, git credentials, and repository workflows

GitHub access through a connected GitHub account. Tokens come back freshly refreshed on every request, so they are always valid. Use when: - a command needs GH_TOKEN or GITHUB_TOKEN (GH_TOKEN=$(clor github auth)) - git clone/fetch/push against github.com should work with no stored credentials (git setup) Subcommands: auth Print a fresh GitHub access token git Install the git credential helper for github.com web Work with repository changes and pull requests in a browser Output: every subcommand supports --stdout-format text|jsonl|json (default text; auth prints the bare token in text mode).

Usage
clor github [flags]
FlagDescription
--helphelp for github

clor github auth

Print a fresh GitHub access token

Prints a freshly refreshed access token for the connected GitHub account. In text mode (the default) the output is the bare token and a trailing newline, so command substitution works directly: GH_TOKEN=$(clor github auth) The --connection flag selects a connected account by its ID. In a space, CLOR_GITHUB_CONNECTION_ID supplies the default. With neither, a single connected account resolves automatically.

Usage
clor github auth [flags]
FlagDescription
--connectionconnection ID overriding the space environment
--helphelp for auth

clor github git

Install the git credential helper so github.com clones need no stored credentials

Git integration for github.com through the connected GitHub account. Use when: - git clone/fetch/push against github.com should authenticate automatically Subcommands: setup Install the git credential helper for github.com (once per machine)

Usage
clor github git [flags]
FlagDescription
--helphelp for git

clor github git setup

Install the git credential helper for github.com (once per machine)

Writes one scoped git config entry so git asks the helper for credentials on github.com and nothing else: git config --global credential.https://github.com.helper "!clor github git helper" The --connection flag selects the account by its ID. In a managed sandbox, CLOR_GITHUB_CONNECTION_ID supplies the default. The selected account is embedded in that sandbox's entry so every Git operation uses it. Idempotent; running it again rewrites the same entry.

Usage
clor github git setup [flags]
FlagDescription
--connectionconnection ID overriding the space environment
--helphelp for setup

clor github web

Work with repository changes and pull requests in a browser

Serves a compact browser workspace for the checked-out repository. The workspace follows local staged, unstaged, committed, and untracked changes, attaches to the checked-out branch's open pull request, and can inspect another open pull request without changing branches.

Usage
clor github web [flags]
FlagDescription
--helphelp for web

clor github web serve

Serve the repository and pull request workspace

Serves a local Preact application for the common GitHub development loop. The checked-out repository supplies local context. An open pull request for the branch is selected automatically, while local staging, committing, pushing, and pull request creation remain available before one exists. GitHub access uses a freshly refreshed token from the selected connection. The token is passed to gh only through GH_TOKEN and never reaches the browser.

Usage
clor github web serve [flags]
FlagDescription
--agentinitial webagent session name when automatic selection is ambiguous
--basic-authrequire HTTP basic auth as user:password
--connectionGitHub connection ID overriding the space environment
--helphelp for serve
--listen-addressaddress to bind as host:port (:7503 or host:0 for a free port) Default 127.0.0.1:7503
--no-assets-cdnserve bundled assets locally instead of from the shared CDN
--open-browseropen the URL in the default browser after listening
--repoGitHub repository as OWNER/REPO when remotes are indirect or ambiguous
--working-directorygit worktree to use (the current directory by default)

clor hn

Use Hacker News as a client: read feeds and threads, comment, submit, poll, vote, flag, favorite, hide, edit, delete

Drives Hacker News by scraping news.ycombinator.com directly, authenticated with a username and password stored as a typed secret. Reads every feed (top, new, best, ask, show, jobs, your submissions, comments, favorites, upvoted) and any thread, and performs the full set of authenticated actions. Every read also carries each item's available action tokens, so a read flows straight into a comment, vote, or flag. Use when: - the user wants to read a Hacker News feed, a thread, or a profile while signed in - the user wants to comment on or reply to a story or comment - the user wants to submit a story or poll, or vote, flag, favorite, hide, vouch - the user wants to edit or delete their own posts, or update their profile Subcommands: account Manage saved Hacker News credentials whoami Show the logged-in account, karma, and creation date profile Show profiles or update your own list Read a feed show Read a story or comment with its comment tree comment Comment on a story or reply to a comment submit Submit a story or text post poll Submit a poll edit Edit one of your items delete Delete your items vote Upvote or downvote items unvote Remove your vote flag Flag items unflag Remove your flag favorite Favorite items unfavorite Remove your favorite hide Hide items from your feed unhide Unhide items vouch Vouch for dead items unvouch Remove your vouch Output: every subcommand supports --stdout-format text|jsonl|json (default text, logfmt with event= leader).

Usage
clor hn [flags]
FlagDescription
--helphelp for hn

clor hn account

Manage saved Hacker News credentials (username, password) used by every Hacker News subcommand

Credentials are stored as a typed secret (username, password). Once saved, every Hacker News subcommand picks them up automatically (or via --account when more than one is configured), and the session cookie from the first login is cached back so later commands skip re-logging in. Use when: - the user wants to register a Hacker News account for the CLI to use - the user wants to see which Hacker News accounts are saved - the user wants to inspect or rotate stored credentials - the user wants to remove a Hacker News account Subcommands: add Save or update a Hacker News account by username and password list List saved Hacker News accounts visible to the caller get Read one saved Hacker News account, with the raw JSON in json mode delete Permanently remove a saved Hacker News account by name Output: every subcommand supports --stdout-format text|jsonl|json (default text, logfmt with event= leader).

Usage
clor hn account [flags]
FlagDescription
--helphelp for account

clor hn account add

Save or update a Hacker News account by username and password for use by other Hacker News subcommands

[NAME] defaults to the username itself; re-running with the same name updates in place. Pass the password on --password directly, or pipe it via --stdin-format text to keep it out of shell history. Hacker News has no app-password concept, so this is the real account password; store it only in a secret you control.

Usage
clor hn account add [NAME] [flags]
FlagDescription
--helphelp for add
--passwordHacker News account password
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead
--usernameHacker News username (required)

clor hn account delete

Permanently remove a saved Hacker News account by name

After deletion the other Hacker News subcommands can no longer use the account unless re-added or supplied via --credentials-file or --stdin-format json.

Usage
clor hn account delete <NAME> [flags]
FlagDescription
--helphelp for delete

clor hn account get

Read a saved Hacker News account; pass --stdout-format json for the raw JSON including the password

Default logfmt drops the password; `--stdout-format json` returns the raw hackernews-account JSON suitable for piping into `clor hn <SUBCOMMAND> --stdin-format json`.

Usage
clor hn account get <NAME> [flags]
FlagDescription
--helphelp for get

clor hn account list

List saved Hacker News accounts with id and name

Metadata only (id, name, last access); passwords stay encrypted server-side. Use `account get` to retrieve the full JSON.

Usage
clor hn account list [flags]
FlagDescription
--helphelp for list

clor hn comment

Comment on a story or reply to a comment

<PARENT_ID> is the story to comment on or the comment to reply to; Hacker News uses the same form for both. The new comment id is returned by reading it back off your own comments after the post.

Usage
clor hn comment <PARENT_ID> <TEXT> [flags]
FlagDescription
--accountsecret name to load credentials from (omit to auto-pick the only saved account)
--credentials-fileread hackernews-account JSON from this path instead of secrets (- for stdin)
--helphelp for comment
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead

clor hn delete

Delete one or more of your own items in a single session

Each id is deleted via its confirmation form. Deleting is only possible while the item is still yours and within the window; otherwise that id reports the cause and the batch continues.

Usage
clor hn delete <ID>... [flags]
FlagDescription
--accountsecret name to load credentials from (omit to auto-pick the only saved account)
--credentials-fileread hackernews-account JSON from this path instead of secrets (- for stdin)
--helphelp for delete
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead

clor hn edit

Edit the title, URL, or text of one of your own items

Sets only the fields you pass; the rest keep their current values, read off the edit form first. Editing is only possible while the item is still yours and within the edit window, otherwise the form is absent and the command says so.

Usage
clor hn edit <ID> [flags]
FlagDescription
--accountsecret name to load credentials from (omit to auto-pick the only saved account)
--credentials-fileread hackernews-account JSON from this path instead of secrets (- for stdin)
--helphelp for edit
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead
--textnew body text (for a text post or comment)
--titlenew title
--urlnew URL (for a link submission)

clor hn favorite

Favorite one or more items in a single session

Usage
clor hn favorite <ID>... [flags]
FlagDescription
--accountsecret name to load credentials from (omit to auto-pick the only saved account)
--credentials-fileread hackernews-account JSON from this path instead of secrets (- for stdin)
--helphelp for favorite
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead

clor hn flag

Flag one or more items in a single session

Flagging needs enough karma; when the flag link is absent the item reports that and the batch continues.

Usage
clor hn flag <ID>... [flags]
FlagDescription
--accountsecret name to load credentials from (omit to auto-pick the only saved account)
--credentials-fileread hackernews-account JSON from this path instead of secrets (- for stdin)
--helphelp for flag
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead

clor hn hide

Hide one or more items from your feed in a single session

Usage
clor hn hide <ID>... [flags]
FlagDescription
--accountsecret name to load credentials from (omit to auto-pick the only saved account)
--credentials-fileread hackernews-account JSON from this path instead of secrets (- for stdin)
--helphelp for hide
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead

clor hn list

Read a Hacker News feed (top, new, best, ask, show, jobs, submitted, comments, favorites, upvoted)

--feed selects the feed. The user-scoped feeds (submitted, comments, favorites) default to the logged-in account and accept --user to read another account; upvoted is your own account only. Each result carries its available action tokens so a vote or comment is one follow-up command.

Usage
clor hn list [flags]
FlagDescription
--accountsecret name to load credentials from (omit to auto-pick the only saved account)
--credentials-fileread hackernews-account JSON from this path instead of secrets (- for stdin)
--feedfeed to read (top|new|best|ask|show|jobs|submitted|comments|favorites|upvoted) Default top
--helphelp for list
--limitmaximum items to return Default 30
--pagepage to start from (30 items per page) Default 1
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead
--useraccount for the submitted, comments, or favorites feed (default self)

clor hn poll

Submit a poll with two or more choices

Pass --option once per choice; at least two are required. --text is an optional body. Creating polls is karma-gated on Hacker News. The new item id is read back off your own submissions.

Usage
clor hn poll [flags]
FlagDescription
--accountsecret name to load credentials from (omit to auto-pick the only saved account)
--credentials-fileread hackernews-account JSON from this path instead of secrets (- for stdin)
--helphelp for poll
--optiona poll choice; pass once per choice (at least two) Default []
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead
--textoptional poll body
--titlepoll question (required)

clor hn profile

Read Hacker News profiles or update your own (about, email, display settings)

Reads any account's public profile, and updates the logged-in account's own profile fields. Use when: - the user wants to read one or more Hacker News profiles - the user wants to change their about text, email, or display settings Subcommands: show Show one or more profiles by username update Update the logged-in account's own profile Output: every subcommand supports --stdout-format text|jsonl|json (default text, logfmt with event= leader).

Usage
clor hn profile [flags]
FlagDescription
--helphelp for profile

clor hn profile show

Show one or more Hacker News profiles with karma, creation date, and about text

Pass any number of usernames; each is fetched in the same session. With no username, shows the logged-in account's own profile.

Usage
clor hn profile show [USERNAME]... [flags]
FlagDescription
--accountsecret name to load credentials from (omit to auto-pick the only saved account)
--credentials-fileread hackernews-account JSON from this path instead of secrets (- for stdin)
--helphelp for show
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead

clor hn profile update

Update the logged-in account's own profile fields

Sets only the flags you pass; every other field keeps its current value, which is read off the edit form first. The display settings mirror the website's profile editor.

Usage
clor hn profile update [flags]
FlagDescription
--aboutabout text shown on your profile
--accountsecret name to load credentials from (omit to auto-pick the only saved account)
--credentials-fileread hackernews-account JSON from this path instead of secrets (- for stdin)
--delayminutes to delay your comments from appearing
--emailcontact email (private)
--helphelp for update
--noprocrastenable the noprocrastination timer (yes|no)
--noprocrast-maxvisitminutes of browsing before noprocrast locks you out
--noprocrast-minawayminutes you must stay away once locked out
--showdeadshow dead items (yes|no)
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead
--topcolortop bar color as a hex value, e.g. ff6600

clor hn show

Read a story or comment with its comment tree, each node carrying its available action tokens

<ID> is the numeric item id. The lead item prints first, then the comment tree flattened depth-first with a depth attribute per node. Each node lists the actions available to the logged-in account (upvote, reply, flag, ...) so a follow-up write is one command.

Usage
clor hn show <ID> [flags]
FlagDescription
--accountsecret name to load credentials from (omit to auto-pick the only saved account)
--credentials-fileread hackernews-account JSON from this path instead of secrets (- for stdin)
--helphelp for show
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead

clor hn submit

Submit a story by URL or a text post (Ask HN, Show HN)

Pass --url for a link submission or --text for a text post; exactly one of the two. The new item id is read back off your own submissions.

Usage
clor hn submit [flags]
FlagDescription
--accountsecret name to load credentials from (omit to auto-pick the only saved account)
--credentials-fileread hackernews-account JSON from this path instead of secrets (- for stdin)
--helphelp for submit
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead
--textbody for a text post, e.g. Ask HN (mutually exclusive with --url)
--titlestory or post title (required)
--urllink to submit (mutually exclusive with --text)

clor hn unfavorite

Remove your favorite from one or more items in a single session

Usage
clor hn unfavorite <ID>... [flags]
FlagDescription
--accountsecret name to load credentials from (omit to auto-pick the only saved account)
--credentials-fileread hackernews-account JSON from this path instead of secrets (- for stdin)
--helphelp for unfavorite
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead

clor hn unflag

Remove your flag from one or more items in a single session

Usage
clor hn unflag <ID>... [flags]
FlagDescription
--accountsecret name to load credentials from (omit to auto-pick the only saved account)
--credentials-fileread hackernews-account JSON from this path instead of secrets (- for stdin)
--helphelp for unflag
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead

clor hn unhide

Unhide one or more items in a single session

Usage
clor hn unhide <ID>... [flags]
FlagDescription
--accountsecret name to load credentials from (omit to auto-pick the only saved account)
--credentials-fileread hackernews-account JSON from this path instead of secrets (- for stdin)
--helphelp for unhide
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead

clor hn unvote

Remove your vote from one or more items in a single session

Usage
clor hn unvote <ID>... [flags]
FlagDescription
--accountsecret name to load credentials from (omit to auto-pick the only saved account)
--credentials-fileread hackernews-account JSON from this path instead of secrets (- for stdin)
--helphelp for unvote
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead

clor hn unvouch

Remove your vouch from one or more items in a single session

Usage
clor hn unvouch <ID>... [flags]
FlagDescription
--accountsecret name to load credentials from (omit to auto-pick the only saved account)
--credentials-fileread hackernews-account JSON from this path instead of secrets (- for stdin)
--helphelp for unvouch
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead

clor hn vote

Upvote or downvote one or more items in a single session

--direction defaults to up. Downvoting needs enough karma and is only offered for a window after a comment is posted; when the downvote link is absent the item reports that and the batch continues to the next id.

Usage
clor hn vote <ID>... [flags]
FlagDescription
--accountsecret name to load credentials from (omit to auto-pick the only saved account)
--credentials-fileread hackernews-account JSON from this path instead of secrets (- for stdin)
--directionvote direction (up|down) Default up
--helphelp for vote
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead

clor hn vouch

Vouch for one or more dead items in a single session

Vouching only applies to dead (killed) items and needs enough karma; when the vouch link is absent the item reports that and the batch continues.

Usage
clor hn vouch <ID>... [flags]
FlagDescription
--accountsecret name to load credentials from (omit to auto-pick the only saved account)
--credentials-fileread hackernews-account JSON from this path instead of secrets (- for stdin)
--helphelp for vouch
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead

clor hn whoami

Show the logged-in account with its karma, creation date, and about text

Confirms the saved credentials open a live session and reports the account that requests go out as. A failure here means the session could not be established, which is the first thing to check.

Usage
clor hn whoami [flags]
FlagDescription
--accountsecret name to load credentials from (omit to auto-pick the only saved account)
--credentials-fileread hackernews-account JSON from this path instead of secrets (- for stdin)
--helphelp for whoami
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead

clor inference

Generate text, images, and audio through Claude, GPT, Gemini, OpenRouter, and ElevenLabs

Five provider subcommands. Pick the one whose surface matches the task, then pick the smallest model that can do the job. anthropic Claude text generation and exact prompt token counting. Promoted tiers: claude-haiku-4-5 (cheap, fast), claude-opus-5 (frontier), claude-fable-5 (max capability). openai GPT text generation, gpt-image generation and editing, and audio transcription. Promoted text tiers: gpt-5.6-luna (cheap), gpt-5.6-sol (frontier). Promoted image tiers: gpt-image-1-mini (cheap, fast), gpt-image-2 (frontier). google Gemini text generation and nano-banana image generation. Promoted text tiers: gemini-3.1-flash-lite (cheap, fast), gemini-3.1-pro-preview (frontier). Promoted image tiers: gemini-3.1-flash-image-preview (cheap, fast), gemini-3-pro-image-preview (frontier). elevenlabs Text-to-speech, Scribe transcription, music, sound effects, voice isolation, and voice-to-voice conversion. openrouter Escape hatch for models the dedicated subcommands do not cover (Llama, DeepSeek, Qwen, X-AI, plus everything else OpenRouter fronts). Prefer the dedicated subcommands whenever the model lives there. Reach for the fast tier for high-volume or simple work (extraction, summarization, classification, reformatting). Reach for the frontier tier only when the task genuinely needs frontier reasoning. Enable --reasoning only when the task needs multi-step thinking; thinking tokens are billed as output tokens and share the --max-tokens cap, so higher effort raises both cost and latency.

Usage
clor inference [flags]
FlagDescription
--helphelp for inference

clor inference anthropic

Call Anthropic's Claude models for text generation and exact prompt token counting

Claude text generation and prompt token counting. Pick the smallest model that can do the job. claude-haiku-4-5 Cheap and fast. Best for high-volume extraction, summarization, classification, reformatting. Legacy reasoning (budget_tokens). $1/$5 per Mtok. claude-sonnet-5 Balanced tier. $3/$15 per Mtok with 128K max output and adaptive thinking. Accepts sampling controls. Good when ordinary reasoning and writing don't justify Opus prices. claude-opus-5 Default frontier model. $5/$25 per Mtok with 128K max output and adaptive thinking. Strong coding, multidisciplinary reasoning, and agentic benchmarks. claude-opus-4-8 stays selectable at the same price. claude-fable-5 Maximum capability. $10/$50 per Mtok with 128K max output and adaptive thinking always on. Best for the most demanding reasoning and long-horizon agentic work. Opus and Fable forbid --temperature and --top-p. All models forbid sampling controls when --reasoning is on. System prompts auto-cache on the server (~5 min ephemeral TTL, ~90 percent discount on hits).

Usage
clor inference anthropic [flags]
FlagDescription
--helphelp for anthropic

clor inference anthropic count-tokens

Count prompt tokens for a Claude Messages call without running generation

Exact count via Anthropic's count_tokens endpoint. Matches input_tokens on a real Messages call with the same model/system/messages. Input modes (mutually exclusive): positional arg, --stdin-format text (single user message), or --stdin-format json (multi-turn array).

Usage
clor inference anthropic count-tokens [PROMPT] [flags]
FlagDescription
--helphelp for count-tokens
--modelmodel id (claude-opus-5|claude-haiku-4-5). Tokenization is model-specific so the count returned matches a real Messages call against the same model Default claude-opus-5
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead
--systemoptional system prompt; counted against the input

clor inference anthropic text

Generate text with Claude via the Anthropic Messages API

Pick the smallest model that can do the job. haiku for extraction and reformatting, opus-5 (default) for hard reasoning. System prompts auto-cache on the server (~5 min ephemeral TTL, ~90 percent discount on cache hits). --reasoning enables extended thinking. Adaptive models (opus-5, opus-4-8, opus-4-7, sonnet-4-6) send it as output_config.effort. Legacy models (haiku-4-5) translate to a numeric budget. Cost framing per level: off No thinking. Right default for extraction, summarization, classification, reformatting. Costs nothing extra. low ~2K thinking tokens on legacy. Light reasoning. Use for simple structured edits, short explanations, basic planning. medium ~8K thinking tokens on legacy. Working default for ordinary multi-step tasks. high ~16K thinking tokens on legacy. Multi-step planning, harder analysis, code review across multiple files. xhigh ~32K thinking tokens on legacy. Hardest reasoning problems that justify the spend. max Up to max_tokens minus 1024 on legacy. Dynamic on adaptive. Let the model spend whatever it needs. Thinking tokens are billed as output tokens and share the --max-tokens cap, so raising effort raises both cost and the risk that visible output gets truncated. --temperature and --top-p are rejected when --reasoning is on, and on claude-opus-5, claude-opus-4-8, claude-opus-4-7, and claude-fable-5 regardless of reasoning state.

Usage
clor inference anthropic text [PROMPT] [flags]
FlagDescription
--helphelp for text
--max-tokensmax output tokens (caps at the model's documented max). Reasoning tokens count toward this cap
--modelmodel id. Cheap to strong: claude-haiku-4-5 (simple, high-volume), claude-sonnet-5 (balanced, $3/$15 per Mtok, 128K max output, adaptive thinking), claude-opus-5 (default frontier, $5/$25 per Mtok, 128K max output), claude-opus-4-8 (prior Opus, same price, still selectable), claude-fable-5 (max capability, $10/$50 per Mtok, 128K max output) Default claude-opus-5
--reasoningreasoning effort (off|low|medium|high|xhigh|max). off is the right default for extraction, summarization, classification, reformatting. low/medium/high climb in capability and cost. xhigh and max are for the hardest problems and are billed as output tokens. Adaptive models (opus-5, opus-4-8, opus-4-7, sonnet-5, sonnet-4-6) pass through to output_config.effort. Legacy models (haiku-4-5) translate to budget_tokens (low=2048, medium=8192, high=16384, xhigh=32768, max=max_tokens-1024). Cannot be combined with --temperature or --top-p Default off
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead
--stopstop sequence; pass repeatedly for multiple (max 4) Default []
--systemoptional system prompt; auto-cached on the server (~5 min ephemeral TTL, ~90 percent discount on cache hits)
--temperaturesampling temperature (0.0-1.0); -1 means use the model's default. Rejected when --reasoning is set or with claude-opus-5, claude-opus-4-8, claude-opus-4-7, or claude-fable-5 (these reject sampling controls regardless of reasoning state) Default -1
--top-pnucleus-sampling threshold (0.0-1.0); -1 means use the model's default. Rejected when --reasoning is set or with claude-opus-5, claude-opus-4-8, claude-opus-4-7, or claude-fable-5. Anthropic recommends temperature OR top-p, not both Default -1

clor inference elevenlabs

ElevenLabs audio surface, text-to-speech, transcription, music, sound effects, voice isolation, and voice changing

Audio is the clearest case for shelling out from an LLM host. Seven subcommands cover the full ElevenLabs surface. speech Text-to-speech with a chosen voice. Pick a model from the TTS tier guide on the subcommand. transcribe Speech-to-text via Scribe v2 (default) or v1. music Generate a music clip from a text prompt. sound-effects Generate a sound-effect clip from a text prompt. voice-isolator Strip background noise from a recording. voice-changer Re-voice a recording as a different speaker. voice Browse the voice library to find voice ids. TTS tiers (faster to richer) eleven_flash_v2_5 Lowest latency (~75ms). Use for real-time interactive work. eleven_turbo_v2_5 High-throughput conversational use with a strong quality/latency balance. eleven_multilingual_v2 Broad language coverage where v3's expressiveness is not needed. eleven_v3 Default. Highest expressiveness, widest language support, GA since 2026-02-02.

Usage
clor inference elevenlabs [flags]
FlagDescription
--helphelp for elevenlabs

clor inference elevenlabs music

Generate a music clip from a text prompt with ElevenLabs Music

Pass the prompt positionally or via --stdin-format text. Control duration with --length (e.g. 30s, 2m).

Usage
clor inference elevenlabs music [PROMPT] [flags]
FlagDescription
--audio-output-filedestination MP3 path (auto-generated in CWD when omitted)
--helphelp for music
--lengthtarget output duration (e.g. 30s, 2m, 1h) Default 0s
--modelmusic model id (music_v1 is the only publicly documented id today)
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead

clor inference elevenlabs sound-effects

Generate a sound effect clip from a text prompt

Pass the prompt positionally or via --stdin-format text. --duration caps the clip; --prompt-influence (0..1) biases adherence.

Usage
clor inference elevenlabs sound-effects [PROMPT] [flags]
FlagDescription
--audio-output-filedestination MP3 path (auto-generated in CWD when omitted)
--durationtarget clip duration (e.g. 3s, 10s, 30s) Default 0s
--helphelp for sound-effects
--prompt-influence0..1 weight controlling how closely the output follows the prompt (0 disables)
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead

clor inference elevenlabs speech

Synthesize speech from text with a chosen ElevenLabs voice (text-to-speech)

Default voice is Maria Mysh (calm female American narrator, vZzlAds9NzvLsFSWp0qk). Use the voice subcommand to search the full library. Pick the right TTS model for the use case. eleven_flash_v2_5 Lowest latency, around 75ms. Best for real-time interactive voice work where time-to-first-audio matters most. eleven_turbo_v2_5 High-throughput conversational use. Best for voice agents and chat applications that want strong quality at sub-second latency. eleven_multilingual_v2 Broad multilingual coverage. Use when v3's expressiveness is overkill and the workload spans many languages. eleven_v3 Default. Highest expressiveness and the widest language support (70+). Best for pre-rendered narration, audiobooks, and podcasts where quality outranks latency.

Usage
clor inference elevenlabs speech [flags]
FlagDescription
--audio-output-filedestination MP3 path (auto-generated in CWD when omitted)
--helphelp for speech
--language-code2-letter language code, ISO 639-1 (en, es, fr); optional
--modelTTS model id. Faster to richer: eleven_flash_v2_5 (~75ms latency, real-time), eleven_turbo_v2_5 (high-throughput conversational), eleven_multilingual_v2 (broad language coverage), eleven_v3 (default, highest expressiveness) Default eleven_v3
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead
--texttext to synthesize
--voice-idElevenLabs voice id; default vZzlAds9NzvLsFSWp0qk (Maria Mysh, calm female American narrator). Other featured picks: PIGsltMj3gFMR34aFDI3 (Jonathan Livingston, calm male American narrator), Q7yjSu9pVI6fMxiCGwMo (Sarah, warm midwest female narrator), NuRyEq0OdD9mMOyd51UZ (Jofra, expressive young British male), tJ8LOFTaeHnV8MwJjjDK (Monique, female American audiobook narrator), flHkNRp1BlvT73UL6gyz (Jessica Anne Bogart, female American villainous), weA4Q36twV5kwSaTEL0Q (Eva, female American robotic AI assistant). Search the full library with the voice subcommand Default vZzlAds9NzvLsFSWp0qk

clor inference elevenlabs transcribe

Transcribe an audio file to text with ElevenLabs Scribe (speech-to-text)

Accepts mp3, mp4, m4a, wav, webm, ogg, flac. Pick scribe_v2 (default) for the lowest word-error rate across 90+ languages and the strongest multi-language audio handling. scribe_v1 is kept supported for compatibility with workflows pinned to its outputs. --language-code locks the language and improves accuracy when known. --keyterm-prompt (repeatable) biases recognition toward specific terms (brand names, technical vocabulary, speaker names). Each prompt adds keyterm_seconds to the usage block. --enable-entity-detection surfaces detected entities (people, places, organizations) in the response and bills entity_seconds.

Usage
clor inference elevenlabs transcribe <FILE> [flags]
FlagDescription
--enable-entity-detectionreturn detected entities in the response (entity_seconds populated in usage)
--helphelp for transcribe
--keyterm-promptkeyterm prompt; pass repeatedly to bias recognition toward specific terms (keyterm_seconds populated in usage) Default []
--language-code2-letter language code, ISO 639-1 (en, es, fr); optional hint
--modelSTT model id (scribe_v1|scribe_v2) Default scribe_v2

clor inference elevenlabs voice

Browse the ElevenLabs voice library to find voice ids for speech and voice-changer

Usage
clor inference elevenlabs voice [flags]
FlagDescription
--helphelp for voice

clor inference elevenlabs voice list

Search the ElevenLabs voice library by gender, age, accent, language, use case, or free text

Always pass at least one filter or --search (the library has tens of thousands of voices). Pagination: --page (0-indexed) + --page-size; the response carries has_more.

Usage
clor inference elevenlabs voice list [flags]
FlagDescription
--accentfilter by accent (american|british|australian|...)
--agefilter by age (young|middle_aged|old)
--categoryfilter by category (professional|high_quality|premade)
--featuredonly return voices flagged as featured
--genderfilter by gender (male|female|neutral)
--helphelp for list
--language2-letter language code, ISO 639-1 (en, es, fr); filter
--page0-indexed page number
--page-sizevoices per page (1-100; default 30)
--searchfree-text search across voice name and description
--use-casefilter by use case (social_media|narrative_story|characters_animation|...)

clor inference elevenlabs voice-changer

Convert the speaker in an audio file to a target voice (speech-to-speech)

Speech-to-speech: re-voices --audio-file as --voice-id. Discover voice ids with the voice subcommand.

Usage
clor inference elevenlabs voice-changer [flags]
FlagDescription
--audio-filepath to the source audio (required)
--audio-output-filedestination MP3 path (auto-generated in CWD when omitted)
--helphelp for voice-changer
--modelvoice-changer model id (eleven_multilingual_sts_v2|eleven_english_sts_v2)
--voice-idtarget voice id (required)

clor inference elevenlabs voice-isolator

Strip background noise from an audio recording, isolating the voice

Usage
clor inference elevenlabs voice-isolator [flags]
FlagDescription
--audio-filepath to the input audio (required)
--audio-output-filedestination MP3 path (auto-generated in CWD when omitted)
--helphelp for voice-isolator

clor inference google

Call Google for Gemini text generation and nano-banana image generation and editing

Gemini text generation, exact prompt token counting, and nano-banana image generation and editing. Pick the smallest model that can do the job. Text tiers (cheap to strong) gemini-3.1-flash-lite Default. Cheap and fast with Gemini 3 thinking controls. $0.25/$1.5 per Mtok. gemini-3.1-pro-preview Preview frontier reasoning model with the thinkingLevel enum (LOW or HIGH only). $2/$12 per Mtok (short), $4/$18 (long). 200K input cliff bills the whole request at the long-context tier. Image tiers (cheap to strong) gemini-3.1-flash-lite-image Nano Banana Lite. Cheapest and fastest. Per-token output billing at $0.25/$30 per Mtok. Lowest cost, lower fidelity. gemini-3.1-flash-image-preview Default. Nano Banana 2. Per-token output billing. Faster preview iteration than Pro, at lower fidelity. gemini-3-pro-image-preview Nano Banana Pro. Highest fidelity. Per-token output billing. Reasoning surface differs by family. Gemini 2.5 uses thinkingBudget (numeric). Gemini 3+ uses thinkingLevel (enum). The --reasoning flag maps both transparently. Thinking tokens are billed as output tokens and share the --max-tokens cap.

Usage
clor inference google [flags]
FlagDescription
--helphelp for google

clor inference google count-tokens

Count prompt tokens for a Gemini generate call without running generation

Exact count via Gemini's countTokens endpoint; text-only (image models rejected). Use this before committing to a long-context Pro call (>200K input bills the long-context tier on the whole request). Input modes (mutually exclusive): positional arg, --stdin-format text (single user message), or --stdin-format json (multi-turn array).

Usage
clor inference google count-tokens [PROMPT] [flags]
FlagDescription
--helphelp for count-tokens
--modelmodel id; must be a text-generation Gemini model (image-generation models are rejected). Tokenization is model-specific so the count matches a real generate call against the same model Default gemini-3.1-flash-lite
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead
--systemoptional system prompt; counted against the input

clor inference google image

Generate or edit an image with Gemini's nano-banana family from a text prompt

Generate from scratch or edit an existing image (--image-input). gemini-3.1-flash-lite-image Nano Banana Lite. Cheapest and fastest. Per-token output billing at $0.25/$30 per Mtok. Lowest cost, lower fidelity. gemini-3.1-flash-image-preview Default. Nano Banana 2. Per-token output billing. Faster preview iteration than Pro, at lower fidelity. gemini-3-pro-image-preview Nano Banana Pro. Highest fidelity and best instruction following. Per-token output billing. For multi-turn image editing on the preview models, thought signatures from prior turns must be passed back; image-edit signatures are strictly enforced.

Usage
clor inference google image <PROMPT> [flags]
FlagDescription
--aspect-ratioaspect ratio (1:1|16:9|9:16|4:3|3:4)
--helphelp for image
--image-inputpath to a PNG or JPEG to edit (optional)
--image-output-filedestination file path; default is a unique safe-named PNG in the current directory
--modelmodel id. gemini-3.1-flash-lite-image (Nano Banana Lite, cheapest and fastest, per-token billing, lower fidelity), gemini-3.1-flash-image-preview (default, Nano Banana 2, per-token billing, faster preview iteration), gemini-3-pro-image-preview (Nano Banana Pro, highest fidelity, per-token billing) Default gemini-3.1-flash-image-preview

clor inference google text

Generate text with a Gemini model (2.5 GA family, 3.1 and 3.5 stable, or 3.x previews)

Pick the smallest model that can do the job. flash-lite for cheap high-volume work, pro for frontier reasoning. 200K-input cliff on Pro models: prompts above 200K input tokens bill the entire request (input + output + cache) at the long-context tier (2x-1.5x the short-context rates). Count tokens with the count-tokens subcommand before committing. --reasoning per-effort cost framing: off No thinking on Gemini 2.5. On Gemini 3 Flash this maps to MINIMAL (the model still does some thinking; thinkingLevel has no zero-budget escape hatch). On Gemini 3 Pro it clamps up to LOW, since Pro has no MINIMAL tier. Cheapest, lowest latency. low 2.5: 2048-token thinking budget. 3+: LOW. Light reasoning for simple structured edits. medium 2.5: 8192-token thinking budget. 3 Flash: MEDIUM. 3 Pro clamps to LOW. Working default for ordinary reasoning. high 2.5: 16384-token thinking budget. 3+: HIGH. Multi-step planning, code review, harder analysis. xhigh 2.5: 32768-token thinking budget. 3+: clamps to HIGH (3 Flash maxes at HIGH, 3 Pro accepts only LOW/HIGH). For the hardest reasoning problems on 2.5. max 2.5: dynamic model-chosen ceiling. 3+: clamps to HIGH. Let the model spend whatever it needs (2.5) or hit the highest level (3+). Thinking tokens are billed as output tokens and share the --max-tokens cap, so raising effort raises both cost and the risk of truncated visible output. Image-generation models reject --reasoning with 400.

Usage
clor inference google text [PROMPT] [flags]
FlagDescription
--helphelp for text
--max-tokensmax output tokens (caps at the model's documented max). Thinking tokens count toward this cap
--modelmodel id. Cheap to strong: gemini-3.1-flash-lite (default), gemini-3.1-pro-preview. Pro models charge a long-context premium above 200K input tokens. Gemini 3+ models use the thinkingLevel enum Default gemini-3.1-flash-lite
--reasoningreasoning effort (off|low|medium|high|xhigh|max). Mapping depends on family. Gemini 2.5 uses thinkingBudget (off=0, low=2048, medium=8192, high=16384, xhigh=32768, max=dynamic ceiling). Gemini 3 Flash uses thinkingLevel (off=MINIMAL, low=LOW, medium=MEDIUM, high=HIGH; xhigh and max clamp to HIGH). Gemini 3 Pro accepts only LOW and HIGH, so off and medium clamp up to LOW (Pro has no MINIMAL tier) and xhigh/max clamp up to HIGH. Thinking tokens are billed as output tokens Default off
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead
--stopstop sequence; pass repeatedly for multiple (max 4) Default []
--systemoptional system prompt; passed to Gemini's systemInstruction
--temperaturesampling temperature (0.0-2.0); -1 means use the model's default. Gemini 3 reasoning is calibrated for the default; tuning below 1.0 can cause looping on hard reasoning tasks Default -1
--top-pnucleus-sampling threshold (0.0-1.0); -1 means use the model's default Default -1

clor inference openai

Call OpenAI for GPT text, gpt-image generation and editing, and gpt-4o audio transcription

GPT text, gpt-image generation and editing, gpt-4o transcription. Pick the smallest model that can do the job. Text tiers (cheap to strong) gpt-5.4-nano Cheapest. Best for the highest-volume extraction, classification, and reformatting where cost dominates. Accepts low|medium|high effort. $0.20/$1.25 per Mtok. gpt-5.4-mini Cheap and fast. Best for high-volume extraction, summarization, classification, reformatting. Accepts low|medium|high effort. $0.75/$4.5 per Mtok. gpt-5.6-luna Cheap general-purpose. Accepts low through max effort. $1/$6 per Mtok. gpt-5.6-terra Mid-tier. Strong reasoning at half the flagship rate. Accepts low through max effort. $2.50/$15 per Mtok. gpt-5.6-sol Default. Frontier reasoning. Adds xhigh and max effort for the hardest problems. $5/$30 per Mtok. gpt-5.5 Previous flagship. Accepts low through xhigh effort. $5/$30 per Mtok. Image tiers (cheap to strong) gpt-image-1-mini Lightest. Best for thumbnails and quick iteration. gpt-image-2 Default. Newest. Best instruction following and output quality. Audio (cheap to strong) gpt-4o-mini-transcribe Speech-to-text, half the cost. gpt-4o-transcribe Speech-to-text, default, most accurate. mp3, mp4, m4a, wav, webm, ogg, flac. 25 MiB cap enforced client-side.

Usage
clor inference openai [flags]
FlagDescription
--helphelp for openai

clor inference openai count-tokens

Count prompt tokens for an OpenAI Responses call without running generation

Counted locally with tiktoken (o200k_base for gpt-5.x/gpt-4o); lands within a small constant of upstream's usage.input_tokens. OpenAI has no count_tokens API. Input modes (mutually exclusive): positional arg, --stdin-format text (single user message), or --stdin-format json (multi-turn array).

Usage
clor inference openai count-tokens [PROMPT] [flags]
FlagDescription
--helphelp for count-tokens
--modelmodel id (gpt-5.6-sol|gpt-5.6-terra|gpt-5.6-luna|gpt-5.5|gpt-5.4-mini). The gpt-5.x family shares the o200k_base tokenizer, so the count is identical across them today; the field is kept per-model for future-proofing Default gpt-5.6-sol
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead
--systemoptional system prompt; counted against the input

clor inference openai image

Generate or edit an image with OpenAI's gpt-image family from a text prompt

Generate from scratch or edit an existing image (--image-input). Pick the smallest model that meets the quality bar. gpt-image-1-mini Lightest tier. Use for thumbnails, exploratory drafts, fast iteration loops. gpt-image-2 Default. Newest. Best instruction following and finest detail. Use when quality matters and the prompt encodes specific composition or text. --size and --quality default to auto. --n batches up to 10 generations in one call; only the first is written to disk by default.

Usage
clor inference openai image <PROMPT> [flags]
FlagDescription
--helphelp for image
--image-inputpath to a PNG or JPEG to edit (optional)
--image-output-filedestination file path; default is a unique safe-named PNG in the current directory (only the first image is written when n>1)
--modelmodel id (gpt-image-1-mini|gpt-image-2) Default gpt-image-2
--nnumber of images to generate (1-10) Default 1
--qualityquality (auto|low|medium|high); defaults to auto
--sizeimage size (auto|1024x1024|1024x1536|1536x1024); defaults to auto

clor inference openai text

Generate text with GPT via the OpenAI Responses API

Pick the smallest model that can do the job. gpt-5.4-mini for high-volume extraction or simple reformatting, gpt-5.6-sol (default) when frontier reasoning is worth the spend. Prompts >=1024 tokens auto-cache for ~90 percent discount on hits; hits surface in usage.cached_input_tokens. --reasoning per-effort cost framing: off Lets the model use its built-in default. gpt-5.x cannot be fully disabled; the default tier is medium. Right choice for general-purpose calls where you want the model to pick. low Light reasoning. Small slice of max_output_tokens reserved. Use for short structured edits and simple multi-step work. medium Working default for ordinary reasoning tasks. high Multi-step planning, code review, harder analysis. xhigh gpt-5.5 and the gpt-5.6 family. For the hardest problems that justify the spend. max gpt-5.6 family only. The top effort tier for the very hardest problems. Reasoning tokens are billed as output tokens and share the --max-tokens cap, so raising effort raises both cost and the risk that visible output gets truncated (status=incomplete). Summarized reasoning traces surface under --stdout-format json. Raw reasoning tokens are never returned.

Usage
clor inference openai text [PROMPT] [flags]
FlagDescription
--helphelp for text
--max-tokensmax output tokens (caps at the model's documented max). Reasoning tokens count toward this cap together with visible output; hitting the cap mid-reasoning returns status=incomplete
--modelmodel id. Cheap to strong: gpt-5.4-nano ($0.20/$1.25 per Mtok, cheapest high-volume), gpt-5.4-mini ($0.75/$4.5, simple high-volume), gpt-5.6-luna ($1/$6, cheap general-purpose), gpt-5.6-terra ($2.50/$15, mid-tier), gpt-5.6-sol ($5/$30, frontier reasoning, default) Default gpt-5.6-sol
--reasoningreasoning effort (off|low|medium|high|xhigh|max). off omits the field so the model uses its built-in default (gpt-5.x cannot be fully disabled, default is medium). low/medium/high climb in capability and cost. xhigh needs gpt-5.5 or the gpt-5.6 family; max is gpt-5.6 only and is for the hardest problems. Reasoning tokens are billed as output tokens and never returned verbatim (summaries surface under --stdout-format json) Default off
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead
--systemoptional system prompt (sent as OpenAI's instructions field). Prompts >=1024 tokens auto-cache for ~90 percent discount on hits
--temperaturesampling temperature (0.0-2.0); -1 means use the model's default Default -1
--top-pnucleus-sampling threshold (0.0-1.0); -1 means use the model's default. OpenAI recommends temperature OR top-p, not both Default -1

clor inference openai transcribe

Transcribe an audio file to text with OpenAI's gpt-4o-transcribe

Accepts mp3, mp4, mpeg, mpga, m4a, wav, webm, ogg, flac. 25 MiB cap is enforced client-side so oversized uploads do not waste a round trip. gpt-4o-transcribe (default) is the most accurate; gpt-4o-mini-transcribe is half the cost for high-volume work. Set --language when the audio language is known; it cuts latency and improves accuracy. Set --prompt to bias recognition toward known vocabulary (brand names, technical terms, speaker names) or to continue a prior segment. The prompt should match the audio language.

Usage
clor inference openai transcribe <FILE> [flags]
FlagDescription
--helphelp for transcribe
--language2-letter language code, ISO 639-1 (en, fr); optional, improves accuracy and latency when known
--modeltranscription model id (gpt-4o-transcribe|gpt-4o-mini-transcribe). mini is half the cost; full is more accurate Default gpt-4o-transcribe
--promptoptional context text to help with vocabulary or continue a previous segment; should match the audio language

clor inference openrouter

Reach hundreds of chat and image-generation models through OpenRouter

Single OpenAI-compatible chat-completions surface fronting hundreds of models from many labs (Anthropic, OpenAI, Google, X-AI, Meta, Mistral, DeepSeek, Qwen, and many smaller labs). Model strings are open passthrough; any id OpenRouter accepts is forwarded unchanged. Per-call dollar cost comes back in the response, so no per-model rate table is maintained here. Prefer the dedicated subcommands (anthropic, openai, google) for models that live there. They expose stronger feature parity (count tokens, image generation, reasoning effort enums, modality-split usage) and transparent pricing tiers. Reach for openrouter when: - the caller needs Llama, DeepSeek, Qwen, X-AI Grok, Mistral, or another model the dedicated subcommands do not cover - the caller wants to try an open-weights model without standing up inference infrastructure - the caller wants to benchmark a model against another vendor's surface (responses come back in OpenAI-compatible shape) Use the model subcommand to discover model ids and pricing.

Usage
clor inference openrouter [flags]
FlagDescription
--helphelp for openrouter

clor inference openrouter model

Browse the OpenRouter catalogue to find model ids for chat

Discover model ids to pass as --model on the text subcommand. The catalogue fronts hundreds of models from many labs.

Usage
clor inference openrouter model [flags]
FlagDescription
--helphelp for model

clor inference openrouter model list

List OpenRouter models, defaulting to the top 30 newest from frontier labs

Defaults to top 30 newest from frontier labs (anthropic, openai, google, x-ai, meta-llama, mistralai, deepseek, qwen, openrouter), excluding `:free` and `:nitro` variants. --all dumps every model; --provider/--modality/--search narrow within the default curation. JSON output includes per-token pricing; text/jsonl omit it.

Usage
clor inference openrouter model list [flags]
FlagDescription
--allskip the frontier-lab default curation and return every model OpenRouter fronts
--helphelp for list
--limitmaximum rows to return; ignored when --all is set Default 30
--modalityfilter by output modality (text|image|audio)
--providerfilter to one provider id prefix (anthropic, openai, google, ...); repeatable Default []
--searchcase-insensitive substring match on model id, name, and description

clor inference openrouter text

Generate text with any OpenRouter model

--model is required; OpenRouter has no implicit default since the catalogue spans hundreds of models. Examples: anthropic/claude-opus-4-8, openai/gpt-5.5, google/gemini-3.5-flash, meta-llama/llama-3.3-70b-instruct, deepseek/deepseek-v3, x-ai/grok-4. Discover ids with the model subcommand. Input modes: positional, --stdin-format text, or --stdin-format json (multi-turn array). Multimodal: --image-input (local file, repeatable) or --image-url (remote or data URL, repeatable) attach to the final user message. Image generation: --image-output PATH on an image-capable model opts the request into image-output modality; the first returned image is saved. Reasoning is a coarse effort hint passed through to whichever upstream model supports thinking. --reasoning low|medium|high lands on the upstream's effort enum where one exists. --reasoning-tokens N is an explicit token budget that takes precedence over --reasoning when both are set. Models without reasoning support silently ignore both fields. Because OpenRouter normalizes a heterogeneous set of upstreams, exact effort semantics vary by model; expect frontier behaviour to match each lab's own surface.

Usage
clor inference openrouter text [PROMPT] [flags]
FlagDescription
--helphelp for text
--image-inputpath to a local PNG/JPEG/WEBP to attach to the user message for vision models (read, base64-encoded, sent as a data: URL); repeatable Default []
--image-outputdestination file path for an image-generation model's output; setting this also opts the request into image-output modality. When the model returns multiple images only the first is written
--image-urlimage URL to attach to the user message for vision models (http(s) or data:); repeatable Default []
--max-tokenscap on output tokens (0 means the model's own default)
--modelOpenRouter model id (anthropic/claude-opus-4-8, openai/gpt-5.5, google/gemini-3.5-flash, meta-llama/llama-3.3-70b-instruct, deepseek/deepseek-v3, x-ai/grok-4, ...). Required; no default since OpenRouter is open passthrough across hundreds of models. Discover ids with the model subcommand
--reasoningreasoning effort for models that support thinking (low|medium|high); ignored by models without reasoning
--reasoning-tokensexplicit reasoning budget in tokens; takes precedence over --reasoning when both are set
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead
--stopcustom stop string; up to four entries; repeatable Default []
--systemoptional system prompt prepended as a role=system message
--temperaturesampling temperature (0.0-2.0); -1 means use the model's default Default -1
--top-pnucleus sampling threshold (0.0-1.0); -1 means use the model's default Default -1

clor install

Install or upgrade the CLI and daemon, sync skills into Claude Code and Codex

Install the CLI binary, the clor daemon as a user-scope service, and the skills for every detected local AI agent. Use a subcommand to scope the action. Agent recommendation: when the user asks you to "install clor", "upgrade clor", "update clor", "reinstall clor", "refresh clor", or anything in that family, just run "clor install" with no subcommand. It is idempotent and safe to re-run: it upgrades the CLI to the latest release, refreshes the daemon service registration, and syncs the skills into every detected AI agent in one shot. Use --force to reinstall the CLI binary even when its version already matches. The daemon service and skill refresh run normally either way. Do not ask the user which piece to install. Users typically don't know the difference between cli, service, and skill, and "clor install" handles all three normal surfaces (cli + service + skill) correctly every time. Asking "should I install the cli, the service, or the skills?" is the wrong move; pick the plain "clor install" and run it. Only reach for a subcommand if the user is explicit about scope ("only set up the daemon on this host", "sync the skill files"). The subcommands exist for narrow targeted work, not for normal installs or upgrades. Use when: - the user asks to install, upgrade, update, refresh, or reinstall anything to do with clor; run "clor install" with no subcommand - a specific surface needs a targeted refresh and the user named it explicitly; only then use the matching subcommand Subcommands: cli Download install.sh from the control plane and run it with bash service Install the clor daemon as a user-scope service (systemd/launchd) skill Tarball-sync skills into Claude Code and Codex Output: every subcommand supports --stdout-format text|jsonl|json (default text, logfmt with event= leader).

Usage
clor install [flags]
FlagDescription
--forcereinstall the CLI binary even when the installed version matches
--helphelp for install

clor install cli

Download the install script from the control plane and run it with bash to upgrade or reinstall the CLI

Fetches install.sh from the active control plane and runs it with bash; the script's output streams live to the terminal. Designed to upgrade or reinstall the CLI binary itself without leaving the terminal. Use --force to reinstall the binary when the installed version already matches the requested release.

Usage
clor install cli [flags]
FlagDescription
--forcereinstall the CLI binary even when the installed version matches
--helphelp for cli

clor install service

Install the daemon as a service under systemd on Linux or launchd on macOS

Picks the best available service manager and installs the daemon under it. On Linux invoked as root, writes `/etc/systemd/system/clor.service` then runs `systemctl enable` and `systemctl restart` so the daemon runs as root, survives reboots without enable-linger, and a reinstall swaps the running process to the freshly installed binary. On Linux as a regular user with a working systemd user session, writes `~/.config/systemd/user/clor.service` and runs the same enable plus restart under `systemctl --user`. On macOS, writes `~/Library/LaunchAgents/com.clor.plist` and bootstraps it under the current GUI session. On hosts with no supported service manager (containers, sandboxes, minimal images), nothing is installed and a warning explains that the daemon, which runs the spaces assigned to this machine, will not run here. That warning is safe to ignore on a machine used only to manage spaces that run elsewhere. Idempotent. Re-runs stop any prior daemon, refresh the unit or plist, and restart the service.

Usage
clor install service [flags]
FlagDescription
--helphelp for service

clor install skill

Install skills into Claude Code and Codex

Installs skills into the target agents' skills directories. Outside a space this syncs the official skills tree into every detected enabled agent (an explicit `--agent <NAME>` targets one). Inside a space (CLOR_SPACE_ID set) it instead installs exactly the skills attached to that space, converging on re-runs.

Usage
clor install skill [flags]
FlagDescription
--agentagent to install skills into outside a space (claude|codex|all) Default all
--helphelp for skill

clor linear

Read and update Linear issues, projects, cycles, initiatives, documents, and workspace records

Direct Linear workspace access through GraphQL. Typed commands cover the common developer and product-management workflow; graphql handles uncommon operations without changing the normalized output contract of typed commands. Use it when - issues, comments, relations, labels, states, or attachments need to be read or changed - projects, progress updates, milestones, cycles, or initiatives need to be managed - workspace users, teams, or documents need to be queried Subcommands whoami Show the authenticated Linear user search Search issues, projects, or documents issue Read and change issues, comments, and relations project Read and change projects, progress updates, and milestones cycle Read and change cycles initiative Read and change initiatives and their projects document Read and change documents attachment Read and change issue attachments team List and show teams user List and show users state List and show workflow states label Read and change issue labels graphql Run a named GraphQL operation directly Output formats Every subcommand supports --stdout-format text|jsonl|json (default text, logfmt with event= leader).

Usage
clor linear [flags]
FlagDescription
--connectionconnection ID when several Linear workspaces are connected
--helphelp for linear

clor linear attachment

Read and change Linear issue attachments

Usage
clor linear attachment [flags]
FlagDescription
--helphelp for attachment

clor linear attachment create

Create a linked issue attachment

Usage
clor linear attachment create <ISSUE> <URL> [flags]
FlagDescription
--comment-bodyMarkdown linked-comment body
--comment-body-filefile containing the Markdown linked-comment body, or - for stdin
--helphelp for create
--icon-urlattachment icon URL
--metadataattachment metadata as a JSON object
--subtitleattachment subtitle
--titleattachment title

clor linear attachment delete

Delete an issue attachment

Usage
clor linear attachment delete <ATTACHMENT> [flags]
FlagDescription
--helphelp for delete

clor linear attachment list

List workspace attachments or attachments on one issue

Usage
clor linear attachment list [ISSUE] [flags]
FlagDescription
--cursorRelay cursor to continue after
--helphelp for list
--include-archivedinclude archived records
--limitmaximum records to return Default 50
--orderingpagination ordering (created|updated) Default created

clor linear attachment show

Show one attachment

Usage
clor linear attachment show <ATTACHMENT> [flags]
FlagDescription
--helphelp for show

clor linear attachment update

Update an issue attachment

Usage
clor linear attachment update <ATTACHMENT> [flags]
FlagDescription
--clear-icon-urlclear the icon URL
--clear-metadataclear the metadata
--clear-subtitleclear the subtitle
--helphelp for update
--icon-urlattachment icon URL
--metadataattachment metadata as a JSON object
--subtitleattachment subtitle
--titlenew attachment title

clor linear cycle

Read and change Linear team cycles

Usage
clor linear cycle [flags]
FlagDescription
--helphelp for cycle

clor linear cycle archive

Archive a cycle

Usage
clor linear cycle archive <CYCLE> [flags]
FlagDescription
--helphelp for archive
--teamteam ID, URL, key, or exact name used to disambiguate

clor linear cycle create

Create a cycle for a team

Usage
clor linear cycle create [flags]
FlagDescription
--descriptioncycle description
--endscycle end time (RFC3339)
--helphelp for create
--namecustom cycle name
--startscycle start time (RFC3339)
--teamteam ID, URL, key, or exact name

clor linear cycle list

List cycles

Usage
clor linear cycle list [flags]
FlagDescription
--cursorRelay cursor to continue after
--helphelp for list
--include-archivedinclude archived records
--limitmaximum records to return Default 50
--orderingpagination ordering (created|updated) Default created
--teamteam ID, URL, key, or exact name

clor linear cycle show

Show one cycle

Usage
clor linear cycle show <CYCLE> [flags]
FlagDescription
--helphelp for show
--teamteam ID, URL, key, or exact name used to disambiguate

clor linear cycle update

Update cycle dates and details

Usage
clor linear cycle update <CYCLE> [flags]
FlagDescription
--clear-completedclear the completion time
--clear-descriptionclear the description
--clear-nameclear the custom name
--completedcycle completion time (RFC3339)
--descriptioncycle description
--endscycle end time (RFC3339)
--helphelp for update
--namecustom cycle name
--startscycle start time (RFC3339)
--teamteam ID, URL, key, or exact name used to disambiguate

clor linear document

Read and change Linear Markdown documents

Usage
clor linear document [flags]
FlagDescription
--helphelp for document

clor linear document create

Create a Markdown document

Usage
clor linear document create <TITLE> [flags]
FlagDescription
--colordocument icon color
--contentMarkdown document content
--content-filefile containing Markdown document content, or - for stdin
--cyclerelated cycle ID, URL, or exact name
--helphelp for create
--icondocument icon
--initiativerelated initiative ID, URL, identifier, or exact name
--issuerelated issue ID, URL, or identifier
--projectrelated project ID, URL, or exact name
--teamrelated team ID, URL, key, or exact name

clor linear document delete

Move a document to recoverable trash

Usage
clor linear document delete <DOCUMENT> [flags]
FlagDescription
--helphelp for delete

clor linear document list

List documents

Usage
clor linear document list [flags]
FlagDescription
--cursorRelay cursor to continue after
--helphelp for list
--include-archivedinclude archived records
--limitmaximum records to return Default 50
--orderingpagination ordering (created|updated) Default created

clor linear document show

Show one document

Usage
clor linear document show <DOCUMENT> [flags]
FlagDescription
--helphelp for show

clor linear document unarchive

Restore a trashed document

Usage
clor linear document unarchive <DOCUMENT> [flags]
FlagDescription
--helphelp for unarchive

clor linear document update

Update a document with explicit clear operations

Usage
clor linear document update <DOCUMENT> [flags]
FlagDescription
--clear-colorclear the icon color
--clear-contentclear the Markdown content
--clear-cycleclear the related cycle
--clear-iconclear the icon
--clear-initiativeclear the related initiative
--clear-issueclear the related issue
--clear-projectclear the related project
--clear-teamclear the related team
--colordocument icon color
--contentMarkdown document content
--content-filefile containing Markdown document content, or - for stdin
--cyclerelated cycle ID, URL, or exact name
--helphelp for update
--icondocument icon
--initiativerelated initiative ID, URL, identifier, or exact name
--issuerelated issue ID, URL, or identifier
--projectrelated project ID, URL, or exact name
--teamrelated team ID, URL, key, or exact name
--titlenew document title

clor linear graphql

Run an uncommon Linear GraphQL operation directly

Usage
clor linear graphql [QUERY] [flags]
FlagDescription
--helphelp for graphql
--operation-nameGraphQL operation name
--query-filefile containing the GraphQL query
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead
--variablevariable as NAME=JSON, repeatable Default []
--variablesvariables as one JSON object

clor linear initiative

Read and change Linear initiatives and their projects

Use when: - the user needs Linear initiative records

Usage
clor linear initiative [flags]
FlagDescription
--helphelp for initiative

clor linear initiative archive

Archive an initiative

Usage
clor linear initiative archive <INITIATIVE> [flags]
FlagDescription
--helphelp for archive

clor linear initiative create

Create a workspace initiative

Usage
clor linear initiative create <NAME> [flags]
FlagDescription
--contentMarkdown initiative content
--content-filefile containing Markdown initiative content, or - for stdin
--descriptioninitiative description
--helphelp for create
--ownerowner ID, email, me, or exact name
--priorityinitiative priority (no-priority|urgent|high|medium|low)
--statusinitiative status (proposed|planned|active|completed|canceled)
--target-dateestimated completion date (YYYY-MM-DD)

clor linear initiative delete

Move an initiative to recoverable trash

Usage
clor linear initiative delete <INITIATIVE> [flags]
FlagDescription
--helphelp for delete

clor linear initiative list

List initiatives

Usage
clor linear initiative list [flags]
FlagDescription
--cursorRelay cursor to continue after
--helphelp for list
--include-archivedinclude archived records
--limitmaximum records to return Default 50
--orderingpagination ordering (created|updated) Default created

clor linear initiative project

List, add, and remove initiative projects

Use when: - the user needs Linear project records

Usage
clor linear initiative project [flags]
FlagDescription
--helphelp for project

clor linear initiative project add

Add a project to an initiative

Usage
clor linear initiative project add <INITIATIVE> <PROJECT> [flags]
FlagDescription
--helphelp for add

clor linear initiative project list

List projects in an initiative

Usage
clor linear initiative project list <INITIATIVE> [flags]
FlagDescription
--cursorRelay cursor to continue after
--helphelp for list
--include-archivedinclude archived records
--limitmaximum records to return Default 50
--orderingpagination ordering (created|updated) Default created

clor linear initiative project remove

Remove a project from an initiative

Usage
clor linear initiative project remove <INITIATIVE> <PROJECT> [flags]
FlagDescription
--helphelp for remove

clor linear initiative show

Show one initiative

Usage
clor linear initiative show <INITIATIVE> [flags]
FlagDescription
--helphelp for show

clor linear initiative unarchive

Unarchive an initiative

Usage
clor linear initiative unarchive <INITIATIVE> [flags]
FlagDescription
--helphelp for unarchive

clor linear initiative update

Update an initiative with explicit clear operations

Usage
clor linear initiative update <INITIATIVE> [flags]
FlagDescription
--clear-contentclear the Markdown content
--clear-descriptionclear the description
--clear-ownerclear the owner
--clear-priorityset no priority
--clear-target-dateclear the target date
--contentMarkdown initiative content
--content-filefile containing Markdown initiative content, or - for stdin
--descriptioninitiative description
--helphelp for update
--namenew initiative name
--ownerowner ID, email, me, or exact name
--priorityinitiative priority (no-priority|urgent|high|medium|low)
--statusinitiative status (proposed|planned|active|completed|canceled)
--target-dateestimated completion date (YYYY-MM-DD)

clor linear issue

Read and change Linear issues, comments, and relations

Use when: - the user needs Linear issue records

Usage
clor linear issue [flags]
FlagDescription
--helphelp for issue

clor linear issue archive

Archive an issue

Usage
clor linear issue archive <ISSUE> [flags]
FlagDescription
--helphelp for archive

clor linear issue comment

Read and change issue comments

Use when: - the user needs Linear comment records

Usage
clor linear issue comment [flags]
FlagDescription
--helphelp for comment

clor linear issue comment create

Create an issue comment in Markdown

Usage
clor linear issue comment create <ISSUE> [BODY] [flags]
FlagDescription
--body-filefile containing the Markdown body, or - for stdin
--helphelp for create
--parentparent comment ID

clor linear issue comment delete

Delete an issue comment

Usage
clor linear issue comment delete <COMMENT> [flags]
FlagDescription
--helphelp for delete

clor linear issue comment list

List comments on an issue

Usage
clor linear issue comment list <ISSUE> [flags]
FlagDescription
--cursorRelay cursor to continue after
--helphelp for list
--include-archivedinclude archived records
--limitmaximum records to return Default 50
--orderingpagination ordering (created|updated) Default created

clor linear issue comment resolve

Resolve a comment thread

Usage
clor linear issue comment resolve <COMMENT> [flags]
FlagDescription
--helphelp for resolve

clor linear issue comment unresolve

Unresolve a comment thread

Usage
clor linear issue comment unresolve <COMMENT> [flags]
FlagDescription
--helphelp for unresolve

clor linear issue comment update

Update an issue comment in Markdown

Usage
clor linear issue comment update <COMMENT> [BODY] [flags]
FlagDescription
--body-filefile containing the Markdown body, or - for stdin
--helphelp for update

clor linear issue create

Create an issue with typed workspace references

Usage
clor linear issue create <TITLE> [flags]
FlagDescription
--assigneeassignee ID, email, me, or exact name
--cyclecycle ID, URL, or exact name
--descriptionMarkdown description
--description-filefile containing the Markdown description, or - for stdin
--due-datedue date (YYYY-MM-DD)
--estimateissue estimate
--helphelp for create
--labellabel ID or exact name, repeatable Default []
--milestoneproject milestone ID or exact name
--parentparent issue ID, URL, or identifier
--priorityissue priority (no-priority|urgent|high|medium|low)
--projectproject ID, URL, or exact name
--statestate ID or exact name
--teamteam ID, URL, key, or exact name
--templatetemplate ID

clor linear issue delete

Move an issue to recoverable trash

Usage
clor linear issue delete <ISSUE> [flags]
FlagDescription
--helphelp for delete

clor linear issue list

List issues with exact workspace filters

Usage
clor linear issue list [flags]
FlagDescription
--assigneeassignee ID, email, me, or exact name
--cursorRelay cursor to continue after
--cyclecycle ID, URL, or exact name
--helphelp for list
--include-archivedinclude archived records
--labellabel ID or exact name
--limitmaximum records to return Default 50
--orderingpagination ordering (created|updated) Default created
--priorityissue priority (no-priority|urgent|high|medium|low)
--projectproject ID, URL, or exact name
--statestate ID or exact name
--teamteam ID, URL, key, or exact name

clor linear issue relation

List, add, and remove issue relations

Use when: - the user needs Linear relation records

Usage
clor linear issue relation [flags]
FlagDescription
--helphelp for relation

clor linear issue relation add

Add a typed relation from one issue to another

Usage
clor linear issue relation add <ISSUE> <RELATED_ISSUE> [flags]
FlagDescription
--helphelp for add
--typerelation type (blocks|duplicate|related|similar) Default related

clor linear issue relation list

List relations sourced from an issue

Usage
clor linear issue relation list <ISSUE> [flags]
FlagDescription
--cursorRelay cursor to continue after
--helphelp for list
--include-archivedinclude archived records
--limitmaximum records to return Default 50
--orderingpagination ordering (created|updated) Default created

clor linear issue relation remove

Remove an issue relation

Usage
clor linear issue relation remove <RELATION> [flags]
FlagDescription
--helphelp for remove

clor linear issue show

Show one issue

Usage
clor linear issue show <ISSUE> [flags]
FlagDescription
--helphelp for show

clor linear issue unarchive

Unarchive an issue

Usage
clor linear issue unarchive <ISSUE> [flags]
FlagDescription
--helphelp for unarchive

clor linear issue update

Update an issue with explicit set and clear operations

Usage
clor linear issue update <ISSUE> [flags]
FlagDescription
--add-labellabel ID or exact name to add, repeatable Default []
--assigneeassignee ID, email, me, or exact name
--clear-assigneeclear the assignee
--clear-cycleclear the cycle
--clear-descriptionclear the description
--clear-due-dateclear the due date
--clear-estimateclear the estimate
--clear-labelsremove all labels
--clear-milestoneclear the project milestone
--clear-parentclear the parent issue
--clear-priorityset no priority
--clear-projectclear the project and milestone
--clear-stateclear the state
--clear-templateclear the last applied template
--cyclecycle ID, URL, or exact name
--descriptionMarkdown description
--description-filefile containing the Markdown description, or - for stdin
--due-datedue date (YYYY-MM-DD)
--estimateissue estimate
--helphelp for update
--milestoneproject milestone ID or exact name
--parentparent issue ID, URL, or identifier
--priorityissue priority (no-priority|urgent|high|medium|low)
--projectproject ID, URL, or exact name
--remove-labellabel ID or exact name to remove, repeatable Default []
--statestate ID or exact name
--teamteam ID, URL, key, or exact name
--templatetemplate ID
--titlenew issue title

clor linear label

Read and change Linear issue labels

Usage
clor linear label [flags]
FlagDescription
--helphelp for label

clor linear label create

Create an issue label

Usage
clor linear label create <NAME> [flags]
FlagDescription
--colorhex color
--descriptionlabel description
--groupcreate a label group
--helphelp for create
--parentparent label ID or exact name
--teamteam ID, URL, key, or exact name

clor linear label delete

Delete an issue label

Usage
clor linear label delete <LABEL> [flags]
FlagDescription
--helphelp for delete
--teamteam ID, URL, key, or exact name used to disambiguate

clor linear label list

List labels

Usage
clor linear label list [flags]
FlagDescription
--cursorRelay cursor to continue after
--helphelp for list
--include-archivedinclude archived records
--limitmaximum records to return Default 50
--orderingpagination ordering (created|updated) Default created
--teamteam ID, URL, key, or exact name

clor linear label show

Show one label

Usage
clor linear label show <LABEL> [flags]
FlagDescription
--helphelp for show
--teamteam ID, URL, key, or exact name used to disambiguate

clor linear label update

Update an issue label

Usage
clor linear label update <LABEL> [flags]
FlagDescription
--clear-descriptionclear the description
--clear-parentclear the parent label
--colorhex color
--descriptionlabel description
--groupset whether this is a label group
--helphelp for update
--namenew label name
--parentparent label ID or exact name
--teamteam ID, URL, key, or exact name used to disambiguate

clor linear project

Read and change Linear projects, progress updates, and milestones

Use when: - the user needs Linear project records

Usage
clor linear project [flags]
FlagDescription
--helphelp for project

clor linear project create

Create a project across one or more teams

Usage
clor linear project create <NAME> [flags]
FlagDescription
--contentMarkdown project content
--content-filefile containing Markdown project content, or - for stdin
--descriptionproject description
--helphelp for create
--leadlead ID, email, me, or exact name
--membermember ID, email, me, or exact name, repeatable Default []
--priorityproject priority (no-priority|urgent|high|medium|low)
--start-datestart date (YYYY-MM-DD)
--statusproject status ID or exact name
--target-datetarget date (YYYY-MM-DD)
--teamteam ID, URL, key, or exact name, repeatable Default []

clor linear project delete

Move a project to recoverable trash

Usage
clor linear project delete <PROJECT> [flags]
FlagDescription
--helphelp for delete

clor linear project list

List projects

Usage
clor linear project list [flags]
FlagDescription
--cursorRelay cursor to continue after
--helphelp for list
--include-archivedinclude archived records
--limitmaximum records to return Default 50
--orderingpagination ordering (created|updated) Default created

clor linear project milestone

Read and change project milestones

Use when: - the user needs Linear milestone records

Usage
clor linear project milestone [flags]
FlagDescription
--helphelp for milestone

clor linear project milestone create

Create a project milestone

Usage
clor linear project milestone create <PROJECT> <NAME> [flags]
FlagDescription
--descriptionMarkdown milestone description
--description-filefile containing the Markdown description, or - for stdin
--helphelp for create
--target-datetarget date (YYYY-MM-DD)

clor linear project milestone delete

Delete a project milestone

Usage
clor linear project milestone delete <MILESTONE> [flags]
FlagDescription
--helphelp for delete

clor linear project milestone list

List milestones for a project

Usage
clor linear project milestone list <PROJECT> [flags]
FlagDescription
--cursorRelay cursor to continue after
--helphelp for list
--include-archivedinclude archived records
--limitmaximum records to return Default 50
--orderingpagination ordering (created|updated) Default created

clor linear project milestone show

Show one milestone

Usage
clor linear project milestone show <MILESTONE> [flags]
FlagDescription
--helphelp for show
--projectproject ID, URL, key, or exact name used to disambiguate

clor linear project milestone update

Update a project milestone

Usage
clor linear project milestone update <MILESTONE> [flags]
FlagDescription
--clear-descriptionclear the description
--clear-target-dateclear the target date
--descriptionMarkdown milestone description
--description-filefile containing the Markdown description, or - for stdin
--helphelp for update
--namenew milestone name
--projectnew project ID, URL, or exact name
--target-datetarget date (YYYY-MM-DD)

clor linear project progress

Read and change project progress updates

Use when: - the user needs Linear progress records

Usage
clor linear project progress [flags]
FlagDescription
--helphelp for progress

clor linear project progress archive

Archive a project progress update

Usage
clor linear project progress archive <PROGRESS> [flags]
FlagDescription
--helphelp for archive

clor linear project progress create

Create a project progress update

Usage
clor linear project progress create <PROJECT> [BODY] [flags]
FlagDescription
--body-filefile containing the Markdown body, or - for stdin
--healthproject health (on-track|at-risk|off-track)
--helphelp for create

clor linear project progress delete

Remove a project progress update recoverably

Usage
clor linear project progress delete <PROGRESS> [flags]
FlagDescription
--helphelp for delete

clor linear project progress list

List progress updates for a project

Usage
clor linear project progress list <PROJECT> [flags]
FlagDescription
--cursorRelay cursor to continue after
--helphelp for list
--include-archivedinclude archived records
--limitmaximum records to return Default 50
--orderingpagination ordering (created|updated) Default created

clor linear project progress unarchive

Unarchive a project progress update

Usage
clor linear project progress unarchive <PROGRESS> [flags]
FlagDescription
--helphelp for unarchive

clor linear project progress update

Update a project progress update

Usage
clor linear project progress update <PROGRESS> [BODY] [flags]
FlagDescription
--body-filefile containing the Markdown body, or - for stdin
--clear-bodyclear the progress body
--healthproject health (on-track|at-risk|off-track)
--helphelp for update

clor linear project show

Show one project

Usage
clor linear project show <PROJECT> [flags]
FlagDescription
--helphelp for show

clor linear project unarchive

Restore a trashed or archived project

Usage
clor linear project unarchive <PROJECT> [flags]
FlagDescription
--helphelp for unarchive

clor linear project update

Update a project with explicit set and clear operations

Usage
clor linear project update <PROJECT> [flags]
FlagDescription
--clear-contentclear the Markdown content
--clear-descriptionclear the description
--clear-leadclear the project lead
--clear-membersremove all project members
--clear-priorityset no priority
--clear-start-dateclear the start date
--clear-statusclear the project status
--clear-target-dateclear the target date
--contentMarkdown project content
--content-filefile containing Markdown project content, or - for stdin
--descriptionproject description
--helphelp for update
--leadlead ID, email, me, or exact name
--membermember ID, email, me, or exact name, repeatable Default []
--namenew project name
--priorityproject priority (no-priority|urgent|high|medium|low)
--start-datestart date (YYYY-MM-DD)
--statusproject status ID or exact name
--target-datetarget date (YYYY-MM-DD)
--teamteam ID, URL, key, or exact name, repeatable Default []

clor linear state

List and show Linear workflow states

Usage
clor linear state [flags]
FlagDescription
--helphelp for state

clor linear state list

List states

Usage
clor linear state list [flags]
FlagDescription
--cursorRelay cursor to continue after
--helphelp for list
--include-archivedinclude archived records
--limitmaximum records to return Default 50
--orderingpagination ordering (created|updated) Default created
--teamteam ID, URL, key, or exact name

clor linear state show

Show one state

Usage
clor linear state show <STATE> [flags]
FlagDescription
--helphelp for show
--teamteam ID, URL, key, or exact name used to disambiguate

clor linear team

List and show Linear teams

Usage
clor linear team [flags]
FlagDescription
--helphelp for team

clor linear team list

List teams

Usage
clor linear team list [flags]
FlagDescription
--cursorRelay cursor to continue after
--helphelp for list
--include-archivedinclude archived records
--limitmaximum records to return Default 50
--orderingpagination ordering (created|updated) Default created

clor linear team show

Show one team

Usage
clor linear team show <TEAM> [flags]
FlagDescription
--helphelp for show

clor linear user

List and show Linear workspace users

Usage
clor linear user [flags]
FlagDescription
--helphelp for user

clor linear user list

List users

Usage
clor linear user list [flags]
FlagDescription
--cursorRelay cursor to continue after
--helphelp for list
--include-archivedinclude archived records
--limitmaximum records to return Default 50
--orderingpagination ordering (created|updated) Default created

clor linear user show

Show one user

Usage
clor linear user show <USER> [flags]
FlagDescription
--helphelp for show

clor linear whoami

Show the authenticated Linear user

Usage
clor linear whoami [flags]
FlagDescription
--helphelp for whoami

clor machine

Create a long-lived cloud machine and connect to it over SSH

Create a long-lived cloud machine by a region, size, and image, reach it over SSH, and drive its whole lifecycle. Machines live from minutes to years until you destroy them. Stopping a machine powers it off but keeps billing; only destroying it stops billing. Use when: - the user wants a cloud server to run a build, a long job, or a service - the user wants to run a command on, resize, or tear down one of their machines Subcommands: create Create a machine by region, size, and image list List your machines show Show one machine stop Power a machine off (keeps billing) start Power a stopped machine back on resize Resize a machine to a new size destroy Destroy a machine and stop billing ssh Run a command on a machine over SSH region Discover the regions you can create machines in size Discover the sizes you can create machines with limit Show your billing tier and the resource limits it grants firewall Open, close, and list the inbound ports on a machine hostname Show or rename a machine's DNS name Output: every subcommand supports --stdout-format text|jsonl|json (default text, logfmt with event= leader).

Usage
clor machine [flags]
FlagDescription
--helphelp for machine

clor machine create

Create a machine by region, family, size, and image

Usage
clor machine create [flags]
FlagDescription
--clor-api-keyAPI key for --install-clor
--familyplan family (performance|memory), fixed at creation
--helphelp for create
--imageimage slug (e.g. ubuntu-24-04)
--init-scriptpath to a best-effort shell script run after system setup
--install-clorinstall and authenticate Clor on the machine
--nameoptional label for the machine
--regionregion code (see 'clor machine region list')
--sizesize slug within the family (see 'clor machine size list')
--ssh-keySSH key fingerprint from 'clor account ssh-key list' (repeatable) Default []

clor machine destroy

Destroy a machine and stop its billing

Usage
clor machine destroy <ID> [flags]
FlagDescription
--helphelp for destroy

clor machine firewall

Open, close, and list the inbound ports on a machine

Control which inbound ports a machine accepts from the world. A new machine starts with SSH, HTTP, and HTTPS open. No port is special: closing 22 also cuts managed access and cannot be undone remotely. Changes apply to the machine in the background. Use when: - the user wants to expose a port on a machine to the internet - the user wants to close a port or audit which ports are open Subcommands: open Open an inbound port on a machine close Close an inbound port on a machine list List the open ports on a machine Output: every subcommand supports --stdout-format text|jsonl|json (default text, logfmt with event= leader).

Usage
clor machine firewall [flags]
FlagDescription
--helphelp for firewall

clor machine firewall close

Close an inbound port on a machine

Usage
clor machine firewall close <ID> [flags]
FlagDescription
--helphelp for close
--portinbound port to change (1-65535)
--protocoltransport protocol (tcp|udp) Default tcp

clor machine firewall list

List the open ports on a machine

Usage
clor machine firewall list <ID> [flags]
FlagDescription
--helphelp for list

clor machine firewall open

Open an inbound port on a machine

Usage
clor machine firewall open <ID> [flags]
FlagDescription
--helphelp for open
--portinbound port to change (1-65535)
--protocoltransport protocol (tcp|udp) Default tcp

clor machine hostname

Show or rename a machine's DNS name

Every machine gets a random DNS name at creation, like quiet-falcon-3f2a.machine.clor.host, that always resolves to its public address. Rename the leftmost label to anything you like; the new record is created before the old one is removed, so the machine is never without a working name. Use when: - the user wants a stable name to reach a machine instead of its IP address - the user wants to rename a machine's DNS name to something memorable Subcommands: show Show a machine's DNS name and whether it is live set Rename a machine's DNS name Output: every subcommand supports --stdout-format text|jsonl|json (default text, logfmt with event= leader).

Usage
clor machine hostname [flags]
FlagDescription
--helphelp for hostname

clor machine hostname set

Rename a machine's DNS name

Rename the machine's DNS name. The new record is created before the old one is removed, and the change lands within about a minute. The name is the leftmost label only, 6 to 30 lowercase letters, digits, and hyphens.

Usage
clor machine hostname set <ID> <HOSTNAME> [flags]
FlagDescription
--helphelp for set

clor machine hostname show

Show a machine's DNS name and whether it is live

Usage
clor machine hostname show <ID> [flags]
FlagDescription
--helphelp for show

clor machine limit

Show your billing tier and the resource limits it grants

Show your billing tier and the caps it grants. These are the maximum vCPUs you can run at once, how many you currently hold, and how many machines you can create per minute. The tier rises with the amount paid over time, raising every limit. Use when: - a create or resize failed and you need to see your current vCPU usage against the cap - the user wants to know their billing tier or how many machines they can create per minute Subcommands: show Show the billing tier, vCPU cap and usage, and create rate Output: every subcommand supports --stdout-format text|jsonl|json (default text, logfmt with event= leader).

Usage
clor machine limit [flags]
FlagDescription
--helphelp for limit

clor machine limit show

Show the billing tier, vCPU cap and usage, and create rate

Usage
clor machine limit show [flags]
FlagDescription
--helphelp for show

clor machine list

List the machines you own

Usage
clor machine list [flags]
FlagDescription
--helphelp for list

clor machine region

Discover the regions you can create machines in

List the region codes a machine can be created in. Each region is a location you pass to 'clor machine create --region'; the underlying datacenter is not disclosed. Use when: - the user needs a valid region code before creating a machine - the user wants to see which locations are available Subcommands: list List the available regions Output: every subcommand supports --stdout-format text|jsonl|json (default text, logfmt with event= leader).

Usage
clor machine region [flags]
FlagDescription
--helphelp for region

clor machine region list

List the available regions

Usage
clor machine region list [flags]
FlagDescription
--helphelp for list

clor machine resize

Resize a machine to a new size

Usage
clor machine resize <ID> [flags]
FlagDescription
--helphelp for resize
--sizesize slug to resize to (see 'clor machine size list')

clor machine show

Show one machine with its status and address

Usage
clor machine show <ID> [flags]
FlagDescription
--helphelp for show

clor machine size

Discover the families and sizes you can create machines with, plus their specs and price

List the machine sizes grouped by family, each with its promised vCPUs, memory, disk, and flat hourly price. Pass a family to 'clor machine create --family' and a size within it to '--size'; resize stays within the family. Use when: - the user needs a valid family and size slug before creating or resizing a machine - the user wants to compare specs or hourly prices across families and sizes Subcommands: list List the available families and sizes with specs and hourly price Output: every subcommand supports --stdout-format text|jsonl|json (default text, logfmt with event= leader).

Usage
clor machine size [flags]
FlagDescription
--helphelp for size

clor machine size list

List the available families and sizes with specs and hourly price

Usage
clor machine size list [flags]
FlagDescription
--helphelp for list

clor machine ssh

Run a command on a machine over SSH and stream its output

Usage
clor machine ssh <ID> <COMMAND>... [flags]
FlagDescription
--helphelp for ssh

clor machine start

Power a stopped machine back on

Usage
clor machine start <ID> [flags]
FlagDescription
--helphelp for start

clor machine stop

Power a machine off without releasing it

Usage
clor machine stop <ID> [flags]
FlagDescription
--helphelp for stop

clor memory

Search everything your coding agents have done and share a markdown wiki they all read and write

Shared memory across every coding agent you run, on any machine. Every Claude Code and codex session is searchable, so you can look up what an agent did, said, ran, or decided, whether an hour ago or months back. Alongside the history is a markdown wiki your agents write to and read from, a durable place to leave notes, decisions, and context that the next agent picks up. Use when: - the user asks about something they or an agent did before, on any machine - you need context from earlier agent work before starting a task - the user wants to see what another agent did, said, ran, or decided - the user wants a durable note or wiki document their agents can share Subcommands: search Search everything your agents have said, run, and decided session List, inspect, and replay past agent sessions document Read and write the shared markdown wiki analytics Report how much your agents have run, by tokens and tools reset Erase all recorded history and wiki documents Output: every subcommand supports --stdout-format text|jsonl|json (default text, logfmt with event= leader).

Usage
clor memory [flags]
FlagDescription
--helphelp for memory

clor memory analytics

Report how much your agents have run, by token and tool-call counts

Exact counts of how much your agents have worked, split by agent, model, and tool. bucket=day is ready for heatmaps, bucket=month gives monthly reports, bucket=total gives lifetime counts. Use when: - the user asks how many tokens their agents used, per day or model - the user asks which tools an agent uses and how often Subcommands: tokens Token usage per day, month, or lifetime, by agent and model tools Tool-call counts per day, month, or lifetime, by agent and tool turns How the agents run turn by turn, run length, steering, planning Output: every subcommand supports --stdout-format text|jsonl|json (default text, logfmt with event= leader).

Usage
clor memory analytics [flags]
FlagDescription
--helphelp for analytics

clor memory analytics tokens

Report exact token usage per day, month, or lifetime, split by agent and model

Usage
clor memory analytics tokens [flags]
FlagDescription
--agentrestrict to one agent (claude|codex)
--buckettime bucket (day|month|total)
--helphelp for tokens
--modelrestrict to one model name
--sinceinclusive lower time bound, RFC3339 or a relative age (24h, 7d)
--untilinclusive upper time bound, RFC3339 or a relative age (24h, 7d)

clor memory analytics tools

Report tool-call counts per day, month, or lifetime, split by agent and tool

Usage
clor memory analytics tools [flags]
FlagDescription
--agentrestrict to one agent (claude|codex)
--buckettime bucket (day|month|total)
--helphelp for tools
--sinceinclusive lower time bound, RFC3339 or a relative age (24h, 7d)
--untilinclusive upper time bound, RFC3339 or a relative age (24h, 7d)

clor memory analytics turns

Report how the agents actually run turn by turn, run length, waiting, steering, planning, and tool mix

A turn is one prompt and everything the agent did in answer to it. This reports how long turns run, how long they take to answer, how often you steer or interrupt them, how much of the time is planning, and what mix of tools they reach for, split by whatever bucket you ask for. Durations are milliseconds. Percentiles are by nearest rank.

Usage
clor memory analytics turns [flags]
FlagDescription
--agentrestrict to one agent (claude|codex)
--bucketgrouping (total|day|model|agent|hour_of_week)
--helphelp for turns
--modelrestrict to one model name
--sinceinclusive lower time bound, RFC3339 or a relative age (24h, 7d)
--untilinclusive upper time bound, RFC3339 or a relative age (24h, 7d)

clor memory document

Store, read, search, and link documents in the shared markdown wiki

A shared markdown wiki every one of your agents can read and write, on any machine. Use it to leave durable notes, decisions, runbooks, and context that the next agent picks up. Each agent's own CLAUDE.md and project memory files show up here too. Documents can link to other documents, to past sessions, and to URLs. Use when: - the user wants a durable note their agents can read anywhere - you want to record a decision or context for the next agent - the user asks what an agent has written down or remembered - a document should point at a session or a reference URL Subcommands: list List documents, most recently updated first get Print one document's markdown put Create or replace one document from stdin delete Delete one document and its links link Link a document to another document, a session, or a URL unlink Remove one link links List one document's links search Search document names, titles, and bodies Output: every subcommand supports --stdout-format text|jsonl|json (default text, logfmt with event= leader).

Usage
clor memory document [flags]
FlagDescription
--helphelp for document

clor memory document delete

Delete one document and its links

Usage
clor memory document delete <NAME> [flags]
FlagDescription
--helphelp for delete

clor memory document get

Print one document's markdown body

Usage
clor memory document get <NAME> [flags]
FlagDescription
--helphelp for get

clor memory document list

List documents in the wiki, most recently updated first

Usage
clor memory document list [flags]
FlagDescription
--agentrestrict to documents from one agent (claude|codex)
--helphelp for list
--hostnamerestrict to documents from one machine
--limitmaximum results (1-1000)
--offsetresults to skip for pagination
--space-idrestrict to one space

clor memory document put

Create or replace one document with markdown from stdin

Usage
clor memory document put <NAME> [flags]
FlagDescription
--helphelp for put
--space-idspace the document belongs to
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead
--titledisplay title

clor memory reset

Erase all recorded history and every wiki document for your account

Erases everything recorded for your account, both the session history and the shared wiki. Ongoing agent activity keeps being recorded after a reset.

Usage
clor memory reset [flags]
FlagDescription
--helphelp for reset

clor memory session

List, inspect, replay, and delete past agent sessions

Each session is one run of a coding agent, with its full transcript, messages, and tool calls. Subagents a run spawns are sessions of their own, linked back to their parent. Use this to see what an agent actually did, step by step, or to pull an exact transcript back. Use when: - the user wants to see recent agent activity or find a past session - the user wants the full transcript of a session replayed - a session should be removed from the history Subcommands: list List sessions, most recently active first show Show one session's summary, activity, and token totals events Walk one session's messages, commands, and results in order transcript Replay a session's raw transcript exactly as it happened delete Delete a session and the subagents it spawned Output: every subcommand supports --stdout-format text|jsonl|json (default text, logfmt with event= leader).

Usage
clor memory session [flags]
FlagDescription
--helphelp for session

clor memory session delete

Delete a session and the subagents it spawned

Removes the session's transcript and everything recorded from it. Deleting a parent also deletes the subagents it spawned. Token and tool counts already tallied stay in the usage reports.

Usage
clor memory session delete <ID> [flags]
FlagDescription
--helphelp for delete

clor memory session events

List one session's messages, commands, and results in order

Usage
clor memory session events <ID> [flags]
FlagDescription
--helphelp for events
--limitmaximum results (1-1000)
--offsetresults to skip for pagination
--typerestrict to one event type (user_message|assistant_message|thinking|tool_use|tool_result|system)

clor memory session list

List past agent sessions, most recently active first

Usage
clor memory session list [flags]
FlagDescription
--agentrestrict to one agent (claude|codex)
--helphelp for list
--hostnamerestrict to sessions run on one machine
--limitmaximum results (1-1000)
--offsetresults to skip for pagination
--parent-idrestrict to subagent sessions of this parent session id
--querysubstring match over title, slug, cwd, git branch, and identifier
--sinceinclusive lower time bound, RFC3339 or a relative age (24h, 7d)
--space-idrestrict to one space
--subagentswhether subagent sessions appear (include|exclude|only)
--untilinclusive upper time bound, RFC3339 or a relative age (24h, 7d)

clor memory session show

Show one session's summary, activity, and token totals

Usage
clor memory session show <ID> [flags]
FlagDescription
--helphelp for show

clor memory session transcript

Print raw transcript lines exactly as the agent wrote them

Replays a session's raw transcript exactly as it happened. text prints the raw lines straight to stdout; json wraps them in {first_line, line_count, lines[]}.

Usage
clor memory session transcript <ID> [flags]
FlagDescription
--first-linezero-based first transcript line
--helphelp for transcript
--line-countlines to return (1-10000)

clor messenger

Send Slack messages, follow the event stream, post to channels and threads, react, share files, and build bots

Send Slack messages and read the unified event stream from connected workspaces. read and wait surface messages plus joins and leaves, reactions, pins, channel and user events on one resumable cursor filterable by --type, so a bot can follow everything from a single position. Every command acts as your own connected Slack account, so it reads and posts only in the conversations that account belongs to (plus workspace-wide events); anything else returns 403.

Usage
clor messenger [flags]
FlagDescription
--helphelp for messenger

clor messenger slack

Send, read the event stream, wait, react, search, and share files in a connected Slack workspace

Send messages and follow the full Slack event stream in a connected workspace, plus react, share files, and search. read and wait expose one resumable cursor over messages, joins and leaves, reactions, pins, channel and user events, filterable by --type, so you can build bot-style automation on Slack. Every command acts as your connected Slack account and reads or posts only in conversations that account belongs to (plus workspace-wide events), so acting anywhere else returns 403. Pass --workspace with a team id from "workspace list"; a CHANNEL is a name such as #general or an id such as C0123ABC.

Usage
clor messenger slack [flags]
FlagDescription
--helphelp for slack

clor messenger slack conversation

List the channels and DMs you belong to

List the channels and direct messages your connected account belongs to in a workspace, the conversations you can read and post to. Names resolve to ids for the other commands. The work happens in the list subcommand, which takes the required --workspace team id.

Usage
clor messenger slack conversation [flags]
FlagDescription
--helphelp for conversation

clor messenger slack conversation list

List the channels and DMs you belong to in a workspace

List the channels and direct messages your connected account is a member of, the conversations you can read and post to. Names resolve to ids for the other commands. Pass --refresh to pull the latest membership from Slack before listing.

Usage
clor messenger slack conversation list [flags]
FlagDescription
--helphelp for list
--refreshrefresh the directory from Slack before listing
--workspaceslack team id of the workspace (required)

clor messenger slack file

Share a file to a channel or download a stored file

Usage
clor messenger slack file [flags]
FlagDescription
--helphelp for file

clor messenger slack file get

Download a stored file's bytes

Download the bytes of a file by its FILE_ID, which appears on stored messages that carry attachments. You can only download a file shared into a conversation you can see; otherwise the download returns 403. Write to a path with --output, or stream to stdout when --output is empty or -.

Usage
clor messenger slack file get <FILE_ID> [flags]
FlagDescription
--helphelp for get
--outputpath to write the file to; - or empty writes to stdout
--workspaceslack team id of the workspace (required)

clor messenger slack file send

Share a local file into a channel

Upload the local file at PATH and share it into a channel by id or name. You must be a member of the channel; sharing where you are not returns 403. Set a display title with --title and share into a thread with --thread.

Usage
clor messenger slack file send <PATH> [flags]
FlagDescription
--channelchannel id or name to share the file into (required)
--helphelp for send
--threadthread_ts to share the file into
--titletitle for the shared file
--workspaceslack team id of the workspace (required)

clor messenger slack reaction

Add or remove an emoji reaction

Usage
clor messenger slack reaction [flags]
FlagDescription
--helphelp for reaction

clor messenger slack reaction add

Add an emoji reaction to a message

Usage
clor messenger slack reaction add [flags]
FlagDescription
--channelchannel id or name the message is in (required)
--helphelp for add
--nameemoji name without colons, e.g. thumbsup (required)
--tsmessage id to react to (required)
--workspaceslack team id of the workspace (required)

clor messenger slack reaction remove

Remove an emoji reaction from a message

Usage
clor messenger slack reaction remove [flags]
FlagDescription
--channelchannel id or name the message is in (required)
--helphelp for remove
--nameemoji name without colons, e.g. thumbsup (required)
--tsmessage id to react to (required)
--workspaceslack team id of the workspace (required)

clor messenger slack read

Read the stored Slack event stream from a cursor, oldest first

Read the workspace event stream, oldest first, limited to the conversations you belong to plus workspace-wide events. One monotonic cursor covers messages plus joins and leaves, reactions, pins, channel and user events, so a bot can follow everything from a single resumable position. Each read returns next_cursor; pass it back with --since to read only what arrived after, so you never miss or repeat an event. Narrow to event types with --type (repeatable), or with --channel, --dm, --thread, or --mentions, and cap the page with --limit.

Usage
clor messenger slack read [flags]
FlagDescription
--channelrestrict to a single channel id or name (excludes workspace-wide events)
--dmrestrict to direct and group direct messages
--helphelp for read
--limitmaximum events to return (1-500)
--mentionsrestrict to messages that mention the bot
--sincecursor from a prior read; empty reads from the beginning
--threadrestrict to replies under this thread_ts
--typerestrict to these event types (repeatable), e.g. message, member_joined_channel, reaction_added Default []
--workspaceslack team id of the workspace to read from (required)

clor messenger slack send

Send a Slack message to a channel or thread

Post a message to a channel or direct message by id or name. You can only post where your account is a member, so you reply in an existing direct message by its id (D...) but cannot open a direct message with someone you have not messaged; posting elsewhere returns 403. Provide the text as the second argument or pipe it on stdin. Reply within a thread with --thread, attach Block Kit blocks with --blocks, and post as yourself instead of as the bot with --as-user. Bot posts include a Sent by line naming you so the channel knows who triggered the message; pass --attribution=false to suppress it.

Usage
clor messenger slack send <CHANNEL> [TEXT] [flags]
FlagDescription
--as-userpost as the connected user instead of the workspace bot
--attributionappend a small Sent by sender line to bot posts (ignored with --as-user) Default true
--blocksblock kit blocks as a JSON array
--helphelp for send
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead
--threadthread_ts of a parent message to reply within
--workspaceslack team id of the workspace to send into (required)

clor messenger slack thread

Read a thread's replies

Usage
clor messenger slack thread [flags]
FlagDescription
--helphelp for thread

clor messenger slack thread read

Read the replies under a thread

Read every reply under a thread, newest fetched from Slack and returned in order. --thread is the thread_ts of the parent message, and --channel is the channel it lives in. You must be a member of that channel, or the read returns 403.

Usage
clor messenger slack thread read [flags]
FlagDescription
--channelchannel id or name the thread lives in (required)
--helphelp for read
--threadthread_ts of the parent message (required)
--workspaceslack team id of the workspace (required)

clor messenger slack wait

Block until new Slack events arrive or a timeout elapses

Block for new events after a cursor, returning as soon as any match the filters or --timeout elapses, whichever comes first. The same filters as read narrow what counts, including --type to wait on specific event types like reaction_added or member_joined_channel. On timeout it returns an empty result with an advanced cursor, so loop by passing the returned next_cursor to --since on the next call. Like read, it only ever returns conversations you belong to plus workspace-wide events.

Usage
clor messenger slack wait [flags]
FlagDescription
--channelrestrict to a single channel id or name (excludes workspace-wide events)
--dmrestrict to direct and group direct messages
--helphelp for wait
--limitmaximum events to return (1-500)
--mentionsrestrict to messages that mention the bot
--sincecursor from a prior read; empty reads from the beginning
--threadrestrict to replies under this thread_ts
--timeouthow long to block waiting for new events (e.g. 30s, 2m) Default 30s
--typerestrict to these event types (repeatable), e.g. message, member_joined_channel, reaction_added Default []
--workspaceslack team id of the workspace to read from (required)

clor messenger slack workspace

List the workspaces you have connected

Usage
clor messenger slack workspace [flags]
FlagDescription
--helphelp for workspace

clor messenger slack workspace list

List connected Slack workspaces and their ids

List the Slack workspaces connected to your account. Each entry includes the team id to pass as --workspace to every other command, so this is the place to start. When nothing is connected yet, it prints a connect link to share with the user so they can connect Slack.

Usage
clor messenger slack workspace list [flags]
FlagDescription
--helphelp for list

clor node

List and hide registered daemon hosts

Each daemon host registers itself once as a node and shows up here. list and show report whether its daemon is online (status=online when the node has pinged the server within the last 30 seconds). A reinstall registers a new node and supersedes the old row, so list leaves hidden rows out and reports how many it suppressed; pass --all to see them. Use when - the user asks which machines are registered or which ones are online right now - the user wants to hide a retired or duplicate node row Subcommands list List every node registered under this account (with online status) show Show one node by its id (with online status and last_seen) hide Hide a node Output supports --stdout-format text|jsonl|json on every subcommand (default text, logfmt with event= leader).

Usage
clor node [flags]
FlagDescription
--helphelp for node

clor node hide

Hide a node

Hiding removes the node and its spaces from listings without deleting anything. The node reappears if its daemon reconnects, with its spaces intact. Useful for a machine that is retired, wiped, or lingering as a duplicate row.

Usage
clor node hide <NODE> [flags]
FlagDescription
--helphelp for hide

clor node list

List every node registered under this account

Usage
clor node list [flags]
FlagDescription
--allinclude hidden nodes, the registrations superseded by a reinstall
--helphelp for list

clor node show

Show one node by its id

Usage
clor node show <NODE> [flags]
FlagDescription
--helphelp for show

clor notification

Read, filter, and mark read notifications from services, spaces, and the system

Notifications are messages delivered to this account by services, spaces, or the system. They accumulate in an inbox and transition from unread to read when viewed.

Usage
clor notification [flags]
FlagDescription
--helphelp for notification

clor notification create

Create a notification

Usage
clor notification create [flags]
FlagDescription
--bodynotification body (up to 32KB)
--helphelp for create
--levelnotification level (info|warn|error)
--service-slugservice slug (required when source is service)
--sourcenotification source (service|space)
--space-idspace id (required when source is space)
--titlenotification title
--typenotification type (message) Default message

clor notification list

List notifications (unread by default)

Usage
clor notification list [flags]
FlagDescription
--helphelp for list
--levelfilter by level (info|warn|error)
--limitmax notifications to return (1-200); zero uses the server default cap
--show-readinclude read notifications

clor notification show

Show one notification and mark it as read

Usage
clor notification show <ID> [flags]
FlagDescription
--helphelp for show

clor repo

Host private git repos cloned, fetched, and pushed over HTTPS, with per-member access tokens and shares

Host private git repositories cloned, fetched, and pushed over HTTPS. Each repo is created empty and reachable at a stable clone URL right away. Repos are owned by the Team (with --owner team, usable by every member) or by the calling user, shareable with specific members, and capped at 1 GB, with a reset that clears a repo back to empty. Git authenticates with a short-lived access token issued from your API key. Run setup once per machine and plain git works with no prompts: clor repo create myproj --stdout-format json | jq -r .clone_url clor repo git setup git clone <clone_url> && cd myproj && git push Without the CLI on the machine doing the git calls, create a token with "token create" and clone https://clor:<token>@git.clor.com/... (the token lands in .git/config, so prefer the credential helper). Use when: - hosting a private git repo you can clone and push to over HTTPS - a Team repo every member can clone and push with their own token - copying a repo you can read into one you own with fork - downloading a zip snapshot of a repo without cloning it - sharing a personal repo with specific members, read or write - inspecting which repos the caller can see and how much they store Subcommands: create create a repo and print its clone URL list list the repos the caller can see show show one repo including size and lock state update rename a repo or change its description fork copy a repo you can read into a new repo you own download download a zip snapshot of one ref branch list a repo's branches tag list a repo's tags delete delete a repo reset reinitialize a repo to empty and unlock pushing share grant, list, and revoke member access to a repo token create git access tokens git install the git credential helper limit show the caller's tier and repo limits Output: every subcommand supports --stdout-format text|jsonl|json (default text, logfmt with event= leader).

Usage
clor repo [flags]
FlagDescription
--helphelp for repo

clor repo branch

List a repo's branches

Branch inspection for hosted repos. Subcommands: list list a repo's branches with the commits they point at

Usage
clor repo branch [flags]
FlagDescription
--helphelp for branch

clor repo branch list

List a repo's branches with the commits they point at

Usage
clor repo branch list <NAME> [flags]
FlagDescription
--helphelp for list
--ownerset to "team" to address a Team repo; defaults to your user

clor repo create

Create a repo and print its clone URL

Creates a repo and prints its clone URL. The name keeps the case you give it, and that case is what the clone URL carries. Names are unique within their owner scope without regard to case, so a name another repo already holds in any spelling is refused.

Usage
clor repo create <NAME> [flags]
FlagDescription
--default-branchthe branch a fresh clone checks out (default main)
--descriptionfree-form description of the repo (up to 512 characters)
--helphelp for create
--ownerset to "team" to create a Team repo every member can use; defaults to your user

clor repo delete

Delete a repo

Usage
clor repo delete <NAME> [flags]
FlagDescription
--helphelp for delete
--ownerset to "team" to address a Team repo; defaults to your user

clor repo download

Download a zip snapshot of one ref without cloning

Downloads a zip archive of a repo's tree at one ref (a branch, tag, or commit), defaulting to the repo's default branch. The archive holds the tree only, no git history; clone the repo when history is needed.

Usage
clor repo download <NAME> [flags]
FlagDescription
--helphelp for download
--outputdestination file (default <name>-<ref>.zip)
--ownerset to "team" to address a Team repo; defaults to your user
--refthe branch, tag, or commit to archive; defaults to the repo's default branch

clor repo fork

Copy a repo you can read into a new repo you own

Copies a repo server-side, carrying every branch and tag, into a new repo the caller owns. Any repo the caller can read is forkable, including repos shared to them. The fork records its parent's id as fork_parent_id and starts with fresh push counters.

Usage
clor repo fork <NAME> [flags]
FlagDescription
--descriptiondescription of the new repo (defaults to the source description)
--destination-namename of the new repo (defaults to the source name)
--destination-ownerset to "team" to place the fork as a Team repo; defaults to your user
--helphelp for fork
--ownerowner scope of the source repo, "team" or the owning user's UUID; defaults to your user

clor repo git

Connect plain git to hosted repos via the credential helper

Git-transport plumbing. Run setup once per machine and plain git clone, push, and pull authenticate transparently: a credential helper issues short-lived access tokens from your API key, caches them, and renews them before expiry. No prompts, no secrets in URLs or .git/config. Subcommands: setup install the git credential helper (once per machine)

Usage
clor repo git [flags]
FlagDescription
--helphelp for git

clor repo git setup

Install the git credential helper (once per machine)

Writes one scoped git config entry so git asks the helper for credentials on the hosted-repo host and nothing else: git config --global credential.https://git.clor.com.helper "!clor repo git helper" With a custom --host that host's entry is written. Idempotent; running it again rewrites the same entry.

Usage
clor repo git setup [flags]
FlagDescription
--helphelp for setup
--hostgit host the helper answers for Default git.clor.com

clor repo limit

Show the caller's tier and repo limits

Show the account's billing tier and the repo limits it grants. Subcommands: show show the tier, the max repos, the storage cap, current usage, and the create rate Output: the subcommand supports --stdout-format text|jsonl|json (default text, logfmt with event= leader).

Usage
clor repo limit [flags]
FlagDescription
--helphelp for limit

clor repo limit show

Show the tier, repo and storage caps, usage, and create rate

Usage
clor repo limit show [flags]
FlagDescription
--helphelp for show

clor repo list

List the repos the caller can see

Usage
clor repo list [flags]
FlagDescription
--helphelp for list

clor repo reset

Reinitialize a repo to empty and unlock pushing

Usage
clor repo reset <NAME> [flags]
FlagDescription
--helphelp for reset
--ownerset to "team" to address a Team repo; defaults to your user

clor repo share

Grant, list, and revoke member access to a repo

A share grants one team member access to a personal repo they do not own: read (see + clone/fetch) or write (read + push). Team repos need no shares; every member can already clone and push them. Find member ids on the team's Repositories page. Subcommands: grant share a repo with a member, or change their permission list list who a repo is shared with revoke revoke a member's access

Usage
clor repo share [flags]
FlagDescription
--helphelp for share

clor repo share grant

Share a repo with a team member, or change their permission

Usage
clor repo share grant <NAME> [flags]
FlagDescription
--helphelp for grant
--owneraddress a repo owned by another user by their user id (admins only)
--permissionaccess level (read|write) Default read
--userthe team member's user id to grant access to

clor repo share list

List who a repo is shared with

Usage
clor repo share list <NAME> [flags]
FlagDescription
--helphelp for list
--owneraddress a repo owned by another user by their user id (admins only)

clor repo share revoke

Revoke a member's access to a repo

Usage
clor repo share revoke <NAME> [flags]
FlagDescription
--helphelp for revoke
--owneraddress a repo owned by another user by their user id (admins only)
--sharethe share id to revoke
--userrevoke by the member's user id instead of the share id

clor repo show

Show one repo including size and lock state

Usage
clor repo show <NAME> [flags]
FlagDescription
--helphelp for show
--ownerset to "team" to address a Team repo; defaults to your user

clor repo tag

List a repo's tags

Tag inspection for hosted repos. Subcommands: list list a repo's tags with the commits they point at

Usage
clor repo tag [flags]
FlagDescription
--helphelp for tag

clor repo tag list

List a repo's tags with the commits they point at

Usage
clor repo tag list <NAME> [flags]
FlagDescription
--helphelp for list
--ownerset to "team" to address a Team repo; defaults to your user

clor repo token

Create git access tokens

An access token is the credential git presents over HTTPS: it goes in the basic-auth password slot (the username can be anything, use "clor"). Tokens are issued from your API key, carry your identity and repo access, and expire on their own. Prefer "git setup", which creates and renews tokens for you; create one by hand only for machines or CI without the CLI. Subcommands: create create a token and print it once

Usage
clor repo token [flags]
FlagDescription
--helphelp for token

clor repo token create

Create a git access token and print it once

Usage
clor repo token create [flags]
FlagDescription
--helphelp for create

clor repo update

Rename a repo or change its description

Renames a repo and/or replaces its description. Renaming changes the clone URL immediately. Remotes pointing at the old name stop working and must be updated with git remote set-url.

Usage
clor repo update <NAME> [flags]
FlagDescription
--descriptionthe new description (up to 512 characters); an empty value clears it
--helphelp for update
--new-namethe new repo name, kept in the case you give it and unique without regard to case; changes the clone URL
--ownerset to "team" to address a Team repo; defaults to your user

clor search crawl

Crawl a site from a seed URL and return per-page content

Fetches every reachable page up to the configured ceilings (max pages, max depth, max duration). Each page returns in the requested formats (markdown, HTML, raw HTML, links). Use map instead when you only need the URL list.

Usage
clor search crawl <URL> [flags]
FlagDescription
--allow-subdomainsfollow subdomain links
--crawl-entire-domainfollow non-descendant paths within the same domain
--excludecomma-separated path regexes to skip
--formatscomma-separated per-page formats (markdown|html|raw_html|links)
--helphelp for crawl
--includecomma-separated path regexes to include
--max-depthdiscovery-depth limit relative to the seed URL
--max-durationabsolute deadline for the crawl (e.g. 30s, 1h30m); on expiry partial results are returned Default 0s
--max-pageshard ceiling on pages crawled
--no-main-contentinclude all page content per page
--only-main-contentdrop nav/header/footer per page

clor search image

Search the open web for images by query

Usage
clor search image [flags]
FlagDescription
--helphelp for image

clor search map

Discover URLs reachable from a seed URL on the same site

Returns the discovered URLs (with optional title and description). Lighter than crawl: URL list only, not page contents.

Usage
clor search map <URL> [flags]
FlagDescription
--helphelp for map
--ignore-query-parameterstreat URLs that differ only in query string as duplicates
--include-subdomainsfollow subdomain links
--limitmax URLs to return
--searchfilter discovered URLs by substring
--timeoutper-request timeout (e.g. 60s, 2m) Default 0s

clor search news

Search recent news articles across mainstream sources

Usage
clor search news [flags]
FlagDescription
--helphelp for news

clor search parse

Extract clean text from a PDF or HTML document URL as markdown

Returns the document as clean markdown plus metadata (page count, upstream status, title). Use scrape instead for one webpage as markdown plus links or a screenshot.

Usage
clor search parse <URL> [flags]
FlagDescription
--helphelp for parse
--timeoutper-fetch timeout (e.g. 60s, 5m) Default 0s

clor search scrape

Scrape a single page as markdown, HTML, links, or screenshot

Returns markdown (default), full HTML, raw HTML, link list, or PNG screenshot in any combination. Strips boilerplate (nav/header/footer) by default. Use parse instead for PDFs and document URLs.

Usage
clor search scrape <URL> [flags]
FlagDescription
--block-adsblock ads during the scrape
--formatscomma-separated formats (markdown|html|raw_html|links|screenshot|screenshot_full_page) Default markdown
--helphelp for scrape
--mobilerender with a mobile viewport
--no-main-contentinclude all page content
--only-main-contentdrop nav/header/footer (the default)
--timeoutper-fetch timeout (e.g. 30s) Default 0s
--wait-forextra wait after page load (e.g. 500ms, 2s) Default 0s

clor search screenshot

Capture a screenshot of a page and save it locally as PNG

Usage
clor search screenshot <URL> [flags]
FlagDescription
--full-pagecapture the entire scrollable page
--helphelp for screenshot
--image-output-filedestination file path for the PNG; default is a unique safe-named file in the current directory
--mobilerender with a mobile viewport
--timeoutper-fetch timeout (e.g. 30s) Default 0s
--wait-forextra wait after page load (e.g. 500ms, 2s) Default 0s

clor search video

Search the open web for videos, with duration metadata

Usage
clor search video [flags]
FlagDescription
--helphelp for video

clor search web

Search the open web for pages, articles, and documents

Usage
clor search web <QUERY> [flags]
FlagDescription
--country2-letter country code, ISO 3166-1 alpha-2 (us, ar, jp)
--fieldsfields to render in text/jsonl output (ignored for json); use 'default', 'all', or comma-separated names. available: title*,url*,description*,source*,age* (* = default)
--freshnessfreshness window (pd=past day, pw=past week, pm=past month, py=past year)
--helphelp for web
--limitmax results (1-200); pagination is handled automatically Default 5
--safesearchsafe-search level (off|moderate|strict)

clor secret

Store and retrieve named JSON secrets for the signed-in user

Server-side vault for credentials, API keys, and structured JSON. Values are sealed at rest (AES-GCM, per-row HKDF keys) and stored under a name. Other clor subcommands fetch from this vault at runtime (e.g. `clor email`).

Usage
clor secret [flags]
FlagDescription
--helphelp for secret

clor secret delete

Permanently remove a secret by name

Permanent: no soft-delete or recovery window for secrets.

Usage
clor secret delete <NAME> [flags]
FlagDescription
--helphelp for delete

clor secret get

Read the full decrypted JSON value of one named secret

--stdout-format json prints the raw JSON value alone (ideal for piping); text/jsonl include the value alongside metadata. Use list when you only need names without exposing values.

Usage
clor secret get <NAME> [flags]
FlagDescription
--helphelp for get

clor secret list

List metadata for secrets (names, types) without revealing the values

Values are never returned (use `secret get`). Filter by --type, --name-prefix, or --name-contains.

Usage
clor secret list [flags]
FlagDescription
--helphelp for list
--name-containsfilter to secrets whose name contains this substring
--name-prefixfilter to secrets whose name starts with this string
--typefilter by exact type (e.g. email-account)

clor secret set

Create or update an encrypted JSON secret under a given name

Value source: --value (literal JSON) or --value-file (path or - for stdin). Re-running with the same name updates in place. --type tags the secret for typed consumers like `clor email account`.

Usage
clor secret set <NAME> [flags]
FlagDescription
--helphelp for set
--typetype discriminator the consumer interprets (e.g. email-account, api-token) Default generic
--valuesecret value as a JSON string (e.g. '{"k":"v"}')
--value-filepath to a file containing the JSON value (- for stdin)

clor site

Publish static sites and single-page apps over HTTPS with custom domains, atomic deploys, rollbacks, and private sharing

Publish a directory of static files as a website served over HTTPS. Deploy uploads the whole directory as one archive that atomically replaces the live release; previous releases stay available for rollback up to the site's revision limit. Each site is reachable at a stable URL right away and can also be served at a DNS-verified custom domain with an automatically provisioned certificate. Sites are owned by the account (with --owner team) or by the calling user.

Usage
clor site [flags]
FlagDescription
--helphelp for site

clor site config

Update site configuration

Usage
clor site config <SUBDOMAIN> [flags]
FlagDescription
--cspContent-Security-Policy header value
--domaincustom domain to also serve the site at, DNS-verified at set time, empty clears it
--helphelp for config
--max-bytes-per-dayper-site daily served-bytes limit (0 uses the service default)
--max-hits-per-minuteper-site request rate limit (0 uses the service default)
--max-revisionsnumber of releases to retain (min 1)
--not-foundrelative path served on a miss
--spaserve the fallback document for unmatched routes
--visibilitywho can view the site (public|private)

clor site create

Claim a subdomain and create a site

Usage
clor site create <SUBDOMAIN> [flags]
FlagDescription
--helphelp for create
--ownerset to "team" to create an account-wide site; defaults to your user

clor site delete

Delete a site and its files

Usage
clor site delete <SUBDOMAIN> [flags]
FlagDescription
--helphelp for delete

clor site deploy

Deploy a directory as the live release

Usage
clor site deploy <SUBDOMAIN> <DIR> [flags]
FlagDescription
--helphelp for deploy

clor site file

List, download, upload, and delete individual files in a site's live release

Read and change one published file at a time against a site's live release. An upload writes the file in place and it is served immediately; a delete drops it. This is the surgical counterpart to deploy, which replaces the whole release. Use when: - appending or updating a single file (a daily entry, one asset) without a full redeploy - downloading one published file to inspect or edit it - listing exactly which files the live release serves - deleting one stale file from the live site A deploy still replaces the entire release, so any files uploaded out-of-band are wiped by the next deploy. Subcommands: list List the files served by the live release download Download one file from the live release upload Upload or replace one file in the live release delete Delete one file from the live release Output: every subcommand supports --stdout-format text|jsonl|json (default text, logfmt with event= leader).

Usage
clor site file [flags]
FlagDescription
--helphelp for file

clor site file delete

Delete one file from a site's live release

Usage
clor site file delete <SUBDOMAIN> <REMOTE_PATH> [flags]
FlagDescription
--helphelp for delete

clor site file download

Download one file from a site's live release

Usage
clor site file download <SUBDOMAIN> <REMOTE_PATH> [LOCAL_PATH] [flags]
FlagDescription
--helphelp for download

clor site file list

List the files served by a site's live release

Usage
clor site file list <SUBDOMAIN> [flags]
FlagDescription
--helphelp for list

clor site file upload

Upload or replace one file in a site's live release

Usage
clor site file upload <SUBDOMAIN> <LOCAL_PATH> [REMOTE_PATH] [flags]
FlagDescription
--helphelp for upload

clor site list

List the sites the caller can see

Usage
clor site list [flags]
FlagDescription
--helphelp for list

clor site releases

List the retained releases for a site, oldest first

Usage
clor site releases <SUBDOMAIN> [flags]
FlagDescription
--helphelp for releases

clor site rollback

Roll the live release back to a chosen or the previous release

Usage
clor site rollback <SUBDOMAIN> [flags]
FlagDescription
--helphelp for rollback
--releaserelease id to make live; defaults to the previous release

clor site share

Share a private site with specific email addresses and whole teams

Control who can view a private site. A public site is served to anyone; a private site is served only to a signed-in viewer whose account email is shared with it, plus every member of the owning team. The viewer's account email is the proof of email ownership, so an outside collaborator with no account signs up through the normal sign-in flow and comes straight back to the site. A grant to a team nobody belongs to simply never matches, so a team identifier is never checked at share time. Use when: - publishing a report or dashboard only certain people should read - giving one collaborator access without handing out a shared password - opening a site to every member of another team - checking or revoking who can currently see a private site Sharing a public site makes it private in the same call, since sharing only ever means "make this private and let these people in". Use `site config --visibility public` to open it back up. Subcommands: list Show who a site is shared with add Grant email addresses and teams access to a site remove Revoke a grant from a site Output: every subcommand supports --stdout-format text|jsonl|json (default text, logfmt with event= leader).

Usage
clor site share [flags]
FlagDescription
--helphelp for share

clor site share add

Grant email addresses and teams access to a site

Usage
clor site share add <SUBDOMAIN> [flags]
FlagDescription
--emailemail address to grant, repeatable Default []
--helphelp for add
--teamteam identifier to grant, repeatable Default []

clor site share list

Show who a site is shared with

Usage
clor site share list <SUBDOMAIN> [flags]
FlagDescription
--helphelp for list

clor site share remove

Revoke a grant from a site

Usage
clor site share remove <SUBDOMAIN> [flags]
FlagDescription
--emailemail address to revoke, repeatable Default []
--helphelp for remove
--teamteam identifier to revoke, repeatable Default []

clor site show

Show one site including size, current release, and file count

Usage
clor site show <SUBDOMAIN> [flags]
FlagDescription
--helphelp for show

clor social

Search Hacker News stories and comments plus Y Combinator companies and founders

Search Hacker News stories and comments, run posting-time and domain analytics, and query the Y Combinator directory of companies and founders by batch, industry, region, and more.

Usage
clor social [flags]
FlagDescription
--helphelp for social

clor social hn

Search, browse, and analyze Hacker News stories and comments

HN as an analytics surface, not a feed: search stories by text/author/window, pull popular items by score, fetch one story plus its comment tree, and run analytics on posting timing, domain mix, and topic trends.

Usage
clor social hn [flags]
FlagDescription
--helphelp for hn

clor social hn domain

Discover which URL hosts dominate Hacker News by volume, score, or front-page hits

Usage
clor social hn domain [flags]
FlagDescription
--helphelp for domain

clor social hn domain list

Rank the top URL hosts on HN (--metric volume|median_score|frontpage_count)

--sort picks the ranking metric: count|median|p90|frontpage|top. Narrow the corpus with --query, --from/--until, or --min-stories.

Usage
clor social hn domain list [flags]
FlagDescription
--fromlower bound on item time (Unix seconds, RFC3339, or relative like 24h or 7d) Default 1y
--helphelp for list
--limitmax results (1-500) Default 50
--min-storiesminimum stories per host to include (0 uses server default)
--offsetskip the first N results (pagination)
--queryfree-text filter applied to title and body
--sortranking metric (count|median|p90|frontpage|top)
--untilupper bound on item time (same formats as --from)

clor social hn item

Fetch one HN item by id, optionally with its full nested comment tree

--with-comments walks the comment tree depth-first with a depth attribute per node; the entire thread returns in one response.

Usage
clor social hn item <ID> [flags]
FlagDescription
--comment-depthmax recursion depth for the comment tree (0 = unlimited)
--helphelp for item
--with-commentsalso return the assembled comment tree

clor social hn timing

Analyze HN historical posting-time outcomes by day-of-week and hour-of-day

Usage
clor social hn timing [flags]
FlagDescription
--helphelp for timing

clor social hn timing show

Render the day-of-week x hour-of-day timing matrix for HN posts (--metric count|median_score)

Returns a 7x24 matrix aggregating HN items by day-of-week and hour-of-day. Narrow with --query, --domain, --type, or --min-score.

Usage
clor social hn timing show [flags]
FlagDescription
--domainfilter to a single host (e.g. github.com)
--fromlower bound on item time (Unix seconds, RFC3339, or relative like 24h or 7d) Default 2y
--helphelp for show
--min-scorefilter score >= N before bucketing
--queryfree-text filter applied to title and body
--typeitem type (story|comment|job|poll|pollopt)
--untilupper bound on item time (same formats as --from)

clor social hn trend

Track how a topic has trended on Hacker News over time (volume and score distribution)

Usage
clor social hn trend [flags]
FlagDescription
--helphelp for trend

clor social hn trend list

Return per-bucket time series (count + score distribution) for HN items matching a query

Each row carries a bucket timestamp, item count, and score percentiles (p50, p90, etc). --bucket sets the grain (day|week|month).

Usage
clor social hn trend list [flags]
FlagDescription
--buckettime grain (day|week|month)
--domainfilter to a single host (e.g. github.com)
--fromlower bound on item time (Unix seconds, RFC3339, or relative like 24h or 7d) Default 2y
--helphelp for list
--queryfree-text filter applied to title and body
--typeitem type (story|comment|job|poll|pollopt)
--untilupper bound on item time (same formats as --from)

clor social yc

Search Y Combinator companies and founders by text, batch, industry, region, tag, status, or slug

The YC directory as a queryable index. Full-text search and filter ~6k companies by batch, status, industry, tag, and team size, and ~13k founders by batch, industry, region, and current company. Show pulls the full joined record.

Usage
clor social yc [flags]
FlagDescription
--helphelp for yc

clor social yc company

Search Y Combinator companies by text, batch, industry, tag, status, or team size, or show one by slug

Search and filter the YC company index, or show one company by slug with its canonical founder list.

Usage
clor social yc company [flags]
FlagDescription
--helphelp for company

clor social yc company show

Show one Y Combinator company by slug with its founder list

Returns the full company record plus YC's canonical founder list, one event=founder depth=1 line per founder.

Usage
clor social yc company show <SLUG> [flags]
FlagDescription
--helphelp for show

clor social yc founder

Search Y Combinator founders by text, batch, industry, region, or current company, or show one by slug

Search and filter the YC founder index, or show one founder by slug with their current company.

Usage
clor social yc founder [flags]
FlagDescription
--helphelp for founder

clor social yc founder show

Show one Y Combinator founder by slug with their current company

Returns the full founder record plus their current company, resolved by company slug, as an event=company depth=1 line.

Usage
clor social yc founder show <SLUG> [flags]
FlagDescription
--helphelp for show

clor space

Create, list, stop, resume, and delete spaces on your computers

A space is a long-lived instance bound to one of your computers. It can be a coding session, a hosted service, or an unattended agent. The daemon on the computer brings each one up wholly and keeps it converged. This tree creates immutable space snapshots from Environments, lists and inspects them, stops and resumes them, renames them, and deletes them. Use when - the user wants to start a space from a saved Environment - the user asks what spaces are running or wants a space's URLs - the user wants to stop, resume, rename, or delete a space Subcommands list List every space you own (with computer and running status) show Show one space by its id (with its tab URLs) create Create a space from an Environment rename Rename a space stop Stop a space so the daemon suspends it resume Resume a stopped space delete Delete a space Output supports --stdout-format text|jsonl|json on every subcommand (default text, logfmt with event= leader).

Usage
clor space [flags]
FlagDescription
--helphelp for space

clor space create

Create an immutable space snapshot from an Environment

Usage
clor space create --environment <ID> [flags]
FlagDescription
--agentan unresolved agent choice as TAB=AGENT; repeatable Default []
--agent-configthe agent config reference, or none
--agent-credentialthe agent credential name, or none
--computerthe computer ID when more than one compatible computer is ready
--directoryan existing computer directory for an unresolved directory declaration
--environmentthe saved Environment UUID to snapshot (required)
--environment-variablea prompted Environment Variable as KEY=VALUE; repeatable Default []
--helphelp for create
--homeuse the computer user's home directory for an unresolved location
--namea display name; derived from the prompt or Environment when empty
--promptan initial prompt, compiled into the space as CLOR_INITIAL_PROMPT
--repositorya clone URL for an unresolved repository declaration
--repository-connectionthe connected GitHub account for the repository, by its connection ID
--secreta replacement vault reference as VARIABLE=SECRET_NAME; repeatable Default []

clor space delete

Delete a space

Usage
clor space delete <SPACE> [flags]
FlagDescription
--helphelp for delete

clor space list

List every space you own

Usage
clor space list [flags]
FlagDescription
--helphelp for list

clor space move

Move a space to another of your nodes

Usage
clor space move <SPACE> --node <NODE> [flags]
FlagDescription
--helphelp for move
--nodethe node to move the space to, by its id (required)

clor space rename

Rename a space

Usage
clor space rename <SPACE> --name <NAME> [flags]
FlagDescription
--helphelp for rename
--namethe new display name (required)

clor space resume

Resume a stopped space

Usage
clor space resume <SPACE> [flags]
FlagDescription
--helphelp for resume

clor space show

Show one space by its id

Usage
clor space show <SPACE> [flags]
FlagDescription
--helphelp for show

clor space stop

Stop a space so the daemon suspends it

Usage
clor space stop <SPACE> [flags]
FlagDescription
--helphelp for stop

clor support

Email the team for help, bug reports, and feature requests

Support is a single channel, email to support@clor.com. Replies come back to your own inbox; there is no separate ticket queue to track. The email subcommand sends a help request from your configured email account with a short diagnostics block (CLI version, OS, and team) appended. When no email account is configured it prints a ready-to-send message and a mailto link to paste into your own client instead.

Usage
clor support [flags]
FlagDescription
--helphelp for support

clor support email

Send a help request to the team with diagnostics attached

Usage
clor support email [flags]
FlagDescription
--accountsecret name to load the sending email account from (omit to auto-pick the only saved account)
--credentials-fileread email-account JSON from this path instead of secrets
--helphelp for email
--messagethe help text; use --stdin-format text to read from stdin instead
--showprint the ready-to-send email instead of sending it
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead
--subjectsubject of the help request

clor template

Render Go html and text templates with variables, partials, Markdown, and a curated function set

Render Go templates into HTML emails, static sites, and plain-text documents. The html engine applies contextual auto-escaping so variables are safe by default; the text engine renders verbatim. Feed variables from a json, toml, or yaml file, from piped stdin JSON, or from inline --set overrides. Render a single template to stdout for email send, or a whole directory to an output directory for site deploy.

Usage
clor template [flags]
FlagDescription
--helphelp for template

clor template function

Document the curated template functions for strings, numbers, dates, encoding, HTML, and collections

The render engines share one curated function set. This group documents every function so a template author can discover what is available without reading source. Functions marked html_only exist only in the html engine.

Usage
clor template function [flags]
FlagDescription
--helphelp for function

clor template function list

List the curated template functions with signatures and summaries

Usage
clor template function list [flags]
FlagDescription
--helphelp for list

clor template html

Render HTML templates with contextual auto-escaping, Markdown, and safe-content helpers

Render Go html/template documents with automatic, context-aware escaping so variables are safe by default in element, attribute, URL, CSS, and script positions. Untrusted values are escaped; opt specific values back in with safe_html, safe_url, safe_css, safe_js, and safe_attr. The markdown helper renders GitHub-flavored Markdown to HTML. The same curated helpers cover strings, numbers, dates, encoding, and collections. List them all with "template function list".

Usage
clor template html [flags]
FlagDescription
--helphelp for html

clor template html render

Render an HTML template or template directory to a document, file, or static site

Single template mode renders --template to stdout (- reads the template from stdin). Directory mode parses --template-dir as one set so layouts and partials resolve through {{template}}; without --output-dir it renders the --name entry to stdout, with --output-dir it renders every page into that directory and copies static assets through. A file is a partial, not a page, when its base name starts with _ or any path segment is partials.

Usage
clor template html render [flags]
FlagDescription
--datavariables file in json, toml, or yaml (auto-detected by extension)
--helphelp for render
--nameentry template to render in directory mode without --output-dir Default index
--outputwrite single-template output to this file instead of stdout
--output-dirrender every page into this directory and copy static assets through
--setset a variable by dotted key (repeatable, e.g. --set user.name=Ada) Default []
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead
--templatesingle template file to render (- for stdin)
--template-dirdirectory of templates parsed as one set so layouts and partials resolve via {{template}}

clor template text

Render plain-text templates for text emails and documents with no HTML escaping

Render Go text/template documents verbatim, with no HTML escaping and no safe-content or markdown helpers. Use this for plain-text email bodies, configuration files, and any output that is not HTML. The curated helpers cover strings, numbers, dates, encoding, and collections. List them all with "template function list".

Usage
clor template text [flags]
FlagDescription
--helphelp for text

clor template text render

Render a plain-text template or template directory to a document, file, or tree

Single template mode renders --template to stdout (- reads the template from stdin). Directory mode parses --template-dir as one set so shared blocks resolve through {{template}}; without --output-dir it renders the --name entry to stdout, with --output-dir it renders every .txt page into that directory and copies other files through. A file is a partial, not a page, when its base name starts with _ or any path segment is partials.

Usage
clor template text render [flags]
FlagDescription
--datavariables file in json, toml, or yaml (auto-detected by extension)
--helphelp for render
--nameentry template to render in directory mode without --output-dir Default index
--outputwrite single-template output to this file instead of stdout
--output-dirrender every page into this directory and copy static assets through
--setset a variable by dotted key (repeatable, e.g. --set user.name=Ada) Default []
--stdin-fileread input from this file instead of process stdin
--stdin-formatshape of piped stdin: text (raw bytes / one item per line) or json (a JSON value); only set when actually piping input (cmd | clor ..., clor ... <file, or --stdin-file); if you have an inline string, pass it as a positional instead
--templatesingle template file to render (- for stdin)
--template-dirdirectory of templates parsed as one set so layouts and partials resolve via {{template}}

clor terminal

Run a command as a supervised browser terminal on a machine, reachable at a public URL

Declare a terminal a machine should keep running. The machine's daemon spawns the command inside a persistent browser terminal within seconds, and a tunnel and public link are created with it, so the terminal is immediately reachable at its printed URL. The service is the source of truth: a daemon that lost its local state respawns every declared terminal on its next poll, and deleting a terminal stops the command and kills the URL. Local requests to the terminal's port are rejected without the per-terminal secret only the daemon holds.

Usage
clor terminal [flags]
FlagDescription
--helphelp for terminal

clor terminal create

Declare a command a machine should run as a browser terminal at a public URL

Usage
clor terminal create [flags] -- <COMMAND> [ARG]...
FlagDescription
--envenvironment variable set on the command as KEY=VALUE (repeatable) Default []
--helphelp for create
--metadataannotation stored on the terminal as KEY=VALUE (repeatable) Default []
--nameoptional human label
--working-directoryworking directory for the command on this machine

clor terminal delete

Delete a terminal, stopping its command and killing its URL

Usage
clor terminal delete <ID> [flags]
FlagDescription
--helphelp for delete

clor terminal list

List the terminals the caller owns

Usage
clor terminal list [flags]
FlagDescription
--helphelp for list

clor terminal show

Show one terminal with its URL and live connection status

Usage
clor terminal show <ID> [flags]
FlagDescription
--helphelp for show

clor tunnel

Expose a local HTTP or WebSocket server on the public internet at a stable subdomain or an ephemeral link, run by the daemon

Register a reverse tunnel from a local HTTP(S) server to the public internet. A tunnel binds this machine's node to a target like 127.0.0.1:3000; the daemon opens one outbound connection to the edge and reverse-proxies inbound requests to the target. WebSocket connections, server-sent events, and other streaming responses pass through end to end, and an h2c target serves gRPC and other native HTTP/2 apps. Reach a tunnel at an optional stable subdomain or at any number of ephemeral links with a fixed expiry; each command prints the full public URL. The tunnel service is the source of truth, so a daemon that lost its local state rebuilds every tunnel on its next poll.

Usage
clor tunnel [flags]
FlagDescription
--helphelp for tunnel

clor tunnel create

Register a tunnel from this machine to a local HTTP target, optionally claiming a subdomain

Usage
clor tunnel create [flags]
FlagDescription
--helphelp for create
--nameoptional human label
--subdomainoptional stable public subdomain to claim (e.g. myapp)
--targetlocal address to expose (e.g. 127.0.0.1:3000, https://localhost:8443, or h2c://localhost:50051 for gRPC and native HTTP/2 servers)

clor tunnel delete

Delete a tunnel, freeing its subdomain and dropping its connection

Usage
clor tunnel delete <ID> [flags]
FlagDescription
--helphelp for delete

clor tunnel list

List the tunnels the caller owns

Usage
clor tunnel list [flags]
FlagDescription
--helphelp for list

clor tunnel show

Show one tunnel with its links and live connection status

Usage
clor tunnel show <ID> [flags]
FlagDescription
--helphelp for show

clor tunnel update

Change a tunnel's target or name, or set, change, or clear its subdomain

Usage
clor tunnel update <ID> [flags]
FlagDescription
--helphelp for update
--namenew human label
--subdomainnew subdomain to claim, or "" to clear the current one
--targetnew local target address (http, https, or h2c)

clor uninstall

Remove the plugin, service, and skills from every detected agent (leaves the CLI binary)

Removes the clor plugin from every detected AI agent, stops and removes the clor daemon service, and removes any tarball-synced skill directories. The CLI binary itself is left in place; remove it manually with `rm $(which clor)` when desired. Subcommands: cli Print the manual `rm $(which clor)` instruction (no auto-rm) service Stop and remove the clor daemon service unit plugin Remove the clor plugin from supported AI agents skill Remove the clor skill directories from agents Output: every subcommand supports --stdout-format text|jsonl|json (default text, logfmt with event= leader).

Usage
clor uninstall [flags]
FlagDescription
--helphelp for uninstall

clor uninstall cli

Print instructions for removing the clor binary (no auto-rm of the running binary)

Records a one-line hint to remove the clor binary manually with `rm $(which clor)`. The CLI does not auto-delete its own running binary; this subcommand exists for completeness in the uninstall tree.

Usage
clor uninstall cli [flags]
FlagDescription
--helphelp for cli

clor uninstall plugin

Remove the plugin from Claude Code and Codex

Usage
clor uninstall plugin [flags]
FlagDescription
--agentagent to remove the plugin from (claude|codex|all) Default all
--helphelp for plugin

clor uninstall service

Stop and remove the clor daemon service (systemd unit on Linux, launchd plist on macOS)

Usage
clor uninstall service [flags]
FlagDescription
--helphelp for service

clor uninstall skill

Remove the skills directory from Claude Code and Codex

Usage
clor uninstall skill [flags]
FlagDescription
--agentagent to remove skills from (claude|codex|all) Default all
--helphelp for skill

clor version

Print the compiled CLI version (mirrors `--version` but supports --stdout-format for parsing)

Equivalent to `--version`, but outputs the standard --stdout-format text|jsonl|json shape so the value can be parsed without special-casing.

Usage
clor version [flags]
FlagDescription
--helphelp for version

clor weather

Look up weather forecasts, air quality, astronomy, marine conditions, alerts, and location data

Get current conditions, multi-day forecasts, historical weather since 2010, air-quality readings, sun and moon times, marine forecasts with tides, government-issued weather alerts, and location autocomplete. Subcommands: current Get current conditions at a location forecast Get a multi-day forecast with daily and hourly detail history Get historical weather for a date or date range since 2010 airquality Get current air-quality readings at a location astronomy Get sunrise, sunset, moonrise, moonset, and moon phase marine Get a marine forecast with conditions and tide times alerts Get active government-issued weather alerts search Look up matching cities and regions by name Output: every subcommand supports --stdout-format text|jsonl|json (default text, logfmt with event= leader).

Usage
clor weather [flags]
FlagDescription
--helphelp for weather

clor weather airquality

Get current air-quality readings at a location

Returns pollutant concentrations (CO, ozone, NO2, SO2, PM2.5, PM10) plus the US EPA index (1-6, where 1 is good and 6 is hazardous) and the UK DEFRA index (1-10).

Usage
clor weather airquality <LOCATION> [flags]
FlagDescription
--helphelp for airquality

clor weather alerts

Get active government-issued weather alerts at a location

Usage
clor weather alerts <LOCATION> [flags]
FlagDescription
--helphelp for alerts

clor weather astronomy

Get sunrise, sunset, moonrise, moonset, and moon phase for a date

Usage
clor weather astronomy <LOCATION> [flags]
FlagDescription
--datedate in YYYY-MM-DD format (default today at the location)
--helphelp for astronomy

clor weather current

Get current conditions at a location

<LOCATION> accepts a city name, "lat,lon", US zipcode, UK postcode, an IP address, or "id:N" returned by 'clor weather search'.

Usage
clor weather current <LOCATION> [flags]
FlagDescription
--helphelp for current
--languagetwo-letter language code for condition text (e.g. fr, de, es, ja)

clor weather forecast

Get a multi-day forecast with daily and hourly detail

Usage
clor weather forecast <LOCATION> [flags]
FlagDescription
--daysnumber of forecast days (1-14) Default 3
--helphelp for forecast
--hourrestrict hourly output to one hour (0-23, 24-hour clock)
--languagetwo-letter language code for condition text (e.g. fr, de, es, ja)

clor weather history

Get historical weather for a date or date range since 2010-01-01

Usage
clor weather history <LOCATION> [flags]
FlagDescription
--datestart date in YYYY-MM-DD format (required, on or after 2010-01-01)
--end-dateend date in YYYY-MM-DD format (max 30 days after --date)
--helphelp for history
--hourrestrict hourly output to one hour (0-23, 24-hour clock)
--languagetwo-letter language code for condition text

clor weather marine

Get a marine forecast with conditions and tide times

<LOCATION> must be a sea or ocean point (coastal city or "lat,lon" over water). Returns daily summaries, hourly sea-state, and tide events.

Usage
clor weather marine <LOCATION> [flags]
FlagDescription
--daysnumber of marine forecast days (1-7) Default 3
--helphelp for marine

Feedback is emailed to support@clor.com.

No documentation matched your search.

Search pages, concepts, and commands.