Skip to main content

Configuration

The CLI works with zero configuration after copera auth login, but a few small additions make day-to-day use much smoother — especially when scripting or running it from an AI agent.

Config file hierarchy

The CLI reads configuration from up to three TOML files. When the same setting appears in more than one, the higher-priority file wins:

PriorityFilePurpose
1.copera.local.toml (current directory)Per-developer secrets. Add to .gitignore.
2.copera.toml (current directory)Shared project defaults. Safe to commit (no tokens).
3~/.copera.tomlYour personal config, with all profiles.

The environment variable COPERA_CLI_AUTH_TOKEN and the --token flag override all three for the token specifically. See the full token resolution order.

File format

Each file is TOML. A profile groups a token with default resource IDs; an [output] and [cache] section tune behavior:

# Use a non-"default" profile without passing --profile every time.
# Overridden by COPERA_PROFILE or --profile.
default_profile = "work"

[profiles.default]
token = "cp_pat_abc123..." # never commit this
board_id = "66abc123def456789012abcd" # used when --board is omitted
table_id = "66pqr012stu345678901vwxy" # used when --table is omitted
row_id = "" # used when --row is omitted
channel_id = "" # used when --channel is omitted
doc_id = "" # used when --doc is omitted

[profiles.work]
token = "cp_key_xyz789..."
board_id = "66ghi789jkl012345678mnop"

[output]
format = "auto" # auto | json | table | plain
color = "auto" # auto | always | never (also respects NO_COLOR)

[cache]
dir = "" # default: system temp directory / copera-cli
ttl = "1h" # how long to cache doc content

Once defaults are configured, commands shrink:

# Without defaults
copera rows list --board 66ghi... --table 66pqr...

# With board_id and table_id in the active profile
copera rows list

Profiles

Each [profiles.<name>] block holds its own token, board_id, table_id, row_id, channel_id, and doc_id. Select one per-command or per-shell — when you omit --profile, the CLI uses default (or the default_profile set in your config):

copera boards list --profile work
COPERA_PROFILE=work copera boards list

Project-level config

For shared project defaults, commit a .copera.toml to your repo with no tokens:

[profiles.default]
board_id = "66abc123def456789012abcd"
table_id = "66pqr012stu345678901vwxy"

For per-developer secrets that should not be committed, use .copera.local.toml and add it to .gitignore:

[profiles.default]
token = "cp_pat_xxx"

This split lets a whole team share the same default board and table while each developer supplies their own token locally.

Environment variables

VariableDescription
COPERA_CLI_AUTH_TOKENAPI token. Overrides every config file.
COPERA_PROFILEActive config profile name (default: default).
COPERA_SANDBOXSet to 1 to target the development API.
COPERA_NO_UPDATE_CHECKSet to 1 to disable background version checks.
CISet to true to disable interactive prompts and update checks.
NO_COLORDisable ANSI color output.

Sandbox

Set COPERA_SANDBOX=1 to point the CLI at the Copera development environment instead of production. This switches the API base URL to https://api-dev.copera.ai/public/v1 and points copera auth login at the dev web app (https://dev.copera.ai):

COPERA_SANDBOX=1 copera auth login
COPERA_SANDBOX=1 copera boards list

Use a separate profile for sandbox credentials so you do not mix them with production tokens.

Update checks

By default the CLI runs a lightweight background check for new versions and tells you when one is available. Disable it when you want fully silent, deterministic runs:

COPERA_NO_UPDATE_CHECK=1 copera boards list

Update checks are also skipped automatically when CI=true, when --json or --quiet is set, and for development builds. Upgrade explicitly at any time with copera update.

Caching

The CLI caches document content on disk to avoid redundant API calls.

  • Default location: your system temp directory, under copera-cli/. Override it with cache.dir in your config.
  • Default TTL: 1 hour. Change it with cache.ttl (e.g. "30m", "6h").
  • Inspect the cache with copera cache status; clear it with copera cache clean.
  • Bypass the cache for a single read with copera docs content <id> --no-cache.
copera cache status   # size, file count, and path
copera cache clean # clear it entirely

Machine-readable output

The CLI is built to slot into scripts and agent workflows:

  • When stdout is not a TTY (piped, redirected, or in CI), output defaults to JSON.
  • --json forces JSON output even in a terminal.
  • --output accepts auto, json, table, or plain.
  • --quiet / -q suppresses informational messages.
  • --no-input (and CI=true) disable interactive prompts.
  • Errors are emitted on stderr as structured JSON.

Exit codes

CodeMeaning
0OK
1Generic error
2Usage error (bad flags, missing arguments)
3Not found
4Auth error / permission denied
5Conflict (e.g. a resource that already exists)
6Rate limited

Structured errors

When something fails, the CLI emits a JSON error on stderr:

{
"error": "resource_not_found",
"message": "Board 'abc123' not found",
"suggestion": "Run 'copera boards list' to see accessible boards",
"transient": false
}

transient: true means you can retry; false means the error is permanent and retrying will not help.

  • Overview — install and first-time setup.
  • Authentication — token types, login flows, and resolution order.
  • Commands — the full command reference.