{"id":47694072,"url":"https://github.com/withoneai/cli","last_synced_at":"2026-04-19T07:09:29.375Z","repository":{"id":345377356,"uuid":"1157367233","full_name":"withoneai/cli","owner":"withoneai","description":"A command-line tool to give your agents access to any app, create workflows and manage your One account.","archived":false,"fork":false,"pushed_at":"2026-04-02T20:42:17.000Z","size":845,"stargazers_count":135,"open_issues_count":6,"forks_count":21,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-04-03T02:56:39.086Z","etag":null,"topics":["agents","apps","cli","one","workflows"],"latest_commit_sha":null,"homepage":"https://www.npmjs.com/package/@withone/cli","language":"TypeScript","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/withoneai.png","metadata":{"files":{"readme":"README.md","changelog":null,"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":null,"dco":null,"cla":null}},"created_at":"2026-02-13T18:30:29.000Z","updated_at":"2026-04-02T22:40:49.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/withoneai/cli","commit_stats":null,"previous_names":["picahq/cli","withoneai/cli"],"tags_count":25,"template":false,"template_full_name":null,"purl":"pkg:github/withoneai/cli","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/withoneai%2Fcli","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/withoneai%2Fcli/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/withoneai%2Fcli/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/withoneai%2Fcli/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/withoneai","download_url":"https://codeload.github.com/withoneai/cli/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/withoneai%2Fcli/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31501903,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-07T03:10:19.677Z","status":"ssl_error","status_checked_at":"2026-04-07T03:10:13.982Z","response_time":105,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["agents","apps","cli","one","workflows"],"created_at":"2026-04-02T16:15:10.925Z","updated_at":"2026-04-17T01:11:27.513Z","avatar_url":"https://github.com/withoneai.png","language":"TypeScript","funding_links":[],"categories":["TypeScript"],"sub_categories":[],"readme":"\u003cimg src=\"https://assets.withone.ai/banners/cli.png\" alt=\"One CLI - Connect your agents to every API on the internet.\" style=\"border-radius: 5px;\"\u003e\n\n\u003ch3 align=\"center\"\u003eOne CLI\u003c/h3\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://withone.ai\"\u003e\u003cstrong\u003eWebsite\u003c/strong\u003e\u003c/a\u003e\n  \u0026nbsp;·\u0026nbsp;\n  \u003ca href=\"https://withone.ai/docs\"\u003e\u003cstrong\u003eDocs\u003c/strong\u003e\u003c/a\u003e\n  \u0026nbsp;·\u0026nbsp;\n  \u003ca href=\"https://app.withone.ai\"\u003e\u003cstrong\u003eDashboard\u003c/strong\u003e\u003c/a\u003e\n  \u0026nbsp;·\u0026nbsp;\n  \u003ca href=\"https://withone.ai/changelog\"\u003e\u003cstrong\u003eChangelog\u003c/strong\u003e\u003c/a\u003e\n  \u0026nbsp;·\u0026nbsp;\n  \u003ca href=\"https://x.com/withoneai\"\u003e\u003cstrong\u003eX\u003c/strong\u003e\u003c/a\u003e\n  \u0026nbsp;·\u0026nbsp;\n  \u003ca href=\"https://linkedin.com/company/withoneai\"\u003e\u003cstrong\u003eLinkedIn\u003c/strong\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://npmjs.com/package/@withone/cli\"\u003e\u003cimg src=\"https://img.shields.io/npm/v/%40withone%2Fcli\" alt=\"npm version\"\u003e\u003c/a\u003e\n  \u0026nbsp;\n  \u003ca href=\"https://withone.ai/knowledge\"\u003e\u003cimg src=\"https://img.shields.io/endpoint?url=https%3A%2F%2Fapi.withone.ai%2Fopen%2Fcount%2Fplatforms\" alt=\"platforms\"\u003e\u003c/a\u003e\n  \u0026nbsp;\n  \u003ca href=\"https://withone.ai/knowledge\"\u003e\u003cimg src=\"https://img.shields.io/endpoint?url=https%3A%2F%2Fapi.withone.ai%2Fopen%2Fcount%2Ftools\" alt=\"tools\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\nOne gives your AI agent authenticated access to 250+ platforms - Gmail, Slack, Shopify, HubSpot, Stripe, Notion, and everything else - through a single interface. No API keys to juggle, no OAuth flows to build, no request formats to memorize. Connect a platform once, and your agent can search for actions, read the docs, and execute API calls in seconds.\n\n## Install\n\n```bash\nnpx @withone/cli@latest init\n```\n\nOr install globally:\n\n```bash\nnpm install -g @withone/cli\none init\n```\n\n`one init` walks you through setup: authenticate via browser or enter your [API key](https://app.withone.ai/settings/api-keys), pick your AI agents, and you're done. The MCP server gets installed automatically.\n\nOr authenticate directly:\n\n```bash\none login              # Opens browser for authentication (global or per-directory)\none logout             # Clear credentials (with scope picker and confirmation)\n```\n\nRequires Node.js 18+.\n\n## Quick start\n\n```bash\n# Connect a platform\none add gmail\n\n# See what you're connected to\none list\n\n# Search for actions you can take\none actions search gmail \"send email\" -t execute\n\n# Read the docs for an action\none actions knowledge gmail \u003cactionId\u003e\n\n# Execute it\none actions execute gmail \u003cactionId\u003e \u003cconnectionKey\u003e \\\n  -d '{\"to\": \"jane@example.com\", \"subject\": \"Hello\", \"body\": \"Sent from my AI agent\"}'\n```\n\nThat's it. Five commands to go from zero to sending an email through Gmail's API - fully authenticated, correctly formatted, without touching a single OAuth token.\n\n### Multi-step flows\n\nChain actions across platforms into reusable workflows:\n\n```bash\n# Create a flow that looks up a Stripe customer and sends a Gmail welcome email\none flow create welcome-customer --definition '{\n  \"key\": \"welcome-customer\",\n  \"name\": \"Welcome New Customer\",\n  \"version\": \"1\",\n  \"inputs\": {\n    \"stripeKey\": { \"type\": \"string\", \"required\": true, \"connection\": { \"platform\": \"stripe\" } },\n    \"gmailKey\": { \"type\": \"string\", \"required\": true, \"connection\": { \"platform\": \"gmail\" } },\n    \"email\": { \"type\": \"string\", \"required\": true }\n  },\n  \"steps\": [\n    { \"id\": \"find\", \"name\": \"Find customer\", \"type\": \"action\",\n      \"action\": { \"platform\": \"stripe\", \"actionId\": \"\u003cactionId\u003e\", \"connectionKey\": \"$.input.stripeKey\",\n        \"data\": { \"query\": \"email:'\\''{{$.input.email}}'\\''\" } } },\n    { \"id\": \"send\", \"name\": \"Send email\", \"type\": \"action\",\n      \"if\": \"$.steps.find.response.data.length \u003e 0\",\n      \"action\": { \"platform\": \"gmail\", \"actionId\": \"\u003cactionId\u003e\", \"connectionKey\": \"$.input.gmailKey\",\n        \"data\": { \"to\": \"{{$.input.email}}\", \"subject\": \"Welcome!\", \"body\": \"Thanks for joining.\" } } }\n  ]\n}'\n\n# Validate it\none flow validate welcome-customer\n\n# Run it - connection keys auto-resolve if you have one connection per platform\none flow execute welcome-customer -i email=jane@example.com\n```\n\nWorkflows live under `.one/flows/\u003ckey\u003e/flow.json` with an optional `lib/` subfolder for `.mjs` code modules — create new flows in this folder layout. Flows can be organized into subdirectory groups: `.one/flows/\u003cgroup\u003e/\u003ckey\u003e/flow.json`. Reference them as `group/key` or just the bare key if unique. (The legacy single-file layout `.one/flows/\u003ckey\u003e.flow.json` is deprecated but still loads for backward compatibility.) Flows support conditions, loops, while loops, parallel steps, transforms, sub-flows, pagination, bash steps, and external `.mjs` code modules. Run `one guide flows` for the full reference.\n\n## How it works\n\n```\nYour AI Agent\n    ↓\n  One CLI\n    ↓\n  One API (api.withone.ai/v1/passthrough)\n    ↓\n  Gmail / Slack / Shopify / HubSpot / Stripe / ...\n```\n\nEvery API call routes through One's passthrough proxy. One injects the right credentials, handles rate limiting, and normalizes responses. You never see or manage raw OAuth tokens - your connection key is all you need.\n\n## Commands\n\n### `one init`\n\nSet up your API key and install the MCP server into your AI agents.\n\n```bash\none init\n```\n\nSupports Claude Code, Claude Desktop, Cursor, Windsurf, Codex, and Kiro.\n\n**Global vs. project scope.** `one init` is interactive and asks where the setup should live:\n\n- **Global** (`~/.one/config.json`) — applies to every folder. Best when you only need one workspace / API key.\n- **Project** (`~/.one/projects/\u003cslug\u003e/config.json`) — scoped to the current project, stored under your home directory so secrets never land in git. Use this when different projects need different API keys, connections, or access control.\n\nWhen you run `one` in a project, it uses the project config if one exists and falls back to the global config otherwise. Use `one config path` to see which config is active and the full resolution order.\n\nIf you've already set up, `one init` shows your current status for the active scope and lets you update your key, install to more agents, or reconfigure.\n\n| Flag | What it does |\n|------|-------------|\n| `-y` | Skip confirmations |\n| `-g` | Non-interactive: write the One config globally (`~/.one/config.json`) |\n| `-p` | Non-interactive: write the One config for this project (`~/.one/projects/\u003cslug\u003e/config.json`) |\n\n### `one add \u003cplatform\u003e`\n\nConnect a new platform via OAuth.\n\n```bash\none add shopify\none add hub-spot\none add gmail\n```\n\nOpens your browser, you authorize, done. The CLI polls until the connection is live. Platform names are kebab-case - run `one platforms` to see them all.\n\n### `one list`\n\nList your active connections with their status and connection keys.\n\n```bash\none list\n```\n\n```\n  ● gmail       operational   live::gmail::default::abc123\n  ● slack       operational   live::slack::default::def456\n  ● shopify     operational   live::shopify::default::ghi789\n```\n\nYou need the connection key (rightmost column) when executing actions.\n\n### `one connection delete \u003cconnection-key\u003e`\n\nRemove a connection by its key.\n\n```bash\none connection delete live::gmail::default::abc123\none connection rm live::gmail::default::abc123      # alias\n```\n\nShows the connection details and asks for confirmation before deleting. Use `--force` to skip the confirmation prompt.\n\n| Option | What it does |\n|--------|-------------|\n| `-f, --force` | Skip confirmation prompt |\n\n### `one platforms`\n\nBrowse all 200+ available platforms.\n\n```bash\none platforms              # all platforms\none platforms -c \"CRM\"     # filter by category\none platforms --json       # machine-readable output\n```\n\n### `one actions search \u003cplatform\u003e \u003cquery\u003e`\n\nSearch for API actions on a connected platform using natural language.\n\n```bash\none actions search shopify \"list products\"\none actions search hub-spot \"create contact\" -t execute\none actions search gmail \"send email\"\n```\n\nReturns the top 5 matching actions with their action IDs, HTTP methods, and paths. Use `-t execute` when you intend to run the action, or `-t knowledge` (default) when you want to learn about it or write code against it.\n\n### `one actions knowledge \u003cplatform\u003e \u003cactionId\u003e`\n\nGet the full documentation for an action - parameters, validation rules, request/response structure, examples, and the exact API request format.\n\n```bash\none actions knowledge shopify 67890abcdef\n```\n\nAlways read the knowledge before executing. It tells you exactly what parameters are required, what format they need, and any platform-specific quirks.\n\n### `one actions execute \u003cplatform\u003e \u003cactionId\u003e \u003cconnectionKey\u003e`\n\nExecute an API action on a connected platform.\n\n```bash\n# Simple GET\none actions execute shopify \u003cactionId\u003e \u003cconnectionKey\u003e\n\n# POST with data\none actions execute hub-spot \u003cactionId\u003e \u003cconnectionKey\u003e \\\n  -d '{\"properties\": {\"email\": \"jane@example.com\", \"firstname\": \"Jane\"}}'\n\n# With path variables\none actions execute shopify \u003cactionId\u003e \u003cconnectionKey\u003e \\\n  --path-vars '{\"order_id\": \"12345\"}'\n\n# With query params\none actions execute stripe \u003cactionId\u003e \u003cconnectionKey\u003e \\\n  --query-params '{\"limit\": \"10\"}'\n```\n\n| Option | What it does |\n|--------|-------------|\n| `-d, --data \u003cjson\u003e` | Request body (POST, PUT, PATCH) |\n| `--path-vars \u003cjson\u003e` | Replace `{variables}` in the URL path |\n| `--query-params \u003cjson\u003e` | Query string parameters |\n| `--headers \u003cjson\u003e` | Additional request headers |\n| `--form-data` | Send as multipart/form-data |\n| `--form-url-encoded` | Send as application/x-www-form-urlencoded |\n| `--dry-run` | Show the request without executing it |\n| `--mock` | Return example response without making an API call |\n| `--skip-validation` | Skip input validation against the action schema |\n| `--output \u003cpath\u003e` | Save response to a file (for binary downloads) |\n\nThe CLI validates required parameters (path variables, query params, body fields) against the action schema before executing. Missing params return a clear error with the flag name and description. Pass `--skip-validation` to bypass.\n\n#### Parallel execution\n\nExecute multiple actions concurrently with `--parallel`, separating each action with `--`:\n\n```bash\none --agent actions execute --parallel \\\n  gmail send-email conn123 -d '{\"to\":\"a@b.com\",\"subject\":\"Hi\",\"body\":\"Hello\"}' \\\n  -- slack post-message conn456 -d '{\"channel\":\"#general\",\"text\":\"Done\"}' \\\n  -- google-sheets append-row conn789 -d '{\"values\":[\"x\",\"y\"]}'\n```\n\nEach segment follows the same format: `\u003cplatform\u003e \u003cactionId\u003e \u003cconnectionKey\u003e [-d ...] [--path-vars ...] [--query-params ...]`. All segments are validated upfront before any execution starts. Results are collected via `Promise.allSettled` — if one fails, the rest still complete.\n\n| Option | What it does |\n|--------|-------------|\n| `--parallel` | Enable parallel mode |\n| `--max-concurrency \u003cn\u003e` | Max concurrent actions per batch (default: 5) |\n\nAgent-mode output includes `parallel: true`, per-action `status`/`durationMs`/`response`, plus `totalDurationMs`, `succeeded`, and `failed` counts.\n\n### `one cache`\n\nManage the local cache for knowledge and search responses. The CLI automatically caches `actions knowledge` and `actions search` results so repeated calls serve instantly from disk.\n\n```bash\none cache list                    # List all cached entries with age and status\none cache list --expired          # Show only expired entries\none cache clear                   # Clear all cached data\none cache clear \u003cactionId\u003e        # Clear a specific entry\none cache update-all              # Re-fetch fresh data for all cached entries\n```\n\nKnowledge and search commands also support cache flags:\n\n```bash\none actions knowledge gmail \u003cactionId\u003e --no-cache       # Skip cache, fetch fresh\none actions knowledge gmail \u003cactionId\u003e --cache-status   # Check cache status\none actions search gmail \"send email\" --no-cache        # Skip cache for search\n```\n\nDefault TTL is 1 hour. Configure via `ONE_CACHE_TTL` environment variable or `cacheTtl` in `~/.one/config.json`.\n\nNote: `actions execute` is never cached — it always hits the API fresh.\n\n### `one sync`\n\nSync platform data into local SQLite for instant queries, full-text search, scheduled refresh, and change-driven automation. The sync engine (`better-sqlite3`) is an optional dependency — install it once per machine:\n\n```bash\none sync install \u0026\u0026 one sync doctor\n```\n\n```bash\n# Discover → init (one command: infer + auto-resolve key + auto-test) → run\none sync models stripe\none sync init stripe balanceTransactions    # connectionKey auto-resolved, test auto-run\none sync run stripe --since 90d\n\n# Query, search, SQL\none sync query stripe/balanceTransactions --where \"status=available\" --limit 20\none sync search \"refund\"\none sync sql stripe \"SELECT count(*) FROM balanceTransactions\"\n\n# Schedule unattended syncs + change hooks\none sync schedule add stripe --every 1h\none sync init stripe balanceTransactions --config '{\"onInsert\":\"one flow execute handle-new-txn\"}'\n\n# Deletion detection\none sync run stripe --full-refresh\n```\n\n| Subcommand | What it does |\n|------------|-------------|\n| `install` / `doctor` | Install + verify the SQLite engine |\n| `models \u003cplatform\u003e` | Discover available data models |\n| `init \u003cplatform\u003e \u003cmodel\u003e` | Create profile (auto-infers all fields, auto-resolves key, auto-runs test) |\n| `test \u003cplatform\u003e/\u003cmodel\u003e` | Validate + auto-fix profile from real API response (also runs inside init) |\n| `run \u003cplatform\u003e` | Sync data (`--full-refresh`, `--since`, `--dry-run`) |\n| `query \u003cplatform\u003e/\u003cmodel\u003e` | Query with `--where`, `--after/before`, `--refresh` |\n| `search \u003cquery\u003e` | FTS5 across all synced data |\n| `sql \u003cplatform\u003e \u003csql\u003e` | Raw SELECT queries |\n| `schedule add/list/status/remove/repair` | Cron-backed scheduled syncs with drift detection |\n| `remove \u003cplatform\u003e` | Delete local data (`--dry-run` to preview) |\n\nChange hooks (`onInsert`, `onUpdate`, `onChange`) fire per-page during sync — pipe to a shell command, a flow, or an event log. Run `one guide sync` for the full reference.\n\n### `one guide [topic]`\n\nGet the full CLI usage guide, designed for AI agents that only have the binary (no MCP, no IDE skills).\n\n```bash\none guide                 # full guide (all topics)\none guide overview        # setup, --agent flag, discovery workflow\none guide actions         # search, knowledge, execute workflow\none guide flows           # multi-step API workflows\n\none --agent guide         # full guide as structured JSON\none --agent guide flows   # single topic as JSON\n```\n\nTopics: `overview`, `actions`, `flows`, `relay`, `cache`, `sync`, `all` (default).\n\nIn agent mode (`--agent`), the JSON response includes the guide content and an `availableTopics` array so agents can discover what sections exist.\n\n### `one flow create [key]`\n\nCreate a workflow from a JSON definition. New workflows are always saved to the folder layout at `.one/flows/\u003ckey\u003e/flow.json` (with a `lib/` subfolder scaffolded for code modules). Use `group/key` to place flows in a subdirectory group (e.g. `.one/flows/research/company-research/flow.json`). The legacy `.one/flows/\u003ckey\u003e.flow.json` single-file layout is deprecated; existing legacy files continue to load and run unchanged for backward compatibility.\n\n```bash\n# From a --definition flag\none flow create welcome-customer --definition '{\"key\":\"welcome-customer\",\"name\":\"Welcome\",\"version\":\"1\",\"inputs\":{},\"steps\":[]}'\n\n# Create in a subdirectory group\none flow create research/company-research --definition @flow.json\n\n# From stdin\ncat flow.json | one flow create\n\n# Custom output path\none flow create my-flow --definition '...' -o ./custom/path.json\n```\n\n| Option | What it does |\n|--------|-------------|\n| `--definition \u003cjson\u003e` | Workflow definition as a JSON string |\n| `-o, --output \u003cpath\u003e` | Custom output path (default: `.one/flows/\u003ckey\u003e/flow.json`) |\n\n### `one flow execute \u003ckey\u003e`\n\nExecute a workflow by key or file path. Pass inputs with repeatable `-i` flags.\n\n```bash\n# Execute with inputs\none flow execute welcome-customer \\\n  -i customerEmail=jane@example.com\n\n# Dry run - validate and show plan without executing\none flow execute welcome-customer --dry-run -i customerEmail=jane@example.com\n\n# Verbose - show each step as it runs\none flow execute welcome-customer -v -i customerEmail=jane@example.com\n```\n\nConnection inputs with a `connection` field in the workflow definition are auto-resolved when the user has exactly one connection for that platform.\n\nPress Ctrl+C during execution to pause - the run can be resumed later with `one flow resume \u003crunId\u003e`.\n\n| Option | What it does |\n|--------|-------------|\n| `-i, --input \u003cname=value\u003e` | Input parameter (repeatable) |\n| `--dry-run` | Validate and show execution plan without running |\n| `--mock` | With `--dry-run`: execute transforms/code with realistic mock API responses |\n| `--skip-validation` | Skip input validation against action schemas |\n| `--allow-bash` | Allow bash step execution (disabled by default for security) |\n| `-v, --verbose` | Show full request/response for each step |\n\n### `one flow list`\n\nList all workflows saved in `.one/flows/`.\n\n```bash\none flow list\n```\n\n### `one flow validate \u003ckey\u003e`\n\nValidate a workflow JSON file against the schema.\n\n```bash\none flow validate welcome-customer\n```\n\n### `one flow resume \u003crunId\u003e`\n\nResume a paused or failed workflow run from where it left off.\n\n```bash\none flow resume abc123\n```\n\n### `one flow runs [flowKey]`\n\nList workflow runs, optionally filtered by workflow key.\n\n```bash\none flow runs                    # all runs\none flow runs welcome-customer   # runs for a specific workflow\n```\n\n### `one config`\n\nConfigure access control for the MCP server. Optional - full access is the default.\n\n```bash\none config\n```\n\n| Setting | Options | Default |\n|---------|---------|---------|\n| Permission level | `admin` / `write` / `read` | `admin` |\n| Connection scope | All or specific connections | All |\n| Action scope | All or specific action IDs | All |\n| Knowledge-only mode | Enable/disable execution | Off |\n\nSettings propagate automatically to all installed agent configs.\n\n#### `one config skills status` / `one config skills sync`\n\n`one init` copies the packaged skill files (`SKILL.md`, `references/`) into `~/.agents/skills/one/` and symlinks per-agent paths to that canonical directory. When the CLI self-updates, the skill files in the canonical dir would normally stay frozen at the version that was installed. To prevent stale docs, every CLI command checks a `.one-cli-version` marker in the canonical dir and silently refreshes the skill files if they don't match the running CLI version. No user action required.\n\n| Command | What it does |\n|---------|--------------|\n| `one config skills status` | Show installed skill version, current CLI version, and path |\n| `one config skills sync` | Force a re-copy of packaged skill files (for troubleshooting) |\n\nAuto-sync refuses to resurrect skills if you opted out of skill installation during `one init` — the canonical dir has to already exist.\n\n### Project config (`.onerc`)\n\nDrop a `.onerc` file in your project root to override global settings per-project. Simple `KEY=VALUE` format; `#` for comments. Read from the current working directory (no parent lookup).\n\n| Key | Purpose |\n|-----|---------|\n| `ONE_SECRET` | API key (also honored as env var) |\n| `ONE_API_BASE` | API base URL (also honored as env var) |\n| `ONE_PERMISSIONS` | `admin` / `write` / `read` |\n| `ONE_CONNECTION_KEYS` | Comma-separated connection-key allowlist |\n| `ONE_ACTION_IDS` | Comma-separated action-ID allowlist |\n| `ONE_KNOWLEDGE_AGENT` | `true` / `false` — knowledge-only mode |\n\nPrecedence: env var \u003e `.onerc` \u003e `~/.one/config.json`.\n\n```bash\n# .onerc\nONE_SECRET=sk_live_xxx\nONE_API_BASE=https://development-api.withone.ai\nONE_PERMISSIONS=read\n```\n\n\u003e ⚠️ **Add `.onerc` to your `.gitignore`.** If you put `ONE_SECRET` in it, committing the file will leak your API key. Treat `.onerc` like `.env` — never check it in.\n\n## The workflow\n\nThe power of One is in the workflow. Every interaction follows the same pattern:\n\n```\none list                    → What am I connected to?\none actions search          → What can I do?\none actions knowledge       → How do I do it?\none actions execute         → Do it.\n```\n\nThis is the same workflow whether you're sending emails, creating CRM contacts, processing payments, managing inventory, or posting to Slack. One pattern, any platform.\n\nFor multi-step workflows that chain actions across platforms:\n\n```\none actions knowledge       → Learn each action's schema\none flow create             → Define the workflow as JSON\none flow validate           → Check it\none flow execute            → Run it\n```\n\nWorkflows support conditions, loops, while loops, parallel execution, transforms, code steps, sub-flows, pagination, bash steps, and file I/O. Run `one guide flows` for the full schema reference and examples.\n\n## For AI agents\n\nIf you're an AI agent with only the `one` binary (no MCP server or IDE skills), start with `one --agent guide` to get the full usage guide as structured JSON. This teaches you the complete workflow, JSON schemas, selector syntax, and more - everything you need to bootstrap yourself.\n\nIf you're an AI agent using the One MCP server, the tools map directly:\n\n| MCP Tool | CLI Command |\n|----------|------------|\n| `list_one_integrations` | `one list` + `one platforms` |\n| `search_one_platform_actions` | `one actions search` |\n| `get_one_action_knowledge` | `one actions knowledge` |\n| `execute_one_action` | `one actions execute` |\n\nThe workflow is the same: list → search → knowledge → execute. Never skip the knowledge step - it contains required parameter info and platform-specific details that are critical for building correct requests.\n\n## MCP server installation\n\n`one init` handles this automatically. Here's where configs go:\n\n| Agent | Global | Project |\n|-------|--------|---------|\n| Claude Code | `~/.claude.json` | `.mcp.json` |\n| Claude Desktop | Platform-specific app support dir | - |\n| Cursor | `~/.cursor/mcp.json` | `.cursor/mcp.json` |\n| Windsurf | `~/.codeium/windsurf/mcp_config.json` | - |\n| Codex | `~/.codex/config.toml` | `.codex/config.toml` |\n| Kiro | `~/.kiro/settings/mcp.json` | `.kiro/settings/mcp.json` |\n\nProject configs can be committed to your repo. Each team member runs `one init` with their own API key.\n\n## Development\n\n```bash\nnpm run dev        # watch mode\nnpm run build      # production build\nnpm run typecheck  # type check\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwithoneai%2Fcli","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwithoneai%2Fcli","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwithoneai%2Fcli/lists"}