freedom-mcp
Was dieses MCP kann
Supports company operations through commitments, teams, agents, customer evidence, leads, content workflows, spreadsheets, commerce integrations, and business automation.
Tools
Eingabeschema
{'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'string', 'description': 'Directive UUID from list_attention_directives or create response.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['activity', 'companyId'], 'properties': {'activity': {'type': 'object', 'required': ['name', 'frequency', 'linked_kr_id'], 'properties': {'name': {'type': 'string', 'description': 'Short, unique activity name — the stable key the scheduler uses. Rejected if a name already exists on this agent (use update_agent_activity to change one).'}, 'priority': {'type': 'string', 'description': "Optional. 'immediate' marks a one-time first-run item."}, 'frequency': {'enum': ['daily', 'weekdays', 'weekly', 'biweekly', 'monthly', 'quarterly', 'once', 'as_needed', 'on_demand'], 'type': 'string', 'description': 'How often it runs — daily/weekdays/weekly/biweekly/monthly/quarterly auto-run on a cadence (weekdays = once each Mon–Fri in America/Los_Angeles; weekends skip); once/as_needed/on_demand are manual-only (run via trigger_agent_activity). Any other value is rejected so the scheduler can never silently drop the activity.'}, 'tools_used': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Tool names the activity uses.'}, 'deliverable': {'type': 'string', 'description': 'The concrete output produced (e.g. "Google Doc with 3 draft posts").'}, 'description': {'type': 'string', 'description': 'What the agent does and why.'}, 'linked_kr_id': {'type': 'string', 'description': 'Required. The Key Result this loop moves. This work needs a goal. Pick the Key Result this loop moves. If none exists, create the Key Result first.'}, 'delivery_shape': {'enum': ['publish_cards'], 'type': 'string', 'description': "Optional. Set 'publish_cards' when the activity's deliverable is publishable content (posts, replies, carousels): the agent then creates one send_to_user intent:'publish' card per drafted item — a one-tap post card — instead of burying drafts in an activity-feed summary. Omit for report/analysis activities."}, 'max_iterations': {'type': 'number', 'description': 'Optional. Per-activity tool-loop iteration budget (clamped 5–30; default 15, higher for multi-tool plans). Raise for read-heavy deploy-class activities.'}, 'completion_criteria': {'type': 'array', 'items': {'type': 'string'}, 'description': '2-4 checkpoints the agent verifies before delivering.'}}, 'description': 'The activity to add.'}, 'agent_id': {'type': 'string', 'description': 'UUID of the agent. Optional if agent_name is provided.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'agent_name': {'type': 'string', 'description': 'Name of the agent (e.g. "Aiko"). Provide this or agent_id.'}, 'linked_kr_id': {'type': 'string', 'description': 'Required when activity is supplied flat. This work needs a goal. Pick the Key Result this loop moves. If none exists, create the Key Result first.'}}}
Eingabeschema
{'type': 'object', 'required': ['title'], 'properties': {'title': {'type': 'string', 'description': 'What needs to happen'}, 'domain': {'type': 'string', 'description': 'Life domain: personal, family, home, w2, or company:<name>'}, 'due_date': {'type': 'string', 'description': 'Due date in YYYY-MM-DD format (optional). Accept approximate phrasing (e.g. "end of month" = last day). For EVENTS (birthday, anniversary, party, graduation, wedding, holiday gathering) this is the PREP deadline, not the event date — default to ~7 days before the event (confirm with the user) unless they say to use the actual date; store the actual event date in description.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'consequence': {'type': 'string', 'description': 'What happens if this slips? (optional; infer if obvious, e.g. "late filing penalty")'}, 'description': {'type': 'string', 'description': 'Additional details or notes (optional). For event reframes, record the actual event date here (e.g. "Event date: Mar 29"). If the commitment recurs (explicit cue like "every year", or inherently recurring — birthdays, tax deadlines, renewals, licenses, insurance, enrollment), prepend "Recurring: annual|monthly|weekly|quarterly" as the first line — complete_commitment reads this tag to auto-roll the next occurrence forward.'}}}
Eingabeschema
{'type': 'object', 'required': ['class', 'claim', 'source', 'companyId'], 'properties': {'claim': {'type': 'string', 'description': 'Short observation / takeaway (required, ≥8 chars).'}, 'class': {'enum': ['paying_customer', 'product_telemetry', 'public_review', 'operator_relayed', 'prospect', 'agent_as_user'], 'type': 'string', 'description': 'Evidence class (determines rank weight): paying_customer (highest — words/behavior from someone who pays), product_telemetry (provenanced revenue-linked usage), public_review (real public review), operator_relayed (founder pastes a real quote/note), agent_as_user (coding agent/host pain with a wallet), prospect (non-paying signal, lowest).'}, 'quote': {'type': 'string', 'description': 'Optional verbatim quote.'}, 'source': {'type': 'string', 'description': 'Provenance: "operator paste", "support ticket #…", "Amazon review", …'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'observed_at': {'type': 'string', 'description': 'Optional ISO timestamp when observed (default: now).'}, 'may_open_loop': {'type': 'boolean', 'description': 'If true, may open a work loop from this signal. Default false.'}, 'subject_label': {'type': 'string', 'description': 'Optional human label (e.g. Kendall) — not a global identity system.'}, 'may_refine_icp': {'type': 'boolean', 'description': 'If true, may seed an ICP-delta offer later (never silent rewrite). Default false.'}, 'may_steer_copy': {'type': 'boolean', 'description': 'If true, may inform copy/messaging. Default true.'}, 'may_not_auto_act': {'type': 'boolean', 'description': 'If true (default), evidence must not auto-act without human/graduated path.'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'name': {'type': 'string', 'description': 'Full name. Provide email or name.'}, 'tags': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Tags for filtering (optional)'}, 'email': {'type': 'string', 'description': 'Lead email (unique within company). Provide email or name.'}, 'notes': {'type': 'string', 'description': 'Initial notes about the lead (optional)'}, 'phone': {'type': 'string', 'description': 'Phone number (optional)'}, 'title': {'type': 'string', 'description': 'Job title (optional)'}, 'source': {'type': 'string', 'description': 'Where the lead came from (e.g. "linkedin", "referral", "website"). Defaults to "manual".'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'company_name': {'type': 'string', 'description': 'Company they work for (optional)'}}}
Eingabeschema
{'type': 'object', 'required': ['email', 'role', 'companyId'], 'properties': {'name': {'type': 'string', 'description': 'Optional full name (e.g. "Yuichi Ichi"). If omitted, derived from the email local-part.'}, 'role': {'type': 'string', 'description': 'Job title (stored on their profile) or access preset: team / manager. Other strings are titles on the team preset.'}, 'email': {'type': 'string', 'description': 'Invitee email. Must be the exact address — never guess.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['variant_id', 'delta', 'companyId'], 'properties': {'delta': {'type': 'number', 'description': 'Signed change to available quantity, e.g. 25 or -3'}, 'reason': {'type': 'string', 'description': "Shopify inventory reason (default 'correction'; e.g. received, damaged, quality_control)"}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'variant_id': {'type': 'string', 'description': 'Variant gid (gid://shopify/ProductVariant/...)'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'agreed': {'type': 'boolean', 'description': 'Default true. Pass false to clear the seal (required after the plan changes).'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'playbook_id': {'type': 'string', 'description': 'UUID of the Playbook (use this or playbook_title).'}, 'playbook_title': {'type': 'string', 'description': 'Title (or fragment) of the Playbook (use this or playbook_id).'}}}
Eingabeschema
{'type': 'object', 'required': ['lesson'], 'properties': {'lesson': {'type': 'string', 'description': 'One short lesson (≤400 chars), e.g. "When three Grok tabs share freedom-ai, match by goal words not project name."'}, 'source': {'enum': ['voice_cos', 'chat', 'system', 'host'], 'type': 'string', 'description': 'Optional provenance (default voice_cos on MCP / chat on chat door).'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['note'], 'properties': {'note': {'type': 'string', 'description': 'One short preference (≤500 chars), e.g. "When describing cards, paraphrase titles — do not read dashes or ids aloud."'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['spreadsheet_id', 'values', 'companyId'], 'properties': {'values': {'type': 'array', 'items': {'type': 'array', 'items': {'type': 'string'}}, 'description': 'Array of rows to append'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'spreadsheet_id': {'type': 'string', 'description': 'Spreadsheet ID'}}}
Eingabeschema
{'type': 'object', 'required': ['item_id', 'companyId'], 'properties': {'item_id': {'type': 'string', 'description': 'ID of the pipeline output to approve (get from get_pending_approvals)'}, 'approved': {'type': 'boolean', 'description': 'Default true. Pass false to REJECT: the item is marked rejected and leaves the approval queue — it never publishes. An explicit false can never approve.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['pipeline_id', 'companyId'], 'properties': {'reason': {'type': 'string', 'description': 'Optional. Why this pipeline is being archived or restored.'}, 'restore': {'type': 'boolean', 'description': 'Set true to REACTIVATE an archived pipeline instead of archiving it. Default false (archive).'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'pipeline_id': {'type': 'string', 'description': 'ID of the pipeline to archive/restore (get from list_pipelines)'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'playbook_id': {'type': 'string', 'description': 'UUID of the Playbook (use this or playbook_title).'}, 'playbook_title': {'type': 'string', 'description': 'Title (or fragment) of the Playbook (use this or playbook_id).'}}}
Eingabeschema
{'type': 'object', 'required': ['agent_id', 'companyId'], 'properties': {'dial': {'enum': ['acts_as_me', 'asks_me'], 'type': 'string', 'description': 'acts_as_me (default): the bot acts with your authority in this company, the same as your own key. asks_me: anything beyond reading and ordinary edits comes to you as a card first. Sends and spend always come to you either way.'}, 'host': {'enum': ['grok-bot', 'claude', 'chatgpt', 'other'], 'type': 'string', 'description': "Which bot you are pasting the key into. A label only — it never changes what the key may do. Two hosts may wear one role at once; re-attaching the SAME host replaces that host's key."}, 'agent_id': {'type': 'string', 'description': 'UUID of the role to attach a bot to. From get_team_roster.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['request_id', 'pr_url'], 'properties': {'pr_url': {'type': 'string', 'description': 'https://github.com/linnetlegacies/freedom-ai/pull/NNNN'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'request_id': {'type': 'string', 'description': 'request_id UUID from submit_product_request'}}}
Eingabeschema
{'type': 'object', 'required': ['prompt', 'providers', 'companyId'], 'properties': {'prompt': {'type': 'string', 'description': 'A search-style query to test (e.g., "What is the best AI operating system for solopreneurs?")'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'providers': {'type': 'array', 'items': {'enum': ['anthropic', 'xai', 'google', 'perplexity'], 'type': 'string'}, 'description': 'Which AI search engines to audit. Options: anthropic (Claude), xai (Grok), google (Gemini), perplexity (Sonar Pro, live web search — best for real-time visibility checks)'}, 'max_tokens': {'type': 'number', 'description': 'Maximum response length per provider (default: 1000)'}, 'temperature': {'type': 'number', 'description': 'Response variability 0-1 (default: 0.7)'}}}
Eingabeschema
{'type': 'object', 'required': ['spreadsheet_id', 'requests_json', 'companyId'], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'requests_json': {'type': 'string', 'description': 'JSON-encoded array of batch update request objects, e.g. "[{\\"updateCells\\":{...}}]".'}, 'spreadsheet_id': {'type': 'string', 'description': 'Spreadsheet ID'}}}
Eingabeschema
{'type': 'object', 'required': [], 'properties': {'job': {'type': 'string', 'description': 'Optional job you were about to build (e.g. living glossary, voice pack, tasks). Omit for the full index of classes.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['publication_id', 'companyId'], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'publication_id': {'type': 'string', 'description': 'Beehiiv publication id already connected for THIS company (starts with pub_)'}}}
Eingabeschema
{'type': 'object', 'required': ['url', 'companyId'], 'properties': {'url': {'type': 'string', 'description': 'The full URL to browse (must include https:// or http://)'}, 'actions': {'type': 'array', 'items': {'type': 'object', 'properties': {'type': {'enum': ['scroll', 'click', 'wait', 'fill'], 'type': 'string', 'description': 'Action type: scroll (down page), click (element), wait (ms), fill (input field)'}, 'value': {'type': 'string', 'description': 'Value for fill actions, or milliseconds for wait actions'}, 'selector': {'type': 'string', 'description': 'CSS selector for click/fill actions'}}}, 'description': 'Optional browser actions to perform before taking screenshot. Each action has a type and optional selector/value.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'string', 'description': 'Directive UUID to cancel.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': [], 'properties': {'reason': {'type': 'string', 'description': 'Optional. Why this is being cancelled.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'title_search': {'type': 'string', 'description': 'Search by title if ID not known (fuzzy match against ACTIVE commitments).'}, 'commitment_id': {'type': 'string', 'description': 'The UUID of the commitment to cancel.'}}}
Eingabeschema
{'type': 'object', 'required': ['content'], 'properties': {'content': {'type': 'string', 'description': 'The idea content to capture'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'source_url': {'type': 'string', 'description': 'Optional URL if the idea came from a link'}}}
Eingabeschema
{'type': 'object', 'required': ['deliverable', 'deliverable_type', 'companyId'], 'properties': {'context': {'type': 'string', 'description': 'Optional additional context about what this deliverable is for, who will see it, or what outcome you want'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'target_icp': {'type': 'string', 'description': 'ICP ID to use (from get_icps), or "auto" to use the first available. Default: auto'}, 'deliverable': {'type': 'string', 'description': 'The content/report/strategy you want the simulated customer to evaluate'}, 'deliverable_type': {'enum': ['report', 'content', 'landing_page', 'email', 'strategy', 'social_post', 'audit', 'other'], 'type': 'string', 'description': 'What type of deliverable this is — helps the customer evaluate appropriately'}}}
Eingabeschema
{'type': 'object', 'required': ['project_name', 'companyId'], 'properties': {'kind': {'enum': ['pages', 'workers'], 'type': 'string', 'description': 'pages (default) or workers.'}, 'hostname': {'type': 'string', 'description': 'Optional DNS name to CNAME at the Pages/Workers host (must be a zone on this Cloudflare account).'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'github_repo': {'type': 'string', 'description': 'Optional GitHub repo name to attach as Pages source.'}, 'github_owner': {'type': 'string', 'description': 'Optional GitHub org/user to attach as Pages source (requires Cloudflare GitHub app on that account).'}, 'project_name': {'type': 'string', 'description': 'Cloudflare project/script slug (lowercase, numbers, hyphens).'}, 'production_branch': {'type': 'string', 'description': 'Git production branch for Pages (default main).'}}}
Eingabeschema
{'type': 'object', 'required': ['request_id'], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'request_id': {'type': 'string', 'description': 'request_id UUID from submit_product_request'}, 'stamp_claim': {'type': 'boolean', 'description': 'If true (default), stamp context_payload.builder_claim {claimed_at, frontier_model, by} on the card.'}}}
Eingabeschema
{'type': 'object', 'required': ['pipeline_id', 'companyId'], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'pipeline_id': {'type': 'string', 'description': 'Pipeline ID (get from list_pipelines)'}, 'output_format': {'type': 'string', 'description': 'Optional. Only clear learnings for a specific format. If not specified, clears all formats.'}}}
Eingabeschema
{'type': 'object', 'required': [], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'title_search': {'type': 'string', 'description': 'Search by title if ID not known (fuzzy match)'}, 'commitment_id': {'type': 'string', 'description': 'The UUID of the commitment to complete'}}}
Eingabeschema
{'type': 'object', 'required': ['activity_name', 'companyId'], 'properties': {'note': {'type': 'string', 'description': 'Optional one-line what you deposited (stored on the run, not a second product).'}, 'deposit': {'type': 'object', 'required': ['kind', 'ref'], 'properties': {'ref': {'type': 'string', 'description': 'The slug or id that tool returned.'}, 'kind': {'enum': ['knowledge', 'card', 'content', 'lead', 'evidence'], 'type': 'string', 'description': 'knowledge = save_knowledge slug · card = send_to_user card id · content = submit_content_to_pipeline id · lead = add_lead id · evidence = add_customer_evidence id'}}, 'description': 'The proof of work: what you made this turn. Required for every job except the one-time "Preflight check".'}, 'agent_id': {'type': 'string', 'description': "The role this job belongs to. Omit it when you are calling with that role's own key."}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'activity_name': {'type': 'string', 'description': 'Exact name from get_my_role due_now (case-insensitive).'}}}
Eingabeschema
{'type': 'object', 'required': ['widget_type', 'title', 'companyId'], 'properties': {'data': {'type': 'array', 'items': {'type': 'string', 'description': 'JSON-encoded row object, e.g. "{\\"label\\":\\"Jan\\",\\"value\\":100}". Parsed server-side.'}, 'description': 'Data rows for chart/table/list/gantt widgets. Each item is an object.\n- chart: [{ label: "Jan", value: 100 }, ...]\n- table: [{ col1: "val", col2: "val" }, ...]\n- list: [{ label: "Item", status: "done", detail: "..." }, ...]\n- gantt: [{ label: "Task", start: "2024-01-01", end: "2024-01-15", status: "active" }, ...]'}, 'title': {'type': 'string', 'description': 'Display title for the widget (e.g., "Monthly Revenue", "Content Pipeline")'}, 'config': {'type': 'object', 'description': 'Widget configuration. Shape depends on widget_type:\n- metric: { value, previous_value, format ("number"|"currency"|"percent"|"text"), trend_direction ("up"|"down"|"flat"), suffix }\n- chart: { chart_type ("bar"|"line"|"area"), x_axis, y_axis, color }\n- table: { columns: [{ key, label, align }], sortable, page_size }\n- list: { status_field, label_field, detail_field }\n- gantt: { start_field, end_field, label_field, status_field }\n- status: { status, status_color ("green"|"amber"|"red"|"blue"|"purple"|"slate"), detail, icon_emoji }\n- progress: { value (0-100), target_label, current_label, color (CSS class) }\n- kpi_row: { kpis: [{ label, value, trend ("up"|"down"|"flat"), format }] }\n- progress_ring: { value (0-100), label, color (CSS color) }\n- activity_status: (use data array with { name, frequency, status, next_run, last_outcome })\n- canvas: { html (agent-authored layout HTML — narrative/self-expression, inert: no scripts/forms/controls, max 64KB), title (optional a11y label) }'}, 'position': {'type': 'number', 'description': 'Display order (0 = first, higher = later). Default: 0'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'widget_id': {'type': 'string', 'description': 'UUID of existing widget to update. Omit to create a new widget.'}, 'is_visible': {'type': 'boolean', 'description': 'Whether the widget is visible on the dashboard. Default: true'}, 'widget_type': {'enum': ['metric', 'chart', 'table', 'list', 'gantt', 'status', 'progress', 'kpi_row', 'progress_ring', 'activity_status', 'canvas'], 'type': 'string', 'description': 'Type of widget to create'}}}
Eingabeschema
{'type': 'object', 'required': ['approval_id', 'decision', 'companyId'], 'properties': {'decision': {'enum': ['approve', 'reject', 'later', 'yes', 'no', 'go', 'approved', 'denied'], 'type': 'string', 'description': 'approve | reject | later (yes/no/go also accepted)'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'grant_mode': {'enum': ['once', 'standing'], 'type': 'string', 'description': "approve only: 'once' runs without standing grant (default for spoken path); 'standing' also grants future calls"}, 'approval_id': {'type': 'string', 'description': 'UUID of the pending mcp_tool_call approval card (from approval_required.approval_id)'}, 'voice_session_id': {'type': 'string', 'description': 'Optional voice session id if known (audit only)'}, 'utterance_snippet': {'type': 'string', 'description': 'Optional short quote of what the operator said (audit; ≤200 chars)'}}}
Eingabeschema
{'type': 'object', 'required': ['server_url', 'companyId'], 'properties': {'name': {'type': 'string', 'description': 'Optional display name. Defaults to the host (Is Agentic for the official canary).'}, 'headers': {'type': 'object', 'description': 'Optional static request headers (name → string). Authorization, Cookie, Host, API-key names, and session headers are refused. At most 8.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'server_url': {'type': 'string', 'description': 'https MCP endpoint (e.g. https://is-agentic.com/mcp). Never a private/loopback host.'}}}
Eingabeschema
{'type': 'object', 'required': ['target_session_id', 'instruction'], 'properties': {'source': {'enum': ['voice_cos', 'chat', 'api', 'system'], 'type': 'string', 'description': 'Optional provenance: voice_cos | chat | api | system. Default derived from door.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'company_id': {'type': 'string', 'description': 'Optional company context (portfolio id). Does not change auth — row stays operator-scoped.'}, 'instruction': {'type': 'string', 'description': 'One clear instruction for that session (1–4000 chars). Imperative, not a transcript dump.'}, 'target_host': {'enum': ['claude-code', 'claude-desktop', 'grok', 'grok-bot', 'manual', 'slack', 'github', 'freedomos', 'other'], 'type': 'string', 'description': 'Host adapter: claude-code | claude-desktop | grok | grok-bot (desktop chat agent) | manual | slack | github | freedomos | other'}, 'target_session_id': {'type': 'string', 'description': 'Stable id the host polls (1–200 chars). Examples: grok-$SESSION, claude-code-$SESSION. Must match the poller.'}}}
Eingabeschema
{'type': 'object', 'required': ['name'], 'properties': {'name': {'type': 'string', 'description': 'Company name'}, 'about': {'type': 'string', 'description': "Optional short description (stored as the company's about / elevator pitch)"}, 'website': {'type': 'string', 'description': 'Optional company website URL (http or https)'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['title', 'companyId'], 'properties': {'title': {'type': 'string', 'description': 'Display title (e.g., "AI Content Pipeline")'}, 'limits': {'type': 'string', 'description': 'Current limitations (e.g., "LinkedIn only", "Beta users only")'}, 'solves': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Problems/pain points this feature solves (e.g., ["manual posting", "writer\'s block"])'}, 'category': {'type': 'string', 'description': 'Category (e.g., "ai", "marketing", "finance", "automation")'}, 'demo_url': {'type': 'string', 'description': 'URL to a demo video (Screen Studio, Loom, etc.)'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'feature_id': {'type': 'string', 'description': 'Unique slug for the feature (e.g., "ai-content-pipeline")'}, 'description': {'type': 'string', 'description': 'Marketing-ready description of the feature'}}}
Eingabeschema
{'type': 'object', 'required': ['name', 'companyId'], 'properties': {'name': {'type': 'string', 'description': 'Folder name (e.g., "acme-deal", "partners/acme"). Nested paths are supported.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['title', 'content', 'companyId'], 'properties': {'title': {'type': 'string', 'description': 'Document title (e.g., "Marketing Specialist JD")'}, 'folder': {'enum': ['JDs', 'Deliverables', 'Memory'], 'type': 'string', 'description': 'Which folder to save in'}, 'content': {'type': 'string', 'description': 'Content for the document in markdown format'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'format_for_humans': {'type': 'boolean', 'description': 'If true (default), converts markdown to rich formatting. Set false for raw markdown / agent-to-agent docs.'}}}
Eingabeschema
{'type': 'object', 'required': ['name', 'companyId'], 'properties': {'name': {'type': 'string', 'description': 'Persona name. Required. Used to derive the ICP id/filename. INTERNAL targeting label (may be an evocative codename) — never published.'}, 'class': {'enum': ['customer', 'partner'], 'type': 'string', 'description': "'customer' (default) or 'partner' — partner = a distribution/affiliate ICP, not an end-buyer."}, 'title': {'type': 'string', 'description': 'One-line descriptor of the persona.'}, 'channels': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Where they spend attention (communities, publications, events).'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'painThemes': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Recurring pain themes.'}, 'publicName': {'type': 'string', 'description': 'The public-facing audience label to use in published copy — NEVER the internal persona name/codename. Plural noun phrase, e.g. "compounding pharmacy owners". Optional — auto-generated from the persona when omitted.'}, 'agentProfile': {'type': 'object', 'description': "How this customer's own AI agent participates in buying: { tier: 'ambient' | 'assisted' | 'delegated' | 'builder', agents: string[], surfacesRead: string[], purchasePath: string, autonomyNotes: string }. tier is required and must be one of the four values."}, 'demographics': {'type': 'object', 'description': 'role, companySize, industry, techStack[].'}, 'dreamOutcome': {'type': 'string', 'description': 'The outcome they dream of.'}, 'techSavviness': {'enum': ['power-user', 'comfortable', 'needs-hand-holding'], 'type': 'string', 'description': 'Tech comfort level.'}, 'financialProfile': {'type': 'object', 'description': 'revenueRange, typicalDealSize, budgetAuthority, buyingBehavior, growthStage, priceSensitivity.'}, 'nightmareScenario': {'type': 'string', 'description': 'The 3am problem / nightmare scenario.'}}}
Eingabeschema
{'type': 'object', 'required': ['title', 'companyId'], 'properties': {'unit': {'type': 'string', 'description': 'Unit of measurement (e.g., "%", "$", "users", "trees")'}, 'month': {'type': 'string', 'description': 'YYYY-MM the current_value belongs to (default: this UTC month). Writes monthly_history. Pass 2026-06 to stamp June, not a Q4 pile.'}, 'title': {'type': 'string', 'description': 'Key result title (measurable outcome). Title, unit, and current must name the SAME quantity FO can see.'}, 'due_date': {'type': 'string', 'description': 'Due date (YYYY-MM-DD). Strongly recommended — a KR without one cannot expire or alarm.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'direction': {'enum': ['at_least', 'at_most'], 'type': 'string', 'description': 'Goal direction. "at_least" (default): reach the target. "at_most": stay UNDER the target — a ceiling (e.g. founder decisions per 28 days). A ceiling KR is on-track only while current ≤ target.'}, 'assigned_to': {'type': 'string', 'description': 'User ID or "me"/"current_user" to assign to'}, 'description': {'type': 'string', 'description': 'What the number is (e.g. "This month cash in minus cash out"). Agents read this back on get_okrs — do not leave blank for cash KRs.'}, 'objective_id': {'type': 'string', 'description': 'ID of the parent objective (optional if using objective_title)'}, 'target_value': {'type': 'number', 'description': 'Target value to achieve. 0 is a valid floor (breakeven / this month FCF ≥ $0). Omit only if you intend the default 100.'}, 'current_value': {'type': 'number', 'description': "Manual KRs only — omit when measure_source is set: the source owns current and the daily OKR health sweep fills it (a typed value on a bound KR is refused). For a manual KR: THIS calendar month's actual, not YTD, not a projection. Cash-flow and Amazon-deposit KRs should bind fcf_last_closed_month / amazon_deposits_last_closed_month instead of typing a number."}, 'measure_source': {'type': 'string', 'description': 'Bind current progress to a live data source so it auto-updates daily instead of relying on manual edits. One of: stripe_active_subscribers, stripe_mrr, crm_active_leads, crm_webhook_leads_month, customer_evidence_count, product_telemetry_count, fcf_last_closed_month, amazon_deposits_last_closed_month, human_door_decisions_28d, factory_landings_aligned_pct_28d. Use when the KR measures exactly what a source provides. Do not bind finance/P&L here.'}, 'objective_title': {'type': 'string', 'description': 'Title of the parent objective (use this or objective_id)'}}}
Eingabeschema
{'type': 'object', 'required': ['campaign_name', 'daily_budget', 'primary_text', 'link_url', 'companyId'], 'properties': {'cta': {'type': 'string', 'description': 'Optional call-to-action: LEARN_MORE, SIGN_UP, GET_STARTED, CONTACT_US, DOWNLOAD, SUBSCRIBE'}, 'link_url': {'type': 'string', 'description': 'https destination URL (landing page, with UTMs)'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'objective': {'type': 'string', 'description': 'OUTCOME_TRAFFIC (default) | OUTCOME_AWARENESS | OUTCOME_ENGAGEMENT | OUTCOME_LEADS (needs firing pixel) | OUTCOME_SALES (needs firing pixel)'}, 'targeting': {'type': 'object', 'properties': {'age_max': {'type': 'number', 'description': '18–65, default 65'}, 'age_min': {'type': 'number', 'description': '18–65, default 25'}, 'countries': {'type': 'array', 'items': {'type': 'string'}, 'description': 'ISO-2 country codes, default ["US"]'}, 'interests': {'type': 'array', 'items': {'type': 'object'}, 'description': '{id, name} pairs from search_ad_targeting'}}, 'description': 'Audience: {countries: ["US"], age_min, age_max, interests: [{id, name}]}'}, 'daily_budget': {'type': 'number', 'description': 'Daily budget in the account currency, major units (e.g. 25 = 25 USD/day)'}, 'primary_text': {'type': 'string', 'description': 'The ad copy (primary text)'}, 'ad_account_id': {'type': 'string', 'description': 'Ad account (act_<digits>). Optional when the connection has exactly one.'}, 'campaign_name': {'type': 'string', 'description': 'Campaign name, e.g. "PCAI cold traffic — Compliance Crusader v1"'}, 'conversion_event': {'enum': ['LEAD', 'COMPLETE_REGISTRATION', 'PURCHASE'], 'type': 'string', 'description': 'Website event to optimize: OUTCOME_LEADS supports LEAD (default) or COMPLETE_REGISTRATION (completed signup); OUTCOME_SALES supports PURCHASE (default). Omit for other objectives. Use COMPLETE_REGISTRATION when browser/CAPI sends CompleteRegistration.'}, 'image_artifact_id': {'type': 'string', 'description': 'Optional agent_artifacts image id for the creative'}}}
Eingabeschema
{'type': 'object', 'required': ['title', 'companyId'], 'properties': {'year': {'type': 'number', 'description': 'Year for this objective (e.g., 2026)'}, 'title': {'type': 'string', 'description': 'Objective title - a clear, aspirational goal (e.g., "Build & Dogfood FreedomOS")'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'description': {'type': 'string', 'description': 'Brief context or notes about this objective. Do NOT include key results here.'}}}
Eingabeschema
{'type': 'object', 'required': ['amount_cents', 'title', 'companyId'], 'properties': {'title': {'type': 'string', 'description': 'What the payer sees on the checkout (e.g. Season sponsor).'}, 'currency': {'type': 'string', 'description': '3-letter currency (default usd).'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'description': {'type': 'string', 'description': 'Optional checkout description.'}, 'amount_cents': {'type': 'number', 'description': 'Amount in cents (integer, minimum 50).'}}}
Eingabeschema
{'type': 'object', 'required': ['name', 'output', 'companyId'], 'properties': {'name': {'type': 'string', 'description': 'Name for the pipeline (e.g., "Weekly Newsletter", "GitHub to Changelog")'}, 'inputs': {'type': 'object', 'properties': {'github': {'type': 'boolean', 'description': 'Include GitHub commits/PRs'}, 'manual': {'type': 'boolean', 'description': 'Allow manual content entry'}}, 'description': 'Input sources to listen to'}, 'output': {'enum': ['changelog', 'social_post', 'team_update', 'customer_newsletter', 'report', 'email', 'newsletter'], 'type': 'string', 'description': 'Output type: changelog (public), team_update (internal team email), report (specific recipients), customer_newsletter (external - requires Email MCP), social_post (x/linkedin/instagram/facebook/threads)'}, 'persona': {'type': 'string', 'description': 'Marketing persona to use (alex, elon, or custom ID)'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['title', 'category', 'companyId'], 'properties': {'title': {'type': 'string', 'description': 'The Playbook title (e.g., "X Original Content Playbook")'}, 'status': {'enum': ['draft', 'active', 'completed', 'paused'], 'type': 'string', 'description': 'Current status of the Playbook'}, 'category': {'enum': ['flow', 'funnel', 'flourish', 'freedom'], 'type': 'string', 'description': 'Growth category (4-F spine): flow=Leads, funnel=Conversion, flourish=LTV/retention, freedom=time/automation. Pass flow|funnel|flourish|freedom, not Leads/Conversion/CLV/Time.'}, 'priority': {'enum': ['low', 'medium', 'high'], 'type': 'string', 'description': 'Priority level'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'description': {'type': 'string', 'description': 'Detailed how-to / instructions for the Playbook'}, 'linked_kr_id': {'type': 'string', 'description': 'Optional key-result id the Playbook most advances (validated against the company OKRs). If omitted, the most off-track KR of the bound objective is chosen.'}, 'objective_id': {'type': 'string', 'description': 'Optional OKR objective UUID to bind this Playbook to (validated against this company). If omitted, the binding is auto-inferred from the category→OKR map.'}}}
Eingabeschema
{'type': 'object', 'required': ['activity_name', 'companyId'], 'properties': {'reason': {'type': 'string'}, 'agent_id': {'type': 'string', 'description': 'UUID of the agent.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'agent_name': {'type': 'string', 'description': 'Name of the agent. Provide this or agent_id.'}, 'draft_steps': {'type': 'array', 'items': {'type': 'object'}, 'description': 'Optional: pre-fills from the recovery stamp; when omitted, steps are proposed from the activity.'}, 'draft_title': {'type': 'string', 'description': 'Optional: pre-fills from the recovery stamp; when omitted, proposed from the activity.'}, 'linked_kr_id': {'type': 'string'}, 'activity_name': {'type': 'string', 'description': 'Oversized activity to draft a Play from.'}, 'draft_category': {'type': 'string', 'description': 'Optional: pre-fills from the recovery stamp; when omitted, proposed from the activity.'}, 'draft_goal_impact': {'type': 'string', 'description': 'Optional: pre-fills from the recovery stamp; when omitted, proposed from the activity.'}, 'draft_custom_instructions': {'type': 'string', 'description': 'Optional: pre-fills from the recovery stamp; when omitted, proposed from the activity.'}}}
Eingabeschema
{'type': 'object', 'required': ['title', 'code', 'percentage', 'companyId'], 'properties': {'code': {'type': 'string', 'description': 'The code buyers type, e.g. WELCOME10 (letters/digits/dashes, 3-30 chars)'}, 'title': {'type': 'string', 'description': 'Internal discount title'}, 'ends_at': {'type': 'string', 'description': 'Optional ISO end datetime; omit for no end'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'percentage': {'type': 'number', 'description': 'Percent off, 1-100'}}}
Eingabeschema
{'type': 'object', 'required': ['title', 'companyId'], 'properties': {'title': {'type': 'string', 'description': 'Page title'}, 'body_html': {'type': 'string', 'description': 'Page body (HTML)'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['title', 'companyId'], 'properties': {'tags': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Tags'}, 'title': {'type': 'string', 'description': 'Product title'}, 'vendor': {'type': 'string', 'description': 'Vendor/brand name'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'product_type': {'type': 'string', 'description': 'Product type/category label'}, 'description_html': {'type': 'string', 'description': 'Product description (HTML allowed)'}}}
Eingabeschema
{'type': 'object', 'required': ['title', 'companyId'], 'properties': {'title': {'type': 'string', 'description': 'Spreadsheet title'}, 'headers': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Column headers for the first row'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['campaign_name', 'daily_budget', 'companyId'], 'properties': {'bid': {'type': 'number', 'description': 'Optional bid in major units (default 1)'}, 'ad_text': {'type': 'string', 'description': 'Ad copy (≤280 chars) — mints a nullcast ad post and attaches it to the paused line item. Mutually exclusive with post_id.'}, 'country': {'type': 'string', 'description': 'ISO-2 country for location targeting, default US'}, 'post_id': {'type': 'string', 'description': 'Existing X post id to promote on the paused line item instead of minting new copy.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'objective': {'type': 'string', 'description': 'Line-item objective, default WEBSITE_CLICKS'}, 'daily_budget': {'type': 'number', 'description': 'Daily budget in the account currency, major units (e.g. 25 = 25 USD/day)'}, 'ad_account_id': {'type': 'string', 'description': 'Ads account id. Optional when the connection has exactly one.'}, 'campaign_name': {'type': 'string', 'description': 'Campaign name, e.g. "PCAI cold traffic v1"'}, 'funding_instrument_id': {'type': 'string', 'description': 'Payment method id. Optional when the account has exactly one.'}}}
Eingabeschema
{'type': 'object', 'required': ['agent_id', 'companyId'], 'properties': {'reason': {'type': 'string', 'description': 'Optional reason for deactivation'}, 'agent_id': {'type': 'string', 'description': 'UUID of the agent to deactivate'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['item_id', 'decision', 'companyId'], 'properties': {'revise': {'type': 'boolean', 'description': 'revise:true with decision:"denied" sends the card back to the producing agent to redo with your feedback — nothing publishes. Re-runs the originating activity and re-surfaces a corrected card. Omit/false for a plain rejection (learn-only). Only valid alongside decision:"denied" — any other decision is rejected. Prefer plain-string feedback; blank is ok (defaults to "Please revise").'}, 'item_id': {'type': 'string', 'description': 'UUID of the Command Center card to decide on'}, 'decision': {'enum': ['approved', 'denied', 'snoozed', 'dismissed', 'acknowledged', 'cancelled'], 'type': 'string', 'description': 'The decision: approved, denied, snoozed, dismissed (honest ack of a blocked_on_you card), acknowledged (factory FYI Got it — card stays pending, factory continues), or cancelled (factory Cancel build). Pass the decision from available_actions — do not send dismissed when the label is Got it.'}, 'feedback': {'type': 'string', 'description': 'What to change when revise:true — preferred plain string telling the producing agent what to fix. Also accepted under aliases: reason, revision_feedback, user_feedback, comment, notes (and shallow nested {text}/{content}). Optional: blank revise feedback defaults to "Please revise" (same as the browser card). Optional on plain deny/approve — but give specific, actionable feedback on a plain deny too.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'grant_mode': {'enum': ['once', 'standing'], 'type': 'string', 'description': "Capability-approval (mcp_tool_call) cards only: 'once' runs the approved call WITHOUT granting the capability for future calls (the next identical call asks again); 'standing' (the default when omitted) runs it AND grants it so future calls run without asking. Ignored on every other card type."}, 'hold_until': {'type': 'string', 'description': 'Loop-health, once-play timeout, hired-job, quiet-alarm, or compute-band hold: future ISO date or YYYY-MM-DD that would prove the card wrong. Required with decision snoozed on those classes (compute_band / compute_band_no_instrument: a dated hold is the experiment that excuses spend for that long; a bare snooze is not).'}, 'spin_off_kind': {'enum': ['feature', 'bug'], 'type': 'string', 'description': 'Split residual kind (default feature). Only used when spin_off_title + spin_off_description are set.'}, 'person_clicked': {'type': 'boolean', 'description': 'true ONLY when a person pressed the button in a review page or app widget to make this decision. Never set it on your own initiative.'}, 'spin_off_title': {'type': 'string', 'description': 'Split residual: one-line title for ONLY the novel half (requires spin_off_description). Closes the original card without re-building the mixed ask; mints a separate FO product-request card for this residual.'}, 'connection_scope': {'enum': ['company', 'personal'], 'type': 'string', 'description': 'Connector cards that start a rented (Composio) sign-in only: \'personal\' = "Just me" — the connection is usable only by the approving person (their chats, MCP key and bots they host); \'company\' = everyone in this company. Omit to keep the requester\'s pick (default company). Ignored on every other card type.'}, 'hired_job_action': {'enum': ['retry', 'host_complete', 'retire'], 'type': 'string', 'description': 'Unclosed hired-job cards only. FO: retry the first job once. HOST: host_complete (Day 1–3 done on the host) or retire the hire — never retry (that dispatches FreedomOS). Required with decision approved. Dismiss is not legal. Remind-on-a-date is a hold, not a close.'}, 'once_play_action': {'enum': ['retry', 'retire'], 'type': 'string', 'description': 'Once-play timeout cards only: retry the same play once, or retire it. Required with decision approved on that class. Dismiss is not legal.'}, 'constraint_action': {'enum': ['release'], 'type': 'string', 'description': 'OKR-health constraint cards only (a pinned constraint claim that expired or was disproved): "release" with decision approved releases the pin through the same owner the Command Center lever uses. A person decides these cards — attended chat or the Command Center; never a session on the operator\'s MCP token. Re-pinning (a new date and threshold) is done with pin_constraint, not here.'}, 'conforming_summary': {'type': 'string', 'description': 'Optional one-line name of the already-decided/conforming half (audit stamp on the closed card).'}, 'loop_health_action': {'type': 'object', 'properties': {'action': {'enum': ['bind', 'retire'], 'type': 'string'}, 'loop_id': {'type': 'string'}, 'linked_kr_id': {'type': 'string'}}, 'description': 'Loop-health cards only: bind or retire ONE named loop. Required with decision approved on that class. Dismiss is not legal.'}, 'agent_outcome_action': {'enum': ['pause'], 'type': 'string', 'description': 'Playing-house / thrash / agent_outcome_flag alarms only: pause plant work. Required with decision approved on that class. Stretch and Dismiss are not legal.'}, 'spin_off_description': {'type': 'string', 'description': 'Split residual: full description for ONLY the novel half (requires spin_off_title). Do not restate the already-decided conforming half as work to build.'}}}
Eingabeschema
{'type': 'object', 'required': ['icp_id', 'companyId'], 'properties': {'icp_id': {'type': 'string', 'description': 'The unique ICP ID from get_icps response.'}, 'reason': {'type': 'string', 'description': 'Optional. Why this ICP is being deleted.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['idea_identifier'], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'idea_identifier': {'type': 'string', 'description': 'How to find the idea: UUID, content snippet, or "newest"/"latest" for most recent'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'reason': {'type': 'string', 'description': 'Why it is archived (≤300 chars) — recorded on the archived entry and in the audit trail.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'objective_id': {'type': 'string', 'description': 'ID of the parent objective (optional)'}, 'key_result_id': {'type': 'string', 'description': 'ID of the key result (optional if using key_result_title)'}, 'superseded_by': {'type': 'string', 'description': 'ID of the LIVE key result that replaces this one (same company). Recorded on the archived entry; any agent that later looks the old id up is redirected to it. Use when a KR is being swapped for a better-measured one rather than dropped.'}, 'objective_title': {'type': 'string', 'description': 'Title of the parent objective, to scope the search (optional)'}, 'key_result_title': {'type': 'string', 'description': 'Title of the key result to archive (use this or key_result_id)'}}}
Eingabeschema
{'type': 'object', 'required': ['slug', 'companyId'], 'properties': {'slug': {'type': 'string', 'description': 'The slug of the knowledge file to delete'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'objective_id': {'type': 'string', 'description': 'ID of the objective (optional if using objective_title)'}, 'objective_title': {'type': 'string', 'description': 'Title of the objective to archive (use this or objective_id)'}}}
Eingabeschema
{'type': 'object', 'required': [], 'properties': {'run_id': {'type': 'string', 'description': 'Poll a background deliberation started earlier (MCP mode). Pass the run_id returned by the starting call, with the same companyId. Omit question/positions when polling.'}, 'context': {'type': 'string', 'description': 'Goals, constraints, values, and relevant data that should inform the deliberation. The more context, the better the arguments.'}, 'criteria': {'type': 'array', 'items': {'type': 'object', 'properties': {'name': {'type': 'string'}, 'weight': {'type': 'number'}}}, 'description': 'Optional weighted evaluation criteria. Each item should have "name" (string) and "weight" (number 0-1, should sum to ~1). If omitted, defaults are generated.'}, 'question': {'type': 'string', 'description': 'The decision or question to deliberate. Be specific — e.g., "Should we invest in mobile app development or API partnerships for growth in Q2?" Required unless polling with run_id.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'positions': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Two or more positions to argue. Each should be a clear, distinct option — e.g., ["Mobile app development", "API partnerships", "Content marketing"]. Required unless polling with run_id.'}, 'max_rounds': {'type': 'number', 'description': 'Maximum rounds of deliberation (default: 5). More rounds = better arguments but more compute.'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['agent_id', 'companyId'], 'properties': {'host': {'enum': ['grok-bot', 'claude', 'chatgpt', 'other'], 'type': 'string', 'description': 'Optional: detach only the key for this one bot. Omit it to detach every bot from the role.'}, 'agent_id': {'type': 'string', 'description': 'UUID of the role to take the key back from. From get_team_roster.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['channel', 'offer', 'companyId'], 'properties': {'offer': {'type': 'string', 'description': 'What the ad promotes, in plain words — product + the concrete deal (e.g. "FreedomOS $47/mo solo seat")'}, 'icp_id': {'type': 'string', 'description': 'ICP id from get_icps. Optional only when the company has exactly one customer-class ICP — several ICPs refuse without it (no silent audience pick).'}, 'channel': {'type': 'string', 'description': "'x' (Twitter, ≤280-char ad_text) or 'meta' (Facebook/Instagram primary_text + CTA enum)"}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'landing_url': {'type': 'string', 'description': 'Optional destination URL for context (helps the CTA match the landing page).'}, 'variant_count': {'type': 'number', 'description': '2 or 3 (default 3).'}}}
Eingabeschema
{'type': 'object', 'required': ['lead_id', 'angle', 'journey_summary', 'companyId'], 'properties': {'angle': {'type': 'string', 'description': "The outreach angle to use (e.g., 'deeper_lp3_discovery', 'lighter_touch_different_hook', 'jurisdiction_clarification', 'kind_check_in'). Take from synthesize_lead_hypothesis.suggested_angle if unsure."}, 'lead_id': {'type': 'string', 'description': 'UUID of the lead.'}, 'reply_to': {'type': 'string', 'description': "Optional Reply-To address to carry on the eventual send (CONTRACT-1 agent thread address). Stamped into both drafts' metadata (best-effort — the metadata column is additive); send_lead_draft reads it at send time and passes it to send_email. Never changes what is drafted."}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'from_name': {'type': 'string', 'description': "Optional sender display name (e.g., 'Acme Team', 'Alex at Acme'). Used in draft signature. When omitted, the CONTRACT-5 chain resolves it: the company's mcp_connections.resend.auth_config.from_name, else a generic 'Team'. Sequence callers pass the sequence's owning agent's name here (the top of the chain)."}, 'eligible_at': {'type': 'string', 'description': "Optional ISO timestamp — the earliest real time this draft may be sent (2026-07-13 send-timing gate). For a sequence step, pass now + that step's delay_hours (an ESTIMATE; the send-gate re-stamps it to the real value once the prior step actually resolves). Omitted → eligible immediately (the correct default for step 1 and for manual one-off drafts)."}, 'sequence_id': {'type': 'string', 'description': 'Optional. The outreach_sequences.id the step belongs to. Pass it together with sequence_step_id to enable the A/B prior-stats bias — step ids repeat across sequences (step1…stepN), so stats are only comparable within one sequence. Also persisted on the draft row so the send-gate can resolve "the next step\'s draft" by an exact join instead of guessing. Omitted → no bias, no sequence linkage (manual one-off draft).'}, 'company_context': {'type': 'string', 'description': "Optional short summary of the company the lead arrived at (e.g., 'Acme Health — pharmacy compounding compliance consulting'). Helps the model pitch correctly."}, 'journey_summary': {'type': 'string', 'description': 'Short prose summary of what we know about this lead (their state, recent activity, what they engaged with). Used as context for the draft. Synthesis.intent_summary + 1-2 notes works well.'}, 'sequence_step_id': {'type': 'string', 'description': 'Optional. If this draft is part of an auto-mode sequence step, pass the step_id from outreach_sequences. Otherwise omit (manual one-off draft).'}, 'regenerated_reason': {'type': 'string', 'description': "Optional (regenerate-on-signal, 2026-07-15). When the sequencer re-drafts a not-yet-sent step after a meaningful lead signal (temperature flip to hot, a click), it passes a short human-readable reason (e.g. 'redrafted after they clicked'). Stamped into both drafts' metadata.regenerated_reason so the review card can show WHY the copy was refreshed. Never changes drafting logic — provenance only."}, 'variant_b_guidance': {'type': 'string', 'description': "Optional (CONTRACT-3). Sequence-designed seed for the B variant — a distilled subject+body angle persisted on the sequence step (steps jsonb, additive variant_b_guidance key). When present, variant_b is grounded in this guidance while variant_a stays the model's best independent take on the main angle. Omitted → both variants generated exactly as before."}}}
Eingabeschema
{'type': 'object', 'required': ['tenet', 'companyId'], 'properties': {'tenet': {'enum': ['mission', 'vision'], 'type': 'string', 'description': 'Which tenet to draft from the website signal'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['sequence', 'segment_tag', 'companyId'], 'properties': {'limit': {'type': 'number', 'description': 'Optional — max leads to enroll in this call (default 500, which is also the hard ceiling).'}, 'sequence': {'type': 'string', 'description': 'The sequence to enroll into — its name or id (from list_sequences). Own-company sequences and system defaults are valid.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'segment_tag': {'type': 'string', 'description': "Exact segment tag token from crm_leads.source, e.g. 'csv:free-trial' (see list_segments). No substring matching — must match a live tag exactly. Tags in tool output are wrapped in <user_field> markers — pass the inner text verbatim."}, 'exclude_active': {'type': 'boolean', 'description': 'Optional — skip leads that already have a queued/active enrollment in ANOTHER sequence, so a segment blast does not double-touch them. Default true; only set false when the operator explicitly accepts double-touch.'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'ad_account_id': {'type': 'string', 'description': 'Ad account id (act_<digits> or bare digits). Optional when the connection has exactly one ad account.'}}}
Eingabeschema
{'type': 'object', 'required': ['query'], 'properties': {'query': {'type': 'string', 'description': "Plain words for the job or tool name (e.g. 'cash position', 'social posts', 'run_playbook')."}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['slides', 'caption', 'companyId'], 'properties': {'theme': {'enum': ['dark', 'light', 'brand'], 'type': 'string', 'description': 'Visual theme. Defaults to brand (dark canvas + accent).'}, 'folder': {'type': 'string', 'description': 'Optional Media gallery folder to file this carousel into (freeform name, e.g. "q3-campaign"). Shown as a folder chip on the /media page. Reuse an existing folder name when the work belongs to it.'}, 'format': {'enum': ['linkedin_portrait', 'square', 'wide'], 'type': 'string', 'description': 'Slide dimensions. linkedin_portrait (1080×1350, 4:5, default — best LinkedIn engagement), square (1080×1080), wide (1280×720).'}, 'slides': {'type': 'array', 'items': {'type': 'object', 'required': ['title'], 'properties': {'body': {'type': 'string', 'description': 'Optional supporting copy beneath the title.'}, 'title': {'type': 'string', 'description': 'The slide headline (required). Keep it punchy — it renders large.'}, 'kicker': {'type': 'string', 'description': 'Optional short eyebrow label (e.g. a section tag). Rendered uppercase in the accent color.'}, 'citation': {'type': 'string', 'description': 'Optional — a GENUINE external source ONLY (e.g. "USP <797> §4.2", a standard or study). Rendered as legible "Source: …" text (the un-garble-able differentiator). OMIT for slides without a real source — taglines, product names, CTAs, and rhetorical lines belong in "body", never here. Typically only one slide is cited. Do not prefix with "Source:" yourself.'}}}, 'description': 'Ordered slides. Each: { kicker?, title (required), body?, citation? }. 3–8 ideal, max 12.'}, 'caption': {'type': 'string', 'description': 'The post caption that accompanies the carousel. Combined with the slide copy into the gate-text the ICP+Pledge gate scores.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'accent_hex': {'type': 'string', 'description': 'Optional brand accent color as 6-digit hex (e.g. "#F97316"). Pass the tenant\'s brand color. Defaults per theme.'}, 'brand_label': {'type': 'string', 'description': "Optional per-tenant wordmark shown in the slide footer (e.g. your company name). Pass YOUR company's label only. Omit to render no wordmark — never a hardcoded brand."}}}
Eingabeschema
{'type': 'object', 'required': ['prompt', 'companyId'], 'properties': {'title': {'type': 'string', 'description': 'Optional short title for the artifact record. Defaults to a truncated version of the prompt.'}, 'prompt': {'type': 'string', 'description': 'What to visualize — e.g. "compare these three pricing tiers as a table" or "a simple funnel: 100 leads -> 40 qualified -> 12 closed".'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['prompt', 'companyId'], 'properties': {'folder': {'type': 'string', 'description': 'Optional Media gallery folder to file this image into (freeform name, e.g. "q3-campaign" or "brand-assets"). Shown as a folder chip on the /media page so the operator can find it later. Reuse an existing folder name when the work belongs to it.'}, 'prompt': {'type': 'string', 'description': 'Detailed description of the image. Include lighting, camera angle, environment, style, and subject details.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'model_tier': {'enum': ['quality', 'standard', 'auto'], 'type': 'string', 'description': 'quality (default, grok-imagine-image-2.0), auto (2.0 quality:auto), or standard (cheaper draft). Prefer quality for customer-facing work.'}, 'resolution': {'enum': ['1k', '2k'], 'type': 'string', 'description': 'Output resolution. 1k (default) or 2k (print/pro).'}, 'artifact_id': {'type': 'string', 'description': 'ID of an existing artifact to edit. Prefer over raw URLs (company-scoped resolve).'}, 'folder_name': {'type': 'string', 'description': 'Subfolder name for Drive save (e.g. "Product Shots", "Headshots"). Only used when save_to_drive is true.'}, 'artifact_ids': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Multiple artifact IDs for multi-ref edit/composite (max 5).'}, 'aspect_ratio': {'enum': ['1:1', '16:9', '9:16', '4:3', '3:4', '3:2', '2:3', '2:1', '1:2', '19.5:9', '9:19.5', '20:9', '9:20', '21:9', '5:2', 'auto'], 'type': 'string', 'description': 'Aspect ratio. Defaults to 1:1. Use "auto" to let the model choose.'}, 'save_to_drive': {'type': 'boolean', 'description': 'If true, also save the image to Google Drive for permanent storage. Defaults to false.'}, 'reference_image_url': {'type': 'string', 'description': 'Chat door only. MCP/autonomous must pass artifact_id — a URL is refused and never queued as an Allow card.'}, 'reference_image_urls': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Chat door only (max 5). MCP/autonomous: artifact_ids.'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'objective_id': {'type': 'string', 'description': 'ID of the objective (optional if using objective_title)'}, 'objective_title': {'type': 'string', 'description': 'Title of the objective to generate key results for (use this or objective_id)'}}}
Eingabeschema
{'type': 'object', 'required': ['prompt', 'companyId'], 'properties': {'size': {'type': 'string', 'description': 'Size in WxH format (e.g., "1024x1024") or aspect ratio (e.g., "1:1", "16:9"). Defaults to 1024x1024.'}, 'folder': {'type': 'string', 'description': 'Optional Media gallery folder to file this into (freeform name, e.g. "q3-campaign" or "brand-assets"). Shown as a folder chip on the /media page. Reuse an existing folder name when the work belongs to it.'}, 'prompt': {'type': 'string', 'description': 'Detailed description of the vector image. Include style, colors, subject, composition. Be specific about the visual style — "minimalist line art logo", "flat vector icon", "geometric brand mark".'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'folder_name': {'type': 'string', 'description': 'Subfolder name for Drive save (e.g., "Logos", "Icons", "Brand"). Only used when save_to_drive is true.'}, 'save_to_drive': {'type': 'boolean', 'description': 'If true, also save the SVG to Google Drive for permanent storage. Defaults to false.'}}}
Eingabeschema
{'type': 'object', 'required': ['prompt', 'companyId'], 'properties': {'prompt': {'type': 'string', 'description': 'Detailed description of the video to generate. Include visual scene, audio/voice direction, mood, and brand elements. For multi-image: describe how the subjects from each image interact. For video editing: describe the changes to make. Avoid precise on-screen text animation (prefer burned-in design tools) and many incompatible camera cuts without clear staging — both are still hard for short-form video models.'}, 'duration': {'type': 'number', 'description': 'Video duration in seconds (1–15, primitive max). Use the length the shot needs — not an FO soft cap. Default 5 only when omitted. Not supported for video editing.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'image_url': {'type': 'string', 'description': 'Chat door only. MCP/autonomous must pass artifact_id — a URL is refused and never queued as an Allow card.'}, 'video_url': {'type': 'string', 'description': 'Chat door only. MCP/autonomous must pass artifact_id of the video to edit (input capped at 8.7s).'}, 'image_urls': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Chat door only (up to 7). MCP/autonomous: artifact_ids.'}, 'resolution': {'enum': ['480p', '720p', '1080p'], 'type': 'string', 'description': 'Video resolution. 480p (fast draft, API default when omitted), 720p (HD), 1080p (full HD on text-to-video and image-to-video) — prefer the highest resolution that fits the deliverable, not a permanent draft default. Reference-to-video is automatically clamped to 720p (primitive). Not supported for video editing.'}, 'artifact_id': {'type': 'string', 'description': 'ID of a single existing artifact from the MEDIA IN THIS CONVERSATION block. The system resolves a fresh signed URL and auto-detects: image artifacts → image-to-video, video artifacts → video editing. For multiple images, use artifact_ids instead.'}, 'artifact_ids': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Array of artifact IDs (up to 7, primitive max) for reference-to-video. System resolves fresh signed URLs for each.'}, 'aspect_ratio': {'enum': ['16:9', '9:16', '1:1', '4:3', '3:4', '3:2', '2:3'], 'type': 'string', 'description': 'Aspect ratio. Default: 16:9 (YouTube/hero/landscape); 9:16 (Reels/Shorts/Stories); 1:1 (feed square). For image-to-video, defaults to the input image ratio. Not supported for video editing.'}, 'save_to_drive': {'type': 'boolean', 'description': 'If true, also save the video to Google Drive. Defaults to false.'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'company_id': {'type': 'string', 'description': 'Company ID to audit. Usually auto-injected from context.'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'period': {'enum': ['month', 'quarter', 'ytd'], 'type': 'string', 'description': 'Time period for comparison'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'fiscal_year': {'type': 'number', 'description': 'The fiscal year to query'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'level': {'type': 'string', 'description': "Aggregation level: 'account', 'campaign' (default), 'adset', or 'ad'."}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'time_range': {'type': 'object', 'properties': {'since': {'type': 'string', 'description': 'Start date, YYYY-MM-DD'}, 'until': {'type': 'string', 'description': 'End date, YYYY-MM-DD'}}, 'description': "Exact window: { since: 'YYYY-MM-DD', until: 'YYYY-MM-DD' }. Mutually exclusive with date_preset."}, 'campaign_id': {'type': 'string', 'description': 'Optional: scope the report to one campaign (id from list_ad_campaigns).'}, 'date_preset': {'type': 'string', 'description': "Reporting window preset, e.g. 'last_7d', 'last_30d' (default), 'this_month', 'lifetime'. Mutually exclusive with time_range."}, 'ad_account_id': {'type': 'string', 'description': 'Ad account id (act_<digits> or bare digits). Optional when the connection has exactly one ad account.'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'agent_id': {'type': 'string', 'description': 'Optional: limit to one agent (uuid). Omit for the whole team.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['agent_name', 'companyId'], 'properties': {'days': {'type': 'number', 'description': 'Lookback window in days (default: 30)'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'agent_name': {'type': 'string', 'description': 'Name of the agent to audit'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'limit': {'type': 'number', 'description': 'Maximum artifacts to return (default: 10)'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'source_url': {'type': 'string', 'description': 'Filter by source URL (partial match)'}, 'artifact_type': {'enum': ['screenshot', 'session_recording', 'page_analysis', 'report'], 'type': 'string', 'description': 'Filter by artifact type'}, 'created_by_agent': {'type': 'string', 'description': 'Filter by agent that created the artifact'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': [], 'properties': {'companyId': {'type': 'string', 'description': 'Optional active company for featured card pick + revenue constraint + ranked Playbooks. Omit for host-only board (still returns needs_you + running).'}, 'company_id': {'type': 'string', 'description': 'Alias of companyId'}, 'focus_area': {'enum': ['flow', 'funnel', 'flourish', 'freedom'], 'type': 'string', 'description': 'Optional: focus on a specific Playbook category'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': [], 'properties': {'website': {'type': 'string', 'description': 'Optional business website URL (http or https)'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'founder_why': {'type': 'string', 'description': 'Why it exists — what should come off their plate first, in their words'}, 'holdco_name': {'type': 'string', 'description': 'What they are building (holding company / business name)'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'limit': {'type': 'number', 'description': 'Max rows to return (default 50, hard cap 200).'}, 'verdict': {'type': 'string', 'description': 'Optional filter: pass | fail | flag | hold | error | skipped.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'check_name': {'type': 'string', 'description': 'Optional filter: brand | legal | ethics | security | pledge_stamp | icp_quality | craft.'}, 'content_grain': {'type': 'string', 'description': 'Optional filter by content grain (the safety/topic axis).'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['item_id', 'companyId'], 'properties': {'item_id': {'type': 'string', 'description': 'UUID of the Command Center card (from get_command_center_items or a prior card reference)'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'q': {'type': 'string', 'description': 'Case-insensitive title search (min 2 chars). Use when the operator names a card ("call minutes", a company). Finds update/report cards that ranking would otherwise bury.'}, 'limit': {'type': 'number', 'description': 'Max items to return (default: 25)'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'task_type': {'type': 'string', 'description': 'Optional type filter (update, report, decision, alert, …). Use when they ask only for minutes or only for decisions.'}, 'holdco_class': {'type': 'boolean', 'description': 'When true, only cards flagged as holdco-visible class evidence (this is a class, these are its instance ids). The holdco chair sweep uses this so class evidence is not read as one dead run.'}, 'status_filter': {'enum': ['pending', 'approved', 'denied', 'snoozed', 'all'], 'type': 'string', 'description': 'Filter by status. Default: "pending". Options: pending, approved, denied, snoozed, all'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'include_settings': {'type': 'boolean', 'description': 'Whether to include extended settings in the response. Defaults to true.'}}}
Eingabeschema
{'type': 'object', 'required': [], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': [], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'period': {'enum': ['today', 'week', 'month', 'all'], 'type': 'string', 'description': 'Time period for FOS credit/usage breakdown only. Does not change hosting (always this calendar month). Default: "month"'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'breakdown_by': {'enum': ['model', 'endpoint', 'both'], 'type': 'string', 'description': 'How to group the usage data. Default: "both"'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'limit': {'type': 'number', 'description': 'How many recent decisions to return, newest first (default 25, max 100).'}, 'routing': {'enum': ['AUTO_RUN', 'TEE_UP', 'REFUSE_AND_SURFACE'], 'type': 'string', 'description': 'Optional filter: AUTO_RUN (the engine ran it autonomously), TEE_UP (held for your approval), or REFUSE_AND_SURFACE (refused — e.g. faith/values content the founder authors).'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': [], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': [], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'month': {'type': 'number', 'description': 'Specific month (1-12). If provided, returns data for that month only. If omitted, uses period parameter for range.'}, 'period': {'enum': ['month', 'quarter', 'ytd', 'annual'], 'type': 'string', 'description': 'Time period for summary when month is not specified (default: ytd)'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'fiscal_year': {'type': 'number', 'description': 'The fiscal year to query (default: current year)'}}}
Eingabeschema
{'type': 'object', 'required': [], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'fiscal_year': {'type': 'number', 'description': 'The fiscal year to analyze'}, 'account_type': {'enum': ['income', 'expense', 'all'], 'type': 'string', 'description': 'Filter by account type'}}}
Eingabeschema
{'type': 'object', 'required': [], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': [], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': [], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': [], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'agent_id': {'type': 'string', 'description': "The role to read. Omit it when you are calling with that role's own key — the key already says which role you are."}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'year': {'type': 'number', 'description': 'Filter by year (e.g., 2026). Defaults to current year.'}, 'limit': {'type': 'number', 'description': 'Maximum number to return (default: 10)'}, 'all_years': {'type': 'boolean', 'description': 'Set to true to get OKRs across all years (overrides year filter)'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': [], 'properties': {'host': {'type': 'string', 'description': 'Optional host agent label: claude_code | cursor | codex | claude_desktop | other. Default claude_code.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'limit': {'type': 'number', 'description': 'Maximum items to return (default: 10)'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'playbook_id': {'type': 'string', 'description': 'UUID of the Playbook (use this or playbook_title).'}, 'playbook_title': {'type': 'string', 'description': 'Title (or fragment) of the Playbook (use this or playbook_id).'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['request_id'], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'request_id': {'type': 'string', 'description': 'The request_id UUID returned by submit_product_request'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'fiscal_year': {'type': 'number', 'description': 'The fiscal year to query (default: current year)'}, 'account_name': {'type': 'string', 'description': 'Optional filter to specific account name'}}}
Eingabeschema
{'type': 'object', 'required': [], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'member_name': {'type': 'string', 'description': 'Optional display name (defaults to "the operator").'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'member_id': {'type': 'string', 'description': 'Optional UUID whose fluency to read. Defaults to you (ctx.userId).'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'limit': {'type': 'number', 'description': 'How many recent releases to return, newest first (default 50, max 200).'}, 'since': {'type': 'string', 'description': 'ISO timestamp lower bound — only releases at/after this time.'}, 'channel': {'enum': ['x', 'linkedin', 'hub', 'beehiiv', 'email', 'slack', 'instagram', 'facebook', 'threads'], 'type': 'string', 'description': 'Filter to one channel.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'piece_key': {'type': 'string', 'description': "Filter to one piece's releases (e.g. 'output:<pipeline_outputs.id>', 'idea:<content_ideas.id>', 'hub-letter:<slug>')."}, 'released_by': {'enum': ['agent', 'human', 'system'], 'type': 'string', 'description': "Filter by who released it: 'agent', 'human', or 'system'."}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['site_url', 'companyId'], 'properties': {'end_date': {'type': 'string', 'description': 'End date in YYYY-MM-DD format. Defaults to today.'}, 'site_url': {'type': 'string', 'description': 'The site URL exactly as shown in Search Console (e.g., "sc-domain:example.com" or "https://example.com/")'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'row_limit': {'type': 'number', 'description': 'Max rows to return (1-100). Defaults to 25.'}, 'dimensions': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Dimensions to group by, combinable: ["query"] for keywords, ["page"] for pages, ["query","page"] for both. Defaults to ["query"].'}, 'start_date': {'type': 'string', 'description': 'Start date in YYYY-MM-DD format. Defaults to 28 days ago.'}, 'page_filter': {'type': 'string', 'description': 'Optional filter: only include rows where the page URL contains this string.'}, 'query_filter': {'type': 'string', 'description': 'Optional filter: only include rows where the query contains this string.'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'query': {'type': 'string', 'description': 'Optional Shopify customer search, e.g. "accepts_marketing:true" or "orders_count:>5"'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['order_id', 'companyId'], 'properties': {'order_id': {'type': 'string', 'description': 'The order gid, e.g. gid://shopify/Order/123'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['product_id', 'companyId'], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'product_id': {'type': 'string', 'description': 'The product gid, e.g. gid://shopify/Product/123'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['theme_id', 'filename', 'companyId'], 'properties': {'filename': {'type': 'string', 'description': 'The theme file path, e.g. sections/header.liquid or assets/theme.css'}, 'theme_id': {'type': 'string', 'description': 'The theme gid, e.g. gid://shopify/OnlineStoreTheme/123'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['site_url', 'companyId'], 'properties': {'site_url': {'type': 'string', 'description': 'The site URL exactly as shown in Search Console (e.g., "sc-domain:example.com" or "https://example.com/")'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'days': {'type': 'number', 'description': 'Lookback window in days for activity_runs and approval_velocity only (default: 7). pending_cards is always the live queue.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'company_id': {'type': 'string', 'description': 'Company ID to check. Usually auto-injected from context.'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'limit': {'type': 'number', 'description': 'Number of top customers to return (default: 10, max: 25)'}, 'sort_by': {'enum': ['ltv', 'revenue', 'recent'], 'type': 'string', 'description': 'Sort criteria (default: ltv)'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'limit': {'type': 'number', 'description': 'Max results to return (default: 25, max: 100)'}, 'status': {'enum': ['pending', 'reviewed', 'approved', 'rejected'], 'type': 'string', 'description': 'Filter by status'}, 'date_to': {'type': 'string', 'description': 'End date filter (ISO format)'}, 'category': {'type': 'string', 'description': "Filter by category: matches the FreedomOS cash category (e.g. 'Loan payment'), ignoring case, spaces and underscores. The bank subcategory (e.g. LOAN_PAYMENTS) is used only for rows with no FreedomOS category. An empty result lists available_categories."}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'date_from': {'type': 'string', 'description': 'Start date filter (ISO format, e.g., 2026-01-01)'}, 'is_income': {'type': 'boolean', 'description': 'Filter to income (true) or expenses (false)'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'campaign_id': {'type': 'string', 'description': 'Optional: scope the report to one campaign (id from list_x_ad_campaigns).'}, 'ad_account_id': {'type': 'string', 'description': 'Ads account id. Optional when the connection has exactly one ads account.'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['kind', 'companyId'], 'properties': {'kind': {'enum': ['ProfitAndLoss', 'BalanceSheet', 'BankSummary', 'TrialBalance', 'ExecutiveSummary'], 'type': 'string', 'description': 'Which report to pull'}, 'to_date': {'type': 'string', 'description': 'Period end / as-at date, YYYY-MM-DD. Defaults to today.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'from_date': {'type': 'string', 'description': 'Period start, YYYY-MM-DD (period reports: ProfitAndLoss, BankSummary)'}}}
Eingabeschema
{'type': 'object', 'required': ['tweet_id', 'companyId'], 'properties': {'tweet_id': {'type': 'string', 'description': 'The tweet ID (numeric) or full tweet URL (e.g. https://x.com/user/status/123456)'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'pipeline_output_id': {'type': 'string', 'description': 'Optional. The pipeline_output ID to write metrics back to the content card.'}}}
Eingabeschema
{'type': 'object', 'required': ['agent_id', 'tool_name', 'companyId'], 'properties': {'reason': {'type': 'string', 'description': "Optional one-line why — stored in the audit record on the agent's JD."}, 'agent_id': {'type': 'string', 'description': 'UUID of the agent receiving the tool. Use get_team_roster to find IDs.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'tool_name': {'type': 'string', 'description': 'Exact registry name of the tool to grant (e.g. "capture_idea").'}}}
Eingabeschema
{'type': 'object', 'required': ['amount_cents', 'companyId'], 'properties': {'interval': {'enum': ['monthly', 'daily', 'weekly', 'yearly', 'all_time', 'per_authorization'], 'type': 'string', 'description': 'Stripe spending_limits interval (default monthly).'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'amount_cents': {'type': 'number', 'description': 'Monthly (or chosen interval) cap in cents. $100/month = 10000.'}, 'cardholder_name': {'type': 'string', 'description': 'Name on the CEO cardholder (default CEO).'}, 'allowed_categories': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Optional Stripe Issuing allowed MCC slugs. New merchant class is a founder yes.'}, 'blocked_categories': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Optional Stripe Issuing blocked MCC slugs.'}}}
Eingabeschema
{'type': 'object', 'required': ['role_name', 'goal', 'success_metrics', 'companyId'], 'properties': {'goal': {'type': 'string', 'description': 'The specific mission this hire will achieve — be as specific as possible, include real numbers'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'obsession': {'type': 'string', 'description': 'The ONE demand-path KPI this agent lives or dies by (leads, enrolls, revenue, cash, customers). Not "agents activated" or team-hygiene metrics. Specific with numbers when possible (e.g., "Close the $4,200/mo freedom gap"). Always include — core to a complete JD.'}, 'preflight': {'type': 'array', 'items': {'type': 'object', 'required': ['name'], 'properties': {'why': {'type': 'string'}, 'kind': {'enum': ['input', 'access'], 'type': 'string'}, 'name': {'type': 'string'}, 'output': {'type': 'string'}, 'check_tool': {'type': 'string'}, 'granted_by': {'type': 'string'}}}, 'description': 'OPTIONAL. What the operator must hand over BEFORE this role can start (kind "input": a brand voice doc, a target list, a login the operator shares in Knowledge; each with why it is needed, who grants it, the tool that checks for it — default read_knowledge — and what that tool shows when it is there). Integration access ("access") is derived from the activity plan automatically; list it only for something the plan cannot see. A missing item becomes ONE blocked_on_you card from the role, never a guess.'}, 'role_name': {'type': 'string', 'description': 'A descriptive role name (e.g., "YouTube Growth Specialist", "Cash Flow Analyst", "SEO Content Writer")'}, 'agent_name': {'type': 'string', 'description': 'OPTIONAL. The exact display name the user explicitly asked for — a single first name (e.g. "Garth" from "name it Garth" / "call it Garth"). Set this ONLY when the user named the agent; leave unset to auto-generate a fitting name. NEVER fold the requested name into role_name.'}, 'guardrails': {'type': 'array', 'items': {'type': 'string'}, 'description': 'What this agent should NEVER do (e.g., "Never recommend cutting product investment", "Never ignore cash runway below 3 months"). Always include — core to a complete JD.'}, 'first_72_hours': {'type': 'array', 'items': {'type': 'string'}, 'description': '3 demand-bound first actions (leads/enroll/outbound/content-to-market/cash/fulfillment). FORBIDDEN: placement audits, governance of inactive agents, fleet ownership maps, agent scoreboards. These become Day 1-3 tasks; hygiene shapes are stripped at write time. Always include — core to a complete JD.'}, 'reports_to_name': {'type': 'string', 'description': 'Name or role of the team member this agent should report to. Use an existing team member name if one is a natural manager. Say "Linnet" for Chief of Staff, or "founder" for direct-to-founder reporting.'}, 'success_metrics': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Specific, measurable outcomes that define success'}, 'domain_expertise': {'type': 'string', 'description': "Role-specific domain knowledge that makes this agent an expert (frameworks, ratios, best practices specific to this role and industry). Include when available — sharpens the agent's expertise."}, 'reporting_cadence': {'type': 'string', 'description': 'How often to send updates: weekly, biweekly, monthly, or realtime'}, 'personality_traits': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Communication style preferences (e.g., "direct", "data-heavy", "encouraging", "concise", "detailed analysis")'}, 'required_resources': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Tools, integrations, or data sources this agent needs. Default documents, briefs, and reports to the FreedomOS Knowledge Base (save_knowledge / read_knowledge — always available, visible in-app); list an EXTERNAL integration (e.g. Google Sheets) only when the role genuinely needs it. Do NOT list Google Docs/Sheets as a default — the agent can request a connector via request_connector and state the limitation until it is granted.'}, 'context_and_resources': {'type': 'string', 'description': 'What the user has already tried, existing tools/data/resources available'}}}
Eingabeschema
{'type': 'object', 'required': ['pipeline_output_id', 'companyId'], 'properties': {'reason': {'type': 'string', 'description': 'Optional one line on why it is held.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'pipeline_output_id': {'type': 'string', 'description': 'The waiting post (pipeline_output_id from post_to_x or get_pending_approvals).'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'text': {'type': 'string', 'description': 'A pasted writing sample to learn from.'}, 'urls': {'type': 'array', 'items': {'type': 'string'}, 'description': "Public URLs to learn the voice from — the operator's own writing, or admired creators' pages. Fetched HTTPS-only, SSRF-guarded, no crawling."}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'faith_heavy': {'type': 'boolean', 'description': 'Mark the sources faith-heavy (style learned, faith substance excluded).'}, 'subject_kind': {'enum': ['person', 'brand'], 'type': 'string', 'description': "Whose voice — 'person' (personal brand) or 'brand'. Defaults to the existing profile's subject if omitted."}, 'subject_name': {'type': 'string', 'description': 'The person or brand name.'}}}
Eingabeschema
{'type': 'object', 'required': ['tweet_id', 'companyId'], 'properties': {'tweet_id': {'type': 'string', 'description': 'Tweet id or full x.com status URL.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'pipeline_id': {'type': 'string', 'description': 'Optional pipeline to attach (from list_pipelines). Defaults to the company social pipeline.'}}}
Eingabeschema
{'type': 'object', 'required': ['inspection_url', 'site_url', 'companyId'], 'properties': {'site_url': {'type': 'string', 'description': 'The site URL as shown in Search Console (e.g., "sc-domain:getfreedomos.com" or "https://getfreedomos.com/")'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'inspection_url': {'type': 'string', 'description': 'The full URL to inspect (e.g., "https://getfreedomos.com/features")'}}}
Eingabeschema
{'type': 'object', 'required': ['initial_request', 'companyId'], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'initial_request': {'type': 'string', 'description': 'What the user originally said they needed help with'}}}
Eingabeschema
{'type': 'object', 'required': ['integration_name', 'tool_name', 'companyId'], 'properties': {'arguments': {'type': 'object', 'description': 'Arguments to pass to the tool'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'tool_name': {'type': 'string', 'description': 'Name of the tool to execute on the integration'}, 'integration_name': {'type': 'string', 'description': 'Name of the integration (e.g., "stripe", "calendar")'}}}
Eingabeschema
{'type': 'object', 'required': ['okr_ids', 'companyId'], 'properties': {'append': {'type': 'boolean', 'description': 'If true, add to existing linked OKRs. If false (default), replace all linked OKRs.'}, 'okr_ids': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Array of OKR UUIDs to link to this agent. Call get_okrs first to list available objective IDs.'}, 'agent_id': {'type': 'string', 'description': 'UUID of the agent to link OKRs to'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'agent_name': {'type': 'string', 'description': 'Name of the agent (used to look up agent_id if not provided)'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'ad_account_id': {'type': 'string', 'description': 'Ad account id from list_ad_accounts (act_<digits> or bare digits). Optional when the connection has exactly one ad account; if several exist and none is given, the call refuses and lists them to choose from.'}, 'effective_status': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Optional filter, e.g. ["ACTIVE"], ["PAUSED"], ["ACTIVE","PAUSED"]. Omit for all campaigns.'}}}
Eingabeschema
{'type': 'object', 'required': [], 'properties': {'limit': {'type': 'number', 'description': 'Max rows (1–50, default 20).'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'target_session_id': {'type': 'string', 'description': 'If set, only pending directives for this session id.'}}}
Eingabeschema
{'type': 'object', 'required': [], 'properties': {'limit': {'type': 'number', 'description': 'Max sessions (1–50, default 30).'}, 'needs_me': {'type': 'boolean', 'description': 'If true, only return blocked_on_operator sessions with a real fresh ask (attend targets).'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'include_stale': {'type': 'boolean', 'description': 'If true, include sessions that failed freshness hygiene (default false).'}}}
Eingabeschema
{'type': 'object', 'required': [], 'properties': {'domain': {'type': 'string', 'description': 'Filter by domain (optional). E.g., "family", "home", "company:acme"'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'include_completed': {'type': 'boolean', 'description': 'Include completed commitments (default: false)'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': [], 'properties': {'limit': {'type': 'number', 'description': 'Max rows (1–40, default 20).'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'include_dropped': {'type': 'boolean', 'description': 'If true, include settled_drop rows.'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'class': {'enum': ['paying_customer', 'product_telemetry', 'public_review', 'operator_relayed', 'prospect', 'agent_as_user'], 'type': 'string', 'description': 'Optional filter by class.'}, 'limit': {'type': 'number', 'description': 'Max rows (default 25, max 100).'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'agent_id': {'type': 'string', 'description': 'UUID of the agent whose widgets to list. Defaults to current agent.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'limit': {'type': 'number', 'description': 'Max number of deals to return (default 20, max 100)'}, 'stage': {'enum': ['discovery', 'proposal', 'negotiation', 'closed_won', 'closed_lost'], 'type': 'string', 'description': 'Filter by stage (optional)'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'include_closed': {'type': 'boolean', 'description': 'Include closed deals (default false)'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'status': {'enum': ['all', 'draft', 'ready_to_market', 'published'], 'type': 'string', 'description': 'Filter by status (default: all)'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'query': {'type': 'string', 'description': 'Search query to filter files by name'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'file_type': {'enum': ['spreadsheet', 'document', 'any'], 'type': 'string', 'description': 'Filter by file type'}, 'max_results': {'type': 'number', 'description': 'Maximum results to return (default: 10)'}}}
Eingabeschema
{'type': 'object', 'required': [], 'properties': {'seat': {'type': 'string', 'description': 'Optional slug or session id (fos-integrator or grok-bot-fos-integrator). Omit to list.'}, 'limit': {'type': 'number', 'description': 'Max seats (default 8) or max turns when seat is set (default 6).'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': [], 'properties': {'limit': {'type': 'number', 'description': 'Maximum number of ideas to return per status bucket (default: 10)'}, 'status': {'enum': ['new', 'parked', 'triaged', 'all'], 'type': 'string', 'description': 'Filter: new, parked, triaged, or all (default). Untriaged Ideas are personal and withheld on a company-bound non-human door.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'include_promoted': {'type': 'boolean', 'description': 'When listing triaged Ideas, include those already promoted to a Playbook (default: false)'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'include_tools': {'type': 'boolean', 'description': 'Include list of available tools for each integration (default: true)'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'folder': {'type': 'string', 'description': 'Optional folder to list contents of (e.g., "canon", "partners"). Omit to list the root level. Combined with search, starts the nested name search at that folder. Always-on docs live in canon/.'}, 'search': {'type': 'string', 'description': 'Optional name-only filter (filename and folder-qualified slug, including nested folders). Does not search file bodies — use read_knowledge by slug for content.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'limit': {'type': 'number', 'description': 'Optional — max contactable leads to return (default 100, max 500).'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'segment_tag': {'type': 'string', 'description': "Optional — exact segment tag token from crm_leads.source, e.g. 'csv:free-trial' (from list_segments; unwrap any <user_field> markers). Omit to list across all segments. No substring matching."}, 'include_excluded': {'type': 'boolean', 'description': 'Optional — when true, also itemize the leads excluded by safety checks (with reasons). Default false (count only).'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'limit': {'type': 'number', 'description': 'Max rows (default 50, max 200).'}, 'scope': {'enum': ['mine', 'company'], 'type': 'string', 'description': 'mine = items you created or are assigned (default); company = all items in the company.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'status_filter': {'type': 'string', 'description': 'Optional status filter (queued, blocked, claimed, in_progress, gated, published, verified, failed, cancelled).'}, 'include_ship_seat': {'type': 'boolean', 'description': 'Include open FO product ship-seat PRs (default true on FreedomOS company; always false on other tenants). Soft-fails empty without GitHub App.'}}}
Eingabeschema
{'type': 'object', 'required': [], 'properties': {'kind': {'type': 'string', 'description': 'Optional filter to one kind (e.g. host_push, card_buggy, cos_open).'}, 'hours': {'type': 'number', 'description': 'Lookback window in hours (1–168, default 24).'}, 'limit': {'type': 'number', 'description': 'Max rows (1–100, default 40).'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'limit': {'type': 'number', 'description': 'Max posts (5–20, default 10).'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['pipeline_id', 'companyId'], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'pipeline_id': {'type': 'string', 'description': 'Pipeline ID (get from list_pipelines)'}, 'output_format': {'type': 'string', 'description': 'Optional. Filter by output format: changelog, social_post, team_update, newsletter, report. If not specified, shows all formats.'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'limit': {'type': 'number', 'description': 'Maximum number of playbooks to return (default: 10)'}, 'status': {'enum': ['draft', 'active', 'completed', 'paused'], 'type': 'string', 'description': 'Filter by status'}, 'category': {'enum': ['flow', 'funnel', 'flourish', 'freedom'], 'type': 'string', 'description': 'Filter by category'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': [], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'limit': {'type': 'number', 'description': 'How many pages to return (default 20, max 50); blogs are always up to 10'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'limit': {'type': 'number', 'description': 'How many to return (default 20, max 50)'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'limit': {'type': 'number', 'description': 'How many to return (default 20, max 50)'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'limit': {'type': 'number', 'description': 'How many variants to return (default 20, max 50)'}, 'query': {'type': 'string', 'description': 'Optional Shopify variant/product search, e.g. "sku:ABC-1" or "product_title:shampoo"'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'limit': {'type': 'number', 'description': 'How many to return (default 20, max 50)'}, 'query': {'type': 'string', 'description': 'Optional Shopify order search, e.g. "financial_status:paid" or "created_at:>2026-08-01"'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'limit': {'type': 'number', 'description': 'How many to return (default 20, max 50)'}, 'query': {'type': 'string', 'description': 'Optional Shopify product search, e.g. "status:draft" or "title:shampoo"'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'ad_account_id': {'type': 'string', 'description': 'Ads account id from list_x_ad_accounts. Optional when the connection has exactly one ads account.'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'limit': {'type': 'number', 'description': 'Max conversations (default 8, max 20) or max turns when conversation is set (default 6).'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'conversation': {'type': 'string', 'description': 'Optional X conversation id (from a prior list result). Omit to list conversations.'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'type': {'type': 'string', 'description': 'Optional Xero account Type filter, e.g. BANK, EXPENSE, REVENUE'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'page': {'type': 'number', 'description': 'Page number, 1-based (Xero pages at 100). Default 1.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'from_date': {'type': 'string', 'description': 'Only transactions on/after this date, YYYY-MM-DD'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'page': {'type': 'number', 'description': 'Page number, 1-based. Default 1.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'search_term': {'type': 'string', 'description': 'Filter by name/email fragment (Xero searchTerm)'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'page': {'type': 'number', 'description': 'Page number, 1-based. Default 1.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['action', 'companyId'], 'properties': {'action': {'enum': ['assign', 'delegate', 'revoke'], 'type': 'string', 'description': 'assign = give primary ownership of domains; delegate = temporarily route domains from one user to another (supports valid_until for auto-expiry); revoke = remove a domain assignment. To see current routing, call get_routing_overview.'}, 'reason': {'type': 'string', 'description': 'Why the change is happening (e.g., "vacation", "new hire", "role change")'}, 'domains': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Domain names to assign (e.g., ["marketing", "content", "social"]). Use lowercase.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'valid_until': {'type': 'string', 'description': 'ISO date string when delegation expires. Only for delegate action. Omit for permanent assignments.'}, 'target_user_email': {'type': 'string', 'description': 'Email of the user to assign/delegate to. Required for assign and delegate.'}, 'delegation_from_email': {'type': 'string', 'description': 'Email of the user delegating their responsibilities. Only for delegate action.'}}}
Eingabeschema
{'type': 'object', 'required': ['request_id'], 'properties': {'force': {'type': 'boolean', 'description': 'Re-dispatch even if a draft_pr is already stamped (default false).'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'request_id': {'type': 'string', 'description': 'request_id UUID from submit_product_request'}}}
Eingabeschema
{'type': 'object', 'required': [], 'properties': {'dry_run': {'type': 'boolean', 'description': 'If true, return candidates without writing.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'session_ids': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Explicit session ids to park (from list_attention_sessions / get_attention_quest tool-only fields).'}, 'stale_running': {'type': 'boolean', 'description': 'If true, also park running/unknown sessions that fail freshness hygiene.'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'note': {'type': 'string', 'description': 'Optional rationale (≤ 500 chars). Not rendered in any prompt; it does ride the derived read on get_attention_quest (neutralised at the row).'}, 'claim': {'type': 'string', 'description': 'What you believe binds revenue and why — 8–280 characters. Rendered to every worker as your claim.'}, 'by_date': {'type': 'string', 'description': "YYYY-MM-DD (UTC). At least 7 days out (the instrument's resolution) and at most 180. The claim EXPIRES on this date — never auto-renewed. On a card the window is measured from the approval, not the ask."}, 'release': {'type': 'boolean', 'description': "true = delete the pin (the operator's decision). No other claim arg with it."}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'disconfirm_op': {'enum': ['gte', 'lte'], 'type': 'string', 'description': 'The claim is DISCONFIRMED when the source reads ≥ (gte) or ≤ (lte) the threshold before by_date.'}, 'constraint_pin': {'enum': ['traffic', 'outreach', 'conversion', 'fulfillment', 'unclear'], 'type': 'string', 'description': 'The binding revenue constraint.'}, 'disconfirm_source': {'type': 'string', 'description': 'Registered demand/integrity source that would disconfirm the claim: one of the keys pinSourceKeys() lists (today: the four demand keys).'}, 'disconfirm_threshold': {'type': 'number', 'description': 'The number that disconfirms.'}}}
Eingabeschema
{'type': 'object', 'required': ['name', 'scanner_type', 'companyId'], 'properties': {'name': {'type': 'string', 'description': 'Scanner name'}, 'prompt': {'type': 'string', 'description': 'Natural-language watch prompt (stored on scanner_config.prompt); can be passed here or directly on scanner_config.prompt'}, 'enabled': {'type': 'boolean', 'description': 'Default false. true starts spending PostHog Vision credits on matching recordings.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'description': {'type': 'string', 'description': 'Optional description'}, 'credit_limit': {'type': 'number', 'description': 'Optional monthly Vision credit cap for this scanner'}, 'scanner_type': {'type': 'string', 'description': 'monitor | classifier | scorer | summarizer'}, 'emits_signals': {'type': 'boolean', 'description': 'Whether the scanner emits PostHog signals'}, 'sampling_rate': {'type': 'number', 'description': '0–1 sampling rate'}, 'scanner_config': {'type': 'object', 'description': 'Type-specific config object'}}}
Eingabeschema
{'type': 'object', 'required': ['id', 'companyId'], 'properties': {'id': {'type': 'string', 'description': 'Scanner UUID'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['id', 'companyId'], 'properties': {'id': {'type': 'string', 'description': 'Observation UUID'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'scanner_id': {'type': 'string', 'description': 'Optional scanner UUID (uses the nested route when set)'}}}
Eingabeschema
{'type': 'object', 'required': ['id', 'companyId'], 'properties': {'id': {'type': 'string', 'description': 'Scanner UUID'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['query', 'companyId'], 'properties': {'limit': {'type': 'number', 'description': 'Max rows to return (default: 100)'}, 'query': {'type': 'string', 'description': 'HogQL query string. HogQL is ClickHouse-compatible SQL; common tables: events, persons, sessions. Example: "SELECT count() FROM events WHERE event = \'$pageview\' AND timestamp > now() - interval 7 day"'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'limit': {'type': 'number', 'description': 'Max events to return (default: 50)'}, 'search': {'type': 'string', 'description': 'Search events by name'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'limit': {'type': 'number', 'description': 'Max insights to return (default: 20)'}, 'search': {'type': 'string', 'description': 'Search insights by name'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'limit': {'type': 'number', 'description': 'Max rows (default 20, max 50)'}, 'status': {'type': 'string', 'description': 'succeeded | failed | pending | ineligible | in_flight'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'scanner_id': {'type': 'string', 'description': "Limit to one scanner UUID — use to see one scanner's findings across sessions"}, 'session_id': {'type': 'string', 'description': 'Limit to one session recording id — use to see every scanner that ran on this recording'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'limit': {'type': 'number', 'description': 'Max scanners to return (default 20, max 50)'}, 'search': {'type': 'string', 'description': 'Search scanners by name'}, 'enabled': {'type': 'boolean', 'description': 'Filter by enabled state'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'scanner_type': {'type': 'string', 'description': 'monitor | classifier | scorer | summarizer'}}}
Eingabeschema
{'type': 'object', 'required': ['events', 'companyId'], 'properties': {'events': {'type': 'array', 'items': {'type': 'object', 'properties': {'id': {'type': 'string', 'description': 'Event name'}, 'name': {'type': 'string', 'description': 'Display name for the step'}}}, 'description': 'Funnel steps (minimum 2). Each: { id: "event_name", name: "Display Name" }. Example: [{id:"$pageview"},{id:"sign_up_completed"},{id:"subscription_created"}].'}, 'date_to': {'type': 'string', 'description': 'End date (default: now)'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'date_from': {'type': 'string', 'description': 'Start date (default: -30d)'}, 'funnel_window_days': {'type': 'number', 'description': 'Days a user has to complete the funnel (default: 14)'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'events': {'type': 'array', 'items': {'type': 'object', 'properties': {'id': {'type': 'string', 'description': 'Event name (e.g., "$pageview", "sign_up_completed", "$autocapture")'}, 'math': {'type': 'string', 'description': 'Aggregation: "total", "dau", "weekly_active", "monthly_active"'}, 'name': {'type': 'string', 'description': 'Display name'}}}, 'description': 'Events to query. Each: { id: "$pageview", name: "Page Views", math: "total" }. Defaults to $pageview.'}, 'date_to': {'type': 'string', 'description': 'End date (default: now)'}, 'interval': {'enum': ['hour', 'day', 'week', 'month'], 'type': 'string', 'description': 'Grouping interval (default: day)'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'date_from': {'type': 'string', 'description': 'Start date: "-7d", "-30d", "-90d", "2024-01-01" (default: -7d)'}}}
Eingabeschema
{'type': 'object', 'required': ['scanner_id', 'session_id', 'companyId'], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'scanner_id': {'type': 'string', 'description': 'Scanner UUID'}, 'session_id': {'type': 'string', 'description': 'PostHog session recording id'}}}
Eingabeschema
{'type': 'object', 'required': ['id', 'companyId'], 'properties': {'id': {'type': 'string', 'description': 'Scanner UUID'}, 'name': {'type': 'string'}, 'prompt': {'type': 'string'}, 'enabled': {'type': 'boolean', 'description': 'true starts (or resumes) Vision credit spend'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'description': {'type': 'string'}, 'credit_limit': {'type': 'number'}, 'scanner_type': {'type': 'string'}, 'emits_signals': {'type': 'boolean'}, 'sampling_rate': {'type': 'number'}, 'scanner_config': {'type': 'object'}}}
Eingabeschema
{'type': 'object', 'required': ['text', 'companyId'], 'properties': {'text': {'type': 'string', 'description': 'Exact post text. Include the live URL in the body when the post should point at a page. X-weighted length must fit the company cap (280, or 25,000 if long-form is on).'}, 'derived': {'type': 'boolean', 'description': 'Optional, with source_piece_id. True when the post is RESHAPED from that piece (a thread, a caption, a shorter form) rather than quoted. Every sentence must say only what the piece says — no new fact, number, name, promise or ask. A passing reshaping is scheduled and goes out after 24 hours unless someone holds it (hold_post). A failing one is refused: new words need a person.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'source_piece_id': {'type': 'string', 'description': 'Optional. The piece these words are taken from, when the post is an excerpt of something this company already put out: output:<pipeline output id> (a published post) or hub-letter:<slug> (a released letter). The words must be one unbroken passage of that piece, trimmed at the ends only — no changed, dropped or added word — and any link must be in the piece or be its own page. A matching excerpt posts on its own; anything else is refused. Leave it out for new words — those ask a person.'}}}
Eingabeschema
{'type': 'object', 'required': ['fo_transaction_id', 'xero_bank_account_id', 'companyId'], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'fo_transaction_id': {'type': 'string', 'description': 'FreedomOS transactions.id UUID from suggest_xero_post'}, 'xero_bank_account_id': {'type': 'string', 'description': 'Xero BANK AccountID UUID from list_xero_accounts'}}}
Eingabeschema
{'type': 'object', 'required': ['ad_id', 'companyId'], 'properties': {'ad_id': {'type': 'string', 'description': 'Numeric ad id (from create_meta_ad_draft output)'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': [], 'properties': {'answers': {'type': 'object', 'properties': {'who': {'type': 'string'}, 'week': {'type': 'string'}, 'what': {'type': 'string'}, 'handoff': {'type': 'string'}}, 'description': 'No website? The four short answers: what (what the business does), who (who it is for), week (what eats their week), handoff (what they would hand off first).'}, 'website': {'type': 'string', 'description': 'The business website (http:// or https://). Preferred when it exists.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'count': {'type': 'number', 'description': 'How many angles (1-3, default 1). Prefer 1 — one next post, not a flood of cards.'}, 'theme': {'type': 'string', 'description': 'Optional focus (e.g. "Harness principles", "pharmacy USP")'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': [], 'properties': {'hours': {'type': 'number', 'description': 'Lookback hours (1–168, default 48).'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'max_atoms': {'type': 'number', 'description': 'Max atoms (1–8, default 5).'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'hours': {'type': 'number', 'description': 'Lookback hours (1–168, default 168).'}, 'title': {'type': 'string', 'description': 'Optional manual seed title (operator picked this activity).'}, 'summary': {'type': 'string', 'description': 'Optional manual seed summary.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['title', 'companyId'], 'properties': {'kind': {'type': 'string', 'description': 'Kind of work (e.g. task, review, content). Default "task".'}, 'title': {'type': 'string', 'description': 'Short title of the work item.'}, 'payload': {'type': 'object', 'description': 'Optional structured detail for the item. For kind=builder_fix the payload MUST name the Key Result the unit moves (payload.linked_kr_id, a live KR of this company) or carry payload.factory_self=true with payload.birth_reason; otherwise the proposal is refused with the live KR list. Server-owned keys (play_cascade, consult_kind, product_status, merge and deploy stamps, watch, card_id, spawn_session_id and its aliases session_id / session / spawn_session) are dropped and named in the result.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'depends_on': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Optional array of lab_work_items UUIDs this item is blocked by.'}, 'assignee_user_id': {'type': 'string', 'description': 'Optional auth user UUID to assign (human owner). Cannot be combined with assignee_agent_id.'}, 'assignee_agent_id': {'type': 'string', 'description': 'Optional linnet_agents UUID to assign (agent owner).'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['item_id', 'companyId'], 'properties': {'item_id': {'type': 'string', 'description': 'ID of the approved pipeline output to publish (get from get_pending_approvals, must be approved status)'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'recipients': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Optional. Specific team member emails to send to (must be in company_members). If not specified, sends to all team members.'}}}
Eingabeschema
{'type': 'object', 'required': ['page_id', 'expected_updated_at', 'companyId'], 'properties': {'page_id': {'type': 'string', 'description': 'Page gid'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'expected_updated_at': {'type': 'string', 'description': "The page's updatedAt as read when reviewed (ISO)"}}}
Eingabeschema
{'type': 'object', 'required': ['product_id', 'expected_updated_at', 'companyId'], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'product_id': {'type': 'string', 'description': 'Product gid'}, 'expected_updated_at': {'type': 'string', 'description': "The product's updatedAt as read when the change was reviewed (ISO)"}}}
Eingabeschema
{'type': 'object', 'required': ['theme_id', 'expected_updated_at', 'confirm_theme_name', 'companyId'], 'properties': {'theme_id': {'type': 'string', 'description': 'Theme gid — must currently be UNPUBLISHED'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'confirm_theme_name': {'type': 'string', 'description': 'The theme name, typed back exactly — publishing swaps the whole live site'}, 'expected_updated_at': {'type': 'string', 'description': "The theme's updatedAt as read when reviewed (ISO)"}}}
Eingabeschema
{'type': 'object', 'required': ['preview_url', 'screenshot_artifact_id', 'pr_number', 'head_sha', 'companyId'], 'properties': {'slug': {'type': 'string', 'description': 'Optional page path, e.g. learn/answers/usp-797-pec-sterile-cleaning-agents.'}, 'head_sha': {'type': 'string', 'description': 'PR head commit SHA at the moment of the screenshot (the pin Approve will merge).'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'pr_number': {'type': 'number', 'description': "GitHub PR number on THIS company's configured site repo."}, 'preview_url': {'type': 'string', 'description': 'HTTPS URL you screenshotted (production host or an allowlisted preview host for THIS company).'}, 'screenshot_artifact_id': {'type': 'string', 'description': 'UUID returned by browse_url for that page. Must belong to this company.'}}}
Eingabeschema
{'type': 'object', 'required': ['lead_id', 'companyId'], 'properties': {'lead_id': {'type': 'string', 'description': 'UUID of the lead in the leads table.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['question', 'companyId'], 'properties': {'context': {'type': 'string', 'description': 'Optional context about why you\'re asking — helps the SME give a more relevant answer. E.g., "I\'m creating a social media post about cleanroom best practices"'}, 'question': {'type': 'string', 'description': 'The question to ask the subject matter expert. Be specific and clear.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'sme_source': {'type': 'string', 'description': 'Which Expert to consult, by key. "conduit" (pharmaceutical compounding compliance) is always available; your company may have additional Experts configured. Defaults to "conduit".'}}}
Eingabeschema
{'type': 'object', 'required': ['features', 'companyId'], 'properties': {'features': {'type': 'array', 'items': {'type': 'object', 'required': ['title'], 'properties': {'title': {'type': 'string'}, 'solves': {'type': 'array', 'items': {'type': 'string'}}, 'evidence': {'type': 'string'}, 'feature_id': {'type': 'string'}, 'description': {'type': 'string'}}}, 'description': 'The operator-confirmed features to persist. Each needs a title; description/solves/evidence/feature_id optional.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'scan_hash': {'type': 'string', 'description': 'Optional repo commit SHA the derivation came from (recorded for re-scan reconciliation).'}}}
Eingabeschema
{'type': 'object', 'required': ['agent_id', 'companyId'], 'properties': {'agent_id': {'type': 'string', 'description': 'UUID of the archived agent to restore'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['doc_id', 'companyId'], 'properties': {'doc_id': {'type': 'string', 'description': 'Google Doc ID (the long alphanumeric string from the URL)'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['slug', 'companyId'], 'properties': {'slug': {'type': 'string', 'description': 'Folder-qualified slug with no extension, e.g. "canon/tim-voice-guide" (from list_knowledge or a save_knowledge result). Never a repo-style path, never ".md".'}, 'scope': {'enum': ['company', 'personal'], 'type': 'string', 'description': '"company" (default) reads a company-shared file; "personal" reads from the current user\'s private notes.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['spreadsheet_id', 'companyId'], 'properties': {'range': {'type': 'string', 'description': 'A1 notation range (e.g., "Sheet1!A1:D10"). Defaults to all data.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'spreadsheet_id': {'type': 'string', 'description': 'Spreadsheet ID'}}}
Eingabeschema
{'type': 'object', 'required': ['url'], 'properties': {'url': {'type': 'string', 'description': 'The full URL to read (must include https:// or http://) — must be a URL the user provided; never guess one.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['agent_id', 'companyId'], 'properties': {'agent_id': {'type': 'string', 'description': 'UUID of the agent to recalibrate. Use get_team_roster to find IDs.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'focus_areas': {'type': 'string', 'description': 'Optional user guidance for recalibration, e.g. "focus more on SEO" or "add financial analysis"'}, 'regenerate_activities': {'type': 'boolean', 'description': 'Also regenerate the activity plan (default: false — preserves evolved activities). Regenerated activities must name a Key Result or they are not loops — create the KR first if none exists.'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'limit': {'type': 'number', 'description': 'Max Plays to re-draft this call (default 25, max 40).'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'force': {'type': 'boolean', 'description': 'Re-draft even if a contract already exists.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'playbook_id': {'type': 'string', 'description': 'UUID of the Playbook (use this or playbook_title).'}, 'playbook_title': {'type': 'string', 'description': 'Title (or fragment) of the Playbook (use this or playbook_id).'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'reason': {'type': 'string', 'description': 'Optional reason for retiring (recorded on the archive + audit log).'}, 'agent_id': {'type': 'string', 'description': 'UUID of the agent. Optional if agent_name is provided.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'agent_name': {'type': 'string', 'description': 'Name of the agent. Provide this or agent_id.'}, 'activity_name': {'type': 'string', 'description': 'EXACT (case-insensitive) name of the activity to retire. Provide this or activity_index.'}, 'activity_index': {'type': 'number', 'description': '0-based index into the activity plan. Alternative to activity_name.'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'folder': {'type': 'string', 'description': 'Optional Media gallery folder to file this into (freeform name, e.g. "q3-campaign" or "brand-assets"). Shown as a folder chip on the /media page. Reuse an existing folder name when the work belongs to it.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'image_url': {'type': 'string', 'description': 'URL of the raster image to process.'}, 'artifact_id': {'type': 'string', 'description': 'ID of an existing artifact from the MEDIA block.'}, 'folder_name': {'type': 'string', 'description': 'Subfolder name for Drive save.'}, 'save_to_drive': {'type': 'boolean', 'description': 'If true, saves to Drive.'}}}
Eingabeschema
{'type': 'object', 'required': ['widget_id', 'companyId'], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'widget_id': {'type': 'string', 'description': 'UUID of the widget to remove'}}}
Eingabeschema
{'type': 'object', 'required': ['request_id'], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'request_id': {'type': 'string', 'description': 'request_id UUID from submit_product_request'}}}
Eingabeschema
{'type': 'object', 'required': ['category', 'title', 'description', 'companyId'], 'properties': {'title': {'type': 'string', 'description': 'Short summary of the issue (1 line). Be specific — "Buffer API returns 429 on image posts" not "API error".'}, 'category': {'enum': ['error', 'warning', 'observation', 'suggestion', 'blocker'], 'type': 'string', 'description': 'Type of feedback. error = something broke. warning = something might break. observation = pattern noticed. suggestion = improvement idea. blocker = cannot complete task.'}, 'severity': {'enum': ['low', 'medium', 'high', 'critical'], 'type': 'string', 'description': 'How urgent this is. Default: medium. Use critical only for data loss or security issues.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'tool_name': {'type': 'string', 'description': 'The tool that was involved, if applicable (e.g., "generate_image_xai", "post_to_x").'}, 'description': {'type': 'string', 'description': 'Detailed explanation. Include: what happened, what you expected, what you tried, and any error messages or codes.'}, 'context_json': {'type': 'string', 'description': 'Optional JSON-encoded structured context (error codes, retry counts, URLs, timestamps, etc.). Example: "{\\"status\\":429,\\"retries\\":3}".'}}}
Eingabeschema
{'type': 'object', 'required': ['session_id'], 'properties': {'host': {'enum': ['grok', 'claude-code', 'claude-desktop'], 'type': 'string', 'description': 'Host adapter: grok | claude-code | claude-desktop (default inferred/grok).'}, 'park': {'type': 'boolean', 'description': 'If true (default), also park the FO session row immediately.'}, 'label': {'type': 'string', 'description': 'Optional title fragment for desk match.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'kill_live': {'type': 'boolean', 'description': "If true, terminate the session's own live CLI then close (modal-free). Default false — refuse busy tabs."}, 'session_id': {'type': 'string', 'description': 'Session id from list_attention_sessions (tool-only).'}}}
Eingabeschema
{'type': 'object', 'required': ['session_id'], 'properties': {'host': {'enum': ['grok', 'claude-code', 'claude-desktop'], 'type': 'string', 'description': 'Host adapter: grok | claude-code | claude-desktop (default grok).'}, 'label': {'type': 'string', 'description': 'Optional spoken/title fragment to help desk match the tab.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'session_id': {'type': 'string', 'description': 'Session id from list_attention_sessions (tool-only; never speak aloud).'}}}
Eingabeschema
{'type': 'object', 'required': ['host', 'goal'], 'properties': {'cwd': {'type': 'string', 'description': 'Working directory on the operator machine (e.g. /Users/…/GitHub/freedom-ai). Prefer absolute paths they already use.'}, 'goal': {'type': 'string', 'description': 'One-line goal for the new session (1–500 chars).'}, 'host': {'enum': ['grok', 'claude-code', 'claude-desktop'], 'type': 'string', 'description': 'Which builder to open: grok (Grok Build Terminal; factory/CASCADE/freedom-ai labs refuse Terminal) | claude-desktop (Claude.app Code) | claude-code (Terminal CLI; factory goals refuse)'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'session_id': {'type': 'string', 'description': 'Optional stable session id; default auto-derived from host + project.'}, 'first_instruction': {'type': 'string', 'description': 'Optional first work sticky delivered after the new session announces (imperative).'}}}
Eingabeschema
{'type': 'object', 'required': ['instruction'], 'properties': {'cwd': {'type': 'string', 'description': 'Working directory for new spawn.'}, 'goal': {'type': 'string', 'description': 'Goal for new spawn (required when spawning; defaults to first 120 of instruction).'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'from_host': {'enum': ['grok', 'claude-code', 'claude-desktop'], 'type': 'string', 'description': 'Host of from_session (default grok).'}, 'close_from': {'type': 'boolean', 'description': 'If true and from_session_id set, queue OS close of the source tab.'}, 'spawn_host': {'enum': ['grok', 'claude-code', 'claude-desktop'], 'type': 'string', 'description': 'If no to_session_id: open new tab with this host (grok | claude-desktop | claude-code). Factory/freedom-ai lab goals: grok/claude-code refuse Terminal (Code Factory ACP).'}, 'instruction': {'type': 'string', 'description': 'Imperative work for the target session (1–4000 chars).'}, 'to_session_id': {'type': 'string', 'description': 'Existing target session_id (from list). Omit with spawn_host to open a new tab instead.'}, 'kill_live_from': {'type': 'boolean', 'description': 'With close_from: force-kill source live CLI (default false).'}, 'from_session_id': {'type': 'string', 'description': 'Optional source session to park/close after transfer.'}}}
Eingabeschema
{'type': 'object', 'required': ['connector', 'companyId'], 'properties': {'scope': {'enum': ['company', 'personal'], 'type': 'string', 'description': 'Who may use the connection once it is live. "company" (default) = everyone in this company. "personal" = "Just me": only the person who signs in (their chats, MCP key and bots they host) — e.g. a personal inbox. The approver can still change it on the card.'}, 'reason': {'type': 'string', 'description': 'Why you need it — the capability gap it closes (e.g. "run the KDP book ad campaign").'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'connector': {'type': 'string', 'description': 'Name of the connector to request (from search_connector_registry, e.g. "Amazon Ads").'}}}
Eingabeschema
{'type': 'object', 'required': ['item_id', 'feedback', 'companyId'], 'properties': {'item_id': {'type': 'string', 'description': 'ID of the pipeline output to revise (get from get_pending_approvals)'}, 'feedback': {'type': 'string', 'description': 'User\'s feedback on what to change (e.g., "make it shorter", "more professional tone")'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'as_final_draft': {'type': 'boolean', 'description': 'When true, feedback IS the replacement post — save it without re-running the persona transform. Use when the operator already wrote the caption.'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['work_item_id', 'companyId'], 'properties': {'status': {'enum': ['verified', 'published', 'cancelled'], 'type': 'string', 'description': 'Terminal status (default "verified").'}, 'outcome': {'type': 'object', 'description': 'Optional structured verified_outcome to record.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'work_item_id': {'type': 'string', 'description': 'UUID of the lab_work_items row to resolve.'}}}
Eingabeschema
{'type': 'object', 'required': ['activity_name', 'companyId'], 'properties': {'agent_id': {'type': 'string', 'description': 'UUID of the agent. Optional if agent_name is provided.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'agent_name': {'type': 'string', 'description': 'Name of the agent. Provide this or agent_id.'}, 'activity_name': {'type': 'string', 'description': 'EXACT (case-insensitive) name the activity had when it was retired.'}, 'remove_pieces': {'type': 'boolean', 'description': 'When the activity was archived by a split: also retire the pieces it was split into (default true — one call undoes the split).'}}}
Eingabeschema
{'type': 'object', 'required': ['slug', 'companyId'], 'properties': {'slug': {'type': 'string', 'description': 'The original slug/path of the archived file, e.g. hub/config or inputs/loop_guard_create_tactic (no _archived/ prefix, no .md).'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['feature_id', 'companyId'], 'properties': {'reason': {'type': 'string', 'description': 'Optional note on why this feature is being retired.'}, 'restore': {'type': 'boolean', 'description': 'Set true to un-retire (restore) a previously archived feature. Default false.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'feature_id': {'type': 'string', 'description': 'The feature_id slug (e.g., "ai-content-pipeline") or UUID.'}}}
Eingabeschema
{'type': 'object', 'required': ['agent_id', 'tool_name', 'companyId'], 'properties': {'agent_id': {'type': 'string', 'description': 'UUID of the agent. Use get_team_roster to find IDs.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'tool_name': {'type': 'string', 'description': 'Exact loadout entry to remove (phantom/stale names allowed).'}}}
Eingabeschema
{'type': 'object', 'required': ['verb'], 'properties': {'verb': {'enum': ['open_door', 'sessions_global', 'lock_zone', 'unlock', 'money_company', 'well', 'focus_card', 'back', 'done'], 'type': 'string', 'description': "What to do on the desk HUD: open_door (needs view) | sessions_global | lock_zone (needs company_id) | unlock | money_company (needs company_id) | well (fills the pixel well with the focused card's breakdown — no args; no-op if nothing is focused) | focus_card (needs card_id; optional show_content; optional company_id) | back | done."}, 'view': {'enum': ['roster', 'missions', 'character', 'upgrades', 'home', 'money'], 'type': 'string', 'description': 'Which door to open. Required (and only allowed) when verb=open_door.'}, 'card_id': {'type': 'string', 'description': "Pending card id (from get_command_center_items) to focus on the operator's desk HUD. Required (and only allowed) when verb=focus_card."}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'company_id': {'type': 'string', 'description': "Company (portfolio) id to lock/drill into. Required when verb is lock_zone or money_company; only allowed otherwise when verb=focus_card — pass the card's company_id (from your own card read) so the desk can switch zones to land it."}, 'show_content': {'type': 'boolean', 'description': "Also open the card's visual (the well) in the same move. Only allowed when verb=focus_card."}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'agent_name': {'type': 'string', 'description': "Optional: override which agent runs it (else resolved from the playbook's lane or assignee)."}, 'playbook_id': {'type': 'string', 'description': 'UUID of the Playbook (use this or playbook_title).'}, 'suggest_only': {'type': 'boolean', 'description': 'If true, return Playbook execution brief only (who / steps / readiness / estimate) — no dispatch, no spend, no Agree required. Use for Chat/MCP dry-run before Run.'}, 'playbook_title': {'type': 'string', 'description': 'Title (or fragment) of the Playbook (use this or playbook_id).'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'task': {'type': 'string', 'description': 'What this deliverable is for (e.g. "X post about FreedomOS launch"). Gives the ICP evaluator context.'}, 'content': {'type': 'string', 'description': 'Text content to evaluate (X post copy, email draft, newsletter). Can be combined with artifact_id for text + visual evaluation.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'artifact_id': {'type': 'string', 'description': 'ID of a specific artifact to evaluate (from generate_image_xai or generate_video result). If omitted, auto-finds the most recent media artifact generated in the last 10 minutes.'}}}
Eingabeschema
{'type': 'object', 'required': ['title', 'artifact_type', 'companyId'], 'properties': {'title': {'type': 'string', 'description': 'Short descriptive title for the artifact'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'source_url': {'type': 'string', 'description': 'URL the artifact relates to (if applicable)'}, 'description': {'type': 'string', 'description': 'What this artifact shows or contains'}, 'storage_path': {'type': 'string', 'description': 'Storage path where the file was uploaded'}, 'artifact_type': {'enum': ['screenshot', 'page_analysis', 'report'], 'type': 'string', 'description': 'Type of artifact being saved'}, 'metadata_json': {'type': 'string', 'description': 'Optional JSON-encoded metadata (scores, analysis results, etc.).'}}}
Eingabeschema
{'type': 'object', 'required': ['title', 'content', 'companyId'], 'properties': {'slug': {'type': 'string', 'description': 'Optional custom slug for the filename. If omitted, auto-generated from the title.'}, 'scope': {'enum': ['company', 'personal'], 'type': 'string', 'description': 'Where to save: "company" (default) = shared with the whole company; "personal" = private to the current user only. Use "personal" for notes tied to a specific person (e.g., context for the user\'s commitments, 1:1 notes, personal preferences, gift ideas, family info). Use "company" for shared SOPs, brand guides, strategy docs.'}, 'title': {'type': 'string', 'description': 'Descriptive title for this knowledge file (e.g., "Acme Mascot Guidelines", "Content Strategy Q1")'}, 'folder': {'type': 'string', 'description': 'Optional folder to save the file in (e.g., "acme-deal", "partners/acme"). Folders are auto-created. Use for organizing related files, especially for deal rooms or shared contexts.'}, 'content': {'type': 'string', 'description': 'The knowledge content in Markdown format. FORMATTING RULES: Use ## headers for sections (NOT **bold**). Put a blank line between every paragraph and before/after lists. Use - for list items. Use > for callouts or important notes. Structure: ## Section > ### Sub-section > paragraph > - list items. Without blank lines, content renders as a wall of text.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'override_duplicate_reason': {'type': 'string', 'description': 'ONLY after the canon gate refused this save as a duplicate: a specific reason why this file is NOT a duplicate of the canonical file the refusal named. Overrides are logged and visible to the operator — never use this to bypass the gate casually.'}}}
Eingabeschema
{'type': 'object', 'required': ['company_id'], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'company_id': {'type': 'string', 'description': 'Tenant company_id to scan (e.g. …_the-optimal-company- or a portfolio co).'}, 'file_top_n': {'type': 'number', 'description': 'If >0, file the top N signals as product_request decision cards (max 5). Default 0 = dry-run only.'}, 'lookback_days': {'type': 'number', 'description': 'How far back to look (1–60, default 14).'}}}
Eingabeschema
{'type': 'object', 'required': ['query', 'companyId'], 'properties': {'query': {'type': 'string', 'description': 'Interest keyword, e.g. "pharmacy", "healthcare compliance"'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'query': {'type': 'string', 'description': 'Optional keyword to filter by name or capability (e.g. "ads", "amazon", "analytics"). Omit to list the whole vetted catalog.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['query', 'companyId'], 'properties': {'limit': {'type': 'number', 'description': 'Max conversations to return (default: 5, max: 10)'}, 'query': {'type': 'string', 'description': 'Search terms — the most specific keywords, topics, or phrases from the conversation the user is referencing'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['query', 'companyId'], 'properties': {'limit': {'type': 'number', 'description': 'Max results (default: 10)'}, 'query': {'type': 'string', 'description': 'Text to search for in transaction descriptions'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['query', 'companyId'], 'properties': {'kind': {'type': 'string', 'description': "'interests' (default) or 'locations'"}, 'query': {'type': 'string', 'description': 'Keyword, e.g. "pharmacy" or "United States"'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['segment_tag', 'action', 'companyId'], 'properties': {'action': {'enum': ['organize', 'select', 'clear'], 'type': 'string', 'description': "'organize' = group Leads tab by this segment; 'select' = select all leads in it; 'clear' = clear that selection."}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'segment_tag': {'type': 'string', 'description': "Exact segment tag token from crm_leads.source, e.g. 'csv:apc-cch-2024' (from list_segments). No substring matching — must match a live tag exactly. Tags in tool output are wrapped in <user_field> markers — use the inner text verbatim."}}}
Eingabeschema
{'type': 'object', 'required': ['to', 'subject', 'companyId'], 'properties': {'to': {'type': 'string', 'description': 'Recipient email address (single recipient).'}, 'from': {'type': 'string', 'description': 'Optional explicit from address (e.g. "Jane <jane@acme.com>"). If omitted, defaults to no-reply@<resolved from_domain>.'}, 'html': {'type': 'string', 'description': 'HTML body of the email. Provide html and/or text (at least one is required).'}, 'text': {'type': 'string', 'description': 'Plain-text body of the email. Provide text and/or html (at least one is required).'}, 'lead_id': {'type': 'string', 'description': 'Optional UUID of the crm_leads row this email targets. Used for telemetry/linking; the do_not_contact check is keyed on (company_id, to) regardless.'}, 'subject': {'type': 'string', 'description': 'Email subject line.'}, 'draft_id': {'type': 'string', 'description': 'Optional UUID of the lead_drafts row being sent. If provided, the Resend email id returned by the send is recorded onto that draft (resend_email_id) so engagement webhook events (opens/clicks/replies via /resend-events) correlate back to it.'}, 'reply_to': {'type': 'string', 'description': 'Optional Reply-To address.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'company_id': {'type': 'string', 'description': "Company UUID. Optional — defaults to the caller's company context. Used to resolve the Resend key and scope the do_not_contact check."}, 'references': {'type': 'string', 'description': 'Optional RFC References header. Honored ONLY on executionSource=inbound_info. Ignored otherwise.'}, 'in_reply_to': {'type': 'string', 'description': 'Optional RFC In-Reply-To header. Honored ONLY on executionSource=inbound_info (company-mail threaded reply). Ignored on every other path so callers cannot inject headers.'}, 'sequence_id': {'type': 'string', 'description': 'Optional UUID of the outreach_sequences row backing an autonomous warm send. Required ONLY on the outreach-autosend path (executionSource=autonomous_warm); the warm-send gate verifies the sequence is ACTIVE and the lead is enrolled, and authorizes when the sequence is live (send_mode=auto) OR the enrollment is verifiably human-made (enrollment_source=manual — the human-enrolled lane, 2026-07-22). Ignored on the human path.'}}}
Eingabeschema
{'type': 'object', 'required': ['draft_id', 'companyId'], 'properties': {'draft_id': {'type': 'string', 'description': 'UUID of the lead_drafts row to send (must be pending_review or approved).'}, 'reply_to': {'type': 'string', 'description': 'Optional Reply-To address for the outbound email.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['message', 'companyId'], 'properties': {'message': {'type': 'string', 'description': 'The message text to send (supports Slack markdown: *bold*, _italic_, etc.)'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'thread_ts': {'type': 'string', 'description': 'Optional thread timestamp to reply in a thread'}, 'channel_name': {'type': 'string', 'description': 'Slack channel name to post to (without #), e.g., "general", "engineering". Use this OR recipient_name, not both.'}, 'recipient_name': {'type': 'string', 'description': 'Name of the person to DM (e.g., "Alex", "Jordan") — provide the FULL name when possible. Looked up via linked accounts first, then exact Slack directory match; ambiguous first-name-only matches fail closed and list candidates instead of guessing.'}}}
Eingabeschema
{'type': 'object', 'required': ['intent', 'title', 'message', 'companyId'], 'properties': {'title': {'type': 'string', 'description': 'Scannable headline. If the user glances at it between meetings, they should know what it is and whether it matters.'}, 'intent': {'enum': ['decision', 'update', 'suggestion', 'alert', 'publish', 'blocked_on_you'], 'type': 'string', 'description': 'What kind of communication is this? The bar for a CARD: create one ONLY when the user\'s judgment changes the outcome (a real decision). FYI / progress / "I did X" is intent:\'update\' — logged to the activity feed (Team Activity), NOT a card. Do not create cards for non-decisions.\n- decision: needs user approval/rejection. User sees Approve/Edit/Deny buttons. (CARD)\n- update: FYI / progress / completed work. Logged to the activity feed (Team Activity), NOT a card — the user glances at it, nothing to click.\n- suggestion: proactive recommendation — user can accept, skip, or discuss. (CARD)\n- alert: something urgent needs attention. Include what the user can do about it. (CARD)\n- publish: content ready to post. User sees the actual content and taps Post. MUST include content_body. This is the ONLY way to publish content — never call posting tools directly. (CARD)\n- blocked_on_you: you are blocked on something only the USER can do in the real world (connect an integration, grant OAuth, provide an input) — NOT "approve my work". Pair with needs_from_user; its key is the idempotency key (re-runs update the same blocker, not re-pile). type "input" renders an ANSWER BOX on the card (answer lands in company knowledge under inputs/<key> and your activity re-runs automatically) — so make the ask precise, and ask only for user-exclusive inputs. (CARD)'}, 'message': {'type': 'string', 'description': 'Executive summary — what you did, why it matters right now, and what (if anything) the user needs to do. Put the full report in the deliverable field, not here. PLAIN-LANGUAGE FLOOR: answer "what happened + what does Approve/Deny do" in plain business English; NO raw tool names (snake_case) in the message; NEVER lead with run mechanics (iteration budgets, step counts, time limits) — mechanics go last, in one short parenthetical if they matter at all.'}, 'on_deny': {'type': 'string', 'description': 'Decision cards: one sentence stating what stops (or stays the same) if the user denies (e.g. "This activity won\'t run again; nothing else changes").'}, 'reviews': {'type': 'array', 'items': {'type': 'object', 'properties': {'score': {'type': 'number', 'description': 'Score out of 10'}, 'verdict': {'enum': ['approved', 'needs_revision'], 'type': 'string'}, 'feedback': {'type': 'string', 'description': 'Brief feedback summary'}, 'reviewer': {'type': 'string', 'description': 'Name of the reviewing agent'}}}, 'description': 'Optional. Results from ICP/compliance agent reviews. Shown inline on the card so user sees review status at a glance.'}, 'agent_id': {'type': 'string', 'description': 'Your agent ID. Used for activity tracking.'}, 'platform': {'enum': ['x', 'youtube', 'linkedin', 'email', 'freedom_os', 'instagram', 'facebook', 'threads'], 'type': 'string', 'description': "Required for publish intent — the CHANNEL half of the destination triple (company · account · channel). Explicit only; no silent default. X/Instagram/Facebook/Threads require that company's connection in Connections (mint fails closed if missing). Meta multi-Page needs a chosen Page. LinkedIn is attended (company page · copy & open). Instagram additionally REQUIRES media_artifact_ids (no text-only posts)."}, 'priority': {'enum': ['urgent', 'high', 'normal'], 'type': 'string', 'description': 'Defaults based on intent (alert=urgent, decision=high, others=normal). Override only when needed.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'no_change': {'type': 'boolean', 'description': 'Zero-delta run flag (intent "update" only, activity runs only). Set true when this run scanned/checked and found GENUINELY NOTHING new to report — the run is then recorded to the activity ledger only: no card, no feed graduation, nothing lands on the operator (his attention is reserved for runs where something happened). The claim is verified against the run\'s actual tool trace: if this run performed any consequential action the flag is rejected and you must deliver normally. Never use it to hide real findings or unfinished work.'}, 'media_urls': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Optional. Array of image/video URLs to include with the post. Prefer media_artifact_ids for agent-generated media.'}, 'on_approve': {'type': 'string', 'description': 'Decision cards: ONE concrete sentence stating what starts happening if the user approves (e.g. "I\'ll assemble a draft newsletter from your essays every Monday; nothing publishes without your release"). Rendered directly under the card\'s buttons — this is how the user knows what the click does. ALWAYS provide it for intent:\'decision\' cards from an activity run — if you omit it the system derives a generic fallback from your title, which is far less clear than a line you write.'}, 'target_icp': {'type': 'string', 'description': 'Recommended for publish intent whenever the company has more than one ICP. The ICP id (from get_icps) of the audience persona this content is FOR — the customer-voice review grades AS that persona. E.g. a practitioner education post declares the practitioner ICP, not the channel-partner ICP, so it is not marked down for missing partner economics it was never meant to carry. Omit (or "auto") → the platform picks a customer-class ICP automatically; an unknown id also falls back to auto.'}, 'action_link': {'type': 'string', 'description': 'Optional route path for deeper context. MUST be one of: /workspace, /dashboard, /finance, /team, /growth, /brand, /content-pipeline, /media, /leads, /smart-tools, /inbox. Do NOT invent routes. /workspace is the desk where Command Center cards land; /dashboard is the numbers home (metrics); /smart-tools is Connections.'}, 'deliverable': {'type': 'string', 'description': 'The actual output of your work. A good update includes it. Attach the full report, analysis, data table, or structured output here — this is what the user reviews when they want to go deeper. It must CONTAIN the artifact itself — never a placeholder/pointer like "[see attached knowledge file]".'}, 'action_label': {'type': 'string', 'description': 'Optional custom label for the primary action button on the card. Use this to write a CTA that matches what the user is actually doing — much better than the generic default.\nExamples: "Start Day 1-3", "View Cash Flow Report", "Review SEO Audit", "Continue with Aiko".\nWorks with or without action_link. If omitted, the system picks a contextual default.'}, 'content_body': {'type': 'string', 'description': 'Required for publish intent. The EXACT text that will be published. For social posts, this is the tweet/post text verbatim. Do NOT summarize — this IS the post. For a CAROUSEL this is JUST the caption (the slide copy lives in the attached images, not here). For platform "x": must fit X\'s 280-character limit as X counts it (every URL = 23, most emoji = 2) by default — OR, when this company\'s X connection has long-form enabled (X Premium), up to 25,000 characters (plain length). Longer posts are rejected either way.'}, 'content_risk': {'enum': ['standard', 'high_conflict'], 'type': 'string', 'description': 'Required for publish intent. "standard" = settled facts, low blast radius. "high_conflict" = diverging legal/industry interpretations exist and professionalism is the product: you MUST first fact-check via query_sme, attach the SME verdict as a reviews[] row (reviewer containing "SME"), supply claim_sources, and shape the content as status-plus-conflicting-views — flat rule-claims are rejected in this class.'}, 'content_type': {'enum': ['social_post', 'email', 'newsletter', 'changelog'], 'type': 'string', 'description': 'Required for publish intent. What kind of content is this?'}, 'activity_name': {'type': 'string', 'description': 'Name of the activity that produced this output. Used for tracking.'}, 'claim_sources': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Strongly recommended whenever the content asserts facts (dates, rules, statistics). Up to 5 https URLs you actually grounded the claims on (regulator pages, official notices, primary sources). Shown on the approval card so the operator can verify claims are real, not hallucinated.'}, 'content_stage': {'enum': ['give', 'ask', 'retain'], 'type': 'string', 'description': 'Required for publish intent. Hormozi stage vocabulary: "give" = pure free value, deliberately NO link/product/CTA (judged on trust and authority built); "ask" = a promotional touch with an offer/CTA (judged on offer clarity and likelihood to act; paced by the give:ask ratio — default 3 gives per 1 ask); "retain" = for existing customers (judged on deepened product value). Declare honestly — the customer-voice review judges the content through this lens.'}, 'missing_tools': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Optional. Exact snake_case tool names from your activity skill that you lack (or need granted) to finish the job fully. Required whenever your message flags a tool gap / incomplete KPI / thin-MVP caused by a missing tool — never impact-only. Server stamps grant path + one-line "Operator: grant …" by construction. Cap 5.'}, 'reply_context': {'type': 'object', 'properties': {'url': {'type': 'string', 'description': 'Canonical URL of the target tweet'}, 'author': {'type': 'string', 'description': '@handle of the target tweet author'}, 'snippet': {'type': 'string', 'description': 'FULL text of the target tweet (≤560 chars, truncate only if longer)'}}, 'description': 'Strongly recommended with in_reply_to_tweet_id / quote_tweet_id. Display info about the target tweet so the approval card is self-contained: { url, author (@handle), snippet (FULL text of the target tweet, up to 560 chars — do not elide; the operator verifies the reply against it) }.'}, 'scheduled_for': {'type': 'string', 'description': 'Optional. ISO timestamp for when this should be posted. If omitted, posted immediately on user approval.'}, 'gate_substance': {'type': 'string', 'description': "Optional. The FULL substance the quality gate should score AND the card shows the operator READ-ONLY — caption + slide copy + citations. Use this ONLY when the post's real substance extends beyond content_body because it lives in attached media (a carousel): set content_body to the caption and gate_substance to the tool's gate_text. It is NEVER posted and NEVER char-counted. OMIT for a plain post — the gate then scores content_body."}, 'quote_tweet_id': {'type': 'string', 'description': 'Optional, X only. Tweet id (or full status URL) this post QUOTES (retweet-with-comment — the original renders embedded under your text). Do NOT also paste the tweet URL into content_body; the embed is native. Use when the take stands alone as content; prefer in_reply_to_tweet_id for answering in-thread.'}, 'routing_reason': {'type': 'string', 'description': 'Optional. One-line explanation of why you chose recipient_user_id (e.g., "routing to Alex because the KR this advances is owned by them"). Required when recipient_user_id is set so the routing decision is auditable.'}, 'needs_from_user': {'type': 'object', 'required': ['type', 'key', 'label', 'why', 'urgency'], 'properties': {'key': {'type': 'string'}, 'why': {'type': 'string'}, 'type': {'enum': ['integration', 'oauth', 'infrastructure', 'input'], 'type': 'string'}, 'label': {'type': 'string'}, 'urgency': {'enum': ['nice_to_have', 'significant', 'required'], 'type': 'string'}, 'blocked_by': {'type': 'string', 'description': 'Key of another needs_from_user that must be resolved first. Creates a dependency chain.'}}, 'description': 'Optional. If your output would be significantly better with something only the user can provide (tool connection, OAuth, infrastructure), note it here. This does NOT replace delivering your work — always deliver what you can first.\n\ntype: what kind of action is needed\n- integration: user needs to connect a tool (PostHog, Slack, etc.)\n- oauth: user needs to complete an OAuth flow\n- infrastructure: something needs to be built (new app, new feature)\n- input: user needs to provide information (budget, preferences, etc.)\n\nkey: normalized identifier (lowercase, underscores) — "posthog", "slack_oauth", "new_app"\nlabel: human-readable action — "Connect PostHog", "Complete Slack setup"\nwhy: one sentence on what it would unlock for this deliverable\nurgency: nice_to_have | significant | required\nblocked_by: optional — if THIS action is itself gated by another action, specify the key of the parent blocker.\n Example: PostHog can\'t be connected until the new app is built → blocked_by: "new_app"\n The system will chain these into a tree so the user sees the ROOT action to take first.\n\nOnly tag it when YOUR deliverable measurably improves with that specific action — never echo company-level blockers from other agents\' work, and never tag it on decision cards that are about approval, not integrations.'}, 'email_recipients': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Required when platform is "email" (unless a connected sender identity already names the account). One or more recipient addresses that complete the destination triple — mint fails closed without them (no "email with nowhere to send" cards).'}, 'recipient_user_id': {'type': 'string', 'description': 'Optional. UUID of the user this card should be routed to. Use the Routing Context block in your system prompt to pick the right recipient (e.g., the owner of the OKR this advances, or the responsibility-domain owner for the relevant domain). If omitted, the deterministic floor will pick — typically the executive of the company. Always pair with routing_reason when set.'}, 'audience_awareness': {'enum': ['unaware', 'problem_aware', 'solution_aware', 'product_aware', 'most_aware'], 'type': 'string', 'description': 'Optional. Schwartz awareness level of the audience this piece is written FOR (unaware → most_aware). Helps the customer-voice review judge fit for that audience instead of demanding buyer-readiness from top-of-funnel content.'}, 'media_artifact_ids': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Optional. Array of agent_artifact UUIDs (images/videos) to attach to the post. Preferred over media_urls for agent-generated content — these have storage paths, metadata, and audit trails.'}, 'in_reply_to_tweet_id': {'type': 'string', 'description': 'Optional, X only. Tweet id (or full status URL) this post REPLIES to — the post lands threaded under that tweet. Use for reply-pass work: answering a question in an existing thread. Pair with reply_context so the human sees what they are approving a reply to. NOTE: X blocks APP-posted replies/quotes to any author who has not @mentioned this account (platform rule since ~Feb 2026) — such a card is born with salvage actions (post-standalone / human-posts-it) instead of Post Now. If the target post does not mention this account, consider drafting a STANDALONE take instead of a reply.'}}}
Eingabeschema
{'type': 'object', 'required': ['max_pending_cards', 'companyId'], 'properties': {'note': {'type': 'string', 'description': 'Optional rationale for the change (stored with the budget).'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'max_pending_cards': {'type': 'number', 'description': 'The new ceiling: pending review cards before the founder is overloaded (whole number, 1–100).'}}}
Eingabeschema
{'type': 'object', 'required': ['strategy', 'companyId'], 'properties': {'note': {'type': 'string', 'description': 'Optional rationale for the change (stored with the policy).'}, 'strategy': {'enum': ['aggressive', 'standard', 'conservative', 'enterprise'], 'type': 'string', 'description': 'The CAC posture: aggressive (2:1), standard (3:1), conservative (4:1), or enterprise (5:1).'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'ads_account_id': {'type': 'string', 'description': 'Optional Meta ad account the budget measures (act_<digits>, from list_ad_accounts) — required once when the Meta connection carries several accounts. Omit to leave unchanged.'}, 'monthly_ads_budget': {'type': 'number', 'description': 'Optional monthly ads budget in USD (major units, e.g. 500 = $500/month). Pass 0 to clear. Advisory envelope shown on the dashboard beside live MTD ad spend. Omit to leave unchanged.'}}}
Eingabeschema
{'type': 'object', 'required': ['lifecycle', 'companyId'], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'lifecycle': {'enum': ['active', 'archived'], 'type': 'string', 'description': '"archived" archives the company (freezes activity). "active" unarchives/restores it. Agents stay frozen after restore until unfrozen separately.'}}}
Eingabeschema
{'type': 'object', 'required': ['cos_preferences'], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'cos_preferences': {'type': 'string', 'description': 'Full preferences text (≤2000 chars). Empty string clears.'}}}
Eingabeschema
{'type': 'object', 'required': ['grain', 'companyId'], 'properties': {'note': {'type': 'string', 'description': 'Human-readable note on why this grain has this policy.'}, 'grain': {'type': 'string', 'description': 'The content grain key, lowercase_with_underscores (e.g. faith_values, harness_education, professional).'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'gate_mode': {'enum': ['autonomous', 'human_pre_gate'], 'type': 'string', 'description': "'autonomous' = an agent may auto-publish this grain; 'human_pre_gate' = it must route to a human first."}, 'curate_only': {'type': 'boolean', 'description': 'If true, an agent may only assemble this grain from source_corpus_ref, never originate de-novo content.'}, 'source_corpus_ref': {'type': 'string', 'description': 'For curate_only grains: the corpus an agent may assemble from (e.g. a knowledge collection key).'}}}
Eingabeschema
{'type': 'object', 'required': ['object_id', 'status', 'companyId'], 'properties': {'status': {'type': 'string', 'description': "'ACTIVE' (starts spend — human only) or 'PAUSED' (stops spend)"}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'object_id': {'type': 'string', 'description': 'Numeric campaign / ad set / ad id'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'offer': {'type': 'string', 'description': 'The grand slam offer + positioning: what the company sells and the transformation it promises. Operator-authored wisdom-like content.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'is_regulated': {'type': 'boolean', 'description': 'Mark this company/product as operating in a REGULATED category (health, medical, financial). When true, the Integrity Gate treats health/efficacy/financial claims in agent-produced outbound as requiring substantiation before they can ship.'}, 'target_summary': {'type': 'string', 'description': 'Optional one-line summary of who the offer is for (the target customer).'}}}
Eingabeschema
{'type': 'object', 'required': ['channels', 'companyId'], 'properties': {'channels': {'type': 'array', 'items': {'enum': ['stripe', 'xero', 'shopify', 'amazon', 'ebay', 'manual', 'none_yet', 'other'], 'type': 'string'}, 'description': 'Any that apply: stripe, xero, shopify, amazon, ebay, manual, none_yet, other. "none_yet" is exclusive — if the business is pre-revenue, pass ONLY ["none_yet"].'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'other_label': {'type': 'string', 'description': 'Required when channels includes "other" — the operator\'s own words for the revenue channel (e.g. "wholesale invoices").'}}}
Eingabeschema
{'type': 'object', 'required': ['product_id', 'variant_id', 'price', 'companyId'], 'properties': {'price': {'type': 'string', 'description': 'Decimal price in the shop currency, e.g. "19.99"'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'product_id': {'type': 'string', 'description': 'Parent product gid'}, 'variant_id': {'type': 'string', 'description': 'Variant gid (gid://shopify/ProductVariant/...)'}, 'compare_at_price': {'type': 'string', 'description': 'Optional compare-at (strikethrough) price'}}}
Eingabeschema
{'type': 'object', 'required': ['object_id', 'status', 'companyId'], 'properties': {'status': {'type': 'string', 'description': "'ACTIVE' (starts spend — human only) or 'PAUSED' (stops spend)"}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'object_id': {'type': 'string', 'description': 'Campaign or line item id'}, 'object_type': {'type': 'string', 'description': "'campaign' (default) or 'line_item'"}, 'ad_account_id': {'type': 'string', 'description': 'Optional ads account id when several exist'}}}
Eingabeschema
{'type': 'object', 'required': ['fo_category', 'xero_account_code', 'companyId'], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'fo_category': {'type': 'string', 'description': 'FreedomOS transaction.account name, e.g. Software'}, 'xero_account_id': {'type': 'string', 'description': 'Optional Xero AccountID UUID'}, 'xero_account_code': {'type': 'string', 'description': 'Xero account Code from list_xero_accounts'}}}
Eingabeschema
{'type': 'object', 'required': ['share_with_email'], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'title_search': {'type': 'string', 'description': 'Search by title if ID not known (fuzzy match)'}, 'commitment_id': {'type': 'string', 'description': 'The UUID of the commitment to share (must belong to the caller).'}, 'share_with_email': {'type': 'string', 'description': 'Email address of the person to share with'}}}
Eingabeschema
{'type': 'object', 'required': ['path', 'user_email', 'companyId'], 'properties': {'path': {'type': 'string', 'description': 'The file or folder path to share. Use trailing "/" for folders (e.g., "acme-deal/") — nested folders work too (e.g., "partners/acme/" shares the whole subtree). Use no trailing "/" for files (e.g., "acme-deal/term-sheet").'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'permission': {'enum': ['read', 'write'], 'type': 'string', 'description': 'Permission level: "read" (default) or "write".'}, 'user_email': {'type': 'string', 'description': 'Email of the FreedomOS user to share with.'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'to_email': {'type': 'string', 'description': 'Optional. If they already use FreedomOS, copy the Play to them.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'playbook_id': {'type': 'string', 'description': 'UUID of the Playbook to send.'}}}
Eingabeschema
{'type': 'object', 'required': ['activity_name', 'companyId'], 'properties': {'pieces': {'type': 'array', 'items': {'type': 'object'}, 'description': 'Optional precomputed replacement activities (name, frequency, description, …) — exhaustion-recovery stamps typically supply these. When omitted, derived from the source.'}, 'reason': {'type': 'string', 'description': 'Optional reason recorded on the archive + audit log.'}, 'agent_id': {'type': 'string', 'description': 'UUID of the agent. Optional if agent_name is provided.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'agent_name': {'type': 'string', 'description': 'Name of the agent. Provide this or agent_id.'}, 'activity_name': {'type': 'string', 'description': 'Exact (case-insensitive) name of the oversized activity to split.'}}}
Eingabeschema
{'type': 'object', 'required': ['request_id', 'builder_host', 'builder_session_id'], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'request_id': {'type': 'string', 'description': 'Product request id (agent_task_queue id).'}, 'lab_work_id': {'type': 'string', 'description': 'Optional lab_work id. Must match the card when the card already has one.'}, 'builder_host': {'type': 'string', 'description': 'External host. Must start with cursor (cursor, cursor-desk, cursor/work).'}, 'builder_mode': {'type': 'string', 'description': 'external (default) or sticky. spawn is refused.'}, 'builder_session_id': {'type': 'string', 'description': 'Operator-supplied external session id. Not a factory grok-builder / claude-builder id.'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'country': {'type': 'string', 'description': '2-letter country for the Stripe connected account (default US).'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['action', 'companyId'], 'properties': {'code': {'type': 'string', 'description': 'Bounce authorization code. Required for claim only — Desk reclaim does not need the host to pass it. Xero org pick can pass tenant_id without a new code.'}, 'action': {'enum': ['start', 'status', 'claim'], 'type': 'string', 'description': 'start mints a one-time vendor authorize_url (open only when open=true); a second start while pending reuses and does not remint; status polls until Desk reclaims and never re-hands the URL; claim finishes when a host already holds the bounce code.'}, 'card_id': {'type': 'string', 'description': 'Connect card UUID (from request_connector / get_command_center_item). Required for start.'}, 'provider': {'type': 'string', 'description': 'Native door id (x_twitter, x_ads, slack, meta, threads, xero). Optional on start when the card names it; required on claim.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'tenant_id': {'type': 'string', 'description': 'Xero organisation id. Optional on start (preferred org) and claim. Required to finish when claim returns needs_org_selection — pass tenant_id without a new code. Never binds an org already used by another company.'}, 'oauth_claim_state': {'type': 'string', 'description': 'Returned by action=start. Required for claim when a host already holds the bounce code.'}}}
Eingabeschema
{'type': 'object', 'required': ['pipeline_id', 'content', 'companyId'], 'properties': {'content': {'type': 'string', 'description': 'Raw content to transform (updates, notes, announcements, etc.)'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'pipeline_id': {'type': 'string', 'description': 'ID of the pipeline to submit to (get from list_pipelines)'}, 'as_final_draft': {'type': 'boolean', 'description': 'When true, this IS the post — queue it for human Approve without running the persona transform (Alex). Use for operator-curated copy, especially sourced faith. Auto-queue stays off for held grains. Default false.'}, 'media_artifact_ids': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Optional. Artifact IDs (image or video, from generate_image_xai / generate_video, same company) to attach as media on this post. Required for visual social posts — the post publishes with this media attached. Each ID must belong to this company.'}}}
Eingabeschema
{'type': 'object', 'required': ['kind', 'title', 'description', 'companyId'], 'properties': {'kind': {'enum': ['bug', 'feature', 'question', 'upgrade'], 'type': 'string', 'description': 'bug = FO broken; feature = FO missing capability; upgrade = toolchain/security remediation (dep majors, patch-safe upgrades — not a user-facing feature); question = how-to for the FreedomOS team. Not for your own app/product backlog.'}, 'title': {'type': 'string', 'description': 'One-line summary. Specific: "Connect CTA dumps to Smart Tools instead of OAuth" not "bug".'}, 'severity': {'enum': ['low', 'medium', 'high', 'critical'], 'type': 'string', 'description': 'Default medium. critical = data loss / security / blocked onboarding.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'description': {'type': 'string', 'description': 'What happened / what you need. Include repro steps, expected vs actual, company name, agent name if relevant.'}, 'repro_steps': {'type': 'string', 'description': 'Optional numbered repro steps.'}, 'linked_kr_id': {'type': 'string', 'description': "Optional: the FreedomOS Key Result this request moves (a kr-… id from FreedomOS's own OKRs — the unit is FreedomOS work). Validated at filing; a KR that is not live is refused with the live list. Bugs/upgrades default to factory-self (product_defect); a feature approved without one is built as factory-self and counted as unaligned."}, 'suggested_fix': {'type': 'string', 'description': 'Optional: what a good fix would look like (agent hypothesis — product team decides).'}, 'source_agent_name': {'type': 'string', 'description': 'Optional: which of the operator\'s agents hit this (e.g. "Linnet", "Morgan").'}}}
Eingabeschema
{'type': 'object', 'required': ['from_agent_name', 'to_agent_name', 'task_description', 'companyId'], 'properties': {'priority': {'enum': ['low', 'medium', 'high'], 'type': 'string', 'description': 'How urgent is this collaboration request'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'to_agent_name': {'type': 'string', 'description': "Name of the target agent, or a role description if the agent doesn't exist yet"}, 'from_agent_name': {'type': 'string', 'description': 'Name of the agent suggesting the collaboration (e.g., "Maya", "Evan")'}, 'task_description': {'type': 'string', 'description': 'What needs to be done — specific and actionable'}, 'instance_card_ids': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Optional card ids that are instances of this class. When the target is a holdco chair, these are flagged on the company rail for the holdco sweep.'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'limit': {'type': 'number', 'description': 'Max suggestions (default 20, cap 40)'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['item_id', 'from', 'companyId'], 'properties': {'sha': {'type': 'string', 'description': 'Optional 40-hex tip sha; must equal the current PR head'}, 'from': {'enum': ['edit_pr'], 'type': 'string', 'description': 'Must be "edit_pr" — hash from this card\'s save PR tip, never main'}, 'item_id': {'type': 'string', 'description': 'Waiting words-ready card id'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['lead_id', 'journey_json', 'companyId'], 'properties': {'lead_id': {'type': 'string', 'description': 'UUID of the lead. Used to persist synthesis back to leads.synopsis_jsonb.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'journey_json': {'type': 'string', 'description': 'JSON-encoded journey object returned by query_lead_journey. Caller should JSON.stringify the journey output before passing.'}, 'company_context': {'type': 'string', 'description': "Optional short summary of the company the lead arrived at (e.g., 'Acme Health — pharmacy compounding compliance consulting for US pharmacies'). Helps the model evaluate fit."}}}
Eingabeschema
{'type': 'object', 'required': ['agent_name', 'action', 'companyId'], 'properties': {'action': {'enum': ['pause', 'resume'], 'type': 'string', 'description': 'pause or resume'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'agent_name': {'type': 'string', 'description': 'Name of the agent whose schedule to toggle'}, 'activity_name': {'type': 'string', 'description': "Optional: pause/resume only this one activity (exact name, case-insensitive). Omit to affect the agent's whole activity plan."}}}
Eingabeschema
{'type': 'object', 'required': ['idea_identifier'], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'workspace_id': {'type': 'string', 'description': 'Single company ID (use workspace_ids for multiple)'}, 'workspace_ids': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Array of company IDs to assign the idea to'}, 'idea_identifier': {'type': 'string', 'description': 'How to find the idea: UUID, content snippet, or "newest"/"latest" for most recent'}}}
Eingabeschema
{'type': 'object', 'required': ['agent_name', 'activity_name', 'companyId'], 'properties': {'reason': {'type': 'string', 'description': 'Optional. A specific instruction for THIS run only — e.g. "only reconcile the X reply queue, skip everything else". When given, it becomes this run\'s goal and takes priority over the activity\'s standing description. Omit for a normal run.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'agent_name': {'type': 'string', 'description': 'Name of the agent to trigger (e.g. "Aiko")'}, 'activity_name': {'type': 'string', 'description': 'Name of the activity to run (e.g. "weekly_content_report")'}, 'resume_run_id': {'type': 'string', 'description': 'Optional. UUID of a hung activity_runs row to continue on the SAME job (255s isolate death). Omit to start a new run.'}}}
Eingabeschema
{'type': 'object', 'required': ['product_id', 'expected_updated_at', 'companyId'], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'product_id': {'type': 'string', 'description': 'Product gid'}, 'expected_updated_at': {'type': 'string', 'description': "The product's updatedAt as read when the takedown was reviewed (ISO)"}}}
Eingabeschema
{'type': 'object', 'required': ['unshare_email'], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'title_search': {'type': 'string', 'description': 'Search by title if ID not known (fuzzy match)'}, 'commitment_id': {'type': 'string', 'description': 'The UUID of the commitment to unshare'}, 'unshare_email': {'type': 'string', 'description': 'Email address of the person to remove sharing for'}}}
Eingabeschema
{'type': 'object', 'required': ['path', 'user_email', 'companyId'], 'properties': {'path': {'type': 'string', 'description': 'The file or folder path to unshare. Must match exactly what was originally shared.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'user_email': {'type': 'string', 'description': 'Email of the user to revoke access from.'}}}
Eingabeschema
{'type': 'object', 'required': ['agent_id', 'companyId'], 'properties': {'name': {'type': 'string', 'description': 'New display name — a single first name (e.g. "Garth"). Do not include a title. Omit to leave the name unchanged. Renaming carries the agent\'s memory file across automatically.'}, 'role': {'type': 'string', 'description': 'New role / job title (e.g. "Agent Deployment & Quality Reviewer"). Do NOT include the agent name. Omit to leave the role unchanged.'}, 'agent_id': {'type': 'string', 'description': 'UUID of the agent to update. Use get_team_roster to find IDs.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['patch', 'companyId'], 'properties': {'patch': {'type': 'object', 'properties': {'name': {'type': 'string', 'description': 'New activity name — re-keys the scheduler (run-history/cadence is keyed on name, so a rename makes the activity eligible to run again under the new name and resets its history). The matching deliverable-queue entry is renamed in the same write; the tool returns a note when this happens.'}, 'priority': {'type': 'string', 'description': "New priority (e.g. 'immediate')."}, 'frequency': {'enum': ['daily', 'weekdays', 'weekly', 'biweekly', 'monthly', 'quarterly', 'once', 'as_needed', 'on_demand'], 'type': 'string', 'description': 'New frequency. weekdays = once each Mon–Fri in America/Los_Angeles; weekends do not run.'}, 'tools_used': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Replacement tools_used list.'}, 'workaround': {'type': 'string', 'description': 'Operator note / fallback for when a tool the activity needs is unavailable.'}, 'deliverable': {'type': 'string', 'description': 'New deliverable.'}, 'description': {'type': 'string', 'description': 'New description.'}, 'linked_kr_id': {'type': 'string', 'description': 'Rebind this loop to a Key Result. Pick the Key Result this loop moves. Clearing is not legal — unbind is retire.'}, 'delivery_shape': {'enum': ['publish_cards'], 'type': 'string', 'description': "Set 'publish_cards' when the activity's deliverable is publishable content: one send_to_user intent:'publish' card per drafted item (a one-tap post card), never drafts inside a summary."}, 'max_iterations': {'type': 'number', 'description': 'Per-activity tool-loop iteration budget (clamped 5–30; default 15, higher for multi-tool plans). Raise for read-heavy deploy-class activities that legitimately spend many calls on reads/verification before the actuating step.'}, 'completion_criteria': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Replacement completion_criteria list.'}}, 'description': 'Fields to change. Only the supplied fields are updated.'}, 'agent_id': {'type': 'string', 'description': 'UUID of the agent. Optional if agent_name is provided.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'agent_name': {'type': 'string', 'description': 'Name of the agent. Provide this or agent_id.'}, 'activity_name': {'type': 'string', 'description': 'Exact (case-insensitive) name of the activity to edit. Provide this or activity_index.'}, 'activity_index': {'type': 'number', 'description': '0-based index into the activity plan. Alternative to activity_name.'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'all': {'type': 'boolean', 'description': 'Set true to regenerate avatars for EVERY active agent in the company. Takes precedence over the id/name params.'}, 'style': {'type': 'string', 'description': 'Optional style override (e.g., "pixel-art", "watercolor", "geometric"). Overrides company avatar_theme for this generation.'}, 'agent_id': {'type': 'string', 'description': 'UUID of a single agent to (re)generate an avatar for.'}, 'agent_ids': {'type': 'array', 'items': {'type': 'string'}, 'description': 'UUIDs of multiple agents to regenerate in ONE batch call.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'agent_name': {'type': 'string', 'description': 'Name of a single agent (used to look up the agent when agent_id is not provided). Must resolve to exactly one active agent.'}, 'agent_names': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Names of multiple agents to regenerate in ONE batch call. Each name must resolve to exactly one active agent (ambiguous names are returned in `failed`).'}}}
Eingabeschema
{'type': 'object', 'required': ['skill_name', 'steps', 'companyId'], 'properties': {'steps': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Ordered steps of the process (e.g., ["Pull balances", "Calculate 13-week average", "Flag if runway < 3 months"])'}, 'agent_id': {'type': 'string', 'description': 'UUID of the agent to teach. Optional if agent_name is provided.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'resources': {'type': 'array', 'items': {'type': 'string'}, 'description': 'URLs, doc names, templates, or other resources (e.g., ["company P&L template"])'}, 'agent_name': {'type': 'string', 'description': 'Name of the agent (e.g., "Marcus"). Used to look up agent_id if not provided — prefer this when the user @mentions an agent by name.'}, 'skill_name': {'type': 'string', 'description': 'Short name for the skill (e.g., "13-Week Cash Forecast")'}, 'tools_used': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Tool names referenced in the process (e.g., ["get_cash_position", "create_google_sheet"])'}, 'activity_name': {'type': 'string', 'description': 'Activity this skill backs (e.g., "Weekly Cash Review"). If provided, the skill will be linked to this activity via skill_id.'}}}
Eingabeschema
{'type': 'object', 'required': ['updates', 'companyId'], 'properties': {'updates': {'type': 'object', 'description': 'Only the fields to update; others are preserved automatically. Supported: name, tagline, colors {primary, accent, background}, typography {headings, body}, tone[], dos[], donts[], naming_rules (customer-facing naming authority — canonical product name, banned names/codenames, casing, CTA phrasing; follow it verbatim), logo_url. Nested objects (colors, typography) merge by key — e.g. { colors: { primary: "#1E3A8A" } } only changes primary, keeping siblings.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': [], 'properties': {'title': {'type': 'string', 'description': 'New title.'}, 'domain': {'type': 'string', 'description': 'New life domain: personal, family, home, w2, or company:<name>.'}, 'due_date': {'type': 'string', 'description': 'New due date in YYYY-MM-DD format.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'consequence': {'type': 'string', 'description': 'New consequence — what happens if this slips.'}, 'description': {'type': 'string', 'description': 'New additional details or notes.'}, 'title_search': {'type': 'string', 'description': 'Search by title if ID not known (fuzzy match against ACTIVE commitments).'}, 'commitment_id': {'type': 'string', 'description': 'The UUID of the commitment to update.'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'name': {'type': 'string', 'description': 'Company name'}, 'vision': {'type': 'string', 'description': 'Company vision statement'}, 'mission': {'type': 'string', 'description': 'Company mission statement'}, 'logo_url': {'type': 'string', 'description': 'Durable public https URL for the company HUD logo. HUD chrome circle-masks with object-contain — pass a normal logo file, not a pre-cropped circle. Signed storage URLs expire — for a file (chat attachment, FO Media, or base64) use upload_company_logo instead.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'website_url': {'type': 'string', 'description': 'Company website URL'}, 'runtime_mode': {'enum': ['host', 'fo'], 'type': 'string', 'description': 'Who runs this company\'s roles. "host": the operator\'s own bots wear them — they read each brief with get_my_role and do the work on their own turn, and FreedomOS starts nothing. "fo": FreedomOS runs them on its own schedule and pays the compute, so switching to it always needs the operator\'s yes.'}, 'pledge_public': {'type': 'boolean', 'description': "The founder's own yes to being celebrated. true = the Freedom Pledge page goes live at getfreedomos.com/freedom/<slug>, the company may appear on the FreedomOS front page, and a welcome post is drafted for the FreedomOS founder to approve. false = all of that stops. Only a person sets this (chat, MCP as the operator, or an approved card) — never from an activity on a founder's behalf."}, 'elevator_pitch': {'type': 'string', 'description': 'Brief company description (30 seconds)'}}}
Eingabeschema
{'type': 'object', 'required': ['feature_id', 'companyId'], 'properties': {'title': {'type': 'string', 'description': 'Display title (e.g., "AI Content Pipeline")'}, 'limits': {'type': 'string', 'description': 'Current limitations'}, 'solves': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Problems/pain points this feature solves'}, 'category': {'type': 'string', 'description': 'Category (e.g., "ai", "marketing", "finance", "automation")'}, 'demo_url': {'type': 'string', 'description': 'URL to a demo video (Screen Studio, Loom, etc.)'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'feature_id': {'type': 'string', 'description': 'The feature_id slug (e.g., "ai-content-pipeline") or UUID.'}, 'description': {'type': 'string', 'description': 'Marketing-ready description of the feature'}}}
Eingabeschema
{'type': 'object', 'required': ['feature_id', 'status', 'companyId'], 'properties': {'status': {'enum': ['draft', 'ready_to_market'], 'type': 'string', 'description': 'New status for the feature'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'feature_id': {'type': 'string', 'description': 'The feature_id slug (e.g., "ai-content-pipeline") or UUID'}}}
Eingabeschema
{'type': 'object', 'required': ['account_name', 'note', 'companyId'], 'properties': {'note': {'type': 'string', 'description': 'Note text to set on the account (empty string to clear)'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'fiscal_year': {'type': 'number', 'description': 'Fiscal year (default: current year)'}, 'account_name': {'type': 'string', 'description': 'Account name to annotate (fuzzy matched)'}}}
Eingabeschema
{'type': 'object', 'required': ['doc_id', 'content', 'companyId'], 'properties': {'doc_id': {'type': 'string', 'description': 'Google Doc ID to update'}, 'content': {'type': 'string', 'description': 'Content to append to the document'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['icp_id', 'updates', 'companyId'], 'properties': {'icp_id': {'type': 'string', 'description': 'The unique ICP ID from get_icps response.'}, 'updates': {'type': 'object', 'description': "Only the fields to update. Other fields are preserved automatically. Special fields: class — 'customer' (default) or 'partner', tags partner/affiliate ICPs so they never masquerade as end-buyers (invalid values rejected); agentProfile — how this customer's own AI agent participates in buying: { tier: 'ambient' | 'assisted' | 'delegated' | 'builder', agents: string[], surfacesRead: string[], purchasePath: string, autonomyNotes: string } — tier must be one of the four values (rejected otherwise), nested updates merge, and updatedAt is stamped automatically."}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'unit': {'type': 'string', 'description': 'Unit label for the number (e.g. "$", "%", "leads"). A label fix, allowed on a bound KR too — the source owns the number, the unit names it. Before this, a wrong unit could only be fixed by recreate-and-rebind, losing history.'}, 'month': {'type': 'string', 'description': 'YYYY-MM the current_value belongs to (default: this UTC month when current_value is set). Upserts monthly_history; live current becomes the latest month in history.'}, 'title': {'type': 'string', 'description': 'New display title for the key result (rename)'}, 'due_date': {'type': 'string', 'description': 'Due date (YYYY-MM-DD format)'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'direction': {'enum': ['at_least', 'at_most'], 'type': 'string', 'description': 'Goal direction. "at_least" (default): reach the target. "at_most": stay UNDER the target — a ceiling. A ceiling KR is on-track only while current ≤ target.'}, 'start_date': {'type': 'string', 'description': 'Start date (YYYY-MM-DD format)'}, 'assigned_to': {'type': 'string', 'description': 'User ID to assign this KR to. Use "me" or "current_user" to assign to the current user.'}, 'description': {'type': 'string', 'description': 'What the number is. Read back on get_okrs.'}, 'objective_id': {'type': 'string', 'description': 'ID of the parent objective (optional when key_result_id is set — id resolves the parent)'}, 'target_value': {'type': 'number', 'description': 'Target value to achieve. 0 is a valid monthly floor.'}, 'current_value': {'type': 'number', 'description': 'Manual KRs only — refused on a KR bound to a measure_source (the sweep owns current; pass measure_source "none" first to make it manual). THIS calendar month\'s actual unless month is set. Not YTD, not a projection.'}, 'key_result_id': {'type': 'string', 'description': 'Stable KR id (preferred). Parent objective is looked up from the KR row across active objectives — do not re-search by fuzzy objective title.'}, 'measure_source': {'type': 'string', 'description': 'Bind current progress to a live data source (auto-updated daily by the OKR health sweep). One of: stripe_active_subscribers, stripe_mrr, crm_active_leads, crm_webhook_leads_month, customer_evidence_count, product_telemetry_count, fcf_last_closed_month, amazon_deposits_last_closed_month, human_door_decisions_28d, factory_landings_aligned_pct_28d. Pass "none" to unbind and return the KR to manual updates. Do not bind finance/P&L here.'}, 'objective_title': {'type': 'string', 'description': 'Title of the parent objective (optional when key_result_id is set — id resolves the parent)'}, 'key_result_title': {'type': 'string', 'description': 'Title of the key result to update (use this OR key_result_id) — matched against the CURRENT title, even when also renaming'}}}
Eingabeschema
{'type': 'object', 'required': ['slug', 'section_header', 'new_content', 'companyId'], 'properties': {'slug': {'type': 'string', 'description': 'The slug of the knowledge file to update'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'new_content': {'type': 'string', 'description': 'The new Markdown content for this section (replaces everything between this ## and the next ##). Use proper Markdown: blank lines between paragraphs, - for list items, ### for sub-headers. Never use **bold** as a substitute for headers.'}, 'section_header': {'type': 'string', 'description': 'The ## section header to find and replace (case-insensitive). If not found, appended as a new section.'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'name': {'type': 'string', 'description': 'New full name.'}, 'tags': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Replacement tag list — folded into synopsis_jsonb.manual_entry.'}, 'email': {'type': 'string', 'description': 'New email (normalized to lowercase/trim). Rejected if it already belongs to another lead in this company.'}, 'notes': {'type': 'string', 'description': 'Notes about the lead — folded into synopsis_jsonb.manual_entry.'}, 'phone': {'type': 'string', 'description': 'New phone number.'}, 'state': {'enum': ['new', 'active', 'flagged', 'archived'], 'type': 'string', 'description': "New lifecycle state. state_reason is REQUIRED when moving to 'flagged' or 'archived'."}, 'title': {'type': 'string', 'description': 'Job title — folded into synopsis_jsonb.manual_entry (other manual_entry keys are preserved).'}, 'lead_id': {'type': 'string', 'description': 'UUID of the lead to update. Provide this OR email_lookup.'}, 'location': {'type': 'string', 'description': 'New location.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'company_name': {'type': 'string', 'description': 'Company they work for — folded into synopsis_jsonb.manual_entry.'}, 'email_lookup': {'type': 'string', 'description': "The lead's CURRENT email, used to find it. Provide this OR lead_id."}, 'state_reason': {'type': 'string', 'description': "Reason for the state change. Required when state is 'flagged' or 'archived'."}, 'do_not_contact': {'type': 'boolean', 'description': 'Set true to flag the lead do-not-contact (excluded from outreach); false to clear it.'}, 'do_not_contact_reason': {'type': 'string', 'description': "Reason for do_not_contact, e.g. 'customer', 'churned', 'opted_out'."}}}
Eingabeschema
{'type': 'object', 'required': ['product_id', 'expected_updated_at', 'companyId'], 'properties': {'tags': {'type': 'array', 'items': {'type': 'string'}}, 'title': {'type': 'string'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'product_id': {'type': 'string', 'description': 'Product gid'}, 'description_html': {'type': 'string'}, 'expected_updated_at': {'type': 'string', 'description': "The product's updatedAt as read when the edit was reviewed (ISO)"}}}
Eingabeschema
{'type': 'object', 'required': ['theme_id', 'filename', 'content', 'expected_updated_at', 'companyId'], 'properties': {'content': {'type': 'string', 'description': 'The full replacement file content (≤200000 chars)'}, 'filename': {'type': 'string', 'description': "Theme path, e.g. 'layout/theme.liquid' or 'assets/custom.css'"}, 'theme_id': {'type': 'string', 'description': 'Theme gid — must currently be the LIVE (MAIN) theme'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'expected_updated_at': {'type': 'string', 'description': "The file's updatedAt as read from get_shopify_theme_asset when the edit was reviewed (ISO)"}}}
Eingabeschema
{'type': 'object', 'required': ['adset_id', 'daily_budget', 'companyId'], 'properties': {'adset_id': {'type': 'string', 'description': 'Numeric ad set id'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'daily_budget': {'type': 'number', 'description': 'New daily budget, account currency major units'}, 'ad_account_id': {'type': 'string', 'description': 'Optional — for currency resolution when several accounts exist'}}}
Eingabeschema
{'type': 'object', 'required': [], 'properties': {'phone': {'type': 'string', 'description': 'Phone number'}, 'title': {'type': 'string', 'description': 'Job title (e.g., CEO, CTO, Marketing Director)'}, 'location': {'type': 'string', 'description': 'City, State or Location'}, 'quiet_tz': {'type': 'string', 'description': 'IANA timezone for the quiet window, e.g. "America/Los_Angeles". Use the user\'s own timezone.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'last_name': {'type': 'string', 'description': "User's last name"}, 'quiet_end': {'type': 'string', 'description': 'Quiet window end, local wall-clock 24h "HH:MM" (e.g. "07:00"). May cross midnight (start after end).'}, 'first_name': {'type': 'string', 'description': "User's first name"}, 'founder_why': {'type': 'string', 'description': "Founder's motivation and purpose"}, 'quiet_start': {'type': 'string', 'description': 'Quiet window start, local wall-clock 24h "HH:MM" (e.g. "22:00"). Set together with quiet_end and quiet_tz.'}, 'custom_title': {'type': 'string', 'description': 'Custom display title'}, 'linkedin_url': {'type': 'string', 'description': 'LinkedIn profile URL'}, 'holdco_vision': {'type': 'string', 'description': 'Vision for holding company (executives)'}, 'zone_of_genius': {'type': 'string', 'description': 'What the user is uniquely great at'}, 'future_self_note': {'type': 'string', 'description': 'Note to future self'}, 'profile_image_url': {'type': 'string', 'description': 'URL to profile image'}, 'experience_summary': {'type': 'string', 'description': 'Brief summary of professional experience'}, 'quiet_hours_enabled': {'type': 'boolean', 'description': 'Turn the do-not-disturb / quiet-hours window on or off. When on, agent push alerts are held during the window and delivered as one summary at wake.'}, 'outbound_routes_to_me': {'type': 'boolean', 'description': 'The operator\'s OWN no-manual-outbound preference (S5). true = "I personally do outbound" → the founder-outbound Playbook filter is OFF for me; false = "do NOT route founder manual outbound to me" → the filter stays ON. Only the operator can set this for themselves; it is never set on behalf of another user.'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'year': {'type': 'number', 'description': 'New year for the objective (e.g., 2026)'}, 'title': {'type': 'string', 'description': 'New title for the objective'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'description': {'type': 'string', 'description': 'New description for the objective'}, 'objective_id': {'type': 'string', 'description': 'ID of the objective to update (use this or objective_title)'}, 'objective_title': {'type': 'string', 'description': 'Title of the objective to update (use this or objective_id)'}}}
Eingabeschema
{'type': 'object', 'required': ['pipeline_id', 'companyId'], 'properties': {'name': {'type': 'string', 'description': 'New name for the pipeline'}, 'output': {'enum': ['changelog', 'social_post', 'team_update', 'customer_newsletter', 'report'], 'type': 'string', 'description': 'New output type'}, 'icp_ids': {'type': 'array', 'items': {'type': 'string'}, 'description': 'New list of ICP IDs to target'}, 'persona': {'type': 'string', 'description': 'New persona ID to use for transformations'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'destination': {'enum': ['freedom_os', 'manual', 'x', 'linkedin', 'instagram', 'facebook', 'threads', 'mailchimp'], 'type': 'string', 'description': "Where to publish: freedom_os (auto-publish to platform), manual (copy/paste). Social platforms (x/linkedin/instagram/facebook/threads) publish via the gated owner after human approval — instagram items REQUIRE media. Meta platforms need the company's Facebook & Instagram (or Threads) connection in Connections."}, 'pipeline_id': {'type': 'string', 'description': 'ID of the pipeline to update (get from list_pipelines)'}, 'github_input': {'type': 'boolean', 'description': 'Whether this pipeline listens to GitHub weekly digest. Social-post pipelines should be false — a story is submitted from the corpus; receipts use ship_receipt. Changelog may stay true.'}}}
Eingabeschema
{'type': 'object', 'required': ['pipeline_id', 'output_format', 'style_rule', 'companyId'], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'style_rule': {'type': 'string', 'description': 'The style rule to add (e.g., "Use bullet points for lists", "Keep under 150 words")'}, 'pipeline_id': {'type': 'string', 'description': 'Pipeline ID (get from list_pipelines)'}, 'output_format': {'type': 'string', 'description': 'Which format this rule applies to: changelog, social_post, team_update, newsletter, report'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'title': {'type': 'string', 'description': 'New title'}, 'status': {'enum': ['draft', 'active', 'completed', 'paused'], 'type': 'string', 'description': 'New status'}, 'category': {'enum': ['flow', 'funnel', 'flourish', 'freedom'], 'type': 'string', 'description': 'New category'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'assigned_to': {'type': 'string', 'description': 'User ID or "me"/"current_user" to assign to'}, 'description': {'type': 'string', 'description': 'New description'}, 'playbook_id': {'type': 'string', 'description': 'UUID of the Playbook (use this or playbook_title).'}, 'linked_kr_id': {'type': 'string', 'description': 'Key-result id the Playbook most advances (validated against the company OKRs; takes precedence over objective_id, and its parent objective is derived). Unresolvable → binding cleared to null. Omit to leave the existing binding untouched.'}, 'objective_id': {'type': 'string', 'description': 'OKR objective UUID to re-bind this Playbook to (validated against this company); its most off-track key result is chosen. Unresolvable → binding cleared to null. Omit to leave the existing binding untouched.'}, 'playbook_title': {'type': 'string', 'description': 'Title (or fragment) of the Playbook (use this or playbook_id).'}}}
Eingabeschema
{'type': 'object', 'required': ['account_name', 'updates', 'companyId'], 'properties': {'mode': {'enum': ['set', 'add'], 'type': 'string', 'description': 'How to apply the value. "set" = replace existing value (default) — pair with force=true to skip the overwrite confirmation. "add" = add on top of the existing value — use when the user says add/include/put in/layer on top.'}, 'force': {'type': 'boolean', 'description': 'When mode="set", skip the overwrite confirmation for non-zero values. Use only when user explicitly wants to replace existing values.'}, 'updates': {'type': 'array', 'items': {'type': 'object', 'properties': {'month': {'type': 'string', 'description': '3-letter month key (jan, feb, mar, etc.)'}, 'value': {'type': 'number', 'description': 'Dollar value (positive number — expenses are stored as positive in the CASH OUT section).'}}}, 'description': 'Array of month+value pairs — supports multiple months in one call, e.g. [{ month: "apr", value: 15000 }, { month: "may", value: 16000 }].'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'fiscal_year': {'type': 'number', 'description': 'Fiscal year to update (default: current year)'}, 'account_name': {'type': 'string', 'description': 'Account name to update. Matches an existing line, or creates it on first write (CASH OUT unless the name is clearly revenue).'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'domains': {'type': 'object', 'description': 'Topic → novice|fluent|expert (merged).'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'member_id': {'type': 'string', 'description': 'Optional target UUID. Defaults to you. Updating another member requires admin in this company.'}, 'default_level': {'enum': ['novice', 'fluent', 'expert'], 'type': 'string'}, 'glossary_seen': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Glossary terms already introduced to this person (full replace, not merged).'}, 'seed_if_empty': {'type': 'boolean', 'description': 'If true, agents may write only when the target has no profile yet (self only). Human doors may always write.'}}}
Eingabeschema
{'type': 'object', 'required': ['spreadsheet_id', 'range', 'values', 'companyId'], 'properties': {'range': {'type': 'string', 'description': 'A1 notation range to update (e.g., "Sheet1!A1:B5")'}, 'values': {'type': 'array', 'items': {'type': 'array', 'items': {'type': 'string'}}, 'description': 'New values for the range'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'spreadsheet_id': {'type': 'string', 'description': 'Spreadsheet ID'}}}
Eingabeschema
{'type': 'object', 'required': ['page_id', 'companyId'], 'properties': {'title': {'type': 'string'}, 'page_id': {'type': 'string', 'description': 'Page gid (gid://shopify/Page/...)'}, 'body_html': {'type': 'string'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['product_id', 'companyId'], 'properties': {'tags': {'type': 'array', 'items': {'type': 'string'}}, 'title': {'type': 'string'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'product_id': {'type': 'string', 'description': 'Product gid (gid://shopify/Product/...)'}, 'description_html': {'type': 'string'}}}
Eingabeschema
{'type': 'object', 'required': ['transaction_id', 'companyId'], 'properties': {'account': {'type': 'string', 'description': 'FreedomOS cash-flow category name to set (must match a sheet account when the company has a cash sheet)'}, 'category': {'type': 'string', 'description': 'Alias of account'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'transaction_id': {'type': 'string', 'description': 'Transaction ID (from get_transactions or search_transactions)'}}}
Eingabeschema
{'type': 'object', 'required': ['transaction_id', 'note', 'companyId'], 'properties': {'note': {'type': 'string', 'description': 'Note text to set on the transaction (empty string to clear)'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'transaction_id': {'type': 'string', 'description': 'Transaction ID (from get_transactions output)'}}}
Eingabeschema
{'type': 'object', 'required': ['updates', 'companyId'], 'properties': {'updates': {'type': 'object', 'description': "Only the fields to update; others are preserved. Supported keys: subject {kind:'person'|'brand', name}, style_descriptor (string), dos (string array — REPLACES the list; read first, merge, then send to add), donts (string array — REPLACES the list), exemplars (array of {excerpt, source?, why?}), reading_level ({target_grade:number, note?:string}). faith_substance is a fixed invariant ('human_authored_only') and cannot be changed here."}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['campaign_id', 'daily_budget', 'companyId'], 'properties': {'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'campaign_id': {'type': 'string', 'description': 'Campaign id from list_x_ad_campaigns or create_x_ad_draft'}, 'daily_budget': {'type': 'number', 'description': 'New daily budget, account currency major units'}, 'ad_account_id': {'type': 'string', 'description': 'Optional — when several ads accounts exist'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'image': {'type': 'string', 'description': 'The logo file: FO media / chat-upload artifact UUID, or base64 / data URL. Not an https URL.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'artifact_id': {'type': 'string', 'description': 'Optional alias: agent_artifacts UUID from FO Media or a chat image upload.'}, 'image_base64': {'type': 'string', 'description': 'Optional alias: raw base64 or data:image/...;base64,... of the logo.'}}}
Eingabeschema
{'type': 'object', 'required': ['session_id'], 'properties': {'cwd': {'type': 'string', 'description': 'Optional working directory'}, 'goal': {'type': 'string', 'description': 'One-line goal'}, 'host': {'enum': ['claude-code', 'claude-desktop', 'grok', 'grok-bot', 'manual', 'slack', 'github', 'freedomos', 'other'], 'type': 'string', 'description': 'claude-code | claude-desktop | grok | manual | slack | github | freedomos | other'}, 'turns': {'type': 'array', 'items': {'type': 'object', 'properties': {'role': {'type': 'string', 'description': 'you | bot (user/assistant accepted)'}, 'text': {'type': 'string'}}}, 'description': 'Grok Bot only: append last user/bot lines (role you|bot, text ≤280). Server keeps the last 12. Omit to preserve. Never dump a full transcript.'}, 'status': {'enum': ['running', 'blocked_on_operator', 'done', 'parked', 'unknown'], 'type': 'string', 'description': 'running | blocked_on_operator | done | parked | unknown'}, 'project': {'type': 'string', 'description': 'Optional project name'}, 'artifact': {'type': 'string', 'description': 'Ship-seat stamp when known (e.g. pr:1752). Local and FO spawns use the same field — origin does not matter. If omitted and goal names a PR, server may infer pr:N.'}, 'priority': {'type': 'number', 'description': 'Optional priority (higher = sooner)'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'last_beat': {'type': 'string', 'description': 'Resume line — where this session left off, one sentence (≤240 chars). Voice CoS speaks it as "here\'s where we left off" so the operator never re-reads a transcript. Real content only, never bookkeeping text.'}, 'company_id': {'type': 'string', 'description': 'Optional company id'}, 'session_id': {'type': 'string', 'description': 'Stable session id (same string used as target_session_id for directives).'}, 'ask_for_operator': {'type': 'string', 'description': 'If blocked: one sentence the operator must answer'}}}
Eingabeschema
{'type': 'object', 'required': ['theme_id', 'filename', 'content', 'companyId'], 'properties': {'content': {'type': 'string', 'description': 'The full file content (≤200000 chars)'}, 'filename': {'type': 'string', 'description': "Theme path, e.g. 'sections/hero.liquid' or 'assets/custom.css'"}, 'theme_id': {'type': 'string', 'description': 'Theme gid (gid://shopify/OnlineStoreTheme/...) — must NOT be the live theme'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}}}
Eingabeschema
{'type': 'object', 'required': ['companyId'], 'properties': {'folder': {'type': 'string', 'description': 'Optional Media gallery folder to file this into (freeform name, e.g. "q3-campaign" or "brand-assets"). Shown as a folder chip on the /media page. Reuse an existing folder name when the work belongs to it.'}, 'companyId': {'type': 'string', 'description': 'FreedomOS company id to act within (you must be a member). Required for company-scoped tools.'}, 'image_url': {'type': 'string', 'description': 'URL of the raster image to vectorize. Use a signed URL from the MEDIA IN THIS CONVERSATION block or any accessible image URL.'}, 'artifact_id': {'type': 'string', 'description': 'ID of an existing artifact from the MEDIA IN THIS CONVERSATION block. The system will resolve a fresh signed URL automatically.'}, 'folder_name': {'type': 'string', 'description': 'Subfolder name for Drive save. Only used when save_to_drive is true.'}, 'save_to_drive': {'type': 'boolean', 'description': 'If true, also save the vectorized SVG to Google Drive. Defaults to false.'}, 'isolate_subject': {'type': 'boolean', 'description': 'Smart Workflow: If true, the tool will automatically remove the background to isolate the subject BEFORE vectorizing. Defaults to true. Set to false ONLY if you want to vectorize the entire scene including the background.'}}}
Letzte Tool-Änderungen
Ähnliche MCP-Server
momence
Manages studio members, classes, appointments, bookings, waitlists, memberships, check-ins, leads, and customer tags in Momence.
EVERJUST
Manages CRM, sales, projects, email, documents, calendars, and invoicing in an EVERJUST workspace.
Meta Council
Provides governed workflows for consulting, outreach, sales deals, invoices, marketing campaigns, content approvals, accounting a…
Stable Baseline
Manages company documents, knowledge graphs, whiteboards, projects, plans, tasks, teams, and improvement workflows.
GestãoClick
Connects to the GestãoClick ERP to manage customers, suppliers, products, sales, service orders, budgets, and financial records.
Odichat
Manages WhatsApp, Instagram, and Facebook inboxes with contacts, conversations, agents, automation rules, labels, canned response…
YouSpot
Connects personal contacts, companies, notes, files, CRM records, email, Slack, LinkedIn, and calendars, with search, relationshi…
Coordinalo — Service Business Operations
Manages appointment-based service businesses, including clients, providers, services, availability, public booking agendas, recur…