{"id":"7248232a-eb87-4014-b770-5c63a95dcd86","entityType":"agent","slug":"clawhub-markoa-operately-cli","name":"Operately CLI","canonicalUrl":"https://www.xpersona.co/agent/clawhub-markoa-operately-cli","canonicalPath":"/agent/clawhub-markoa-operately-cli","generatedAt":"2026-10-10T21:39:03.673Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T16:16:11.136Z","emptyReason":null},"description":"Skills for working with Operately, the open source system for running goals and projects. Manage Operately from the CLI: goals, OKRs, projects, tasks, milestones, spaces, documents, discussions, check-ins, reviews, assignments, people, permissions, and documents.","descriptionLabel":"Source description","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.3K downloads reported by the source. Last updated 10/10/2026.","installCommand":"clawhub skill install s17ajffj868ejjyf86vawgyk5n84cg00:operately-cli","sourceUrl":"https://clawhub.ai/markoa/operately-cli","homepage":"https://clawhub.ai/markoa/skills/operately-cli","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/markoa/operately-cli","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/markoa/skills/operately-cli","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":63,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"Operately CLI technical dossier on Xpersona with agent coverage, OPENCLEW support, and live trust metadata."},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-10T16:16:11.136Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T16:16:11.136Z","emptyReason":null},"stars":null,"forks":null,"downloads":1343,"packageName":null,"latestVersion":"1.9.0","tractionLabel":"1.3K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T16:16:10.672Z","emptyReason":null},"lastUpdatedAt":"2026-10-10T16:16:11.136Z","lastCrawledAt":"2026-10-10T16:16:10.672Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-11T16:16:10.672Z","lastVerifiedAt":null,"highlights":[{"version":"1.9.0","createdAt":"2026-09-21T11:48:09.772Z","changelog":"**Major update with new features and documentation improvements:** - Added support for project templates, with commands for listing templates and creating projects from templates. - Introduced full-text search capabilities for companies and Docs & Files. - Enabled document version history restoration with a new restore command. - Updated documentation to include new workflows for project templates and search. - Added `references/project-template-workflows.md` and removed obsolete `skill-card.md`.","fileCount":12,"zipByteSize":50495},{"version":"1.4.0","createdAt":"2026-07-27T16:15:02.572Z","changelog":"- Adds Docs & Files (documents and file upload) support, replacing Resource Hubs. - Updates relevant commands for uploading, listing, and creating documents and files. - Removes references to resource hubs and updates documentation accordingly. - Increases version to 1.4.0.","fileCount":11,"zipByteSize":45327},{"version":"1.2.0","createdAt":"2026-05-15T12:33:03.509Z","changelog":"Version 1.2.0 - Added commands for managing profile pictures: set with `operately people update_picture --avatar-file` and remove with `--clear` - Introduced file upload support: create files in resource hubs with `operately files create` - Updated Quick Reference to include new profile picture and file management commands","fileCount":11,"zipByteSize":43892},{"version":"1.1.0","createdAt":"2026-05-13T08:55:09.352Z","changelog":"Version 1.1.0 - Added detailed documentation for all authentication flows, including login, signup, joining companies, and profile management. - Expanded the CLI quick reference to cover new auth commands and usage patterns. - Introduced guidance and examples for agent-friendly (non-interactive/automated) authentication. - Clarified the preferred and safest CLI usage options for headless and CI environments. - Added a new reference file: references/auth-flows.md.","fileCount":10,"zipByteSize":41151},{"version":"1.0.0","createdAt":"2026-04-24T10:10:07.494Z","changelog":"Operately CLI skill v1.0.0 – Initial release. - Provides CLI management for Operately workspaces, including goals, OKRs, projects, tasks, documents, and more. - Supports authentication via profile, environment variables, or per-command flags. - Guides installing, verifying, and logging in to the Operately CLI. - Includes detailed quick-reference for core commands and usage patterns. - Documents access level flags and markdown support for content fields.","fileCount":9,"zipByteSize":30934}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s17ajffj868ejjyf86vawgyk5n84cg00:operately-cli","setupComplexity":"low","setupSteps":["Install using `clawhub skill install s17ajffj868ejjyf86vawgyk5n84cg00:operately-cli` in an isolated environment before connecting it to live workloads.","No published capability contract is available yet, so validate auth and request/response behavior manually.","Review the upstream CLAWHUB listing at https://clawhub.ai/markoa/operately-cli before using production credentials."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-markoa-operately-cli/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-markoa-operately-cli/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-markoa-operately-cli/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-markoa-operately-cli/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-markoa-operately-cli/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-markoa-operately-cli/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-10T21:39:03.668Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-markoa-operately-cli/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-markoa-operately-cli/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-markoa-operately-cli/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-markoa-operately-cli/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T16:16:11.136Z","emptyReason":null},"readme":"Skill: Operately CLI\n\nOwner: markoa\n\nSummary: Skills for working with Operately, the open source system for running goals and projects. Manage Operately from the CLI: goals, OKRs, projects, tasks, milestones, spaces, documents, discussions, check-ins, reviews, assignments, people, permissions, and documents.\n\nTags: latest:1.9.0\n\nVersion history:\n\nv1.9.0 | 2026-09-21T11:48:09.772Z | user\n\n**Major update with new features and documentation improvements:**\n\n- Added support for project templates, with commands for listing templates and creating projects from templates.\n- Introduced full-text search capabilities for companies and Docs & Files.\n- Enabled document version history restoration with a new restore command.\n- Updated documentation to include new workflows for project templates and search.\n- Added `references/project-template-workflows.md` and removed obsolete `skill-card.md`.\n\nv1.4.0 | 2026-07-27T16:15:02.572Z | user\n\n- Adds Docs & Files (documents and file upload) support, replacing Resource Hubs.\n- Updates relevant commands for uploading, listing, and creating documents and files.\n- Removes references to resource hubs and updates documentation accordingly.\n- Increases version to 1.4.0.\n\nv1.2.0 | 2026-05-15T12:33:03.509Z | user\n\nVersion 1.2.0\n\n- Added commands for managing profile pictures: set with `operately people update_picture --avatar-file` and remove with `--clear`\n- Introduced file upload support: create files in resource hubs with `operately files create`\n- Updated Quick Reference to include new profile picture and file management commands\n\nv1.1.0 | 2026-05-13T08:55:09.352Z | user\n\nVersion 1.1.0\n\n- Added detailed documentation for all authentication flows, including login, signup, joining companies, and profile management.\n- Expanded the CLI quick reference to cover new auth commands and usage patterns.\n- Introduced guidance and examples for agent-friendly (non-interactive/automated) authentication.\n- Clarified the preferred and safest CLI usage options for headless and CI environments.\n- Added a new reference file: references/auth-flows.md.\n\nv1.0.0 | 2026-04-24T10:10:07.494Z | user\n\nOperately CLI skill v1.0.0 – Initial release.\n\n- Provides CLI management for Operately workspaces, including goals, OKRs, projects, tasks, documents, and more.\n- Supports authentication via profile, environment variables, or per-command flags.\n- Guides installing, verifying, and logging in to the Operately CLI.\n- Includes detailed quick-reference for core commands and usage patterns.\n- Documents access level flags and markdown support for content fields.\n\nArchive index:\n\nArchive v1.9.0: 12 files, 50495 bytes\n\nFiles: references/assignments-and-reviews.md (6881b), references/auth-flows.md (25659b), references/collaboration-patterns.md (15250b), references/docs-and-files.md (16184b), references/goal-workflows.md (11489b), references/project-template-workflows.md (9725b), references/project-workflows.md (11504b), references/space-workflows.md (15717b), references/task-workflows.md (18422b), skill-card.md (2654b), SKILL.md (40530b), _meta.json (132b)\n\nFile v1.9.0:SKILL.md\n\n---\nname: operately-cli\ndescription: >\n  Manage Operately from the CLI: goals, OKRs, projects, project templates,\n  tasks, milestones, spaces, documents, discussions, check-ins, reviews,\n  assignments, people, permissions, full-text search, document history, and\n  Docs & Files. Use when operating an Operately workspace, automating\n  startup/company operations, updating project status, tracking goal progress,\n  managing async execution, or working with the open source company operating\n  system.\nversion: 1.9.0\nmetadata:\n  openclaw:\n    requires:\n      bins:\n        - operately\n    env:\n      - name: OPERATELY_API_TOKEN\n        description: API token for environment-based Operately CLI authentication.\n        required: false\n        sensitive: true\n      - name: OPERATELY_BASE_URL\n        description: Optional Operately API base URL for self-hosted, staging, or local instances.\n        required: false\n        sensitive: false\n      - name: OPERATELY_PROFILE\n        description: Optional saved Operately CLI profile name to use.\n        required: false\n        sensitive: false\n    primaryEnv: OPERATELY_API_TOKEN\n    emoji: \"📋\"\n    homepage: https://github.com/operately/skills\n    install:\n      - kind: node\n        package: \"@operately/operately-cli\"\n        bins:\n          - operately\n---\n\n# Operately CLI\n\nOperate an Operately instance through the `operately` CLI.\n\n## Quick Reference\n\n| Task | Command |\n| --- | --- |\n| Install CLI | `npm install -g @operately/operately-cli` |\n| Login | `operately auth login --token <token>` |\n| Interactive login | `operately auth login` |\n| Login with flags | `operately auth login --method email-password --email user@example.com --password secret123456 --company-id <company-id> --access-mode full-access --profile work` |\n| Sign up | `operately auth signup` |\n| Sign up with flags | `operately auth signup --method email-password --full-name \"New User\" --email newuser@example.com --password secret123456 --next-step later` |\n| Join Company | `operately auth join` |\n| Join Company with flags | `operately auth join --invite-token <token> --method email-password --email user@example.com --password secret123456` |\n| Create company | `operately auth create-company` |\n| Create company with flags | `operately auth create-company --method email-password --email user@example.com --password secret123456 --company-name \"Acme Corp\" --profile work` |\n| List saved profiles | `operately auth profiles` |\n| Auth status (local config) | `operately auth status` |\n| Who am I | `operately auth whoami` |\n| Logout | `operately auth logout` |\n| Set profile picture | `operately people update_picture --avatar-file ./avatar.png` |\n| Remove profile picture | `operately people update_picture --clear` |\n| Upload file to Docs & Files | `operately documents create_file --space-id <id> --file ./report.pdf` |\n| List my assignments | `operately people list_assignments` |\n| List projects | `operately projects list` |\n| Get project | `operately projects get --id <id> --include-space` |\n| Create project | `operately projects create --space-id <id> --name \"Q2 Roadmap\" --anonymous-access-level 0 --company-access-level 10 --space-access-level 70` |\n| List goals | `operately goals list` |\n| Create goal | `operately goals create --space-id <id> --name \"Revenue Goal\" --anonymous-access-level 0 --company-access-level 10 --space-access-level 70` |\n| List tasks | `operately tasks list --project-id <id>` |\n| Create task | `operately tasks create --type project --id <project-id> --name \"Design mockups\" --milestone-id <id> --assignee-id null --due-date <date>` |\n| List spaces | `operately spaces list` |\n| Create document | `operately documents create_document --space-id <id> --name \"Guide\" --content \"# Guide\"` |\n| List Docs & Files contents | `operately documents list_contents --space-id <id>` |\n| List project templates | `operately project_templates list --space-id <id>` |\n| Create project from template | `operately project_templates create_project --template-id <id> --space-id <id> --start-date <date> --name \"...\" --anonymous-access-level 0 --company-access-level 10 --space-access-level 70` |\n| Full-text search | `operately companies search --query \"...\"` |\n| Search Docs & Files | `operately documents search --space-id <id> --query \"...\"` |\n| Restore document version | `operately documents restore_document_version --document-id <id> --version-number <n>` |\n\n## Verify CLI Is Installed\n\nBefore any CLI operation, confirm the CLI is available:\n\n```bash\n operately --version\n```\n\nIf this does not print the version number, the CLI is **not installed**. Stop and tell the user:\n\n> The Operately CLI is not installed. Install it with `npm install -g @operately/operately-cli` and then re-run this task.\n\nDo **not** attempt to install the CLI on behalf of the user. Do **not** continue without a working CLI.\n\nThis skill documents **Operately CLI 1.9.0** (`@operately/operately-cli`). If `operately --version` reports an older release, ask the user to run `npm update -g @operately/operately-cli` before template, search, or document-history workflows.\n\nOnly after confirming the binary exists should you verify the session:\n\n```bash\noperately auth whoami\n```\n\nInterpret failures carefully:\n- `command not found` from `whoami` still means the CLI is missing.\n- Authentication or connection errors mean the CLI exists but the current session cannot reach Operately yet. Tell the user the CLI is installed but the session/auth is not working, and ask them to login.\n\n## Core Workflow\n\n### 1. Authenticate\n\nPrefer direct token login for automation, CI, or any non-interactive task. Generate an API token in the Operately UI at **Profile → API Tokens**, then:\n\n```bash\noperately auth login --token <your-token>\noperately auth whoami\n```\n\n**Important:** If you don't specify `--base-url` when logging in, the CLI defaults to `https://app.operately.com`. For self-hosted or staging environments, always provide the `--base-url` flag:\n\n```bash\n# Self-hosted instance\noperately auth login --token <token> --base-url https://operately.yourcompany.com\n\n# Check current base URL\noperately auth whoami\n```\n\n### Auth Flow Rules For Agents\n\n- `operately auth login --token <token>` is the safest path for automation and headless work. It validates the token and saves a profile without using the interactive bootstrap flow.\n- If an agent must use `operately auth login` without an existing token, prefer passing all known login data as flags so the CLI only asks for the unavoidable manual steps.\n- The two unavoidable manual login steps are: Google login browser confirmation, and email-code login verification-code entry from the user's email.\n- If an agent must use `operately auth signup`, prefer passing all known signup data as flags so the CLI only asks for the unavoidable manual steps.\n- The two unavoidable manual signup steps are: Google signup browser confirmation, and email/password signup verification-code entry from the user's email.\n- All `operately auth ...` commands are handcrafted in `cli/src/auth/`, with the per-flow modules under `cli/src/auth/flows/`. They are not generated from backend `external_endpoints`, even though the rest of the CLI command surface is generated.\n- Use interactive auth commands only when a human can answer prompts. For Google flows, also assume a browser is required.\n- `operately auth profiles` and `operately auth status` only report local CLI config state. They do not prove the saved token is valid. Use `operately auth whoami` when you need remote verification.\n- If the task involves choosing between login, signup, join, invite handling, or understanding which backend/internal endpoints the CLI will hit, read `references/auth-flows.md` before acting.\n\n### Agent-Friendly Login Examples\n\nPrefer these over the fully interactive bootstrap flow when the necessary details are already known:\n\n```bash\n# Password login: fully flag-driven when company and access mode are known\noperately auth login \\\n  --method email-password \\\n  --email user@example.com \\\n  --password secret123456 \\\n  --company-id <company-id> \\\n  --access-mode full-access \\\n  --profile work\n\n# Email-code login: only the emailed verification code remains manual\noperately auth login \\\n  --method email-code \\\n  --email user@example.com \\\n  --company-name \"Acme Corp\" \\\n  --access-mode read-only\n\n# Google login: browser confirmation remains manual\noperately auth login \\\n  --method google \\\n  --company-name \"Acme Corp\" \\\n  --access-mode full-access\n```\n\n### Agent-Friendly Signup Examples\n\nPrefer these over the fully interactive signup flow when the necessary details are already known:\n\n```bash\n# Email/password signup: only the emailed verification code remains manual\noperately auth signup \\\n  --method email-password \\\n  --full-name \"New User\" \\\n  --email newuser@example.com \\\n  --password secret123456 \\\n  --next-step later\n\n# Google signup: browser confirmation remains manual\noperately auth signup \\\n  --method google \\\n  --next-step later\n```\n\n### Authentication Options\n\nThree ways to provide authentication:\n\n1. **Saved profile** (recommended for local use):\n   ```bash\n   operately auth login --token <token>\n   ```\n\n2. **Environment variables** (best for CI/scripts):\n   ```bash\n   export OPERATELY_API_TOKEN=op_live_xxx\n   export OPERATELY_BASE_URL=https://app.operately.com\n   export OPERATELY_PROFILE=default\n   ```\n\n3. **Per-command flags** (temporary overrides):\n   ```bash\n   operately people get_me --token <token> --base-url <url>\n   ```\n\nPriority: command flags > environment variables > saved profile.\n\n### Multiple Environments\n\nUse profiles for different environments:\n\n```bash\n# Production (default)\noperately auth login --token op_live_xxx\n\n# Staging\noperately auth login --token op_staging_xxx --profile staging --base-url https://staging.operately.com\n\n# Local development\noperately auth login --token op_local_xxx --profile local --base-url http://localhost:4000\n```\n\nSwitch profiles:\n```bash\noperately people get_me --profile staging\noperately auth profiles\n```\n\n### Interactive Auth Flow Summary\n\n- `operately auth login` is hybrid for password, email-code, and Google login: with no flags it is fully interactive, but any provided login flags suppress the matching prompts. Google login still requires browser confirmation, and email-code login still requires the emailed verification code. If no `--method` flag is provided, the interactive menu still includes prompted token entry as an option.\n- `operately auth signup` is hybrid: with no flags it is fully interactive, but any provided signup flags suppress the matching prompts. Google signup still requires browser confirmation, and email/password signup still requires the emailed verification code.\n- `operately auth create-company` is hybrid: with no flags it is fully interactive, but any provided flags suppress the matching prompts. It authenticates with email/password, email code, or Google OAuth, then creates a company and saves a full-access profile.\n- `operately auth join` is hybrid: with no flags it is fully interactive, but any provided flags suppress the matching prompts. It starts from an invite token and routes differently for personal invites vs company-wide invites.\n- When an interactive flow needs a profile name and `--profile` is not provided, the CLI prompts with the current active profile as the default; blank input accepts that default.\n- In bootstrap login flows, the CLI usually exchanges a short-lived bootstrap token for a company-scoped API token and then saves the resulting profile.\n- The detailed decision tree, prompt behavior, and endpoint mapping live in `references/auth-flows.md`.\n\n**Method prerequisites — confirm access BEFORE choosing a method:**\n\n| Method | Required access |\n|---|---|\n| `--token` | The API token itself |\n| `email-password` (login) | Email address AND password |\n| `email-password` (signup) | Email address AND inbox access (a code is sent during signup) |\n| `email-code` | Email address AND inbox access (a code is sent and must be read) |\n| `google` | Browser access for the OAuth confirmation step |\n\n- **Never choose Google OAuth** in headless, CI, or automated contexts — it always requires a human to confirm in the browser.\n- **Never choose email-code** without confirmed inbox access — a code is always sent and must be entered.\n- **Always pass known values as flags** (`--method`, `--email`, `--password`, `--company-name`, etc.) to suppress every prompt that can be suppressed. Only leave a step interactive when it is truly unavoidable (browser confirmation or entering an emailed code).\n\n### 2. Command Structure\n\nCommands follow the API endpoint naming:\n\n```bash\noperately <namespace> <endpoint_name> [flags]\n```\n\nExamples:\n```bash\noperately people get_me\noperately people update_picture --avatar-file path-to-avatar-file\noperately projects list\noperately goals create --name \"Q2 Revenue Goal\" --space-id s1 --anonymous-access-level 0 --company-access-level 10 --space-access-level 70\noperately tasks update_status --task-id t1 --type project --status.id done --status.label \"Done\" --status.color green --status.index 2 --status.value done --status.closed true\noperately documents create_file --space-id s1 --file path-to-file\n```\n\n### 3. Input Flags\n\nFlags map to API fields using kebab-case:\n\n**Simple values:**\n```bash\noperately projects update_name --project-id p1 --name \"New Name\"\n```\n\n**Booleans:**\n```bash\noperately projects get --id p1 --include-space\noperately projects get --id p1 --include-space=true\n```\n\n**Include flags (`--include-*`)**\n\nInclude flags request extra related data or expanded result sets in the response. If an include flag is omitted, that data is **not returned**, but that does **not** mean the underlying resource does not have it. It means the CLI/API did not preload it.\nIf the matching include flag was requested and the field is still missing, then treat that as the resource/data not existing for that object.\n\nExamples:\n- `operately projects get --id p1` will return the base project without `space`, `milestones`, or `contributors`.\n- `operately projects get --id p1 --include-space --include-milestones` requests those fields explicitly.\n- `operately projects get --id p1 --include-subscription-list` is required before using notification subscription commands that need the `subscription_list`.\n\nWhen reading CLI help:\n- Keep the flat `Input flags:` list in mind.\n- If help ends with `Include flag behavior:`, treat the listed resources as opt-in fields.\n- Do not infer “no milestones”, “no contributors”, or similar conclusions just because the field is missing from a response unless the matching include flag was requested.\n\n**Nulls:**\n```bash\noperately goals update_due_date --goal-id g1 --due-date null\n```\n\n**Arrays** (repeat the flag):\n```bash\noperately notifications mark_many_as_read --ids n1 --ids n2\n```\n\n**Nested objects** (dot-index notation):\n```bash\noperately projects update_task_statuses \\\n  --project-id p1 \\\n  --task-statuses.0.id ts1 \\\n  --task-statuses.0.label \"To Do\" \\\n  --task-statuses.1.id ts2 \\\n  --task-statuses.1.label \"Done\"\n```\n\n**Markdown content:**\n\nMany commands accept markdown content (documents, descriptions, check-ins, discussions). For anything beyond a single short sentence, **use file input** (`--<field>-file <path>`) instead of inline strings. File input preserves formatting perfectly without shell escaping issues.\n\n**Recommended: file input for multiline content**\n\n```bash\n# Write content to a temp file, then pass the path\ncat > /tmp/description.md << 'EOF'\n# Q2 Roadmap\n\n## Goals\n\n1. Launch new feature\n2. Improve performance\n\n## Timeline\n\n- **May:** Design phase\n- **June:** Development\n- **July:** Launch\nEOF\n\noperately projects update_description \\\n  --project-id p1 \\\n  --description-file /tmp/description.md\n\n# Discussion with rich formatting\ncat > /tmp/post.md << 'EOF'\nHey team. Here's the weekly update:\n\n- Shipped the new landing page\n- Fixed 3 bugs in check-in flow\n- Started work on notifications\n\nNext week we focus on **goal reviews**.\nEOF\n\noperately spaces create_discussion \\\n  --space-id s1 \\\n  --title \"Weekly Update\" \\\n  --body-file /tmp/post.md\n\n# Document creation\noperately documents create_document \\\n  --space-id s1 \\\n  --name \"API Documentation\" \\\n  --content-file ./api-docs.md\n```\n\n**File input flag pattern:** For any flag that accepts markdown, append `-file` to use a file path instead:\n- `--body` → `--body-file <path>`\n- `--description` → `--description-file <path>`\n- `--content` → `--content-file <path>`\n\n**Inline strings (for short, single-line content only):**\n\n```bash\n# Only use inline --body/--content/--description for simple one-liners\noperately documents create_document \\\n  --space-id s1 \\\n  --name \"Quick Note\" \\\n  --content \"A short note with **bold** text.\"\n\n# Use \\n for line breaks in inline strings (fragile, not recommended for complex content)\noperately projects update_description \\\n  --project-id p1 \\\n  --description \"# Title\\n\\nOne paragraph.\"\n```\n\n**Binary file uploads:**\n\nSome commands accept a real local file path and upload the bytes, not just markdown content:\n\n```bash\n# Update your profile picture from a local image\noperately people update_picture --avatar-file ./avatar.png\n\n# Remove your profile picture\noperately people update_picture --clear\n\n# Upload one file into Docs & Files\noperately documents create_file \\\n  --space-id s1 \\\n  --file ./quarterly-report.pdf\n\n# Upload one file into a folder\noperately documents create_file \\\n  --space-id s1 \\\n  --folder-id f1 \\\n  --file ./quarterly-report.pdf \\\n  --name \"Quarterly Report\" \\\n  --description-file ./quarterly-report.md\n```\n\nRules for file inputs:\n- `people update_picture` accepts `--avatar-file <path>` to upload or `--clear` to remove the current picture.\n- `documents create_file` accepts exactly one `--file <path>` per command.\n- `documents create_file --name` overrides the base filename while preserving the source extension.\n- `--description-file <path>` still means \"load markdown from disk\"; the uploaded binary stays on `--file <path>`.\n- Do not try to create blobs manually first. These commands already handle blob creation, upload, preview generation, and finalization.\n\nSupported markdown:\n- Headings: `# H1`, `## H2`, `### H3`\n- Bold: `**text**`, Italic: `*text*`\n- Lists: `- item` or `1. item`\n- Links: `[text](url)`\n- Code: `` `inline` `` or `` ```block``` ``\n- Line breaks: `\\n` (inline only; files handle this naturally)\n\n**Access Levels:**\n\nMany create commands require access level parameters to control who can view and interact with resources:\n\n- `--anonymous-access-level` - Access for non-authenticated users (not supported yet, always use `0`)\n- `--company-access-level` - Access for company members\n- `--space-access-level` - Access for space members\n\n**Access level values:**\n- `0` - No access\n- `10` - View only\n- `40` - Comment\n- `70` - Edit\n- `100` - Full access\n\n**Common pattern for team resources:**\n```bash\n--anonymous-access-level 0 \\\n--company-access-level 10 \\\n--space-access-level 70\n```\n\n**Note:** Get commands use generic `--id` parameter, while create/update commands use entity-specific IDs like `--project-id`, `--goal-id`, etc.\n\n### 4. Output Options\n\n```bash\n# Pretty JSON (default)\noperately people get_me\n\n# Compact JSON\noperately people get_me --compact\n\n# Save to file\noperately projects get --id p1 --output ./project.json\n\n# Verbose mode (shows request details)\noperately people get_me --verbose\n```\n\n## Available Namespaces\n\nThe CLI provides access to the external API across these namespaces:\n\n- **comments** - Comment management on live resources\n- **companies** - Company settings, members, permissions, search\n- **documents** - Docs & Files: documents, files, links, folders, search, version history\n- **goals** - Goal management, check-ins, targets\n- **notifications** - Notification preferences and subscriptions\n- **people** - User and team member management, including profile picture updates\n- **project_templates** - Reusable project blueprints (library, plan, contributors, template Docs & Files)\n- **projects** - Project management, milestones, check-ins, contributors\n- **reactions** - Emoji reactions to content\n- **spaces** - Space (team/department) management\n- **tasks** - Task management across projects and spaces\n\nThe CLI also exposes a **kpis** namespace; this skill does not document KPI workflows.\n\n## Assignments and Reviews\n\nGet all items requiring your attention or review with a single command:\n\n```bash\noperately people list_assignments\n```\n\nThis returns assignments categorized into three groups:\n\n- **`due_soon`** - Items you own that are overdue, due today, or due soon\n- **`needs_review`** - Items where you are the reviewer (check-ins, retrospectives) awaiting acknowledgment\n- **`upcoming`** - Items you own with future due dates\n\nEach category contains groups of assignments organized by their origin (project, goal, or space). Assignments include:\n\n- **Milestones** - Project milestones you own\n- **Tasks** - Project and space tasks assigned to you\n- **Projects** - Projects you own or are reviewing\n- **Goals** - Goals you own or are reviewing\n- **Check-ins** - Project and goal check-ins requiring your review\n- **Retrospectives** - Closed project/goal retrospectives requiring your review\n\nThe response structure groups related items together and sorts by urgency, making it easy to prioritize your work. Items needing review show the author's name and what action is required.\n\n**See:** `references/assignments-and-reviews.md` for detailed examples, filtering techniques, and integration workflows.\n\n## Projects\n\n### Create Project\n\n```bash\noperately projects create \\\n  --space-id s1 \\\n  --name \"Q2 Product Roadmap\" \\\n  --anonymous-access-level 0 \\\n  --company-access-level 10 \\\n  --space-access-level 70\n```\n\n### Get Project\n\n```bash\noperately projects get \\\n  --id p1 \\\n  --include-space \\\n  --include-milestones\n```\n\nIf you omit `--include-space` or `--include-milestones`, those fields will be absent from the response even when the project has a space or milestones. Missing included data usually means “not preloaded,” not “does not exist.”\n\n### Update Project\n\n```bash\noperately projects update_name --project-id p1 --name \"Q2 Roadmap\"\noperately projects update_description --project-id p1 --description \"# Overview\\n\\nQ2 goals...\"\noperately projects update_due_date --project-id p1 --due-date 2024-06-30\n```\n\n### Milestones\n\n```bash\n# Create milestone\noperately projects create_milestone \\\n  --project-id p1 \\\n  --name \"Launch\" \\\n  --due-date 2024-06-30\n\n# List milestones\noperately projects list_milestones --project-id p1\n\n# Update milestone\noperately projects update_milestone_title \\\n  --milestone-id m1 \\\n  --title \"Public Launch\"\n\noperately projects update_milestone_due_date \\\n  --milestone-id m1 \\\n  --due-date 2024-07-15\n```\n\n### Project Check-ins\n\n```bash\n# Create check-in\noperately projects create_check_in \\\n  --project-id p1 \\\n  --status on_track \\\n  --description \"# Progress\\n\\nCompleted design phase.\"\n  # Publish later instead: add --scheduled-at (see \"Scheduling Posts\")\n\n# List check-ins\noperately projects list_check_ins --project-id p1\n\n# Acknowledge check-in\noperately projects acknowledge_check_in --id ci1\n```\n\n**Editing a published check-in:** you can fully edit only the *latest* project check-in, and only within 72 hours of posting. Outside that window (or for any older check-in), `update_check_in` still saves `--description` but silently ignores `--status` — the call succeeds, so do not assume the status changed.\n\n### Contributors\n\n```bash\n# Add contributor\noperately projects create_contributor \\\n  --project-id p1 \\\n  --person-id u1 \\\n  --responsibility \"Design lead\" \\\n  --permissions edit_access \\\n  --role reviewer\n\n# List contributors\noperately projects list_contributors --project-id p1\n\n# Update contributor\noperately projects update_contributor \\\n  --contrib-id c1 \\\n  --responsibility \"Lead designer and UX researcher\"\n```\n\n## Goals\n\n### Create Goal\n\n```bash\noperately goals create \\\n  --space-id s1 \\\n  --name \"Q2 Revenue Goal\" \\\n  --champion-id u1 \\\n  --reviewer-id u2 \\\n  --anonymous-access-level 0 \\\n  --company-access-level 10 \\\n  --space-access-level 70\n```\n\n### Goal Hierarchy\n\n```bash\n# Create child goal\noperately goals create \\\n  --space-id s1 \\\n  --name \"Increase MRR\" \\\n  --parent-goal-id g1 \\\n  --anonymous-access-level 0 \\\n  --company-access-level 10 \\\n  --space-access-level 70\n\n# Update parent\noperately goals update_parent_goal \\\n  --goal-id g2 \\\n  --parent-goal-id g1\n\n# Search for parent goals\noperately goals search_parent_goal --query \"Revenue\" --goal-id g1\n```\n\n### Targets\n\n```bash\n# Create target\noperately goals create_target \\\n  --goal-id g1 \\\n  --name \"Monthly Revenue\" \\\n  --start-value 50000 \\\n  --target-value 100000 \\\n  --unit \"USD\"\n\n# Update target value\noperately goals update_target_value \\\n  --goal-id g1 \\\n  --target-id t1 \\\n  --value 75000\n```\n\n### Goal Check-ins\n\n```bash\n# Create check-in\noperately goals create_check_in \\\n  --goal-id g1 \\\n  --status on_track \\\n  --due-date 2026-04-01 \\\n  --content \"Making good progress on Q2 targets\"\n  # Publish later instead: add --scheduled-at (see \"Scheduling Posts\")\n\n# List check-ins\noperately goals list_check_ins --goal-id g1\n\n# Acknowledge check-in\noperately goals acknowledge_check_in --id ci1\n```\n\n### Goal Lifecycle\n\n```bash\n# Close goal\noperately goals close \\\n  --goal-id g1 \\\n  --success achieved \\\n  --success-status achieved \\\n  --retrospective \"# Retrospective\\n\\nWe exceeded our target.\"\n\n# Reviewer acknowledges retrospective (authors cannot acknowledge their own)\noperately goals acknowledge_retrospective --goal-id g1\n\n# Reopen goal\noperately goals reopen --id g1 --message \"Reopening after new planning input.\"\n```\n\n## Tasks\n\n### Create Task\n\n```bash\noperately tasks create \\\n  --type project \\\n  --id p1 \\\n  --milestone-id m1 \\\n  --name \"Design mockups\" \\\n  --assignee-id u1 \\\n  --due-date 2024-06-15\n```\n\n**Note:** Tasks require `--type` (\"project\" or \"space\") and `--id` (project or space ID) parameters.\n\n### List Tasks\n\n```bash\noperately tasks list --project-id p1\n```\n\n### Update Task\n\n```bash\n# Update status\noperately tasks update_status --task-id t1 --type project --status.id done --status.label \"Done\" --status.color green --status.index 2 --status.value done --status.closed true\n\n# Update assignee\noperately tasks update_assignee --task-id t1 --type project --assignee-id u2\n\n# Update due date\noperately tasks update_due_date --task-id t1 --type project --due-date 2024-06-20\n\n# Update description\noperately tasks update_description \\\n  --task-id t1 \\\n  --type project \\\n  --description \"# Task Details\\n\\nCreate high-fidelity mockups.\"\n```\n\n### Move Task\n\n```bash\n# Move to different milestone\noperately tasks update_milestone --task-id t1 --milestone-id m2\n\n# Move with ordering\noperately tasks update_milestone_and_ordering \\\n  --task-id t1 \\\n  --milestone-id m2 \\\n  --index 0\n```\n\nFor template blueprint tasks, use `project_templates update_milestone_and_ordering` instead. See [Project Template Workflows](references/project-template-workflows.md).\n\n## Project Templates\n\n```bash\n# List templates in a space\noperately project_templates list --space-id s1\n\n# Create a project from a template\noperately project_templates create_project \\\n  --template-id pt1 \\\n  --space-id s1 \\\n  --start-date 2026-09-01 \\\n  --name \"Q4 Launch\" \\\n  --anonymous-access-level 0 \\\n  --company-access-level 10 \\\n  --space-access-level 70\n```\n\n**See:** `references/project-template-workflows.md` for lifecycle, scheduling offsets, contributors, template Docs & Files, and live-vs-template routing.\n\n## Spaces\n\n### Create Space\n\n```bash\noperately spaces create \\\n  --name \"Engineering\" \\\n  --mission \"Build great products\" \\\n  --company-permissions 10 \\\n  --public-permissions 0\n```\n\n### Manage Members\n\n```bash\n# Add members\noperately spaces add_members \\\n  --space-id s1 \\\n  --members.0.id u1 \\\n  --members.0.access-level 70 \\\n  --members.1.id u2 \\\n  --members.1.access-level 40\n\n# List members\noperately spaces list_members --space-id s1\n\n# Remove member\noperately spaces delete_member --space-id s1 --member-id u1\n\n# Update permissions\noperately spaces update_members_permissions \\\n  --space-id s1 \\\n  --members.0.id u1 \\\n  --members.0.access-level 70\n```\n\n### Space Tools\n\n```bash\n# List available tools\noperately spaces list_tools --space-id s1\n\n# Enable templates only (partial update)\noperately spaces update_tools \\\n  --space-id s1 \\\n  --tools.templates-enabled true\n```\n\n## Docs & Files\n\nSee [Docs & Files Reference](references/docs-and-files.md) for detailed workflows.\n\nEvery space, project, and goal has a Docs & Files hub. Scope hub-level commands with **`--space-id`**, **`--project-id`**, or **`--goal-id`** (mutually exclusive). Do not look up a hub ID via `spaces list_tools` — pass the space, project, or goal ID directly.\n\nFor folder-scoped listing, **`--folder-id` alone** is enough (no space/project ID required).\n\n### Folder Management\n\n```bash\n# Create folder at root\noperately documents create_folder \\\n  --space-id s1 \\\n  --name \"Guides\"\n\n# Create nested folder\noperately documents create_folder \\\n  --space-id s1 \\\n  --folder-id f1 \\\n  --name \"Onboarding\"\n\n# Rename folder\noperately documents rename_folder \\\n  --folder-id f1 \\\n  --new-name \"Team Guides\"\n\n# Move folder\noperately documents update_parent_folder \\\n  --resource-id f2 \\\n  --resource-type \"folder\" \\\n  --new-folder-id f1\n```\n\n### Documents\n\n```bash\n# Create document at root\noperately documents create_document \\\n  --space-id s1 \\\n  --name \"Getting Started\" \\\n  --content \"# Getting Started\\n\\nWelcome to the team.\"\n\n# Create document in folder\noperately documents create_document \\\n  --space-id s1 \\\n  --folder-id f1 \\\n  --name \"Onboarding Guide\" \\\n  --content \"# Onboarding\\n\\nFirst steps...\"\n\n# Update document\noperately documents update_document \\\n  --document-id d1 \\\n  --name \"Updated Guide\" \\\n  --content \"# Updated Content\" \\\n  --expected-version 3\n\n# Publish draft\noperately documents publish_document --document-id d1\n\n# Version history\noperately documents list_document_versions --document-id d1\noperately documents get_document_version --document-id d1 --version-number 2\noperately documents restore_document_version --document-id d1 --version-number 2 --expected-current-version 5\n```\n\n### Links\n\n```bash\n# Create link at root\noperately documents create_link \\\n  --space-id s1 \\\n  --name \"Company Handbook\" \\\n  --url \"https://handbook.example.com\" \\\n  --type \"other\"\n\n# Create link in folder\noperately documents create_link \\\n  --space-id s1 \\\n  --folder-id f1 \\\n  --name \"Design System\" \\\n  --url \"https://design.example.com\" \\\n  --type \"other\" \\\n  --description \"Our design system documentation\"\n```\n\n### File Uploads\n\n```bash\n# Upload file at root\noperately documents create_file \\\n  --space-id s1 \\\n  --file ./report.pdf\n\n# Upload file into a folder\noperately documents create_file \\\n  --project-id p1 \\\n  --folder-id f1 \\\n  --file ./spec.pdf \\\n  --name \"Product Spec\"\n```\n\n### List Contents\n\n```bash\n# List root contents\noperately documents list_contents --space-id s1\n\n# List folder contents\noperately documents list_contents --folder-id f1\n\n# Include metadata\noperately documents list_contents \\\n  --space-id s1 \\\n  --include-comments-count \\\n  --include-children-count\n```\n\n## Discussions\n\n### Create Discussion\n\n```bash\n# Space discussion\noperately spaces create_discussion \\\n  --space-id s1 \\\n  --title \"Q2 Planning\" \\\n  --body \"# Q2 Planning\\n\\nLet's discuss priorities.\"\n  # Publish later instead: add --scheduled-at (see \"Scheduling Posts\")\n\n# Space discussion from a markdown file\noperately spaces create_discussion \\\n  --space-id s1 \\\n  --title \"Q2 Planning\" \\\n  --body-file ./q2-planning.md\n\n# Project discussion\noperately projects create_discussion \\\n  --project-id p1 \\\n  --title \"Architecture Review\" \\\n  --message \"# Architecture\\n\\nProposed changes...\"\n\n# Goal discussion\noperately goals create_discussion \\\n  --goal-id g1 \\\n  --title \"Target Adjustment\" \\\n  --message \"Should we revise our targets?\"\n```\n\n### List Discussions\n\n```bash\noperately spaces list_discussions --space-id s1\noperately projects list_discussions --project-id p1\noperately goals list_discussions --goal-id g1\n```\n\n## Scheduling Posts\n\nGoal check-ins, project check-ins, and **space** discussions can be written now and published later. Add `--scheduled-at <datetime>` when creating them:\n\n- `operately goals create_check_in --scheduled-at ...`\n- `operately projects create_check_in --scheduled-at ...`\n- `operately spaces create_discussion --scheduled-at ...`\n\nScheduling is not available for goal or project discussions.\n\n**Datetime format:** a full ISO-8601 timestamp *with a timezone offset*, and it must be in the future. A date alone (`2026-08-01`) or a time without an offset (`2026-08-01T09:00:00`) is rejected. Offsets are stored as UTC.\n\n```bash\noperately projects create_check_in \\\n  --project-id p1 \\\n  --status on_track \\\n  --description \"Weekly update\" \\\n  --scheduled-at 2026-08-01T09:00:00Z          # UTC\n  # or a local offset, e.g. --scheduled-at 2026-08-01T09:00:00-03:00\n```\n\nA scheduled item stays unpublished (`state: scheduled`) until its time. Before it publishes, use the matching update command (`goals update_check_in`, `projects update_check_in`, `spaces update_discussion`) to change it:\n\n- `--scheduled-at <new datetime>` reschedules it.\n- `--state published` publishes it now; `--state draft` turns it into a draft.\n\n## Comments\n\n**Routing:** Use `comments/*` for live work (projects, goals, spaces, tasks, check-ins, hub docs/files/links). Use `project_templates create_comment`, `update_comment`, and `delete_comment` for comments on template blueprint content only.\n\n```bash\n# Create comment\noperately comments create \\\n  --entity-id e1 \\\n  --entity-type \"project_check_in\" \\\n  --content \"Great progress!\"\n\n# List comments\noperately comments list --entity-id e1 --entity-type \"project_check_in\"\n\n# Update comment\noperately comments update --comment-id c1 --parent-type project_check_in --content \"Updated comment\"\n\n# Delete comment\noperately comments delete --comment-id c1 --parent-type project_check_in\n```\n\n## Notifications\n\n```bash\n# List notifications\noperately notifications list\n\n# Get unread count\noperately notifications get_unread_count\n\n# Mark as read\noperately notifications mark_as_read --id n1\n\n# Mark many as read\noperately notifications mark_many_as_read \\\n  --ids n1 \\\n  --ids n2\n\n# Mark all as read\noperately notifications mark_all_as_read\n\n# Check subscription status (uses resource-id)\noperately notifications is_subscribed \\\n  --resource-id r1 \\\n  --resource-type project\n\n# Get subscription-list-id from the resource first\noperately projects get \\\n  --id r1 \\\n  --include-subscription-list\n\n# Subscribe to resource (uses subscription-list-id from above)\noperately notifications subscribe \\\n  --subscription-list-id <subscription-list-id> \\\n  --type project\n\n# Unsubscribe from subscription list (uses subscription-list-id)\noperately notifications unsubscribe \\\n  --subscription-list-id <subscription-list-id>\n```\n\nIf `subscription_list` is missing from the `projects get` response, do not assume the project lacks one. It means `--include-subscription-list` was omitted and the field was not preloaded.\n\n### Notification Recipients on Mutations\n\nMany content mutations accept `--send-notifications-to-everyone` and repeated `--subscriber-ids` flags (check-ins, documents, discussions, goal close/reopen, etc.). Prefer targeted `--subscriber-ids` over notifying everyone.\n\n## People\n\n```bash\n# Get current user\noperately people get_me\n\n# Get user by ID\noperately people get --id u1\n\n# List people\noperately people list\n\n# Search people\noperately people search --query \"john\"\n\n# Update profile\noperately people update \\\n  --id u1 \\\n  --title \"Senior Engineer\" \\\n  --manager-id u2\n\n# Set profile picture from a local image\noperately people update_picture --avatar-file ./avatar.png\n\n# Remove profile picture\noperately people update_picture --clear\n```\n\n## Company\n\n```bash\n# Get company\noperately companies get\n\n# List companies\noperately companies list\n\n# Get work map\noperately companies get_work_map\n\n# Full-text search (preferred)\noperately companies search --query \"roadmap\" --sort best_match\n\n# Quick/broad lookup\noperately companies quick_search --query \"roadmap\"\noperately companies global_search --query \"roadmap\"\n\n# Create member\noperately companies create_member \\\n  --full-name \"John Doe\" \\\n  --email \"john@example.com\" \\\n  --title \"Engineer\"\n```\n\n## Help System\n\nThe CLI provides built-in help at three levels:\n\n**Namespace-level help** - List all commands in a namespace:\n```bash\noperately <namespace>\noperately <namespace> --help\n```\n\nExamples:\n```bash\noperately projects\noperately goals --help\n```\n\nBoth forms display all available commands within that namespace.\n\n**Command-level help** - Show command description and parameters:\n```bash\noperately <namespace> <command> --help\n```\n\nExamples:\n```bash\noperately projects create --help\noperately goals update_target_value --help\n```\n\nThis displays:\n- Command description\n- All required parameters (marked with `(required)`)\n- All optional parameters\n- Parameter types and formats\n\n**Auth command help** - Show all flags, validation rules, and examples for any `auth` subcommand:\n```bash\noperately auth <command> --help\noperately help auth <command>\n```\n\nExamples:\n```bash\noperately auth login --help\noperately auth join --help\noperately auth create-company --help\noperately auth signup --help\n```\n\nThis displays the full flag list, accepted method aliases, validation rules, and copy-paste examples for that specific auth command. **Always run this before executing an auth command when uncertain about available flags or their constraints.**\n\n**Auth overview help** - List all auth subcommands:\n```bash\noperately auth\noperately help auth\n```\n\n**General help:**\n```bash\noperately help\n```\n\n## Exit Codes\n\n- `0` - Success\n- `1` - Auth precondition not met (e.g., logout attempted when not logged in)\n- `2` - CLI usage/validation error\n- `3` - Missing authentication token/config\n- `4` - API 4xx error (client error)\n- `5` - API 5xx/network/fatal error (server error)\n\n## Troubleshooting\n\n### Authentication Failures\n\nCheck authentication setup:\n```bash\noperately auth profiles\noperately auth status\noperately auth whoami\n```\n\nInterpret them differently:\n- `operately auth profiles` lists saved local profiles, marks the active one, and shows saved metadata/base URLs.\n- `operately auth status` checks whether the CLI has local profile/token config.\n- `operately auth whoami` checks whether the current token actually works against the target Operately instance.\n\nIf token is invalid or expired, login again:\n```bash\noperately auth login --token <new-token>\n```\n\n### Command Not Found\n\nVerify CLI is installed:\n```bash\ncommand -v operately\nnpm list -g @operately/operately-cli\n```\n\nUpdate to latest version:\n```bash\nnpm update -g @operately/operately-cli\noperately --version\n```\n\n### API Errors\n\nUse verbose mode to see request details:\n```bash\noperately projects get --id p1 --verbose\n```\n\nCheck the API response for specific error messages.\n\n### Missing Required Fields\n\nUse help to see required flags:\n```bash\noperately help projects create\n```\n\nRequired fields are marked with `(required)` in the help output.\n\n## When to Use Other Skills\n\nThis is the primary skill for Operately CLI operations. Future skills may include:\n- **operately-automation** - CI/CD integration patterns\n- **operately-reporting** - Analytics and reporting workflows\n\n## References\n\n- [Project Workflows](references/project-workflows.md) - Project lifecycle and milestone management\n- [Project Template Workflows](references/project-template-workflows.md) - Reusable templates and live-vs-template routing\n- [Goal Workflows](references/goal-workflows.md) - OKR patterns and goal tracking\n- [Task Workflows](references/task-workflows.md) - Task management best practices for projects and spaces\n- [Space Workflows](references/space-workflows.md) - Space management, members, tools, and access control\n- [Docs & Files](references/docs-and-files.md) - Knowledge base organization, search, and version history\n- [Collaboration Patterns](references/collaboration-patterns.md) - Team collaboration workflows\n- [Assignments and Reviews](references/assignments-and-reviews.md) - Assignments inbox and review workflows\n\nFile v1.9.0:_meta.json\n\n{\n  \"ownerId\": \"kn7cy7etbrc1nyrcaqw799h4p584c6qm\",\n  \"slug\": \"operately-cli\",\n  \"version\": \"1.9.0\",\n  \"publishedAt\": 1789991289772\n}\n\nFile v1.9.0:references/assignments-and-reviews.md\n\n# Assignments and Reviews\n\nGet items that need your attention or review using the Operately CLI.\n\n## Overview\n\nThe `people list_assignments` command retrieves all assignments and items requiring your attention, organized into three categories based on urgency and your role.\n\n## Basic Usage\n\n```bash\noperately people list_assignments\n```\n\nThis returns all items assigned to you or requiring your review, with no additional parameters needed.\n\n## Response Structure\n\nThe command returns assignments categorized into three groups:\n\n### 1. `due_soon`\nItems you own that require immediate attention:\n- **Overdue** - Past their due date\n- **Due today** - Due on the current date\n- **Due soon** - Due within the next few days\n\n### 2. `needs_review`\nItems where you are the reviewer and need to provide acknowledgment:\n- Project check-ins awaiting review\n- Goal updates requiring acknowledgment\n- Project and goal retrospectives awaiting acknowledgment\n- Milestone completions needing approval\n\n### 3. `upcoming`\nItems you own with future due dates:\n- Tasks and milestones with upcoming deadlines\n- Items without due dates\n\n## Assignment Types\n\nEach assignment includes:\n\n- **`type`** - The kind of item:\n  - `project_check_in` - Project status update\n  - `goal_check_in` - Goal progress update\n  - `project_retrospective` - Closed project retrospective awaiting review\n  - `goal_retrospective` - Closed goal retrospective awaiting review\n  - `milestone` - Project milestone\n  - `project_task` - Task within a project\n  - `space_task` - Task within a space\n  - `goal` - Goal itself\n  - `project` - Project requiring review\n\n- **`role`** - Your relationship to the item:\n  - `owner` - You are responsible for completing it\n  - `reviewer` - You need to review/acknowledge it\n\n- **`origin`** - The parent resource (project, goal, or space) containing this assignment\n\n- **`due_date`** - When the item is due (may be null)\n\n- **`due_status`** - Urgency level: `overdue`, `due_today`, `due_soon`, `upcoming`, or `none`\n\n- **`task_status`** - Current state (for tasks): `pending`, `in_progress`, `done`, etc.\n\n## Grouping\n\nAssignments are grouped by their origin (parent project, goal, or space), making it easy to see all related items together. Within each group, assignments are sorted by urgency, with the most critical items first.\n\n## Example Output Structure\n\n```json\n{\n  \"data\": {\n    \"due_soon\": [\n      {\n        \"origin\": {\n          \"id\": \"project-123\",\n          \"name\": \"Q2 Roadmap\",\n          \"type\": \"project\",\n          \"path\": \"/space/projects/q2-roadmap\",\n          \"space_name\": \"Engineering\"\n        },\n        \"assignments\": [\n          {\n            \"name\": \"Complete API design\",\n            \"type\": \"milestone\",\n            \"role\": \"owner\",\n            \"due_date\": \"2026-04-15\",\n            \"due_status\": \"overdue\",\n            \"due_status_label\": \"Overdue by 2 days\"\n          }\n        ]\n      }\n    ],\n    \"needs_review\": [\n      {\n        \"origin\": {\n          \"id\": \"goal-456\",\n          \"name\": \"Revenue Growth\",\n          \"type\": \"goal\",\n          \"path\": \"/space/goals/revenue-growth\",\n          \"space_name\": \"Sales\"\n        },\n        \"assignments\": [\n          {\n            \"name\": \"Q1 Check-in\",\n            \"type\": \"goal_check_in\",\n            \"role\": \"reviewer\",\n            \"author_name\": \"John Doe\",\n            \"action_label\": \"Review Q1 Check-in\"\n          }\n        ]\n      }\n    ],\n    \"upcoming\": [\n      {\n        \"origin\": {\n          \"id\": \"project-789\",\n          \"name\": \"Mobile App\",\n          \"type\": \"project\",\n          \"path\": \"/space/projects/mobile-app\",\n          \"space_name\": \"Product\"\n        },\n        \"assignments\": [\n          {\n            \"name\": \"Design mockups\",\n            \"type\": \"project_task\",\n            \"role\": \"owner\",\n            \"due_date\": \"2026-05-30\",\n            \"due_status\": \"upcoming\",\n            \"due_status_label\": \"Due in 45 days\",\n            \"task_status\": \"pending\"\n          }\n        ]\n      }\n    ]\n  }\n}\n```\n\n## Filtering Results\n\nUse `jq` to filter specific categories or types:\n\n```bash\n# Only items needing review\noperately people list_assignments --compact | jq '.data.needs_review'\n\n# Only overdue items\noperately people list_assignments --compact | \\\n  jq '.data.due_soon[].assignments[] | select(.due_status == \"overdue\")'\n\n# Count items in each category\noperately people list_assignments --compact | \\\n  jq '{\n    due_soon: (.data.due_soon | map(.assignments | length) | add // 0),\n    needs_review: (.data.needs_review | map(.assignments | length) | add // 0),\n    upcoming: (.data.upcoming | map(.assignments | length) | add // 0)\n  }'\n\n# All project check-ins needing review\noperately people list_assignments --compact | \\\n  jq '.data.needs_review[].assignments[] | select(.type == \"project_check_in\")'\n```\n\n## Common Workflows\n\n### Daily Review Routine\n\nCheck what needs attention each morning:\n\n```bash\n# Get overview\noperately people list_assignments\n\n# Focus on urgent items\noperately people list_assignments --compact | \\\n  jq '.data.due_soon, .data.needs_review'\n```\n\n### Acknowledge Reviews\n\nAfter reviewing items, acknowledge them:\n\n```bash\n# Check-ins: use resource_id\noperately projects acknowledge_check_in --id <resource_id>\noperately goals acknowledge_check_in --id <resource_id>\n\n# Retrospectives: use origin.id (not resource_id). Authors cannot acknowledge their own.\noperately projects acknowledge_retrospective --project-id <origin.id>\noperately goals acknowledge_retrospective --goal-id <origin.id>\n```\n\n### Update Task Status\n\nMove tasks forward after working on them:\n\n```bash\n# Find your pending tasks\noperately people list_assignments --compact | \\\n  jq '.data.due_soon[].assignments[] | select(.type == \"project_task\" and .task_status == \"pending\")'\n\n# Update task status\noperately tasks update_status \\\n  --task-id <id> \\\n  --type project \\\n  --status.id in_progress \\\n  --status.label \"In Progress\" \\\n  --status.color blue \\\n  --status.index 1 \\\n  --status.value in_progress \\\n  --status.closed false\n```\n\n## Integration with Other Commands\n\nThe assignments list provides IDs and context for other operations:\n\n- Use `resource_id` for check-ins, milestones, and tasks (e.g. `acknowledge_check_in --id <resource_id>`)\n- Use `origin.id` for retrospective acknowledgement (`--project-id` / `--goal-id`) and to load the parent\n- Use `path` to construct web URLs for sharing\n\n## Tips\n\n1. **Run daily** - Make `people list_assignments` part of your morning routine to stay on top of work\n2. **Filter by urgency** - Focus on `due_soon` and `needs_review` first, then plan `upcoming` work\n3. **Group by origin** - The grouping helps you batch related work (e.g., review all items for one project)\n4. **Use compact output** - Add `--compact` flag when piping to `jq` for easier parsing\n5. **Save to file** - Use `--output assignments.json` to track changes over time\n\nFile v1.9.0:references/auth-flows.md\n\n# Auth Flows\n\nUse this reference when the task involves `operately auth ...`, saved profiles, invite-based onboarding, or explaining how CLI authentication works.\n\nThis document is about the handcrafted auth commands in `cli/src/auth/`. Most other CLI commands are generated from backend `external_endpoints`; the auth flows are not.\n\n## Contents\n\n- When to use each auth command\n- Shared auth behavior\n- Login flows\n- Signup flows\n- Create-company flows\n- Join flows\n- Profile and verification commands\n- Backend/internal endpoint map\n- Agent rules\n\n## When To Use Each Auth Command\n\nUse these commands based on the task:\n\n- `operately auth login --token <token>`: best for automation, CI, scripted work, or any headless task where the user already has a token.\n- `operately auth login`: hybrid login for password, email code, or Google OAuth, plus prompted token entry when the user chooses it interactively.\n- `operately auth signup`: hybrid account creation that can be fully interactive or mostly flag-driven, followed by create-company, join-with-invite, or stop-for-now.\n- `operately auth create-company`: authenticate first, create a company, and save a full-access profile for an account that does not have one yet.\n- `operately auth join`: interactive invite-based onboarding for an existing or newly activated account.\n- `operately auth profiles`: inspect saved local CLI profiles and see which one is active.\n- `operately auth whoami`: remote validation that the current token still works.\n- `operately auth status`: local config check only.\n- `operately auth logout`: remove the saved token from the selected profile.\n\n## Shared Auth Behavior\n\n### Base URL and profiles\n\n- If no `--base-url` is provided, the CLI defaults to `https://app.operately.com`.\n- If no `--profile` is provided for interactive auth, the CLI prompts for one with the current active profile (falling back to `default`) as the default; blank input accepts that default.\n- For ordinary endpoint execution, auth resolution priority is: per-command flags > environment variables > saved profile.\n\n### Saved profile result\n\nMost successful auth flows end by saving:\n\n- the final API token\n- the base URL\n- the resolved person name\n- the company name\n\nThe profile metadata is fetched with external API calls after authentication succeeds.\n\n### Important distinction: local vs remote checks\n\n- `operately auth profiles` does not call the server. It prints saved local profiles, active-profile state, and saved metadata/base URLs.\n- `operately auth status` does not call the server. It prints local profile/config state.\n- `operately auth whoami` calls the API and is the correct post-login verification step.\n\n### Bootstrap token model\n\nInteractive login, signup, and join usually work in two phases:\n\n1. The CLI gets a short-lived bootstrap token from an internal auth endpoint.\n2. The CLI exchanges that bootstrap token for a reusable API token with `cli_auth/create_token`.\n\nThat final API token is company-scoped because it is minted for a specific company membership.\n\n## Login Flows\n\n## 1. Direct token login\n\nCommand:\n\n```bash\noperately auth login --token <token> [--base-url <url>] [--profile <name>]\n```\n\nBehavior:\n\n- This bypasses the interactive bootstrap flow.\n- The CLI validates the token by calling `people/get_me` (to verify the token and fetch the person's name) and `companies/get` (to fetch the company name for saved profile metadata).\n- If validation succeeds, it saves the token into the selected profile.\n\nUse this when:\n\n- the user already has an API token\n- the task is scripted or non-interactive\n- browser-based OAuth is not practical\n\n## 2. Hybrid login\n\nCommand:\n\n```bash\noperately auth login [--method <email-password|email-code|google>] [--email <email>] [--password <password>] [--company-id <id>] [--company-name <name>] [--access-mode <read-only|full-access>] [--base-url <url>] [--profile <name>]\n```\n\nThis flow is hybrid:\n\n- with no login flags, it behaves like the original fully interactive flow\n- any provided login flag suppresses only that prompt\n- missing values are still prompted interactively\n\nSupported login methods for `--method`:\n\n- `email-password` (accepted alias: `password`)\n- `email-code` (accepted alias: `emailCode`)\n- `google`\n\nUnavoidable manual steps:\n\n- Google login always requires browser confirmation\n- Email-code login always requires manually entering the emailed verification code\n\nAll other login prompts can be skipped with flags.\n\nImportant validation rules:\n\n- `--method google` cannot be combined with `--email` or `--password`\n- `--method email-code` cannot be combined with `--password`\n- `operately auth login --token <token>` cannot be combined with hybrid-only login flags such as `--method`, `--email`, `--password`, `--company-id`, `--company-name`, or `--access-mode`\n- if both `--company-id` and `--company-name` are provided, `--company-id` wins\n- `--company-name` must match exactly one authenticated company or the CLI exits with a flag error\n\nPrompt suppression rules:\n\n1. If `--method` is omitted, the CLI asks whether to use email/password, email code, Google OAuth, or a prompted API token.\n2. If `--base-url` is omitted, the CLI prompts for it; blank input accepts `https://app.operately.com`.\n3. If `--profile` is omitted, the CLI prompts for it with the current active profile (falling back to `default`) as the default.\n4. If the chosen method is email/password and `--email` or `--password` is omitted, the CLI prompts only for the missing values.\n5. If the chosen method is email-code and `--email` is omitted, the CLI prompts for it.\n6. If multiple companies are returned and neither `--company-id` nor `--company-name` is provided, the CLI prompts for company selection.\n7. If `--access-mode` is omitted, the CLI prompts for read-only vs full access.\n\n### 2a. Email/password login\n\nFlaggable inputs:\n\n- `--email`\n- `--password`\n- `--company-id`\n- `--company-name`\n- `--access-mode`\n\nFlow:\n\n- Calls `cli_auth/auth_password`.\n- If the backend returns companies, the CLI resolves the company in this order:\n  1. `--company-id`\n  2. exact `--company-name`\n  3. auto-select if only one company is available\n  4. interactive company picker\n- The CLI resolves access mode from `--access-mode` or prompts for it.\n- The CLI exchanges the bootstrap token for a final API token with `cli_auth/create_token`.\n\nSpecial case:\n\n- If the backend returns `status = no_companies`, the CLI does not save a profile and tells the user no companies were found.\n\n### 2b. Email-code login\n\nFlaggable inputs:\n\n- `--email`\n- `--company-id`\n- `--company-name`\n- `--access-mode`\n\nRemaining manual prompt:\n\n- verification code\n\nFlow:\n\n- Calls `cli_auth/request_email_code`.\n- Prompts for the emailed verification code.\n- Calls `cli_auth/auth_email_code`.\n- Resolves company and access mode the same way as email/password login.\n- Exchanges the bootstrap token for a final API token with `cli_auth/create_token`.\n\nSpecial case:\n\n- If the backend returns no companies, the CLI does not save a profile and tells the user no companies were found.\n\n### 2c. Google login\n\nFlaggable inputs:\n\n- `--company-id`\n- `--company-name`\n- `--access-mode`\n\nRemaining manual step:\n\n- browser-based login confirmation\n\nFlow:\n\n- Calls `cli_auth/start_google`.\n- Opens the returned login URL in a browser if possible.\n- Polls `cli_auth/status` until the bootstrap session becomes:\n  - `authenticated`\n  - `failed`\n  - `expired`\n  - `no_companies`\n- If authenticated with companies, the CLI resolves company and access mode using the same rules as the other hybrid login methods.\n- The CLI then calls `cli_auth/create_token`.\n\nUse this only when:\n\n- a human is present\n- a browser can be opened or the user can manually open the OAuth URL\n\n### 2d. Prompted token login\n\nCommand path:\n\n- still starts with `operately auth login`\n- happens only when `--method` is omitted and the user chooses the `token` option interactively\n\nBehavior:\n\n- The CLI prompts for the API token.\n- It validates the token directly against external endpoints, just like `operately auth login --token <token>`.\n- No bootstrap token is involved.\n\n## Signup Flows\n\nCommand:\n\n```bash\noperately auth signup [--method <email-password|google>] [--full-name <name>] [--email <email>] [--password <password>] [--next-step <create-company|join|later>] [--company-name <name>] [--invite-token <token>] [--base-url <url>] [--profile <name>]\n```\n\nThis flow is hybrid:\n\n- with no signup flags, it behaves like the original fully interactive flow\n- any provided signup flag suppresses only that prompt\n- missing values are still prompted interactively\n\nSupported signup methods:\n\n- `email-password` (accepted alias: `password`)\n- `google`\n\nSupported post-signup next steps:\n\n- `create-company`\n- `join` (accepted alias: `join-invite`)\n- `later`\n\nUnavoidable manual steps:\n\n- Google signup always requires browser confirmation\n- Email/password signup always requires manually entering the emailed verification code\n\nAll other signup prompts can be skipped with flags.\n\nImportant validation rules:\n\n- `--method google` cannot be combined with `--full-name`, `--email`, or `--password`\n- `--next-step later` cannot be combined with `--company-name` or `--invite-token`\n- `--next-step create-company` cannot be combined with `--invite-token`\n- `--next-step join` cannot be combined with `--company-name`\n\n### Prompt suppression rules\n\n- If `--base-url` is omitted, the CLI prompts for it and defaults blank input to `https://app.operately.com`.\n- If `--method` is omitted, the CLI prompts for the signup method.\n- If `--next-step` is omitted, the CLI prompts for the post-signup branch.\n- If the chosen next step is `create-company` and `--company-name` is omitted, the CLI prompts for company name.\n- If the chosen next step is `join` and `--invite-token` is omitted, the CLI prompts for the invite token.\n- If the flow reaches token creation and `--profile` is omitted, the CLI prompts for the profile name.\n\n### 1. Email/password signup\n\nFlaggable inputs:\n\n- `--full-name`\n- `--email`\n- `--password`\n\nRemaining manual prompt:\n\n- email verification code\n\nImportant detail:\n\n- When `--password` is provided, the CLI skips the password-confirmation prompt entirely.\n\nFlow:\n\n- Calls `cli_auth/check_account` first.\n- Calls `/create_email_activation_code`.\n- Calls `cli_auth/signup`.\n- Receives a bootstrap token on success.\n\n### 2. Google signup\n\nFlaggable inputs:\n\n- `--method google`\n\nRemaining manual step:\n\n- browser-based Google confirmation\n\nFlow:\n\n- Starts the Google flow with `cli_auth/start_google_signup`.\n- Polls `cli_auth/status` through the shared Google login flow.\n- Receives a bootstrap token when authentication completes.\n\n### 3. Post-signup: create company now\n\nAfter signup, if the user chooses `create-company` or passes `--next-step create-company`:\n\n- The CLI prompts for `company name` only when `--company-name` was not provided.\n- It first calls `cli_auth/company_creation_status`.\n- If the instance is not configured yet, it calls `cli_auth/setup_company`.\n- Otherwise, it calls `cli_auth/create_company`.\n- After the company is created, the CLI calls `cli_auth/create_token`.\n\nImportant detail:\n\n- This path hardcodes `readOnly: false`, so the created token is full access.\n\n### 4. Post-signup: join a company with an invite token\n\nAfter signup, if the user chooses `join` or passes `--next-step join`:\n\n- The CLI prompts for `invite token` only when `--invite-token` was not provided.\n- It calls `cli_auth/join_with_invite` using the bootstrap token.\n- It then calls `cli_auth/create_token`.\n\nThis path also hardcodes `readOnly: false`.\n\n### 5. Post-signup: do this later\n\nIf the user chooses `later` or passes `--next-step later`:\n\n- no profile is saved\n- no final API token is created\n- the CLI explicitly tells the user to use `operately auth create-company` later to create a company or `operately auth join` later to join one\n\nAgents should expect this outcome and should not assume that a successful signup automatically leaves a usable CLI profile behind.\n\n## Create-Company Flows\n\nCommand:\n\n```bash\noperately auth create-company [--method <email-password|email-code|google>] [--email <email>] [--password <password>] [--company-name <name>] [--base-url <url>] [--profile <name>]\n```\n\nThis flow is hybrid:\n\n- with no flags it is fully interactive\n- any provided flag suppresses only that prompt\n- missing values are still prompted interactively\n\nThis flow exists for an account that can authenticate but does not yet have a company-scoped CLI token to save.\n\nImportant command rule:\n\n- `operately auth create-company` does not support `--token`.\n\nSupported auth methods for `--method`:\n\n- `email-password` (accepted alias: `password`)\n- `email-code` (accepted alias: `emailCode`)\n- `google`\n\nImportant validation rules:\n\n- `--method google` cannot be combined with `--email` or `--password`\n- `--method email-code` cannot be combined with `--password`\n\nPrompt suppression rules:\n\n1. If `--method` is omitted, the CLI asks for the sign-in method.\n2. If `--base-url` is omitted, the CLI prompts for it; blank input accepts `https://app.operately.com`.\n3. If the chosen method is email/password and `--email` or `--password` is omitted, the CLI prompts for only the missing values.\n4. If the chosen method is email-code and `--email` is omitted, the CLI prompts for it.\n5. If `--company-name` is omitted, the CLI prompts for it.\n6. If `--profile` is omitted, the CLI prompts for it with the current active profile as the default.\n\nFlow:\n\n- The CLI resolves the method from `--method` or prompts for it.\n- It resolves the base URL and checks `cli_auth/company_creation_status`.\n- It authenticates with the chosen method to get a bootstrap token.\n- It uses `--company-name` or prompts for it.\n- It uses `cli_auth/setup_company` when the instance is not configured yet, otherwise `cli_auth/create_company`.\n- It prompts for the profile name if needed (blank input accepts the current active profile as the default).\n- It calls `cli_auth/create_token` and saves a full-access profile.\n\n## Join Flows\n\nCommand:\n\n```bash\noperately auth join [--invite-token <token>] [--method <email-password|email-code|google>] [--email <email>] [--password <password>] [--company-id <id>] [--company-name <name>] [--base-url <url>] [--profile <name>]\n```\n\nThis flow is hybrid:\n\n- with no flags it is fully interactive\n- any provided flag suppresses only that prompt\n- missing values are still prompted interactively\n\nThis flow starts from an invite token and first inspects the invite type with a public query.\n\nImportant validation rules:\n\n- `--method google` cannot be combined with `--email` or `--password`\n- `--method email-code` cannot be combined with `--password`\n- `--method email-code` is not available for first-time personal invites (`has_open_invitation = true`); passing it exits with code 2\n- For personal invites, if `--email` is provided it must match the invited member's email exactly\n\nPrompt suppression rules:\n\n1. If `--invite-token` is omitted, the CLI prompts for the invite token.\n2. If `--base-url` is omitted, the CLI prompts for it.\n3. If `--method` is omitted, the CLI prompts for the sign-in method.\n4. If the chosen method is email/password and `--email` or `--password` is omitted, the CLI prompts for only the missing values.\n5. For first-time personal invite + password: if `--password` is provided, password confirmation is skipped (the same value is used for both password and confirmation).\n6. If `--profile` is omitted, the CLI prompts for it.\n7. For company-wide invites without a pre-known invited company: if neither `--company-id` nor `--company-name` is provided, the CLI prompts for company selection.\n\nCompany selection with flags:\n\n- `--company-id` selects the company by exact ID match; errors if the ID is not in the authenticated companies list\n- `--company-name` selects the company by exact name match; errors if ambiguous or not found\n- For invites where the invited company is already known, `--company-id`/`--company-name` must match that company or the CLI errors\n\nIf `--invite-token` is provided, the initial invite-token prompt is skipped.\n\n### Invite type detection\n\nThe CLI calls:\n\n- `invitations/get_invite_link_by_token`\n\nThen it routes differently for:\n\n- personal invites\n- company-wide invites\n\n## 1. Personal invite flow\n\nThe CLI also fetches invitation details with:\n\n- `invitations/get_invitation`\n\nThe available sign-in methods depend on the invitation state:\n\n- first-time personal invite acceptance (`has_open_invitation = true`): password or Google OAuth\n- existing-account personal invite login: password, email code, or Google OAuth\n\n### 1a. Personal invite + password + first-time login\n\nPrompts:\n\n- password\n- password confirmation\n\nFlow:\n\n- Calls `cli_auth/join_company`.\n- Receives a bootstrap token.\n- Calls `cli_auth/create_token` for the invited company.\n\n### 1b. Personal invite + password + existing account\n\nPrompts:\n\n- email\n- password\n\nFlow:\n\n- Reuses the normal password login flow.\n- Passes `invite_token` into `cli_auth/auth_password`.\n- The backend joins the company during auth.\n- The CLI then calls `cli_auth/create_token` for the invited company.\n\n### 1c. Personal invite + email code + existing account\n\nPrompts:\n\n- verification code\n\nFlow:\n\n- Reuses the normal email-code login flow.\n- Uses the invitation member email from `invitations/get_invitation`, so the CLI does not prompt for email again.\n- Passes `invite_token` into `cli_auth/auth_email_code`.\n- The backend joins the company during auth.\n- The CLI then calls `cli_auth/create_token` for the invited company.\n\n### 1d. Personal invite + Google OAuth\n\nFlow:\n\n- Reuses the normal Google flow.\n- Passes `invite_token` into `cli_auth/start_google`.\n- Polls `cli_auth/status`.\n- Calls `cli_auth/create_token` for the invited company.\n\n## 2. Company-wide invite flow\n\nThe user chooses:\n\n- password\n- email code\n- Google OAuth\n\n### 2a. Company-wide invite + password\n\nFlow:\n\n- Reuses the password login flow with `invite_token`.\n- The backend attaches the account to the invited company during auth.\n- The CLI gets back companies from `cli_auth/auth_password`.\n- If the invite metadata already includes the company, the CLI uses that company directly.\n- Otherwise, it falls back to interactive company selection.\n- The CLI then calls `cli_auth/create_token`.\n\n### 2b. Company-wide invite + email code\n\nFlow:\n\n- Reuses the normal email-code login flow with `invite_token`.\n- The CLI asks for email and verification code.\n- The backend attaches the account to the invited company during auth.\n- If the invite metadata already includes the company, the CLI uses that company directly.\n- Otherwise, it falls back to interactive company selection.\n- The CLI then calls `cli_auth/create_token`.\n\n### 2c. Company-wide invite + Google OAuth\n\nFlow:\n\n- Reuses the Google flow with `invite_token`.\n- Polls `cli_auth/status`.\n- Uses the invited company when it is already known from the invite metadata.\n- Otherwise, falls back to company selection.\n- Calls `cli_auth/create_token`.\n\nImportant detail:\n\n- Join flows also hardcode `readOnly: false`.\n- They always try to create a full-access token for the joined company.\n\n## Profile and Verification Commands\n\n### `operately auth profiles`\n\nUse this when you need to inspect local saved profiles without touching the server.\n\nIt shows:\n\n- saved profile names\n- which profile is active\n- whether each profile has a saved token\n- saved person/company metadata when available\n- effective saved base URL\n\nDo not treat `auth profiles` as proof that authentication works.\n\n### `operately auth whoami`\n\nUse this when you need to verify:\n\n- the current token is valid\n- the target instance is reachable\n- the saved profile points at the expected base URL\n\nThis command performs remote API calls.\n\n### `operately auth status`\n\nUse this when you only need to inspect:\n\n- active profile name\n- whether a token is saved locally\n- the base URL that would be used\n- saved person name and company name (printed when present)\n\nDo not treat `auth status` as proof that authentication works.\n\n### `operately auth logout`\n\nBehavior:\n\n- clears the saved token from the selected profile\n- also clears saved profile name/company metadata\n\nIt does not revoke the server-side API token.\n\n## Backend/Internal Endpoint Map\n\nMap of user-visible auth behavior to backend/internal calls:\n\n- direct token login: external `people/get_me` and optional `companies/get` for metadata\n- interactive password login: `cli_auth/auth_password` -> `cli_auth/create_token`\n- interactive email-code login: `cli_auth/request_email_code` -> `cli_auth/auth_email_code` -> `cli_auth/create_token`\n- interactive Google login: `cli_auth/start_google` -> repeated `cli_auth/status` -> `cli_auth/create_token`\n- interactive token login: external `people/get_me` and optional `companies/get` for metadata\n- email signup: `cli_auth/check_account` -> `/create_email_activation_code` -> `cli_auth/signup`\n- Google signup: `cli_auth/start_google_signup` -> repeated `cli_auth/status`\n- signup create-company path: `cli_auth/company_creation_status` -> `cli_auth/setup_company` or `cli_auth/create_company` -> `cli_auth/create_token`\n- create-company command: `cli_auth/company_creation_status` -> auth flow (`cli_auth/auth_password` or `cli_auth/request_email_code` -> `cli_auth/auth_email_code` or `cli_auth/start_google` -> repeated `cli_auth/status`) -> `cli_auth/setup_company` or `cli_auth/create_company` -> `cli_auth/create_token`\n- signup join-with-invite path: `cli_auth/join_with_invite` -> `cli_auth/create_token`\n- personal invite first-time password join: `cli_auth/join_company` -> `cli_auth/create_token`\n- personal/company invite email-code join: `cli_auth/request_email_code` -> `cli_auth/auth_email_code` -> `cli_auth/create_token`\n- invite lookup before join routing: `invitations/get_invite_link_by_token`\n- personal invite detail fetch: `invitations/get_invitation`\n\n## Agent Rules\n\n### Method prerequisites — confirm access BEFORE choosing a method\n\n**Before choosing any auth method, the agent must confirm it has the required access. Never start a method that will reach an unavoidable blocker.**\n\n| Method | What the agent must have BEFORE starting |\n|---|---|\n| `--token` / token login | The API token itself |\n| `email-password` (login) | Both the email address AND the password |\n| `email-password` (signup) | The email address AND access to the email inbox (a verification code is sent during signup) |\n| `email-code` | The email address AND access to the email inbox (a code is sent and must be read) |\n| `google` | Direct browser access so the OAuth confirmation step can be completed |\n\n- **Google OAuth** is only usable when a human can open the browser and confirm. Never attempt it in headless, CI, or fully automated contexts.\n- **Email code** (both login and signup) always sends a code to the inbox. The agent must be able to read that inbox to proceed. Do not start email-code auth without confirmed inbox access.\n- **Email/password login** is fully automatable when both credentials are known. Do not attempt it if either value is missing or must be prompted interactively in an unattended context.\n- **Email/password signup** sends an activation code to the provided email during the flow, so inbox access is still required even though the method is \"password-based\".\n\n### Using --help\n\nRun `operately auth <command> --help` (or equivalently `operately help auth <command>`) before executing any auth command when uncertain about available flags, accepted method aliases, or validation rules. The built-in help shows the full flag list, method aliases, unavoidable manual steps, and copy-paste examples.\n\n```bash\noperately auth login --help\noperately auth signup --help\noperately auth join --help\noperately auth create-company --help\n```\n\n### Flag preferences\n\n- Always pass known values as flags rather than relying on interactive prompts. Use `--method`, `--email`, `--password`, `--company-name`, `--invite-token`, `--profile`, etc. to suppress every prompt that can be suppressed.\n- Only accept that a step will be interactive when it is unavoidable: browser confirmation for Google OAuth, and entering the emailed verification code for email-code flows.\n- For first-time personal invite + password: pass `--password` to suppress the password confirmation prompt as well (the CLI reuses the same value for confirmation when `--password` is provided).\n\n### Other rules\n\n- Prefer `operately auth login --token <token>` when the user already has a token.\n- Use `operately auth profiles` when you need to discover reusable saved profile names before running commands with `--profile`.\n- Prefer environment variables over mutating saved profiles in CI or temporary scripts, unless the user explicitly wants a profile saved.\n- Use `operately auth create-company` when the user can authenticate but has no company yet and wants a saved, full-access CLI profile.\n- Interactive profile name prompts default blank input to the current active profile. They do not list all saved profile names; use `operately auth profiles` to discover those before choosing one.\n- Do not assume signup saves a usable profile. If the user chooses \"do this later\", signup succeeds but no final token is created.\n- After any auth flow that claims to have logged in, verify with `operately auth whoami`, not `operately auth profiles` or `operately auth status`.\n- If the task is about the CLI auth architecture, remember that `operately auth ...` commands are custom flows; they are not generated from `external_endpoints`.\n\nFile v1.9.0:references/collaboration-patterns.md\n\n# Collaboration Patterns\n\nTeam collaboration workflows in Operately, covering spaces, members, permissions, discussions, comments, reactions, and notifications.\n\n## Space Management\n\n### Creating Spaces\n\n```bash\noperately spaces create \\\n  --name \"Engineering\" \\\n  --mission \"Build great products\" \\\n  --company-permissions 10 \\\n  --public-permissions 0\n```\n\n### Getting Space Details\n\n```bash\noperately spaces get --id s1\n```\n\n### Listing Spaces\n\n```bash\noperately spaces list\n```\n\n### Searching Spaces\n\n```bash\noperately spaces search --query \"engineering\"\n```\n\n### Updating Spaces\n\n```bash\noperately spaces update \\\n  --id s1 \\\n  --name \"Engineering & Product\" \\\n  --mission \"Build and ship great products\"\n```\n\n### Deleting Spaces\n\n```bash\noperately spaces delete --space-id s1\n```\n\n## Member Management\n\n### Adding Members\n\n```bash\n# Add single member\noperately spaces add_members \\\n  --space-id s1 \\\n  --members.0.id u1 \\\n  --members.0.access-level 70\n\n# Add multiple members\noperately spaces add_members \\\n  --space-id s1 \\\n  --members.0.id u1 \\\n  --members.0.access-level 70 \\\n  --members.1.id u2 \\\n  --members.1.access-level 40 \\\n  --members.2.id u3 \\\n  --members.2.access-level 40\n```\n\n### Listing Members\n\n```bash\noperately spaces list_members --space-id s1\n```\n\n### Searching for Members\n\n```bash\noperately spaces search_potential_members \\\n  --space-id s1 \\\n  --query \"engineer\"\n```\n\n### Removing Members\n\n```bash\noperately spaces delete_member \\\n  --space-id s1 \\\n  --member-id u1\n```\n\n### Joining Spaces\n\n```bash\n# User joins a space\noperately spaces join --space-id s1\n```\n\n## Permissions and Access Levels\n\n### Member Permissions\n\n```bash\noperately spaces update_members_permissions \\\n  --space-id s1 \\\n  --members.0.id u1 \\\n  --members.0.access-level 70 \\\n  --members.1.id u2 \\\n  --members.1.access-level 70\n```\n\nAccess levels:\n- `0` - No access\n- `10` - View only\n- `40` - Comment\n- `70` - Edit\n- `100` - Full access (admin)\n\n### Space Permissions\n\n```bash\noperately spaces update_permissions \\\n  --space-id s1 \\\n  --access-levels.public 0 \\\n  --access-levels.company 10 \\\n  --access-levels.space 70\n```\n\n## Space Tools\n\n### Listing Available Tools\n\n```bash\noperately spaces list_tools --space-id s1\n```\n\n### Enabling/Disabling Tools\n\n```bash\noperately spaces update_tools \\\n  --space-id s1 \\\n  --tools.tasks-enabled true \\\n  --tools.discussions-enabled true \\\n  --tools.resource-hub-enabled true\n```\n\nCommon tool types:\n- `projects` - Project management\n- `goals` - Goal tracking\n- `resource_hub` - Knowledge base\n- `discussions` - Team discussions\n- `tasks` - Task management\n\n## Discussions\n\n### Space Discussions\n\n**Create discussion:**\n```bash\noperately spaces create_discussion \\\n  --space-id s1 \\\n  --title \"Q2 Planning Discussion\" \\\n  --body \"# Q2 Planning\\n\\nLet's discuss our priorities for Q2.\\n\\n## Topics\\n- Revenue goals\\n- Product roadmap\\n- Team growth\"\n\noperately spaces create_discussion \\\n  --space-id s1 \\\n  --title \"Q2 Planning Discussion\" \\\n  --body-file ./q2-planning.md\n```\n\n**List discussions:**\n```bash\noperately spaces list_discussions --space-id s1\n```\n\n**Get discussion:**\n```bash\noperately spaces get_discussion --id d1\n```\n\n**Update discussion:**\n```bash\noperately spaces update_discussion \\\n  --id d1 \\\n  --title \"Updated: Q2 Planning\" \\\n  --body \"# Q2 Planning - Updated\\n\\n[revised content]\"\n\noperately spaces update_discussion \\\n  --id d1 \\\n  --title \"Updated: Q2 Planning\" \\\n  --body-file ./q2-planning-updated.md\n```\n\n**Archive discussion:**\n```bash\noperately spaces archive_discussion --id d1\n```\n\n**Publish discussion:**\n```bash\noperately spaces publish_discussion --id d1\n```\n\n### Project Discussions\n\n**Create discussion:**\n```bash\noperately projects create_discussion \\\n  --project-id p1 \\\n  --title \"Architecture Decision: Database\" \\\n  --message \"# Database Selection\\n\\n## Options\\n1. PostgreSQL\\n2. MongoDB\\n\\n## Recommendation\\nPostgreSQL for ACID compliance.\"\n\noperately projects create_discussion \\\n  --project-id p1 \\\n  --title \"Architecture Decision: Database\" \\\n  --message-file ./database-selection.md\n```\n\n**List discussions:**\n```bash\noperately projects list_discussions --project-id p1\n```\n\n**Get discussion:**\n```bash\noperately projects get_discussion --id d1\n```\n\n**Update discussion:**\n```bash\noperately projects update_discussion \\\n  --id d1 \\\n  --title \"Decision Made: PostgreSQL\" \\\n  --message \"# Final Decision\\n\\nWe chose PostgreSQL.\"\n\noperately projects update_discussion \\\n  --id d1 \\\n  --title \"Decision Made: PostgreSQL\" \\\n  --message-file ./final-decision.md\n```\n\n### Goal Discussions\n\n**Create discussion:**\n```bash\noperately goals create_discussion \\\n  --goal-id g1 \\\n  --title \"Target Adjustment Needed?\" \\\n  --message \"# Target Discussion\\n\\nShould we revise our Q2 target based on market conditions?\"\n\noperately goals create_discussion \\\n  --goal-id g1 \\\n  --title \"Target Adjustment Needed?\" \\\n  --message-file ./target-discussion.md\n```\n\n**List discussions:**\n```bash\noperately goals list_discussions --goal-id g1\n```\n\n**Update discussion:**\n```bash\noperately goals update_discussion \\\n  --activity-id d1 \\\n  --title \"Target Revised\" \\\n  --message \"# Decision\\n\\nRevised target from $100K to $75K.\"\n\noperately goals update_discussion \\\n  --activity-id d1 \\\n  --title \"Target Revised\" \\\n  --message-file ./target-revised.md\n```\n\n## Comments\n\n### Creating Comments\n\n```bash\n# Comment on project check-in\noperately comments create \\\n  --entity-id ci1 \\\n  --entity-type \"project_check_in\" \\\n  --content \"Great progress! The design phase looks solid.\"\n\n# Comment on goal check-in (API type: goal_update)\noperately comments create \\\n  --entity-id ci2 \\\n  --entity-type \"goal_update\" \\\n  --content \"Concerned about the timeline. Can we discuss?\"\n\n# Comment on project task\noperately comments create \\\n  --entity-id t1 \\\n  --entity-type \"project_task\" \\\n  --content \"I'll take this one. Should be done by EOD.\"\n\n# Comment on space task\noperately comments create \\\n  --entity-id t2 \\\n  --entity-type \"space_task\" \\\n  --content \"Picking this up tomorrow.\"\n\n# Comment on space discussion (message board post)\noperately comments create \\\n  --entity-id d1 \\\n  --entity-type \"message\" \\\n  --content \"I agree with option 1. Here's why...\"\n```\n\nCommon entity types:\n- `project_check_in`, `project_retrospective`, `project_discussion`\n- `goal_update`, `goal_discussion`\n- `project_task`, `space_task`\n- `message` (space discussions)\n- `resource_hub_document`, `resource_hub_file`, `resource_hub_link`\n- `milestone`\n\n### Listing Comments\n\n```bash\noperately comments list \\\n  --entity-id ci1 \\\n  --entity-type \"project_check_in\"\n```\n\n### Updating Comments\n\n```bash\noperately comments update \\\n  --comment-id c1 \\\n  --parent-type project_check_in \\\n  --content \"Updated comment with more details.\"\n```\n\n### Deleting Comments\n\n```bash\noperately comments delete --comment-id c1 --parent-type project_check_in\n```\n\n## Reactions\n\n### Adding Reactions\n\n```bash\n# Thumbs up\noperately reactions create \\\n  --entity-id ci1 \\\n  --entity-type \"project_check_in\" \\\n  --emoji \"👍\"\n\n# Heart\noperately reactions create \\\n  --entity-id c1 \\\n  --entity-type \"comment\" \\\n  --parent-type \"project_check_in\" \\\n  --emoji \"❤️\"\n\n# Celebrate a goal check-in\noperately reactions create \\\n  --entity-id ci2 \\\n  --entity-type \"goal_update\" \\\n  --emoji \"🎉\"\n```\n\n### Removing Reactions\n\n```bash\noperately reactions delete --reaction-id r1\n```\n\n## Notifications\n\n### Listing Notifications\n\n```bash\noperately notifications list\n```\n\n### Getting Unread Count\n\n```bash\noperately notifications get_unread_count\n```\n\n### Managing Subscriptions\n\n**Important:** Subscribe and unsubscribe commands require a `subscription-list-id`, not the resource ID. You must first retrieve the subscription list ID from the resource.\n\n```bash\n# Check subscription status (uses resource-id)\noperately notifications is_subscribed \\\n  --resource-id p1 \\\n  --resource-type project\n\n# Get subscription-list-id from the resource\noperately projects get \\\n  --id p1 \\\n  --include-subscription-list\n\n# Important: without --include-subscription-list, a missing\n# subscription_list in the response means \"not preloaded\",\n# not that the project lacks one.\n\n# Subscribe to resource (uses subscription-list-id from above)\noperately notifications subscribe \\\n  --subscription-list-id <subscription-list-id> \\\n  --type \"project\"\n\n# Unsubscribe from subscription list (uses subscription-list-id)\noperately notifications unsubscribe \\\n  --subscription-list-id <subscription-list-id>\n```\n\n### Marking as Read\n\n```bash\n# Mark single notification\noperately notifications mark_as_read --id n1\n\n# Mark multiple notifications\noperately notifications mark_many_as_read \\\n  --ids n1 \\\n  --ids n2 \\\n  --ids n3\n\n# Mark all as read\noperately notifications mark_all_as_read\n```\n\n## Company-Level Operations\n\n### Company Members\n\n**Create member:**\n```bash\noperately companies create_member \\\n  --full-name \"John Doe\" \\\n  --email \"john@example.com\" \\\n  --title \"Senior Engineer\"\n```\n\n**Create admin:**\n```bash\noperately companies create_admins \\\n  --people-ids u1 \\\n  --people-ids u2\n```\n\n**Delete admin:**\n```bash\noperately companies delete_admin --person-id u1\n```\n\n**Delete member:**\n```bash\noperately companies delete_member --person-id u1\n```\n\n**Restore member:**\n```bash\noperately companies restore_member --person-id u1\n```\n\n**Convert member to guest:**\n```bash\noperately companies convert_member_to_guest --person-id u1\n```\n\n**Invite guest:**\n```bash\noperately companies invite_guest \\\n  --email \"guest@example.com\" \\\n  --full-name \"Guest User\" \\\n  --title \"Consultant\"\n```\n\n### Company Permissions\n\n```bash\noperately companies update_members_permissions \\\n  --members.0.id u1 \\\n  --members.0.access-level edit_access \\\n  --members.1.id u2 \\\n  --members.1.access-level edit_access\n```\n\n### Resource Access\n\n```bash\noperately companies grant_resource_access \\\n  --person-id u1 \\\n  --resources.0.resource-type project \\\n  --resources.0.resource-id p1 \\\n  --resources.0.access-level view_access \\\n  --resources.1.resource-type goal \\\n  --resources.1.resource-id g1 \\\n  --resources.1.access-level edit_access\n```\n\n### Global and Full-Text Search\n\n```bash\n# Full-text search (preferred)\noperately companies search --query \"roadmap\" --sort best_match\n\n# Quick title/name lookup\noperately companies quick_search --query \"roadmap\"\n\n# Broad lookup across many resource types\noperately companies global_search --query \"roadmap\"\n```\n\nScoped Docs & Files search:\n\n```bash\noperately documents search --project-id p1 --query \"spec\"\n```\n\n### Notification Recipients on Content\n\nMany mutations accept notification recipient controls:\n\n```bash\noperately projects create_check_in \\\n  --project-id p1 \\\n  --status on_track \\\n  --description \"# Update\" \\\n  --send-notifications-to-everyone false \\\n  --subscriber-ids u2 \\\n  --subscriber-ids u3\n```\n\nSame flags work on document updates, discussions, goal close/reopen, and other content mutations. Use `--send-notifications-to-everyone` sparingly; prefer `--subscriber-ids` for targeted alerts.\n\n### Template vs Live Comments\n\n| Intent | Commands |\n| --- | --- |\n| Comment on live check-ins, tasks, docs, discussions | `operately comments create …` |\n| Comment on template blueprint content | `operately project_templates create_comment …` |\n\nSee [Project Template Workflows](project-template-workflows.md) for template collaboration patterns.\n\n### Activity Feed\n\n```bash\n# Get company activity\noperately companies get_activity --id a1\n\n# List activities\noperately companies list_activities \\\n  --scope-id c1 \\\n  --scope-type company \\\n  --actions project_created \\\n  --actions goal_created \\\n  --actions project_check_in_submitted\n```\n\n## Common Collaboration Patterns\n\n### New Team Onboarding\n\n```bash\n# 1. Create space\noperately spaces create \\\n  --name \"Product Team\" \\\n  --mission \"Deliver customer value\" \\\n  --company-permissions 10 \\\n  --public-permissions 0\n\n# 2. Add team members\noperately spaces add_members \\\n  --space-id s1 \\\n  --members.0.id u1 \\\n  --members.0.access-level 100 \\\n  --members.1.id u2 \\\n  --members.1.access-level 70 \\\n  --members.2.id u3 \\\n  --members.2.access-level 70\n\n# 3. Set permissions\noperately spaces update_members_permissions \\\n  --space-id s1 \\\n  --members.0.id u1 \\\n  --members.0.access-level 100  # Team lead - full access\n\noperately spaces update_members_permissions \\\n  --space-id s1 \\\n  --members.0.id u2 \\\n  --members.0.access-level 70 \\\n  --members.1.id u3 \\\n  --members.1.access-level 70  # Team members - edit access\n\n# 4. Enable tools\noperately spaces update_tools \\\n  --space-id s1 \\\n  --tools.tasks-enabled true \\\n  --tools.discussions-enabled true \\\n  --tools.resource-hub-enabled true\n\n# 5. Create welcome discussion\noperately spaces create_discussion \\\n  --space-id s1 \\\n  --title \"Welcome to Product Team!\" \\\n  --body \"# Welcome!\\n\\nGlad to have you on the team.\\n\\n## Getting Started\\n- Review our Docs & Files\\n- Join daily standups\\n- Introduce yourself\"\n```\n\n### Cross-Functional Project\n\n```bash\n# 1. Create project in shared space\noperately projects create \\\n  --space-id shared_space \\\n  --name \"Product Launch\" \\\n  --champion-id product_lead \\\n  --anonymous-access-level 0 \\\n  --company-access-level 10 \\\n  --space-access-level 70\n\n# 2. Add contributors from different teams\noperately projects create_contributor \\\n  --project-id p1 \\\n  --person-id eng_lead \\\n  --responsibility \"Engineering Lead\" \\\n  --permissions edit_access \\\n  --role contributor\n\noperately projects create_contributor \\\n  --project-id p1 \\\n  --person-id design_lead \\\n  --responsibility \"Design Lead\" \\\n  --permissions edit_access \\\n  --role contributor\n\noperately projects create_contributor \\\n  --project-id p1 \\\n  --person-id marketing_lead \\\n  --responsibility \"Marketing Lead\" \\\n  --permissions edit_access \\\n  --role contributor\n\n# 3. Create discussion for alignment\noperately projects create_discussion \\\n  --project-id p1 \\\n  --title \"Launch Timeline Discussion\" \\\n  --message \"# Timeline\\n\\nLet's align on the launch date and key milestones.\"\n```\n\n## Gotchas\n\n### Discussion vs Comments\n\nDiscussions are top-level conversation starters. Comments are responses to existing content. Use discussions for new topics, comments for feedback.\n\n### Reactions vs Comments\n\nUse reactions for quick reactions (👍, ❤️, 🎉). Use comments for substantive feedback.\n\n### Entity Types\n\nEntity types must match exactly:\n\n```bash\n# Wrong\noperately comments create \\\n  --entity-id ci1 \\\n  --entity-type \"check_in\" \\\n  --content \"Example\"\n\n# Right\noperately comments create \\\n  --entity-id ci1 \\\n  --entity-type \"project_check_in\" \\\n  --content \"Example\"\n```\n\n### Space Tools\n\nDisabling a tool (e.g., projects) doesn't delete existing resources, but makes them inaccessible through the space. Re-enable to restore access.\n\n### Guest Access\n\nGuests have limited access. Use `convert_member_to_guest` carefully - it restricts their permissions across the company. People who work in the company should never be converted to guests. Guests should only be used for external collaborators.\n\n### Subscription Management\n\nSubscriptions are resource-specific. Subscribing to a project doesn't subscribe to its tasks or milestones. Subscribe to each resource separately if needed.\n\nFile v1.9.0:references/docs-and-files.md\n\n# Docs & Files\n\nDocs & Files is the knowledge base within spaces and projects. Teams organize documents, files, links, and folders in a hierarchical structure.\n\n## Concept\n\n**What is Docs & Files?**\n\nEach space, project, and goal has a Docs & Files hub that provides:\n- Central location for team documentation\n- Hierarchical folder organization\n- Document management (markdown)\n- File attachments (binary uploads)\n- Link collection\n- Access control inherited from the parent space or project\n\n**Key characteristics:**\n- One Docs & Files hub per space, project, or goal\n- Nested folder hierarchy (unlimited depth, but keep it shallow for usability)\n- Documents, files, and links can live in folders\n- Markdown support for documents\n- All CLI commands live under the **`documents`** namespace\n\n## Scope Rules\n\nHub-scoped create and list commands require **`--space-id`**, **`--project-id`**, or **`--goal-id`** (mutually exclusive — provide one, not both).\n\n```bash\n# Space-scoped\noperately documents create_document --space-id s1 --name \"Guide\" --content \"# Guide\"\n\n# Project-scoped\noperately documents create_document --project-id p1 --name \"Spec\" --content \"# Spec\"\n\n# Goal-scoped\noperately documents create_document --goal-id g1 --name \"Playbook\" --content \"# Playbook\"\n```\n\n**Folder-scoped listing** works with **`--folder-id` alone** — no space or project ID needed:\n\n```bash\noperately documents list_contents --folder-id f1\n```\n\n**Do not** resolve a hub ID via `spaces list_tools`. Pass the space or project ID directly on `documents/*` commands.\n\n## Folder Operations\n\n### Creating Folders\n\n**Create folder at root level:**\n```bash\noperately documents create_folder \\\n  --space-id s1 \\\n  --name \"Guides\"\n```\n\n**Create nested folder:**\n```bash\noperately documents create_folder \\\n  --space-id s1 \\\n  --folder-id f1 \\\n  --name \"Onboarding\"\n```\n\n**Create deep hierarchy:**\n```bash\n# Level 1: Guides\noperately documents create_folder \\\n  --space-id s1 \\\n  --name \"Guides\"\n\n# Level 2: Onboarding (inside Guides)\noperately documents create_folder \\\n  --space-id s1 \\\n  --folder-id guides_folder_id \\\n  --name \"Onboarding\"\n\n# Level 3: Engineering (inside Onboarding)\noperately documents create_folder \\\n  --space-id s1 \\\n  --folder-id onboarding_folder_id \\\n  --name \"Engineering Onboarding\"\n```\n\n### Folder Operations\n\n**Get folder details:**\n```bash\noperately documents get_folder --id f1\n```\n\n**Rename folder:**\n```bash\noperately documents rename_folder \\\n  --folder-id f1 \\\n  --new-name \"Team Guides\"\n```\n\n**Delete folder:**\n```bash\noperately documents delete_folder --folder-id f1\n```\n\n**Copy folder:**\n```bash\noperately documents copy_folder \\\n  --folder-id f1 \\\n  --folder-name \"Copied Guides\" \\\n  --dest-parent-folder-id f2\n```\n\n## Documents\n\n### Creating Documents\n\n**Create document at root:**\n```bash\noperately documents create_document \\\n  --space-id s1 \\\n  --name \"Getting Started\" \\\n  --content \"# Getting Started\\n\\nWelcome to the team! This guide will help you get up to speed.\\n\\n## First Steps\\n1. Set up your development environment\\n2. Read the architecture docs\\n3. Join the team channels\"\n```\n\n**Create document in folder:**\n```bash\noperately documents create_document \\\n  --space-id s1 \\\n  --folder-id f1 \\\n  --name \"Development Setup\" \\\n  --content \"# Development Environment Setup\\n\\n## Prerequisites\\n- Node.js 18+\\n- Docker\\n- Git\\n\\n## Installation\\n\\`\\`\\`bash\\nnpm install\\ndocker-compose up\\n\\`\\`\\`\"\n```\n\n**Create draft document:**\n```bash\noperately documents create_document \\\n  --space-id s1 \\\n  --folder-id f1 \\\n  --name \"Work in Progress\" \\\n  --content \"# Draft Document\\n\\nThis is still being written...\" \\\n  --post-as-draft true\n```\n\n**Create document with notifications:**\n```bash\noperately documents create_document \\\n  --space-id s1 \\\n  --name \"Important Announcement\" \\\n  --content \"# New Policy\\n\\nPlease review the updated security policy.\" \\\n  --send-notifications-to-everyone true\n```\n\n**Create document with specific subscribers:**\n```bash\noperately documents create_document \\\n  --space-id s1 \\\n  --name \"Team Update\" \\\n  --content \"# Q2 Plans\" \\\n  --subscriber-ids u1 \\\n  --subscriber-ids u2 \\\n  --subscriber-ids u3\n```\n\n### Managing Documents\n\n**Get document:**\n```bash\noperately documents get_document --id d1\n```\n\n**Update document:**\n```bash\noperately documents update_document \\\n  --document-id d1 \\\n  --name \"Updated Guide\" \\\n  --content \"# Updated Content\\n\\nRevised with latest information.\"\n```\n\n**Publish draft:**\n```bash\noperately documents publish_document --document-id d1\n```\n\n**Delete document:**\n```bash\noperately documents delete_document --document-id d1\n```\n\n## Files\n\nUse `documents create_file` for PDFs, images, spreadsheets, and other binary attachments. The CLI takes a local path and handles blob creation, upload, preview generation for images, and finalization automatically.\n\n**Important file rules:**\n- `operately documents create_file` uploads exactly one `--file <path>` per command.\n- `--name` changes the stored base name but keeps the source extension.\n- `--description` or `--description-file` sets the file description; it does not replace the uploaded binary.\n\n**Create file at root:**\n```bash\noperately documents create_file \\\n  --space-id s1 \\\n  --file ./architecture.pdf\n```\n\n**Create file in folder with custom name and description:**\n```bash\noperately documents create_file \\\n  --space-id s1 \\\n  --folder-id f1 \\\n  --file ./quarterly-report.pdf \\\n  --name \"Quarterly Report\" \\\n  --description-file ./quarterly-report.md\n```\n\n**Create file with targeted notifications:**\n```bash\noperately documents create_file \\\n  --project-id p1 \\\n  --file ./launch-plan.png \\\n  --send-notifications-to-everyone false \\\n  --subscriber-ids u1 \\\n  --subscriber-ids u2\n```\n\n**Get file:**\n```bash\noperately documents get_file --id file1\n```\n\n**Update file metadata:**\n```bash\noperately documents update_file \\\n  --file-id file1 \\\n  --name \"Quarterly Report.pdf\" \\\n  --description \"# Updated Notes\\n\\nAttached the final version.\"\n```\n\n**Delete file:**\n```bash\noperately documents delete_file --file-id file1\n```\n\n## Links\n\n### Creating Links\n\n**Create link at root:**\n```bash\noperately documents create_link \\\n  --space-id s1 \\\n  --name \"Company Handbook\" \\\n  --url \"https://handbook.example.com\" \\\n  --type \"other\"\n```\n\n**Create link in folder:**\n```bash\noperately documents create_link \\\n  --space-id s1 \\\n  --folder-id f1 \\\n  --name \"Design System\" \\\n  --url \"https://design.example.com\" \\\n  --type \"other\" \\\n  --description \"# Design System\\n\\nOur component library and design guidelines.\"\n```\n\n**Create link with notifications:**\n```bash\noperately documents create_link \\\n  --space-id s1 \\\n  --name \"New Tool\" \\\n  --url \"https://tool.example.com\" \\\n  --type \"other\" \\\n  --description \"Check out our new project management tool\" \\\n  --send-notifications-to-everyone true\n```\n\n### Managing Links\n\n**Get link:**\n```bash\noperately documents get_link --id l1\n```\n\n**Update link:**\n```bash\noperately documents update_link \\\n  --link-id l1 \\\n  --name \"Updated Link Title\" \\\n  --type \"other\" \\\n  --url \"https://new-url.example.com\" \\\n  --description \"Updated description\"\n```\n\n**Delete link:**\n```bash\noperately documents delete_link --link-id l1\n```\n\n## Moving Items Between Folders\n\n### Move Document\n\n```bash\noperately documents update_parent_folder \\\n  --resource-id d1 \\\n  --resource-type \"document\" \\\n  --new-folder-id f2\n```\n\n### Move File\n\n```bash\noperately documents update_parent_folder \\\n  --resource-id file1 \\\n  --resource-type \"file\" \\\n  --new-folder-id f2\n```\n\n### Move Link\n\n```bash\noperately documents update_parent_folder \\\n  --resource-id l1 \\\n  --resource-type \"link\" \\\n  --new-folder-id f2\n```\n\n### Move Folder\n\n```bash\noperately documents update_parent_folder \\\n  --resource-id f1 \\\n  --resource-type \"folder\" \\\n  --new-folder-id f2\n```\n\n### Move to Root\n\n```bash\n# Move to root by setting new-folder-id to null\noperately documents update_parent_folder \\\n  --resource-id d1 \\\n  --resource-type \"document\" \\\n  --new-folder-id null\n```\n\n## Listing and Navigating Contents\n\n### List Root Contents\n\n```bash\noperately documents list_contents --space-id s1\n```\n\n### List Folder Contents\n\n```bash\noperately documents list_contents --folder-id f1\n```\n\n### List with Metadata\n\n```bash\noperately documents list_contents \\\n  --space-id s1 \\\n  --include-comments-count \\\n  --include-children-count\n```\n\nIf `comments_count` or `children_count` is missing from the response, treat that as \"metadata not requested\" unless the matching include flag was passed.\n\n## Project-Scoped Docs & Files\n\nProjects have their own Docs & Files hub. Use `--project-id` instead of `--space-id`:\n\n```bash\n# List project hub contents\noperately documents list_contents --project-id p1\n\n# Add a spec document\noperately documents create_document \\\n  --project-id p1 \\\n  --name \"Technical Spec\" \\\n  --content \"# Spec\\n\\nArchitecture overview...\"\n\n# Upload a PDF\noperately documents create_file \\\n  --project-id p1 \\\n  --file ./spec.pdf\n```\n\n## Common Patterns\n\n### Team Knowledge Base Pattern\n\n```bash\n# 1. Create folder structure\noperately documents create_folder \\\n  --space-id s1 \\\n  --name \"Onboarding\"\n\noperately documents create_folder \\\n  --space-id s1 \\\n  --name \"Architecture\"\n\noperately documents create_folder \\\n  --space-id s1 \\\n  --name \"Processes\"\n\noperately documents create_folder \\\n  --space-id s1 \\\n  --name \"Tools & Resources\"\n\n# 2. Add onboarding documents\noperately documents create_document \\\n  --space-id s1 \\\n  --folder-id onboarding_folder \\\n  --name \"Day 1 Guide\" \\\n  --content \"# Welcome!\\n\\n## Your First Day\\n- Meet the team\\n- Set up accounts\\n- Review codebase\"\n\noperately documents create_document \\\n  --space-id s1 \\\n  --folder-id onboarding_folder \\\n  --name \"Development Setup\" \\\n  --content \"# Dev Environment\\n\\n[setup instructions]\"\n\n# 3. Add architecture docs\noperately documents create_document \\\n  --space-id s1 \\\n  --folder-id architecture_folder \\\n  --name \"System Overview\" \\\n  --content \"# Architecture\\n\\n[system design]\"\n\n# 4. Add tool links\noperately documents create_link \\\n  --space-id s1 \\\n  --folder-id tools_folder \\\n  --name \"CI/CD Dashboard\" \\\n  --url \"https://ci.example.com\" \\\n  --type \"other\"\n```\n\n### Project Documentation Pattern\n\n```bash\n# 1. Create project phases as folders\noperately documents create_folder \\\n  --project-id p1 \\\n  --name \"Discovery\"\n\noperately documents create_folder \\\n  --project-id p1 \\\n  --name \"Design\"\n\noperately documents create_folder \\\n  --project-id p1 \\\n  --name \"Development\"\n\noperately documents create_folder \\\n  --project-id p1 \\\n  --name \"Launch\"\n\n# 2. Add phase-specific content\noperately documents create_document \\\n  --project-id p1 \\\n  --folder-id discovery_folder \\\n  --name \"User Research Findings\" \\\n  --content \"# Research Summary\\n\\n[findings]\"\n\noperately documents create_link \\\n  --project-id p1 \\\n  --folder-id design_folder \\\n  --name \"Figma Mockups\" \\\n  --url \"https://figma.com/file/abc\" \\\n  --type \"other\"\n```\n\n### Policy & Procedures Pattern\n\n```bash\n# 1. Create policy categories\noperately documents create_folder \\\n  --space-id s1 \\\n  --name \"HR Policies\"\n\noperately documents create_folder \\\n  --space-id s1 \\\n  --name \"Security Policies\"\n\noperately documents create_folder \\\n  --space-id s1 \\\n  --name \"Engineering Processes\"\n\n# 2. Add policies\noperately documents create_document \\\n  --space-id s1 \\\n  --folder-id hr_folder \\\n  --name \"Time Off Policy\" \\\n  --content \"# Time Off\\n\\n## Vacation\\n- 20 days per year\\n- Request 2 weeks in advance\"\n\noperately documents create_document \\\n  --space-id s1 \\\n  --folder-id security_folder \\\n  --name \"Access Control Policy\" \\\n  --content \"# Access Control\\n\\n## Principles\\n- Least privilege\\n- Regular reviews\\n- MFA required\"\n```\n\n## Gotchas\n\n### One Hub per Space or Project\n\nEach space and each project has one Docs & Files hub. Scope commands with `--space-id` or `--project-id` — do not look up hub IDs.\n\n### Folder Hierarchy Depth\n\nThere is no technical limit on folder depth, but keep it shallow (3–4 levels max) for usability:\n- Level 1: Main categories (Onboarding, Architecture, Processes)\n- Level 2: Subcategories (Frontend, Backend, DevOps)\n- Level 3: Specific topics (React Guide, API Design)\n- Level 4: Detailed docs (rarely needed)\n\n### Moving Items\n\nWhen moving items between folders, the `resource-type` must be exact:\n- `\"document\"` for documents\n- `\"file\"` for files\n- `\"link\"` for links\n- `\"folder\"` for folders\n\n### Deleting Folders\n\nDeleting a folder will delete its contents (documents, links, subfolders). Check the folder contents first:\n\n```bash\noperately documents list_contents --folder-id f1\n```\n\nMove important items before deleting:\n\n```bash\n# Move items out first\noperately documents update_parent_folder \\\n  --resource-id d1 \\\n  --resource-type \"document\" \\\n  --new-folder-id safe_folder_id\n\n# Then delete folder\noperately documents delete_folder --folder-id f1\n```\n\n### Document Drafts\n\nDraft documents are visible to editors but not published to the team. Use drafts for work-in-progress:\n\n```bash\n# Create draft\noperately documents create_document \\\n  --space-id s1 \\\n  --name \"WIP: New Policy\" \\\n  --content \"# Draft\\n\\nStill writing...\" \\\n  --post-as-draft true\n\n# Publish when ready\noperately documents publish_document --document-id d1\n```\n\n### Link Types\n\nThe `--type` parameter for links is required. Valid values:\n- `airtable`\n- `dropbox`\n- `figma`\n- `google`\n- `google_doc`\n- `google_sheet`\n- `google_slides`\n- `notion`\n- `other`\n\n### Markdown in Documents\n\nDocuments support full markdown including:\n- Headings (`# H1`, `## H2`, etc.)\n- Lists (`-` or `1.`)\n- Links (`[text](url)`)\n- Code blocks (` ``` `)\n- Bold (`**text**`) and italic (`*text*`)\n\nUse markdown for rich, readable documentation. For larger documents, use `--content-file <path>` to load markdown from disk:\n\n```bash\noperately documents create_document \\\n  --space-id s1 \\\n  --name \"API Guide\" \\\n  --content-file ./api-guide.md\n```\n\n### Notifications\n\nUse `--send-notifications-to-everyone` sparingly. For targeted notifications, use `--subscriber-ids`:\n\n```bash\n# Notify specific people\noperately documents create_document \\\n  --space-id s1 \\\n  --name \"Team Update\" \\\n  --content \"# Update\" \\\n  --subscriber-ids u1 \\\n  --subscriber-ids u2\n```\n\n### Searching Content\n\n**Full-text company search** (preferred for content discovery):\n\n```bash\noperately companies search --query \"onboarding\" --sort best_match\noperately companies search --query \"roadmap\" --space-ids s1 --types resource_hub_document --sort most_recent\n```\n\n**Scoped Docs & Files search** (exactly one of `--space-id`, `--project-id`, or `--goal-id`):\n\n```bash\noperately documents search --space-id s1 --query \"onboarding\"\noperately documents search --goal-id g1 --query \"metrics\"\n```\n\n**Quick/broad lookup** (compatibility; includes discussions, folders, documents, files, links):\n\n```bash\noperately companies global_search --query \"onboarding\"\noperately companies quick_search --query \"roadmap\"\n```\n\nFor template blueprint resources, use `project_templates` commands — not live `documents/*`. See [Project Template Workflows](project-template-workflows.md).\n\n### Document Version History\n\n```bash\n# List versions\noperately documents list_document_versions --document-id d1\n\n# Read a specific version\noperately documents get_document_version --document-id d1 --version-number 3\n\n# Restore a previous version\noperately documents restore_document_version --document-id d1 --version-number 3 --expected-current-version 5\n```\n\nWhen updating a document, pass `--expected-version` to detect concurrent edits:\n\n```bash\noperately documents update_document \\\n  --document-id d1 \\\n  --name \"Updated Guide\" \\\n  --content \"# Updated\\n\\nNew content.\" \\\n  --expected-version 5\n```\n\nIf another edit landed first, the CLI returns a version conflict — re-fetch the document and retry.\n\n### Legacy CLI Commands (CLI ≤ 1.6)\n\nOlder CLI versions used separate `resource_hubs/*`, `files/*`, and `links/*` namespaces with `--resource-hub-id`. Those routes still exist on the API for backward compatibility but are hidden from the current CLI catalog. Always use the `documents/*` commands documented above.\n\nFile v1.9.0:references/goal-workflows.md\n\n# Goal Workflows\n\nOKR patterns and goal management workflows in Operately, covering goal creation, hierarchy, targets, check-ins, and lifecycle management.\n\n## Goal Lifecycle\n\n### 1. Create Goal\n\n```bash\noperately goals create \\\n  --space-id s1 \\\n  --name \"Increase Q2 Revenue\" \\\n  --champion-id u1 \\\n  --reviewer-id u2 \\\n  --anonymous-access-level 0 \\\n  --company-access-level 10 \\\n  --space-access-level 70\n```\n\nOptional fields:\n- `--description` - Markdown goal description\n- `--parent-goal-id` - Link to parent goal\n\n**Note:** Access levels are required. Use `--company-access-level 10 --space-access-level 70` for typical team goals.\n\n### 2. Set Targets\n\n```bash\n# Create numeric target\noperately goals create_target \\\n  --goal-id g1 \\\n  --name \"Monthly Recurring Revenue\" \\\n  --start-value 50000 \\\n  --target-value 100000 \\\n  --unit \"USD\"\n\n# Create percentage target\noperately goals create_target \\\n  --goal-id g1 \\\n  --name \"Customer Retention\" \\\n  --start-value 85 \\\n  --target-value 95 \\\n  --unit \"%\"\n```\n\n### 3. Regular Check-ins\n\n```bash\noperately goals create_check_in \\\n  --goal-id g1 \\\n  --status on_track \\\n  --due-date 2026-04-01 \\\n  --content \"# Q2 Progress - Week 4\\n\\n## Current MRR\\n$65,000 (target: $100,000)\\n\\n## Progress\\n- 30% to target\\n- On track for Q2 goal\"\n```\n\n### 4. Update Target Values\n\n```bash\noperately goals update_target_value \\\n  --goal-id g1 \\\n  --target-id t1 \\\n  --value 65000\n```\n\n### 5. Close Goal\n\n```bash\noperately goals close \\\n  --goal-id g1 \\\n  --success achieved \\\n  --success-status achieved \\\n  --retrospective \"# Q2 Revenue Goal Retrospective\\n\\n## Achievement\\nReached $105,000 MRR (105% of target)\\n\\n## Key Drivers\\n- New enterprise customers\\n- Reduced churn\\n- Upsells to existing customers\"\n```\n\n## Goal Hierarchy\n\n### Creating Parent-Child Relationships\n\n```bash\n# Create parent goal\noperately goals create \\\n  --space-id s1 \\\n  --name \"Company Growth 2024\" \\\n  --champion-id u1 \\\n  --anonymous-access-level 0 \\\n  --company-access-level 10 \\\n  --space-access-level 70\n\n# Create child goals\noperately goals create \\\n  --space-id s1 \\\n  --name \"Q1 Revenue\" \\\n  --parent-goal-id g1 \\\n  --champion-id u2 \\\n  --anonymous-access-level 0 \\\n  --company-access-level 10 \\\n  --space-access-level 70\n\noperately goals create \\\n  --space-id s1 \\\n  --name \"Q2 Revenue\" \\\n  --parent-goal-id g1 \\\n  --champion-id u2 \\\n  --anonymous-access-level 0 \\\n  --company-access-level 10 \\\n  --space-access-level 70\n\noperately goals create \\\n  --space-id s1 \\\n  --name \"Customer Acquisition\" \\\n  --parent-goal-id g1 \\\n  --champion-id u3 \\\n  --anonymous-access-level 0 \\\n  --company-access-level 10 \\\n  --space-access-level 70\n```\n\n### Updating Parent Goal\n\n```bash\n# Change parent\noperately goals update_parent_goal \\\n  --goal-id g2 \\\n  --parent-goal-id g1\n\n# Remove parent (make top-level)\noperately goals update_parent_goal \\\n  --goal-id g2 \\\n  --parent-goal-id null\n```\n\n### Searching Parent Goals\n\n```bash\noperately goals search_parent_goal --query \"growth\" --goal-id g1\n```\n\n### Moving Goals Between Spaces\n\n```bash\noperately goals update_space \\\n  --goal-id g1 \\\n  --space-id s2\n```\n\n## Target Management\n\n### Creating Different Target Types\n\n**Numeric targets:**\n```bash\noperately goals create_target \\\n  --goal-id g1 \\\n  --name \"New Customers\" \\\n  --start-value 100 \\\n  --target-value 500 \\\n  --unit \"customers\"\n```\n\n**Currency targets:**\n```bash\noperately goals create_target \\\n  --goal-id g1 \\\n  --name \"Revenue\" \\\n  --start-value 1000000 \\\n  --target-value 2000000 \\\n  --unit \"USD\"\n```\n\n**Percentage targets:**\n```bash\noperately goals create_target \\\n  --goal-id g1 \\\n  --name \"Market Share\" \\\n  --start-value 15 \\\n  --target-value 25 \\\n  --unit \"%\"\n```\n\n### Updating Targets\n\n```bash\n# Update target definition\noperately goals update_target \\\n  --goal-id g1 \\\n  --target-id t1 \\\n  --name \"Updated Target Name\" \\\n  --start-value 100 \\\n  --target-value 600 \\\n  --unit \"customers\"\n\n# Update current value\noperately goals update_target_value \\\n  --goal-id g1 \\\n  --target-id t1 \\\n  --value 350\n\n# Reorder targets\noperately goals update_target_index \\\n  --goal-id g1 \\\n  --target-id t1 \\\n  --index 0\n```\n\n### Deleting Targets\n\n```bash\noperately goals delete_target --goal-id g1 --target-id t1\n```\n\n## Check-in Patterns\n\n### Weekly Check-ins\n\n```bash\noperately goals create_check_in \\\n  --goal-id g1 \\\n  --status on_track \\\n  --due-date 2026-04-01 \\\n  --content \"# Week 1 Update\\n\\n## Progress\\n- MRR: $52,000 (+$2,000)\\n- New customers: 15\\n\\n## Next Week\\n- Launch marketing campaign\\n- Close 3 enterprise deals\"\n```\n\n### Monthly Check-ins\n\n```bash\noperately goals create_check_in \\\n  --goal-id g1 \\\n  --status on_track \\\n  --due-date 2026-04-01 \\\n  --content \"# April Progress\\n\\n## Metrics\\n- MRR: $60,000 (60% to target)\\n- Customer count: 250 (50% to target)\\n- Churn rate: 3% (below 5% target)\\n\\n## Highlights\\n- Closed 2 enterprise deals\\n- Product launch successful\\n\\n## Challenges\\n- Sales cycle longer than expected\\n\\n## May Plan\\n- Focus on mid-market segment\\n- Accelerate onboarding\"\n```\n\n### At-Risk Check-ins\n\n```bash\noperately goals create_check_in \\\n  --goal-id g1 \\\n  --status at_risk \\\n  --due-date 2026-04-01 \\\n  --content \"# Risk Alert - Week 8\\n\\n## Issue\\nMRR growth slowed to $1,000/week (need $3,000/week to hit target)\\n\\n## Root Cause\\n- Marketing campaign underperforming\\n- 2 enterprise deals delayed\\n\\n## Mitigation Plan\\n- Revise marketing strategy\\n- Increase sales outreach\\n- Consider target adjustment\"\n```\n\n### Off-Track Check-ins\n\n```bash\noperately goals create_check_in \\\n  --goal-id g1 \\\n  --status off_track \\\n  --due-date 2026-04-01 \\\n  --content \"# Status Update - Week 10\\n\\n## Current State\\nMRR: $58,000 (58% to target with 2 weeks left)\\n\\n## Analysis\\nUnlikely to reach $100,000 target\\n\\n## Options\\n1. Extend timeline to Q3\\n2. Revise target to $75,000\\n3. Close as partially achieved\\n\\n## Recommendation\\nRevise target based on market conditions\"\n```\n\n### Acknowledging Check-ins\n\n```bash\n# Reviewer acknowledges check-in\noperately goals acknowledge_check_in --id ci1\n\n# List check-ins\noperately goals list_check_ins --goal-id g1\n\n# Get specific check-in\noperately goals get_check_in --id ci1\n\n# Update check-in\noperately goals update_check_in \\\n  --id ci1 \\\n  --due-date 2026-04-01 \\\n  --status on_track \\\n  --content \"# Updated Status\\n\\nRevised after team discussion.\"\n```\n\n## Roles and Responsibilities\n\n### Champion\n\nThe champion owns the goal and drives execution.\n\n```bash\n# Set champion\noperately goals update_champion \\\n  --goal-id g1 \\\n  --champion-id u1\n```\n\nChampion responsibilities:\n- Regular check-ins\n- Target updates\n- Risk management\n- Team coordination\n\n### Reviewer\n\nThe reviewer provides oversight and accountability.\n\n```bash\n# Set reviewer\noperately goals update_reviewer \\\n  --goal-id g1 \\\n  --reviewer-id u2\n```\n\nReviewer responsibilities:\n- Acknowledge check-ins\n- Provide feedback\n- Approve goal closure\n- Escalate issues\n\n## Goal Checks (Sub-goals/Milestones)\n\n### Creating Checks\n\n```bash\noperately goals create_check \\\n  --goal-id g1 \\\n  --name \"Launch new pricing tier\"\n\noperately goals create_check \\\n  --goal-id g1 \\\n  --name \"Hire 2 sales reps\"\n\noperately goals create_check \\\n  --goal-id g1 \\\n  --name \"Implement referral program\"\n```\n\n### Managing Checks\n\n```bash\n# Toggle check completion\noperately goals toggle_check --goal-id g1 --check-id c1\n\n# Update check\noperately goals update_check \\\n  --goal-id g1 \\\n  --check-id c1 \\\n  --name \"Updated check name\"\n\n# Reorder checks\noperately goals update_check_index \\\n  --goal-id g1 \\\n  --check-id c1 \\\n  --index 0\n\n# Delete check\noperately goals delete_check --goal-id g1 --check-id c1\n```\n\n## Goal Docs & Files\n\nGoals have their own Docs & Files hub. Scope commands with `--goal-id`:\n\n```bash\noperately documents list_contents --goal-id g1\n\noperately documents create_document \\\n  --goal-id g1 \\\n  --name \"Goal Playbook\" \\\n  --content \"# Playbook\\n\\nHow we track this goal.\"\n\noperately documents create_file \\\n  --goal-id g1 \\\n  --file ./metrics-dashboard.pdf\n```\n\nSee [Docs & Files](docs-and-files.md) for search, version history, and notification options.\n\n## Goal Discussions\n\n### Creating Discussions\n\n```bash\noperately goals create_discussion \\\n  --goal-id g1 \\\n  --title \"Target Adjustment Discussion\" \\\n  --message \"# Should We Revise Our Q2 Target?\\n\\n## Context\\nMarket conditions have changed.\\n\\n## Proposal\\nRevise from $100K to $75K.\\n\\n## Feedback Needed\\nThoughts from the team?\"\n\noperately goals create_discussion \\\n  --goal-id g1 \\\n  --title \"Target Adjustment Discussion\" \\\n  --message-file ./target-adjustment.md\n```\n\n### Managing Discussions\n\n```bash\n# List discussions\noperately goals list_discussions --goal-id g1\n\n# Update discussion\noperately goals update_discussion \\\n  --activity-id d1 \\\n  --title \"Updated Discussion Title\" \\\n  --message \"# Updated Content\"\n\noperately goals update_discussion \\\n  --activity-id d1 \\\n  --title \"Updated Discussion Title\" \\\n  --message-file ./updated-discussion.md\n```\n\n## Access Control\n\n### Managing Access Members\n\n```bash\n# Add access members\noperately goals create_access_members \\\n  --goal-id g1 \\\n  --members.0.id u1 \\\n  --members.0.access-level 70 \\\n  --members.1.id u2 \\\n  --members.1.access-level 40\n\n# List access members\noperately goals list_access_members --goal-id g1\n\n# Update access level\noperately goals update_access_member \\\n  --goal-id g1 \\\n  --person-id u1 \\\n  --access-level 70\n\n# Remove access member\noperately goals delete_access_member --goal-id g1 --person-id u1\n```\n\n### Updating Access Levels\n\n```bash\noperately goals update_access_levels \\\n  --goal-id g1 \\\n  --access-levels.public 0 \\\n  --access-levels.company 10 \\\n  --access-levels.space 70\n```\n\nAccess levels:\n- `0` - No access\n- `10` - View only\n- `40` - Comment\n- `70` - Edit\n- `100` - Full access\n\n## Goal Lifecycle States\n\n### Reopen Goal\n\n```bash\noperately goals reopen \\\n  --id g1 \\\n  --message \"Reopening after new planning input.\"\n```\n\nUse cases:\n- Goal closed prematurely\n- New information requires continuation\n- Quarterly goals rolling into next quarter\n\n### Close Goal\n\n```bash\n# Close goal with notification controls\noperately goals close \\\n  --goal-id g1 \\\n  --success achieved \\\n  --success-status achieved \\\n  --retrospective \"# Success!\\n\\nExceeded target by 15%.\" \\\n  --send-notifications-to-everyone false \\\n  --subscriber-ids u2\n\n# Not achieved\noperately goals close \\\n  --goal-id g1 \\\n  --success no \\\n  --success-status missed \\\n  --retrospective \"# Lessons Learned\\n\\nMarket conditions changed significantly.\"\n\n# Reviewer acknowledges — authors cannot acknowledge their own. From list_assignments, use origin.id.\noperately goals acknowledge_retrospective --goal-id g1\n```\n\n## Common Patterns\n\n## Gotchas\n\n### Target Value Updates\n\nUpdate target values regularly (weekly or bi-weekly) to keep progress visible. Don't wait until check-ins.\n\n### Check-in vs Target Update\n\nCheck-ins are narrative updates. Target value updates are data points. Both are important.\n\n### Parent Goal Changes\n\nChanging a goal's parent affects visibility and reporting. Ensure the new parent's space has appropriate access.\n\n### Goal Hierarchy Depth\n\nKeep hierarchy shallow (2-3 levels max). Deep hierarchies become hard to manage:\n- Level 1: Company/Annual goals\n- Level 2: Department/Quarterly goals\n- Level 3: Team/Monthly goals\n\n### Access Control\n\nGoals inherit space access by default. Use access members for cross-functional goals that need specific visibility.\n\nFile v1.9.0:references/project-template-workflows.md\n\n# Project Template Workflows\n\nReusable project templates are blueprints stored in a space's template library. Use the `project_templates` namespace to create, edit, and instantiate templates. Template content is **not** live work — use live namespaces when collaborating on active projects, goals, or spaces.\n\nSee also: [Project Workflows](project-workflows.md) for live projects, [Docs & Files](docs-and-files.md) for live hub commands, [Collaboration Patterns](collaboration-patterns.md) for live vs template comments.\n\n## When to Use Templates vs Live Commands\n\n| Intent | Use | Example |\n| --- | --- | --- |\n| Edit a reusable blueprint | `project_templates …` | `operately project_templates update_task …` |\n| Collaborate on an active project | `projects …`, `tasks …`, `comments …` | `operately comments create --entity-type project_task …` |\n| Comment on blueprint content | `project_templates create_comment …` | `--parent-type discussion` |\n| Comment on live check-ins, tasks, docs | `comments create …` | `--entity-type project_check_in` |\n| Staff a template blueprint | `project_templates create_person …` | roles, access, task assignments |\n| Add people to a live project | `projects create_contributor …` | `--permissions edit_access` |\n| Template Docs & Files | `project_templates create_document …` | materializes when a project is created |\n| Live Docs & Files | `documents create_document …` | `--space-id`, `--project-id`, or `--goal-id` |\n\n## Feature Availability\n\nTemplates are feature-gated per space. Enable them without overwriting unrelated tool settings:\n\n```bash\noperately spaces update_tools \\\n  --space-id s1 \\\n  --tools.templates-enabled true\n```\n\nCheck whether templates are enabled on a space via `operately spaces get --id s1` (`templates_enabled` field).\n\n**Archived templates** can be listed and restored, but cannot be used with `create_project`.\n\n## Library and Lifecycle\n\n### List and Get\n\n```bash\noperately project_templates list --space-id s1\noperately project_templates get --id pt1\n```\n\n### Create Empty Template\n\n```bash\noperately project_templates create \\\n  --space-id s1 \\\n  --name \"Product Launch Blueprint\" \\\n  --description \"# Launch template\\n\\nStandard launch workflow.\"\n```\n\n### Save Template from Existing Project\n\nReturns `schedule_issues` when the source project has dates before its start date:\n\n```bash\noperately project_templates create_from_project \\\n  --project-id p1 \\\n  --name \"Launch Template from Q2 Project\" \\\n  --include-people-and-assignments true \\\n  --include-discussions true \\\n  --include-docs-and-files true\n```\n\nReview `schedule_issues` in the response and adjust relative offsets if needed.\n\n### Create Live Project from Template\n\n```bash\noperately project_templates create_project \\\n  --template-id pt1 \\\n  --space-id s1 \\\n  --start-date 2026-09-01 \\\n  --name \"Q4 Product Launch\" \\\n  --anonymous-access-level 0 \\\n  --company-access-level 10 \\\n  --space-access-level 70\n```\n\nOptional: `--goal-id g1` to link the new project to a goal.\n\n### Duplicate, Update, Archive, Restore, Delete\n\n```bash\noperately project_templates duplicate --id pt1 --name \"Copy of Launch Blueprint\"\noperately project_templates update --id pt1 --name \"Updated Launch Blueprint\"\noperately project_templates archive --id pt1\noperately project_templates restore --id pt1\noperately project_templates delete --id pt1\n```\n\n## Relative Scheduling\n\nTemplate milestones and tasks use **due offsets** (days from project start), not absolute calendar dates. When `create_project` runs, offsets are converted using `--start-date`.\n\n```bash\noperately project_templates create_milestone \\\n  --template-id pt1 \\\n  --title \"Beta Launch\" \\\n  --due-offset-days 30\n\noperately project_templates update_milestone \\\n  --template-id pt1 \\\n  --milestone-id tm1 \\\n  --title \"Public Launch\" \\\n  --due-offset-days 45\n```\n\nUpdate the template's project duration with `operately project_templates update --id pt1 --duration-days 90`.\n\n## Plan Structure\n\n### Milestones\n\n```bash\noperately project_templates create_milestone \\\n  --template-id pt1 \\\n  --title \"Design Phase\" \\\n  --due-offset-days 14\n\noperately project_templates update_milestone \\\n  --template-id pt1 \\\n  --milestone-id tm1 \\\n  --title \"Design & Research\" \\\n  --due-offset-days 21\n\noperately project_templates delete_milestone \\\n  --template-id pt1 \\\n  --milestone-id tm1\n```\n\n### Tasks\n\n```bash\noperately project_templates create_task \\\n  --template-id pt1 \\\n  --milestone-id tm1 \\\n  --name \"Create wireframes\" \\\n  --due-offset-days 7\n\noperately project_templates update_task \\\n  --template-id pt1 \\\n  --task-id tt1 \\\n  --name \"Create high-fidelity mockups\" \\\n  --due-offset-days 10\n\noperately project_templates delete_task \\\n  --template-id pt1 \\\n  --task-id tt1\n```\n\nClear a template task due offset with `--due-offset-days null` when no offset is intended.\n\n### Move Tasks (Zero-Based Index)\n\n```bash\noperately project_templates update_milestone_and_ordering \\\n  --template-id pt1 \\\n  --task-id tt1 \\\n  --milestone-id tm2 \\\n  --index 0\n```\n\n`--index` is zero-based within the target milestone.\n\n### Task Assignees\n\n```bash\noperately project_templates update_task_assignees \\\n  --template-id pt1 \\\n  --task-id tt1 \\\n  --assignee-ids u1 \\\n  --assignee-ids u2\n```\n\n## Template Contributors (People)\n\nTemplate contributors define blueprint staffing. They are **not** live project contributors.\n\n```bash\noperately project_templates create_person \\\n  --template-id pt1 \\\n  --person-id u1 \\\n  --role reviewer \\\n  --responsibility \"Product Lead\" \\\n  --access-level 70\n\noperately project_templates update_person \\\n  --template-id pt1 \\\n  --template-person-id tp1 \\\n  --responsibility \"Lead PM\" \\\n  --access-level 70\n\noperately project_templates delete_person \\\n  --template-id pt1 \\\n  --template-person-id tp1\n```\n\n## Discussions and Comments\n\n### Discussions\n\n```bash\noperately project_templates create_discussion \\\n  --template-id pt1 \\\n  --title \"Launch checklist\" \\\n  --body \"# Pre-launch\\n\\nReview before each launch.\"\n\noperately project_templates get_discussion \\\n  --template-id pt1 \\\n  --discussion-id td1\n\noperately project_templates update_discussion \\\n  --template-id pt1 \\\n  --discussion-id td1 \\\n  --title \"Updated launch checklist\" \\\n  --body-file ./launch-checklist.md\n```\n\n### Template Comments (Not Live Comments)\n\nUse `project_templates` comment commands for blueprint content only:\n\n```bash\noperately project_templates list_comments \\\n  --template-id pt1 \\\n  --parent-type discussion \\\n  --parent-id td1\n\noperately project_templates create_comment \\\n  --template-id pt1 \\\n  --parent-type discussion \\\n  --parent-id td1 \\\n  --content \"Add security review step.\"\n\noperately project_templates update_comment \\\n  --template-id pt1 \\\n  --comment-id tc1 \\\n  --content \"Add security and compliance review.\"\n\noperately project_templates delete_comment \\\n  --template-id pt1 \\\n  --comment-id tc1\n```\n\nValid `--parent-type` values: `discussion`, `document`, `file`, `link`.\n\nFor comments on **live** resources, use `operately comments create/update/delete` instead.\n\n## Template Docs & Files\n\nTemplate resources are separate from live `documents/*` commands. They copy into the project hub when `create_project` runs.\n\n### Folders\n\n```bash\noperately project_templates create_folder \\\n  --template-id pt1 \\\n  --name \"Specs\"\n\noperately project_templates update_folder \\\n  --template-id pt1 \\\n  --folder-id tf1 \\\n  --name \"Technical Specs\"\n```\n\n### Documents\n\n```bash\noperately project_templates create_document \\\n  --template-id pt1 \\\n  --name \"Launch Runbook\" \\\n  --content \"# Runbook\\n\\nSteps for launch day.\"\n\noperately project_templates update_document \\\n  --template-id pt1 \\\n  --document-id td1 \\\n  --name \"Launch Runbook v2\" \\\n  --content-file ./runbook.md\n```\n\n### Links\n\n```bash\noperately project_templates create_link \\\n  --template-id pt1 \\\n  --name \"Design System\" \\\n  --url \"https://design.example.com\" \\\n  --type other\n```\n\n### File Upload\n\nUpload a local file into the template (handles blob upload internally):\n\n```bash\noperately project_templates create_file \\\n  --template-id pt1 \\\n  --file ./launch-checklist.pdf\n\noperately project_templates create_file \\\n  --template-id pt1 \\\n  --parent-folder-id tf1 \\\n  --file ./spec.pdf \\\n  --name \"Product Spec\" \\\n  --description-file ./spec-notes.md\n```\n\n### Update, Move, Delete Resources\n\n```bash\noperately project_templates update_file \\\n  --template-id pt1 \\\n  --file-id tf1 \\\n  --name \"Updated Spec\"\n\noperately project_templates move_resource \\\n  --template-id pt1 \\\n  --node-id tr1 \\\n  --parent-folder-id tf2\n\noperately project_templates delete_resource \\\n  --template-id pt1 \\\n  --node-id tr1\n```\n\n## Include Toggles on create_from_project\n\nWhen saving a project as a template, control what is copied:\n\n| Flag | Default | Copies |\n| --- | --- | --- |\n| `--include-people-and-assignments` | `false` | Contributors and task assignees |\n| `--include-discussions` | `true` | Template discussions |\n| `--include-docs-and-files` | `true` | Folders, documents, links, files |\n| `--include-comments` | `false` | Comments on included resources |\n\n## Gotchas\n\n### Wrong Namespace\n\nIf a command returns `not_found` for a template parent, confirm you are not using live `comments/*` or `documents/*` on template IDs (or vice versa).\n\n### Archived Templates\n\n`list` may include archived templates. Restore with `restore` before `create_project`.\n\n### Live Task Routing\n\nEdit tasks on active projects with `tasks/*`. Edit blueprint tasks with `project_templates create_task`, `update_task`, etc.\n\n### CLI Version\n\nProject templates, scoped search, and document history require Operately CLI **1.9.0** or newer. Run `operately --version` before template workflows.\n\nFile v1.9.0:references/project-workflows.md\n\n# Project Workflows\n\nComplete lifecycle patterns for managing projects in Operately, from creation through milestones, tasks, check-ins, and closure.\n\n## Project Lifecycle\n\n### 1. Create Project\n\n```bash\noperately projects create \\\n  --space-id s1 \\\n  --name \"Q2 Product Roadmap\" \\\n  --champion-id u1 \\\n  --reviewer-id u2 \\\n  --anonymous-access-level 0 \\\n  --company-access-level 40 \\\n  --space-access-level 70\n```\n\nOptional fields:\n- `--description` - Markdown project description\n- `--goal-id` - Link to parent goal\n\n**Note:** Access levels are required. Use `--company-access-level 40 --space-access-level 70` for typical team projects.\n\n### 2. Set Up Milestones\n\n```bash\n# Create milestones\noperately projects create_milestone \\\n  --project-id p1 \\\n  --name \"Design Phase\" \\\n  --due-date 2024-05-15\n\noperately projects create_milestone \\\n  --project-id p1 \\\n  --name \"Development Phase\" \\\n  --due-date 2024-06-15\n\noperately projects create_milestone \\\n  --project-id p1 \\\n  --name \"Launch\" \\\n  --due-date 2024-06-30\n```\n\n### 3. Add Contributors\n\n```bash\n# Add team members with roles\noperately projects create_contributor \\\n  --project-id p1 \\\n  --person-id u3 \\\n  --responsibility \"Lead Designer\" \\\n  --permissions edit_access \\\n  --role reviewer\n\noperately projects create_contributor \\\n  --project-id p1 \\\n  --person-id u4 \\\n  --responsibility \"Backend Engineer\" \\\n  --permissions edit_access \\\n  --role contributor\n\noperately projects create_contributor \\\n  --project-id p1 \\\n  --person-id u5 \\\n  --responsibility \"QA Lead\" \\\n  --permissions edit_access \\\n  --role contributor\n```\n\n### 4. Create Tasks\n\n```bash\n# Create tasks for milestones\noperately tasks create \\\n  --type project \\\n  --id p1 \\\n  --name \"Create wireframes\" \\\n  --milestone-id m1 \\\n  --assignee-id u3 \\\n  --due-date 2024-05-10\n\noperately tasks create \\\n  --type project \\\n  --id p1 \\\n  --name \"Design mockups\" \\\n  --milestone-id m1 \\\n  --assignee-id u3 \\\n  --due-date 2024-05-15\n\noperately tasks create \\\n  --type project \\\n  --id p1 \\\n  --name \"API development\" \\\n  --milestone-id m2 \\\n  --assignee-id u4 \\\n  --due-date 2024-06-10\n```\n\n### 5. Regular Check-ins\n\n```bash\n# Weekly check-in\noperately projects create_check_in \\\n  --project-id p1 \\\n  --status on_track \\\n  --description \"# Week 1 Progress\\n\\n## Completed\\n- Wireframes done\\n- Design review scheduled\\n\\n## Next Week\\n- Start mockups\\n- Finalize color palette\"\n\n# Off-track check-in\noperately projects create_check_in \\\n  --project-id p1 \\\n  --status off_track \\\n  --description \"# Week 3 Progress\\n\\n## Issues\\n- API development delayed due to infrastructure issues\\n\\n## Mitigation\\n- Working with DevOps to resolve\\n- May need to extend milestone by 3 days\"\n```\n\n### 6. Update Project Status\n\n```bash\n# Update milestone dates\noperately projects update_milestone_due_date \\\n  --milestone-id m2 \\\n  --due-date 2024-06-18\n\n# Update task status\noperately tasks update_status --task-id t1 --type project --status.id done --status.label \"Done\" --status.color green --status.index 2 --status.value done --status.closed true\noperately tasks update_status --task-id t2 --type project --status.id in_progress --status.label \"In Progress\" --status.color blue --status.index 1 --status.value in_progress --status.closed false\n```\n\n### 7. Close Project\n\n```bash\noperately projects close \\\n  --project-id p1 \\\n  --retrospective \"# Project Retrospective\\n\\n## What Went Well\\n- Strong team collaboration\\n- Clear milestones\\n\\n## What Could Improve\\n- Earlier infrastructure planning\\n- More frequent stakeholder updates\" \\\n  --success-status achieved\n```\n\n## Milestone Management Patterns\n\n### Creating Milestones\n\n```bash\noperately projects create_milestone \\\n  --project-id p1 \\\n  --name \"Phase 1: Discovery\" \\\n  --due-date 2024-05-01\n\noperately projects create_milestone \\\n  --project-id p1 \\\n  --name \"Phase 2: Implementation\" \\\n  --due-date 2024-06-01\n\noperately projects create_milestone \\\n  --project-id p1 \\\n  --name \"Phase 3: Launch\" \\\n  --due-date 2024-06-30\n```\n\n### Updating Milestone Details\n\n```bash\n# Update title\noperately projects update_milestone_title \\\n  --milestone-id m1 \\\n  --title \"Phase 1: Discovery & Research\"\n\n# Update description\noperately projects update_milestone_description \\\n  --milestone-id m1 \\\n  --description \"# Discovery Phase\\n\\n## Goals\\n- User research\\n- Competitive analysis\\n- Requirements gathering\"\n\n# Update due date\noperately projects update_milestone_due_date \\\n  --milestone-id m1 \\\n  --due-date 2024-05-05\n```\n\n### Milestone Task Management\n\n```bash\n# List tasks for a milestone\noperately projects list_milestone_tasks --milestone-id m1\n```\n\n## Contributor Workflows\n\n### Adding Contributors\n\n```bash\n# Single contributor\noperately projects create_contributor \\\n  --project-id p1 \\\n  --person-id u1 \\\n  --responsibility \"Technical Lead\" \\\n  --permissions edit_access \\\n  --role reviewer\n\n# Multiple contributors\noperately projects create_contributors \\\n  --project-id p1 \\\n  --contributors.0.person-id u2 \\\n  --contributors.0.responsibility \"Product Lead\" \\\n  --contributors.0.access-level edit_access \\\n  --contributors.1.person-id u3 \\\n  --contributors.1.responsibility \"Engineering Lead\" \\\n  --contributors.1.access-level edit_access \\\n  --contributors.2.person-id u4 \\\n  --contributors.2.responsibility \"Designer\" \\\n  --contributors.2.access-level comment_access\n```\n\n### Managing Contributors\n\n```bash\n# List contributors\noperately projects list_contributors --project-id p1\n\n# Get contributor details\noperately projects get_contributor --id c1\n\n# Update responsibility\noperately projects update_contributor \\\n  --contrib-id c1 \\\n  --responsibility \"Lead Engineer & Architecture Owner\"\n\n# Remove contributor\noperately projects delete_contributor --contrib-id c1\n```\n\nAdding the same person twice is rejected. Use `update_contributor` to change responsibility or access on an existing contributor.\n\n### Searching for Contributors\n\n```bash\noperately projects search_potential_contributors \\\n  --project-id p1 \\\n  --query \"engineer\"\n```\n\n## Resources\n\nLink important documents through the project's Docs & Files hub instead. See [Docs & Files](docs-and-files.md).\n\n## Project Templates\n\nSave repeatable project structures as templates and instantiate them in a space. See [Project Template Workflows](project-template-workflows.md).\n\n## Project Docs & Files\n\nEvery project has its own Docs & Files hub. Use `--project-id` to scope commands:\n\n```bash\n# List project hub contents\noperately documents list_contents --project-id p1\n\n# Create a spec document\noperately documents create_document \\\n  --project-id p1 \\\n  --name \"Technical Spec\" \\\n  --content \"# Spec\\n\\nArchitecture overview...\"\n\n# Upload a PDF\noperately documents create_file \\\n  --project-id p1 \\\n  --file ./spec.pdf\n```\n\nSee [Docs & Files Reference](docs-and-files.md) for full command coverage.\n\n## Project Discussions\n\n### Creating Discussions\n\n```bash\noperately projects create_discussion \\\n  --project-id p1 \\\n  --title \"Architecture Decision: Database Choice\" \\\n  --message \"# Database Selection\\n\\n## Options\\n1. PostgreSQL\\n2. MongoDB\\n\\n## Recommendation\\nPostgreSQL for ACID compliance.\"\n\noperately projects create_discussion \\\n  --project-id p1 \\\n  --title \"Architecture Decision: Database Choice\" \\\n  --message-file ./database-choice.md\n```\n\n### Managing Discussions\n\n```bash\n# List discussions\noperately projects list_discussions --project-id p1\n\n# Get discussion\noperately projects get_discussion --id d1\n\n# Update discussion\noperately projects update_discussion \\\n  --id d1 \\\n  --title \"Updated: Database Decision\" \\\n  --message \"# Final Decision\\n\\nWe chose PostgreSQL.\"\n\noperately projects update_discussion \\\n  --id d1 \\\n  --title \"Updated: Database Decision\" \\\n  --message-file ./final-decision.md\n```\n\n## Check-in Patterns\n\n### Weekly Status Updates\n\n```bash\noperately projects create_check_in \\\n  --project-id p1 \\\n  --status on_track \\\n  --description \"# Weekly Update - Week of May 1\\n\\n## Progress\\n- Completed 5 tasks\\n- Design review approved\\n\\n## Next Week\\n- Start development\\n- Set up CI/CD\"\n```\n\n### Milestone Completion Check-in\n\n```bash\noperately projects create_check_in \\\n  --project-id p1 \\\n  --status on_track \\\n  --description \"# Milestone Complete: Design Phase\\n\\n## Deliverables\\n- ✅ Wireframes\\n- ✅ High-fidelity mockups\\n- ✅ Design system components\\n\\n## Next Milestone\\nStarting development phase.\"\n```\n\n### Off-Track Check-in\n\n```bash\noperately projects create_check_in \\\n  --project-id p1 \\\n  --status off_track \\\n  --description \"# Risk Alert\\n\\n## Issue\\nKey engineer on leave, development delayed.\\n\\n## Mitigation\\n- Reassigning tasks\\n- Extending timeline by 1 week\\n- Daily standups for visibility\"\n```\n\n### Acknowledging Check-ins\n\n```bash\n# Reviewer acknowledges check-in\noperately projects acknowledge_check_in --id ci1\n\n# List check-ins\noperately projects list_check_ins --project-id p1\n\n# Get specific check-in\noperately projects get_check_in --id ci1\n\n# Edit an unpublished check-in (notification recipients optional)\noperately projects update_check_in \\\n  --check-in-id ci1 \\\n  --status on_track \\\n  --description \"# Updated progress\\n\\nRevised after review.\" \\\n  --send-notifications-to-everyone false \\\n  --subscriber-ids u2\n```\n\n## Retrospectives\n\n### Updating Retrospective\n\n```bash\noperately projects update_retrospective \\\n  --retrospective-id r1 \\\n  --content \"# Q2 Roadmap Retrospective\\n\\n## What Went Well\\n- Clear milestones and deliverables\\n- Strong team collaboration\\n- Regular check-ins kept everyone aligned\\n\\n## What Could Improve\\n- Earlier infrastructure planning\\n- More buffer time for QA\\n- Better stakeholder communication\\n\\n## Action Items\\n- Document infrastructure requirements upfront\\n- Add 20% buffer to estimates\\n- Weekly stakeholder updates\" \\\n  --success-status achieved\n```\n\n### Getting Retrospective\n\n```bash\noperately projects get_retrospective --project-id p1\n```\n\n### Acknowledging Retrospective\n\n```bash\n# Reviewer only — authors cannot acknowledge their own. From list_assignments, use origin.id.\noperately projects acknowledge_retrospective --project-id p1\n```\n\n## Project Permissions\n\n### Updating Access Levels\n\n```bash\noperately projects update_permissions \\\n  --project-id p1 \\\n  --access-levels.public 0 \\\n  --access-levels.company 10 \\\n  --access-levels.space 70\n```\n\nAccess levels:\n- `0` - No access\n- `10` - View only\n- `40` - Comment\n- `70` - Edit\n- `100` - Full access\n\n## Moving Projects\n\n### Move to Different Space\n\n```bash\noperately projects move_to_space \\\n  --project-id p1 \\\n  --space-id s2\n```\n\n## Project States\n\n### Pause Project\n\n```bash\noperately projects pause \\\n  --project-id p1 \\\n  --message \"Waiting for budget approval\"\n```\n\n### Resume Project\n\n```bash\noperately projects resume \\\n  --project-id p1 \\\n  --message \"Budget approved — resuming work.\"\n```\n\n## Gotchas\n\n### Milestone Ordering\n\nMilestones are ordered by the sequence in `update_milestone_ordering`. If you don't specify order, they appear in creation order.\n\n### Task Status IDs\n\nTask status IDs are project-specific. Use `operately projects get --id p1` to see available statuses for a project.\n\n### Check-in Frequency\n\nRegular check-ins (weekly or bi-weekly) keep stakeholders informed and help catch issues early. Don't wait for problems to create check-ins.\n\n### Contributor vs Member\n\nContributors are project-specific roles. Space members have broader access. Add contributors to clarify project responsibilities and give them specific permissions.\n\nFile v1.9.0:references/space-workflows.md\n\n# Space Workflows\n\nComplete workflows for managing spaces in Operately, covering space creation, member management, tools configuration, discussions, tasks, and access control.\n\n## Space Lifecycle\n\n### 1. Create Space\n\n```bash\noperately spaces create \\\n  --name \"Engineering\" \\\n  --mission \"Build great products\" \\\n  --company-permissions 10 \\\n  --public-permissions 0\n```\n\n**Permission values:**\n- `0` - No access\n- `10` - View only\n- `40` - Comment\n- `70` - Edit\n- `100` - Full access\n\n**Common patterns:**\n- **Open team space**: `--company-permissions 10`\n- **Secret space**: `--company-permissions 0`\n- **Collaborative space**: `--company-permissions 40`\n\n### 2. Configure Space Tools\n\n```bash\n# List available tools and their status\noperately spaces list_tools --space-id s1\n\n# Enable project templates only (partial update — other tools unchanged)\noperately spaces update_tools \\\n  --space-id s1 \\\n  --tools.templates-enabled true\n\n# Enable all common tools\noperately spaces update_tools \\\n  --space-id s1 \\\n  --tools.tasks-enabled true \\\n  --tools.discussions-enabled true \\\n  --tools.resource-hub-enabled true \\\n  --tools.templates-enabled true\n```\n\nWhen `templates_enabled` is true on a space, the template library is available via `operately project_templates list --space-id s1`. See [Project Template Workflows](project-template-workflows.md).\n\n**Note:** Docs & Files commands use `--space-id` directly. You do not need to look up a hub ID from `list_tools`.\n\n### 3. Add Members\n\n```bash\n# Add single member\noperately spaces add_members \\\n  --space-id s1 \\\n  --members.0.id u1 \\\n  --members.0.access-level 70\n\n# Add multiple members\noperately spaces add_members \\\n  --space-id s1 \\\n  --members.0.id u1 \\\n  --members.0.access-level 100 \\\n  --members.1.id u2 \\\n  --members.1.access-level 70 \\\n  --members.2.id u3 \\\n  --members.2.access-level 40\n```\n\n### 4. Update Space Details\n\n```bash\noperately spaces update \\\n  --id s1 \\\n  --name \"Platform Engineering\" \\\n  --mission \"Build and maintain scalable infrastructure\"\n```\n\n### 5. Manage Space\n\n```bash\n# List all spaces\noperately spaces list\n\n# Get space details\noperately spaces get --id s1\n\n# Search for spaces\noperately spaces search --query \"engineering\"\n\n# Delete space\noperately spaces delete --space-id s1\n```\n\n## Member Management Patterns\n\n### Adding Members\n\n```bash\n# Add team lead with full access\noperately spaces add_members \\\n  --space-id s1 \\\n  --members.0.id u1 \\\n  --members.0.access-level 100\n\n# Add team members with edit access\noperately spaces add_members \\\n  --space-id s1 \\\n  --members.0.id u2 \\\n  --members.0.access-level 70 \\\n  --members.1.id u3 \\\n  --members.1.access-level 70\n\n# Add observers with comment access\noperately spaces add_members \\\n  --space-id s1 \\\n  --members.0.id\n\nArchive v1.4.0: 11 files, 45327 bytes\n\nFiles: references/assignments-and-reviews.md (6840b), references/auth-flows.md (25659b), references/collaboration-patterns.md (13645b), references/docs-and-files.md (14688b), references/goal-workflows.md (10771b), references/project-workflows.md (11504b), references/space-workflows.md (15502b), references/task-workflows.md (17974b), skill-card.md (3069b), SKILL.md (37564b), _meta.json (132b)\n\nArchive v1.2.0: 11 files, 43892 bytes\n\nFiles: references/assignments-and-reviews.md (6507b), references/auth-flows.md (25659b), references/collaboration-patterns.md (13726b), references/goal-workflows.md (10611b), references/project-workflows.md (10775b), references/resource-hubs.md (14424b), references/space-workflows.md (15564b), references/task-workflows.md (17974b), skill-card.md (3026b), SKILL.md (35375b), _meta.json (132b)\n\nArchive v1.1.0: 10 files, 41151 bytes\n\nFiles: references/assignments-and-reviews.md (6507b), references/auth-flows.md (25659b), references/collaboration-patterns.md (13726b), references/goal-workflows.md (10611b), references/project-workflows.md (10775b), references/resource-hubs.md (12731b), references/space-workflows.md (15564b), references/task-workflows.md (17974b), SKILL.md (32813b), _meta.json (132b)\n\nArchive v1.0.0: 9 files, 30934 bytes\n\nFiles: references/assignments-and-reviews.md (6507b), references/collaboration-patterns.md (12790b), references/goal-workflows.md (10336b), references/project-workflows.md (10494b), references/resource-hubs.md (12387b), references/space-workflows.md (15071b), references/task-workflows.md (17772b), SKILL.md (23178b), _meta.json (132b)","readmeExcerpt":"Skill: Operately CLI Owner: markoa Summary: Skills for working with Operately, the open source system for running goals and projects. Manage Operately from the CLI: goals, OKRs, projects, tasks, milestones, spaces, documents, discussions, check-ins, reviews, assignments, people, permissions, and documents. Tags: latest:1.9.0 Version history: v1.9.0 | 2026-09-21T11:48:09.772Z | user **Major update with new features an","codeSnippets":[],"executableExamples":[{"language":"bash","snippet":"operately --version"},{"language":"bash","snippet":"operately auth whoami"},{"language":"bash","snippet":"operately auth login --token <your-token>\noperately auth whoami"},{"language":"bash","snippet":"# Self-hosted instance\noperately auth login --token <token> --base-url https://operately.yourcompany.com\n\n# Check current base URL\noperately auth whoami"},{"language":"bash","snippet":"# Password login: fully flag-driven when company and access mode are known\noperately auth login \\\n  --method email-password \\\n  --email user@example.com \\\n  --password secret123456 \\\n  --company-id <company-id> \\\n  --access-mode full-access \\\n  --profile work\n\n# Email-code login: only the emailed verification code remains manual\noperately auth login \\\n  --method email-code \\\n  --email user@example.com \\\n  --company-name \"Acme Corp\" \\\n  --access-mode read-only\n\n# Google login: browser confirmation remains manual\noperately auth login \\\n  --method google \\\n  --company-name \"Acme Corp\" \\\n  --access-mode full-access"},{"language":"bash","snippet":"# Email/password signup: only the emailed verification code remains manual\noperately auth signup \\\n  --method email-password \\\n  --full-name \"New User\" \\\n  --email newuser@example.com \\\n  --password secret123456 \\\n  --next-step later\n\n# Google signup: browser confirmation remains manual\noperately auth signup \\\n  --method google \\\n  --next-step later"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: operately-cli\ndescription: >\n  Manage Operately from the CLI: goals, OKRs, projects, project templates,\n  tasks, milestones, spaces, documents, discussions, check-ins, reviews,\n  assignments, people, permissions, full-text search, document history, and\n  Docs & Files. Use when operating an Operately workspace, automating\n  startup/company operations, updating project status, tracking goal progress,\n  managing async execution, or working with the open source company operating\n  system.\nversion: 1.9.0\nmetadata:\n  openclaw:\n    requires:\n      bins:\n        - operately\n    env:\n      - name: OPERATELY_API_TOKEN\n        description: API token for environment-based Operately CLI authentication.\n        required: false\n        sensitive: true\n      - name: OPERATELY_BASE_URL\n        description: Optional Operately API base URL for self-hosted, staging, or local instances.\n        required: false\n        sensitive: false\n      - name: OPERATELY_PROFILE\n        description: Optional saved Operately CLI profile name to use.\n        required: false\n        sensitive: false\n    primaryEnv: OPERATELY_API_TOKEN\n    emoji: \"📋\"\n    homepage: https://github.com/operately/skills\n    install:\n      - kind: node\n        package: \"@operately/operately-cli\"\n        bins:\n          - operately\n---\n\n# Operately CLI\n\nOperate an Operately instance through the `operately` CLI.\n\n## Quick Reference\n\n| Task | Command |\n| --- | --- |\n| Install CLI | `npm install -g @operately/operately-cli` |\n| Login | `operately auth login --token <token>` |\n| Interactive login | `operately auth login` |\n| Login with flags | `operately auth login --method email-password --email user@example.com --password secret123456 --company-id <company-id> --access-mode full-access --profile work` |\n| Sign up | `operately auth signup` |\n| Sign up with flags | `operately auth signup --method email-password --full-name \"New User\" --email newuser@example.com --password secret123456 --next-step later` |\n| Join Company | `operately auth join` |\n| Join Company with flags | `operately auth join --invite-token <token> --method email-password --email user@example.com --password secret123456` |\n| Create company | `operately auth create-company` |\n| Create company with flags | `operately auth create-company --method email-password --email user@example.com --password secret123456 --company-name \"Acme Corp\" --profile work` |\n| List saved profiles | `operately auth profiles` |\n| Auth status (local config) | `operately auth status` |\n| Who am I | `operately auth whoami` |\n| Logout | `operately auth logout` |\n| Set profile picture | `operately people update_picture --avatar-file ./avatar.png` |\n| Remove profile picture | `operately people update_picture --clear` |\n| Upload file to Docs & Files | `operately documents create_file --space-id <id> --file ./report.pdf` |\n| List my assignments | `operately people list_assignments` |\n| List projects | `operately projects list` |\n| Get project | `operately projects g"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn7cy7etbrc1nyrcaqw799h4p584c6qm\",\n  \"slug\": \"operately-cli\",\n  \"version\": \"1.9.0\",\n  \"publishedAt\": 1789991289772\n}"},{"path":"references/assignments-and-reviews.md","content":"# Assignments and Reviews\n\nGet items that need your attention or review using the Operately CLI.\n\n## Overview\n\nThe `people list_assignments` command retrieves all assignments and items requiring your attention, organized into three categories based on urgency and your role.\n\n## Basic Usage\n\n```bash\noperately people list_assignments\n```\n\nThis returns all items assigned to you or requiring your review, with no additional parameters needed.\n\n## Response Structure\n\nThe command returns assignments categorized into three groups:\n\n### 1. `due_soon`\nItems you own that require immediate attention:\n- **Overdue** - Past their due date\n- **Due today** - Due on the current date\n- **Due soon** - Due within the next few days\n\n### 2. `needs_review`\nItems where you are the reviewer and need to provide acknowledgment:\n- Project check-ins awaiting review\n- Goal updates requiring acknowledgment\n- Project and goal retrospectives awaiting acknowledgment\n- Milestone completions needing approval\n\n### 3. `upcoming`\nItems you own with future due dates:\n- Tasks and milestones with upcoming deadlines\n- Items without due dates\n\n## Assignment Types\n\nEach assignment includes:\n\n- **`type`** - The kind of item:\n  - `project_check_in` - Project status update\n  - `goal_check_in` - Goal progress update\n  - `project_retrospective` - Closed project retrospective awaiting review\n  - `goal_retrospective` - Closed goal retrospective awaiting review\n  - `milestone` - Project milestone\n  - `project_task` - Task within a project\n  - `space_task` - Task within a space\n  - `goal` - Goal itself\n  - `project` - Project requiring review\n\n- **`role`** - Your relationship to the item:\n  - `owner` - You are responsible for completing it\n  - `reviewer` - You need to review/acknowledge it\n\n- **`origin`** - The parent resource (project, goal, or space) containing this assignment\n\n- **`due_date`** - When the item is due (may be null)\n\n- **`due_status`** - Urgency level: `overdue`, `due_today`, `due_soon`, `upcoming`, or `none`\n\n- **`task_status`** - Current state (for tasks): `pending`, `in_progress`, `done`, etc.\n\n## Grouping\n\nAssignments are grouped by their origin (parent project, goal, or space), making it easy to see all related items together. Within each group, assignments are sorted by urgency, with the most critical items first.\n\n## Example Output Structure\n\n```json\n{\n  \"data\": {\n    \"due_soon\": [\n      {\n        \"origin\": {\n          \"id\": \"project-123\",\n          \"name\": \"Q2 Roadmap\",\n          \"type\": \"project\",\n          \"path\": \"/space/projects/q2-roadmap\",\n          \"space_name\": \"Engineering\"\n        },\n        \"assignments\": [\n          {\n            \"name\": \"Complete API design\",\n            \"type\": \"milestone\",\n            \"role\": \"owner\",\n            \"due_date\": \"2026-04-15\",\n            \"due_status\": \"overdue\",\n            \"due_status_label\": \"Overdue by 2 days\"\n          }\n        ]\n      }\n    ],\n    \"needs_review\": [\n      {\n        \"origin\": {\n          \"id\": \"goal-456\",\n     "},{"path":"references/auth-flows.md","content":"# Auth Flows\n\nUse this reference when the task involves `operately auth ...`, saved profiles, invite-based onboarding, or explaining how CLI authentication works.\n\nThis document is about the handcrafted auth commands in `cli/src/auth/`. Most other CLI commands are generated from backend `external_endpoints`; the auth flows are not.\n\n## Contents\n\n- When to use each auth command\n- Shared auth behavior\n- Login flows\n- Signup flows\n- Create-company flows\n- Join flows\n- Profile and verification commands\n- Backend/internal endpoint map\n- Agent rules\n\n## When To Use Each Auth Command\n\nUse these commands based on the task:\n\n- `operately auth login --token <token>`: best for automation, CI, scripted work, or any headless task where the user already has a token.\n- `operately auth login`: hybrid login for password, email code, or Google OAuth, plus prompted token entry when the user chooses it interactively.\n- `operately auth signup`: hybrid account creation that can be fully interactive or mostly flag-driven, followed by create-company, join-with-invite, or stop-for-now.\n- `operately auth create-company`: authenticate first, create a company, and save a full-access profile for an account that does not have one yet.\n- `operately auth join`: interactive invite-based onboarding for an existing or newly activated account.\n- `operately auth profiles`: inspect saved local CLI profiles and see which one is active.\n- `operately auth whoami`: remote validation that the current token still works.\n- `operately auth status`: local config check only.\n- `operately auth logout`: remove the saved token from the selected profile.\n\n## Shared Auth Behavior\n\n### Base URL and profiles\n\n- If no `--base-url` is provided, the CLI defaults to `https://app.operately.com`.\n- If no `--profile` is provided for interactive auth, the CLI prompts for one with the current active profile (falling back to `default`) as the default; blank input accepts that default.\n- For ordinary endpoint execution, auth resolution priority is: per-command flags > environment variables > saved profile.\n\n### Saved profile result\n\nMost successful auth flows end by saving:\n\n- the final API token\n- the base URL\n- the resolved person name\n- the company name\n\nThe profile metadata is fetched with external API calls after authentication succeeds.\n\n### Important distinction: local vs remote checks\n\n- `operately auth profiles` does not call the server. It prints saved local profiles, active-profile state, and saved metadata/base URLs.\n- `operately auth status` does not call the server. It prints local profile/config state.\n- `operately auth whoami` calls the API and is the correct post-login verification step.\n\n### Bootstrap token model\n\nInteractive login, signup, and join usually work in two phases:\n\n1. The CLI gets a short-lived bootstrap token from an internal auth endpoint.\n2. The CLI exchanges that bootstrap token for a reusable API token with `cli_auth/create_token`.\n\nThat final API token is company-scoped beca"},{"path":"references/collaboration-patterns.md","content":"# Collaboration Patterns\n\nTeam collaboration workflows in Operately, covering spaces, members, permissions, discussions, comments, reactions, and notifications.\n\n## Space Management\n\n### Creating Spaces\n\n```bash\noperately spaces create \\\n  --name \"Engineering\" \\\n  --mission \"Build great products\" \\\n  --company-permissions 10 \\\n  --public-permissions 0\n```\n\n### Getting Space Details\n\n```bash\noperately spaces get --id s1\n```\n\n### Listing Spaces\n\n```bash\noperately spaces list\n```\n\n### Searching Spaces\n\n```bash\noperately spaces search --query \"engineering\"\n```\n\n### Updating Spaces\n\n```bash\noperately spaces update \\\n  --id s1 \\\n  --name \"Engineering & Product\" \\\n  --mission \"Build and ship great products\"\n```\n\n### Deleting Spaces\n\n```bash\noperately spaces delete --space-id s1\n```\n\n## Member Management\n\n### Adding Members\n\n```bash\n# Add single member\noperately spaces add_members \\\n  --space-id s1 \\\n  --members.0.id u1 \\\n  --members.0.access-level 70\n\n# Add multiple members\noperately spaces add_members \\\n  --space-id s1 \\\n  --members.0.id u1 \\\n  --members.0.access-level 70 \\\n  --members.1.id u2 \\\n  --members.1.access-level 40 \\\n  --members.2.id u3 \\\n  --members.2.access-level 40\n```\n\n### Listing Members\n\n```bash\noperately spaces list_members --space-id s1\n```\n\n### Searching for Members\n\n```bash\noperately spaces search_potential_members \\\n  --space-id s1 \\\n  --query \"engineer\"\n```\n\n### Removing Members\n\n```bash\noperately spaces delete_member \\\n  --space-id s1 \\\n  --member-id u1\n```\n\n### Joining Spaces\n\n```bash\n# User joins a space\noperately spaces join --space-id s1\n```\n\n## Permissions and Access Levels\n\n### Member Permissions\n\n```bash\noperately spaces update_members_permissions \\\n  --space-id s1 \\\n  --members.0.id u1 \\\n  --members.0.access-level 70 \\\n  --members.1.id u2 \\\n  --members.1.access-level 70\n```\n\nAccess levels:\n- `0` - No access\n- `10` - View only\n- `40` - Comment\n- `70` - Edit\n- `100` - Full access (admin)\n\n### Space Permissions\n\n```bash\noperately spaces update_permissions \\\n  --space-id s1 \\\n  --access-levels.public 0 \\\n  --access-levels.company 10 \\\n  --access-levels.space 70\n```\n\n## Space Tools\n\n### Listing Available Tools\n\n```bash\noperately spaces list_tools --space-id s1\n```\n\n### Enabling/Disabling Tools\n\n```bash\noperately spaces update_tools \\\n  --space-id s1 \\\n  --tools.tasks-enabled true \\\n  --tools.discussions-enabled true \\\n  --tools.resource-hub-enabled true\n```\n\nCommon tool types:\n- `projects` - Project management\n- `goals` - Goal tracking\n- `resource_hub` - Knowledge base\n- `discussions` - Team discussions\n- `tasks` - Task management\n\n## Discussions\n\n### Space Discussions\n\n**Create discussion:**\n```bash\noperately spaces create_discussion \\\n  --space-id s1 \\\n  --title \"Q2 Planning Discussion\" \\\n  --body \"# Q2 Planning\\n\\nLet's discuss our priorities for Q2.\\n\\n## Topics\\n- Revenue goals\\n- Product roadmap\\n- Team growth\"\n\noperately spaces create_discussion \\\n  --space-id s1 \\\n  --title \"Q2 Planning Discussion\" \\\n  --body-file ./q2"}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":null,"editorialQuality":{"score":100,"threshold":65,"status":"thin","wordCount":1581,"uniquenessScore":39,"reasons":["uniqueness-below-45"]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-10T16:16:11.136Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-10T16:16:11.136Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-10T21:39:03.673Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}