{"id":50392824,"url":"https://github.com/osodevops/keito-cli","last_synced_at":"2026-05-30T19:01:32.019Z","repository":{"id":357206098,"uuid":"1172681061","full_name":"osodevops/keito-cli","owner":"osodevops","description":"CLI for AI agents and humans to track billable time against the Keito platform","archived":false,"fork":false,"pushed_at":"2026-05-11T20:54:35.000Z","size":2585,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-11T21:03:11.770Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://keito.ai","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/osodevops.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-03-04T15:26:08.000Z","updated_at":"2026-05-05T15:33:14.000Z","dependencies_parsed_at":null,"dependency_job_id":"de23eebd-a251-4290-befe-6227c0289b78","html_url":"https://github.com/osodevops/keito-cli","commit_stats":null,"previous_names":["osodevops/keito-cli"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/osodevops/keito-cli","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/osodevops%2Fkeito-cli","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/osodevops%2Fkeito-cli/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/osodevops%2Fkeito-cli/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/osodevops%2Fkeito-cli/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/osodevops","download_url":"https://codeload.github.com/osodevops/keito-cli/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/osodevops%2Fkeito-cli/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33705207,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-30T02:00:06.278Z","response_time":92,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-05-30T19:01:30.069Z","updated_at":"2026-05-30T19:01:31.980Z","avatar_url":"https://github.com/osodevops.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# keito\n\n[![CI](https://github.com/osodevops/keito-cli/actions/workflows/test.yml/badge.svg)](https://github.com/osodevops/keito-cli/actions/workflows/test.yml)\n\nTrack billable time against the [Keito](https://keito.ai) platform — from the terminal or from an AI agent.\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"recordings/time-start-stop-optimised.gif\" alt=\"keito demo\" width=\"720\" /\u003e\n\u003c/p\u003e\n\n## Install\n\n### Homebrew (macOS / Linux)\n\n```sh\nbrew install osodevops/tap/keito\n```\n\n### GitHub Releases\n\nDownload the latest binary from [Releases](https://github.com/osodevops/keito-cli/releases) for your platform (macOS, Linux, Windows).\n\n### Build from Source\n\n```sh\ngit clone https://github.com/osodevops/keito-cli.git\ncd keito-cli\ncargo build --release\n# binary at target/release/keito\n```\n\nRequires Rust 1.75+.\n\n## Setup\n\n```sh\nkeito auth login\n```\n\nThis prompts for your API key (`kto_...`) and account/company ID, validates them against the production v2 API, and stores them in the platform config file. On macOS this is `~/Library/Application Support/keito/config.toml`; on Linux this is typically `~/.config/keito/config.toml`. Find the Company ID in Keito under Settings \u003e API \u0026 Developers \u003e Company ID.\n\nFor agent / CI use, set environment variables instead:\n\n```sh\nexport KEITO_API_KEY=kto_xxx\nexport KEITO_ACCOUNT_ID=co_abc123\n```\n\n## Quick Start\n\n```sh\n# Verify credentials\nkeito auth whoami\n\n# Browse projects and tasks\nkeito projects list\nkeito projects tasks\n\n# Start a timer\nkeito time start --project \"Acme Website\" --task dev\n\n# Check what's running\nkeito time running\n\n# Stop when done\nkeito time stop\n\n# Log time after the fact\nkeito time log --project acme --task dev --duration 1:30 --notes \"Fixed auth bug\"\n```\n\n## Agent Quick Start\n\nEvery command supports `--json` output and returns structured exit codes for programmatic error handling:\n\n```sh\n# Verify credentials\nkeito auth status --json\n\n# Discover projects and tasks\nkeito projects list --json\nkeito projects tasks --json\n\n# Start → work → stop\nkeito time start --project \"Acme Website\" --task dev --json\nkeito time running --json\nkeito time stop --json\n```\n\nExit codes tell you exactly what happened — no need to parse error messages. See [Exit Codes](#exit-codes) below.\n\n## Agent Skill\n\nThe Keito Agent Skill is installed from the GitHub skill repo, not from an npm package:\n\n```sh\nkeito auth login\nkeito skill install\n```\n\n`keito skill install` uses `npx` only to run the open skills installer. The installer package is pinned to `skills@1.5.6` by default and can be overridden intentionally with `KEITO_SKILLS_PACKAGE`.\n\n## Features\n\n- **Dual output** — human-readable tables (TTY) or JSON (piped / `--json`)\n- **Structured errors** — JSON errors include `suggestion` and `details` fields for agent recovery\n- **Exit codes 0–8** — every failure mode has a unique code for programmatic handling\n- **Name resolution** — use project names, codes, or IDs interchangeably (case-insensitive)\n- **Config-backed auth** — long-lived API keys are stored in a local `config.toml` for agent-friendly execution\n- **Retry logic** — 3× exponential backoff for network and server errors\n- **Cross-platform** — macOS, Linux, Windows\n\n## Commands\n\n| Command | Description |\n|---|---|\n| `keito auth login` | Store API key and configure account/company ID (interactive) |\n| `keito auth logout` | Remove stored credentials from config |\n| `keito auth status` | Check authentication status and credential source |\n| `keito auth whoami` | Show current user identity and account info |\n| `keito time start` | Start a timer for a project and task |\n| `keito time stop` | Stop the currently running timer |\n| `keito time log` | Log a completed time entry with duration |\n| `keito time list` | List time entries with optional filters |\n| `keito time running` | Show the currently running timer |\n| `keito projects list` | List available projects in the workspace |\n| `keito projects show` | Show project details by name, code, or ID |\n| `keito projects tasks` | List tasks (global, not per-project) |\n\nRun `keito \u003ccommand\u003e --help` for detailed usage, examples, and exit codes.\n\n## Configuration\n\nConfiguration file:\n\n- macOS: `~/Library/Application Support/keito/config.toml`\n- Linux: `~/.config/keito/config.toml`\n- Windows: `%APPDATA%\\\\keito\\\\config.toml`\n\n```toml\napi_key = \"kto_...\"\naccount_id = \"co_abc123\"\nworkspace_id = \"co_abc123\" # legacy alias, kept for compatibility\napi_url = \"https://app.keito.ai\"\n```\n\n### Credential Precedence\n\n1. `KEITO_API_KEY` environment variable (highest priority)\n2. `api_key` in config file\n\n### Account ID Precedence\n\nFind the Company ID in Keito under Settings \u003e API \u0026 Developers \u003e Company ID.\n\n1. `--workspace` CLI flag\n2. `KEITO_ACCOUNT_ID` environment variable\n3. `KEITO_WORKSPACE_ID` environment variable (legacy alias)\n4. `account_id` in config file\n5. `workspace_id` in config file (legacy alias)\n\n## Environment Variables\n\n| Variable | Description |\n|---|---|\n| `KEITO_API_KEY` | API key — takes precedence over config |\n| `KEITO_API_URL` | API base URL override; defaults to `https://app.keito.ai` |\n| `KEITO_ACCOUNT_ID` | Company/account ID sent as `Keito-Account-Id` |\n| `KEITO_WORKSPACE_ID` | Legacy alias for `KEITO_ACCOUNT_ID` |\n\n## Output Formats\n\n### Table (default for TTY)\n\n```\n$ keito time list --limit 2\n Date       | Project       | Task        | Duration | Billable\n------------+---------------+-------------+----------+---------\n 2025-01-15 | Acme Website  | Development | 1:30     | Yes\n 2025-01-14 | Acme Website  | Design      | 2:00     | Yes\n```\n\n### JSON (default when piped, or `--json`)\n\n```json\n[\n  {\n    \"id\": \"te_abc123\",\n    \"project\": \"Acme Website\",\n    \"task\": \"Development\",\n    \"duration\": 1.5,\n    \"date\": \"2025-01-15\",\n    \"billable\": true\n  }\n]\n```\n\n## Exit Codes\n\n| Code | Meaning |\n|---|---|\n| 0 | Success |\n| 1 | Authentication error (missing or invalid API key) |\n| 2 | Invalid input (bad arguments, malformed duration) |\n| 3 | Conflict (e.g. timer already running) |\n| 4 | Not found (project, task, or entry does not exist) |\n| 5 | Rate limited (retry after a moment) |\n| 6 | Server error (Keito API 5xx) |\n| 7 | Network error (connection failed, timeout) |\n| 8 | Configuration error (missing config, bad TOML) |\n\n## Building from Source\n\n```sh\ngit clone https://github.com/osodevops/keito-cli.git\ncd keito-cli\ncargo build --release\ncargo test --all-targets\n```\n\n### Generate Man Pages\n\n```sh\ncargo run --bin gen-man\nman ./man/keito.1\n```\n\n## License\n\n[MIT](LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fosodevops%2Fkeito-cli","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fosodevops%2Fkeito-cli","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fosodevops%2Fkeito-cli/lists"}