CLI: Command Reference
The production CLI command groups are:
keito auth <command>
keito clients <command>
keito projects <command>
keito time <command>
keito skill <command>
Every command supports --help. Every command can output JSON with --json.
Global Flags
| Flag | Description |
|---|
--json | Force JSON output |
--workspace <id> | Override the Company ID for one invocation |
--quiet | Suppress non-essential output |
--verbose | Enable debug logging |
--help | Show help |
--version | Show version |
When stdout is piped, JSON output is enabled automatically.
Auth Commands
| Command | Description |
|---|
keito auth login | Prompt for API key and Company ID, validate them, and save config |
keito auth logout | Remove saved config credentials |
keito auth status | Show whether credentials are configured and valid |
keito auth whoami | Show the current user and company from the API |
keito auth login
keito auth login
Prompts for a kto_... API key and Company ID. The key is saved in the config file, not in a system keychain.
keito auth status
keito auth status --json
Configured credentials:
{
"authenticated": true,
"api_key_source": "config file",
"account_id": "company_id_here",
"workspace_id": "company_id_here",
"api_key_valid": true
}
No credentials:
{"authenticated": false}
keito auth logout
keito auth logout --json
{
"status": "logged_out",
"config_credentials_removed": true
}
Projects and Tasks
| Command | Description |
|---|
keito projects list | List active projects |
keito projects show <project> | Show project details by name, code, or ID |
keito projects tasks | List workspace-global tasks |
Clients
| Command | Description |
|---|
keito clients list | List active clients |
keito clients create <name> | Create a client if the authenticated user has permission |
keito projects list
keito projects list
keito projects list --limit 20 --json
| Flag | Description |
|---|
--limit <number> | Max results to return |
keito projects show <project>
keito projects show "Acme Website"
keito projects show ACME --json
keito projects show project_id_here --json
The <project> argument accepts a project ID, name, or code. Resolution is case-insensitive.
keito projects tasks
keito projects tasks
keito projects tasks --limit 20 --json
Tasks are workspace-global, not project-specific.
Time Commands
| Command | Description |
|---|
keito time start | Start a running timer |
keito time stop | Stop or discard the running timer |
keito time log | Log a completed time entry |
keito time list | List time entries |
keito time running | Show the currently running timer |
keito time session-record | Create or update a completed agent session entry |
keito time start
keito time start --project "Acme Website" --task "Development" \
--notes "Working on auth" \
--json
| Flag | Description | Required |
|---|
--project <value> | Project name, code, or ID | Yes |
--task <value> | Task name or ID | Yes |
--notes <text> | Initial notes | No |
| `—billable <true | false>` | Override billable status |
Only one timer may be active. If a timer is already running, the command exits with code 3.
keito time session-record
keito time session-record \
--project "Acme Website" \
--task "Development" \
--session-id "codex-123" \
--duration-seconds 5400 \
--source agent \
--metadata '{"integration":"keito_skill","agent_type":"codex"}' \
--json
| Flag | Description | Required |
|---|
--project <value> | Project name, code, or ID | Yes |
--task <value> | Task name or ID | Yes |
--session-id <value> | Stable session ID for idempotent updates | Yes |
--duration-seconds <number> | Duration in whole seconds | Yes |
--started-at <RFC3339> | Session start timestamp | No |
--ended-at <RFC3339> | Session end timestamp | No |
| `—source <web | cli | api |
--metadata <json> | Metadata object stored on the time entry | No |
--agent-id <value> | Stores metadata.agent_id | No |
--agent-type <value> | Stores metadata.agent_type | No |
--skill <value> | Stores metadata.skill | No |
If a matching session entry already exists for the same date and source, the CLI updates it instead of creating a duplicate.
keito time running
keito time running
keito time running --json
Returns {"running": false} when no timer is active, or an array of running timer objects when a timer exists.
keito time stop
keito time stop --notes "Finished auth work" --json
keito time stop --discard --json
| Flag | Description |
|---|
--notes <text> | Replace notes on the entry |
--discard | Delete the running timer instead of saving it |
keito time log
keito time log --project "Acme Website" --task "Development" \
--duration 1:30 \
--date 2026-05-06 \
--notes "Implemented OAuth flow" \
--json
| Flag | Description | Required |
|---|
--project <value> | Project name, code, or ID | Yes |
--task <value> | Task name or ID | Yes |
--duration <value> | Decimal hours or HH:MM | Yes |
--date <YYYY-MM-DD> | Work date; defaults to today | No |
--notes <text> | Description of work | No |
| `—billable <true | false>` | Override billable status |
keito time list
keito time list --from 2026-05-01 --to 2026-05-31 --json
keito time list --project "Acme Website" --limit 10 --page 2 --json
| Flag | Description |
|---|
--from <YYYY-MM-DD> | Start date |
--to <YYYY-MM-DD> | End date |
--project <value> | Filter by project name, code, or ID |
--task <value> | Filter by task name or ID |
--limit <number> | Entries per page; default 50 |
--page <number> | Page number; default 1 |
Skill Commands
| Command | Description |
|---|
keito skill install | Install the Keito Agent Skill and configure Codex and Claude Code hooks |
keito skill status | Show CLI, auth, skill, and hook status |
keito skill doctor | Show readiness checks and next actions |
keito skill install
keito skill install --agent codex
keito --json skill status
keito skill doctor
Environment Variables
| Variable | Description |
|---|
KEITO_API_KEY | API key; highest-priority credential source |
KEITO_ACCOUNT_ID | Company ID sent as Keito-Account-Id |
KEITO_WORKSPACE_ID | Legacy alias for KEITO_ACCOUNT_ID |
Config File
| OS | Path |
|---|
| macOS | ~/Library/Application Support/keito/config.toml |
| Linux | ~/.config/keito/config.toml |
| Windows | %APPDATA%\keito\config.toml |
api_key = "kto_xxxxx"
account_id = "company_id_here"
workspace_id = "company_id_here" # legacy alias
api_url = "https://app.keito.ai"
Exit Codes
| Code | Meaning |
|---|
0 | Success |
1 | Authentication error |
2 | Invalid input |
3 | Conflict, such as a timer already running |
4 | Not found |
5 | Rate limited |
6 | Server error |
7 | Network error |
8 | Configuration error |
keito auth status is a health-check command. When credentials are missing, JSON output is {"authenticated": false}.
JSON Error Shape
In JSON mode, errors are written to stderr:
{
"error": true,
"code": 4,
"message": "Not found: Project 'demo' not found.",
"suggestion": "keito projects list --json"
}
Agents should branch on the exit code and use suggestion as the recovery hint.