{"serverId":"mcp-registry/io.github.bdentech/chieflab","tools":[{"name":"chieflab_approve_action","fixed":{"name":"chieflab_approve_action","description":"[chieflab_* alias of chiefmo_approve_action] Approve one ChiefMO publish/send action so its executor can fire. USE WHEN the user — in IDE chat — said 'approve <channel>' (e.g. 'approve linkedin', 'approve hn'), 'approve all', 'ship it', 'go ahead', or otherwise greenlit a specific draft you rendered. Match the user's words to the channel, look up agentGuide.renderInChat[channel].actionId from the launch response, and call this tool with that actionId. This is the IDE-native approval path — no ne","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"Legacy alias for actionId."},"subject":{"type":"string","description":"P74. For autoExecute on email: subject line override."},"actionId":{"type":"string","description":"The action id from publishActions[].id in a launch_product response. Preferred."},"mediaUrls":{"type":"array","items":{"type":"string"},"description":"P74. Optional media URLs for the social post — auto-uploaded to Zernio's CDN before publishing."},"platforms":{"type":"array","items":{"type":"object"},"description":"P74. For autoExecute on social channels: Zernio platform descriptors, e.g. [{platform: 'linkedin', accountId: '<id>'}]. Required when autoExecute=true and mode=oauth_connector."},"recipients":{"type":"array","items":{"type":"string"},"description":"P74. For autoExecute on email: recipient email addresses."},"autoExecute":{"type":"boolean","description":"P74. When true AND the action's executionMatrix.mode is oauth_connector / api_key_connector / native_api AND the connector is ready, the approve handler immediately invokes chieflab_execute_approved_action with the inputs you supply. The response includes the executor result + the unified proof ledger. Defaults to false (preserves the prior contract — agent calls execute_approved_action explicitly)."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":524,"tokensAfter":524},{"name":"chieflab_check_measurement_due","fixed":{"name":"chieflab_check_measurement_due","description":"P71 — measurement queue inspector. USE WHEN the agent wants to know which executed actions are ready for their 24h readback (regardless of how they were executed — native connector OR manual paste). Lists actions where metadata.proof.measurementDueAt <= now AND metadata.proof.measuredAt is unset. Returns: [{actionId, runId, channel, executedAt, measurementDueAt, artifactUrl, executionStatus, recommendedNextTool}]. Pairs with chiefmo_post_launch_review which the cron also calls automatically; thi","inputSchema":{"type":"object","properties":{"runId":{"type":"string","description":"Optional. Restrict to one run."},"workspaceId":{"type":"string","description":"Optional workspace id."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":209,"tokensAfter":209},{"name":"chieflab_connector_status","fixed":{"name":"chieflab_connector_status","description":"USE WHEN the user just completed a connector OAuth flow and you want to confirm it succeeded — 'did my connection work?', 'is my Zernio/HubSpot/Stripe connected?'. Returns status: pending | connected | failed for the given connectionId.","inputSchema":{"type":"object","required":["connectionId"],"properties":{"workspaceId":{"type":"string"},"connectionId":{"type":"string"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":120,"tokensAfter":120},{"name":"chieflab_create_next_move_action","fixed":{"name":"chieflab_create_next_move_action","description":"P75 — turn a Next Move suggestion into an approval-gated draft action. USE WHEN you've called chieflab_suggest_next_move and the suggestion's kind is not 'wait' or 'noop'. Creates an actionStore entry with status='awaiting_approval', the suggested draft body inline, and an executionMatrix that points at the right next-execution path. The reviewer sees the new card in the Launch Room / IDE chat like any other approval card — same approve / revise / reject flow. Closes the loop: launch → measure →","inputSchema":{"type":"object","required":["runId","channel","metrics"],"properties":{"runId":{"type":"string","description":"Required. The originating run id (the next-move action is tagged with this so the brain can compound launch → measure → next-move chains)."},"channel":{"type":"string","description":"Channel the measurement was for (used to ground the suggestion)."},"metrics":{"type":"object","description":"Same metrics object passed to chieflab_suggest_next_move."},"workspaceId":{"type":"string","description":"Optional workspace id."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":309,"tokensAfter":309},{"name":"chieflab_create_work_request","fixed":{"name":"chieflab_create_work_request","description":"USE WHEN your operator hits a gap it can't fulfill itself and wants to route the work to another operator — 'I need a demo video for this launch', 'request design help for the hero image'. Creates an open work request that other operators can offer against. Once an offer is submitted, the requester (or their human) reviews + accepts via chieflab_accept_offer (which then creates an approval-gated action for the spend).","inputSchema":{"type":"object","required":["capabilityNeeded"],"properties":{"brief":{"type":"object","description":"Structured brief — { goal, references, constraints, asset_links, etc. }. The more specific, the better the offers."},"budget":{"type":"object","description":"Optional. { kind: 'max_usd', amount: 50 } | { kind: 'quote' } | { kind: 'free' }."},"deadline":{"type":"string","description":"Optional ISO 8601 timestamp."},"sourceRunId":{"type":"string","description":"Optional. The parent runId this work attaches to (e.g. the launch that needs the asset)."},"workspaceId":{"type":"string"},"capabilityNeeded":{"type":"string","description":"Capability slug to match (e.g. 'demo_video'). Should match a published capability — call chieflab_search_capabilities first if unsure."},"sourceOperatorId":{"type":"string","description":"Optional. The operatorId that's requesting (e.g. 'chieflab-launch')."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":387,"tokensAfter":387},{"name":"chieflab_execute_approved_action","fixed":{"name":"chieflab_execute_approved_action","description":"P71 — closed-loop executor wrapper. USE WHEN chiefmo_approve_action just succeeded on an action whose executionMatrix.mode is oauth_connector or api_key_connector AND connectorReady is true. Routes to the right native executor (chiefmo_publish_approved_post for social / chiefmo_send_approved_email for email), runs the execute-time sanity gate (re-classifies the action's stored body to catch DEGRADED MODE / clarification / refusal text that slipped through draft-time classification), captures the","inputSchema":{"type":"object","required":["actionId"],"properties":{"subject":{"type":"string","description":"For email sends: subject line override. Defaults to the action's stored subject when present."},"actionId":{"type":"string","description":"The publishAction.id whose executionMatrix you want to execute. The action must be in status='approved' (call chiefmo_approve_action first)."},"mediaUrls":{"type":"array","items":{"type":"string"},"description":"Optional media URLs (image / video) for social posts. Zernio uploads them to its CDN before posting."},"platforms":{"type":"array","items":{"type":"object"},"description":"For oauth_connector (social): Zernio platform descriptors, e.g. [{platform: 'linkedin', accountId: '<id>'}]. Required for social posts unless the workspace has a default mapping; the tool refuses with reason='platforms_required' otherwise."},"recipients":{"type":"array","items":{"type":"string"},"description":"For api_key_connector (email): recipient email addresses. Required for email sends unless the action carries a stored recipient list."},"workspaceId":{"type":"string","description":"Optional workspace id."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":477,"tokensAfter":477},{"name":"chieflab_get_capability","fixed":{"name":"chieflab_get_capability","description":"USE WHEN you have a specific operatorId + capability and want the full machine-readable profile (inputs, outputs, pricing, approval-required flag, endpoint). Pre-flight check before chieflab_create_work_request.","inputSchema":{"type":"object","required":["operatorId","capability"],"properties":{"capability":{"type":"string"},"operatorId":{"type":"string"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":114,"tokensAfter":114},{"name":"chieflab_get_company_profile","fixed":{"name":"chieflab_get_company_profile","description":"P88 — read the workspace's stored company profile. Returns { profile, source, confidence, updated_at }. Use before launch to confirm what ChiefLab will ground in.","inputSchema":{"type":"object","properties":{"workspaceId":{"type":"string","description":"Optional workspace id."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":94,"tokensAfter":94},{"name":"chieflab_get_publishing_targets","fixed":{"name":"chieflab_get_publishing_targets","description":"P79 — read the workspace's stored publishing target defaults. Returns { channelTargets, store }. Useful before launch so the agent can surface 'You haven't connected an Instagram account yet — set it via chieflab_set_publishing_targets' instead of blocking on first auto-execute.","inputSchema":{"type":"object","properties":{"workspaceId":{"type":"string","description":"Optional workspace id."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":127,"tokensAfter":127},{"name":"chieflab_get_users_after_build","fixed":{"name":"chieflab_get_users_after_build","description":"Outcome-named alias for chiefmo_launch_product. USE WHEN a coding agent just built, shipped, or deployed something and the user asks 'get users', 'find customers', 'make money from this', 'get paying users', 'get eyes on this', 'what now?', or 'how do I launch this?' This is the agent-dependency tool: after build, call this to turn the product into a repo-grounded money/distribution loop with launchPack, signed reviewUrl, approval-gated publish/send actions, 24h measurement, memory, next move, m","inputSchema":{"type":"object","properties":{"goal":{"type":"string","description":"Desired outcome, e.g. 'Get first 100 users', 'find paying customers', 'get design partners', 'make money from this'."},"brand":{"type":"object","description":"Optional inline brand context."},"channels":{"type":"array","items":{"type":"string"},"description":"Optional launch channels. Default is auto-selected from the detected product playbook — service agencies skip Product Hunt; B2B SaaS / devtools / consumer / AI-agent products include it; internal tools default to email + landing only. Pass an explicit subset to override."},"tenantId":{"type":"string","description":"Optional tenant/end-user id for stored brand context and memory."},"outputMode":{"type":"string","description":"context | draft | full | demo. 'demo' is the first-use / YC-demo concise mode — forces 4 punch-list channels (linkedin / x / product_hunt / email), draft rendering, no image gen, scrubbed inline drafts. Defaults to context/draft behavior from chiefmo_launch_product."},"productUrl":{"type":"string","description":"Live product URL. Pass either productUrl or productDescription."},"repoContext":{"type":"object","description":"Strongly recommended. Include whatChanged, recentCommits, changedFiles, routes, readme, targetCustomer, launchGoal."},"responseShape":{"type":"string","description":"summary (default, smallest — promotes launchId / launchRoomUrl / publishActionIds / firstResponseScript; per-channel draft bodies live behind the reviewUrl) | compact (per-channel previews + truncated draft bodies inline) | full (everything inline; debug/export only — large)."},"idempotencyKey":{"type":"string","description":"Optional dedupe key to prevent duplicate launch preparation."},"productDescription":{"type":"string","description":"Short product description if no public URL exists yet."},"includeFullArtifacts":{"type":"boolean","description":"Alias for responseShape:\"full\". Backward-compat with older P29 clients."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":711,"tokensAfter":711},{"name":"chieflab_list_specialists","fixed":{"name":"chieflab_list_specialists","description":"P87 — list the specialist agents ChiefLab can delegate to (design / video / research / outreach / seo / analytics). USE WHEN the user asks 'what can ChiefLab do beyond launch posts?' or before calling chieflab_request_specialist. Returns the kind + label for each so the caller can pick the right one.","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":112,"tokensAfter":112},{"name":"chieflab_persistence_health","fixed":{"name":"chieflab_persistence_health","description":"P91 — verify the persistent stores. Probes proof_ledger / publishing_targets / company_profiles tables (Supabase) OR confirms the in-memory fallback. USE WHEN the user just ran the SQL migrations and wants to confirm the API is now using durable storage; OR before a real founder launch to make sure data won't evaporate on cold start; OR when debugging why a previously-stored target / profile disappeared. Returns per-store: { kind: 'supabase'|'in_memory', durable: bool, tableExists?: bool, sample","inputSchema":{"type":"object","properties":{"workspaceId":{"type":"string"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":177,"tokensAfter":177},{"name":"chieflab_post_launch_review","fixed":{"name":"chieflab_post_launch_review","description":"[chieflab_* alias of chiefmo_post_launch_review] USE WHEN ≥24h has passed since chiefmo_publish_approved_post fired and the user asks 'how did the launch perform?', 'what worked?', 'metrics from my launch'. Closes the loop: pulls 24h+ engagement (likes / comments / views / shares / follower delta) for posts in the launch run + recommends next iteration (rewrite, refresh creative, double down, pause). Returns per-account analytics + top posts + best-time-to-post + a structured next-move recommend","inputSchema":{"type":"object","required":["runId"],"properties":{"runId":{"type":"string","description":"The launchId returned by chiefmo_launch_product. Used to scope analytics to posts from that launch."},"accountIds":{"type":"array","items":{"type":"string"},"description":"Optional. Specific Zernio accountIds to pull analytics for. Defaults to all accounts that posted in this launch."},"outputMode":{"type":"string","description":"\"context\" (default): returns metrics + a brief your LLM renders into the customer-facing recommendation. \"full\": ChiefLab generates the recommendation server-side."},"lookbackDays":{"type":"number","description":"How many days of history to consider (default 7, max 90)."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":354,"tokensAfter":354},{"name":"chieflab_prepare_next_move","fixed":{"name":"chieflab_prepare_next_move","description":"[chieflab_* alias of chiefmo_prepare_next_move] USE WHEN the user has just published a launch (or ≥24h post-launch) and asks 'what's next?', 'follow-up post?', 'iterate on this', 'plan day 2'. P13 — turns one launch into a 7-day launch mode: drafts a queue of follow-up actions (day 2 reply post, day 3 case study, day 5 metrics share, day 7 retrospective) grounded in the prior launch's runId, the per-tenant brand voice + repo facts + channel performance from the P9 company brain, and the prior re","inputSchema":{"type":"object","required":["runId"],"properties":{"runId":{"type":"string","description":"The prior launchId returned by chiefmo_launch_product. The prepared queue grounds in this run's measurement + memory."},"horizon":{"type":"string","description":"\"day_2\" | \"day_3\" | \"week\" — how far to plan. Default: \"week\" (7-day mode)."},"channels":{"type":"array","items":{"type":"string"},"description":"Optional. Restrict next-moves to these channels. Defaults to the channels of the prior launch."},"workspaceId":{"type":"string","description":"Optional workspace id."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":319,"tokensAfter":319},{"name":"chieflab_publish_approved_post","fixed":{"name":"chieflab_publish_approved_post","description":"[chieflab_* alias of chiefmo_publish_approved_post] Publish an approved social post (LinkedIn / X / Threads / Instagram / Facebook / Bluesky / TikTok) through the social publishing rail (current adapter: zernio). USE WHEN the user has approved a publishAction from chiefmo_launch_product on the reviewUrl and you need to fire the post. Strict approval gate: returns { reason: 'requires_approval', reviewUrl } if the action isn't approved yet. Once executed, returns the live platform post URL. Money/","inputSchema":{"type":"object","required":["actionId","content","platforms"],"properties":{"content":{"type":"string","description":"The final rendered post text (your LLM rendered this from the brief in the launch pack)."},"actionId":{"type":"string","description":"The publishAction.id from chiefmo_launch_product. Required."},"mediaUrls":{"type":"array","items":{"type":"string"},"description":"Optional. Image/video URLs (or base64 data URLs from launch graphics)."},"platforms":{"type":"array","items":{"type":"object","properties":{"platform":{"type":"string"},"accountId":{"type":"string"}}},"description":"Which platforms + Zernio accountIds to publish to. Get accountIds from chieflab_list_publish_accounts."},"scheduleAt":{"type":"string","description":"Optional ISO 8601. Schedule for later instead of immediate."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":385,"tokensAfter":385},{"name":"chieflab_query_proof_ledger","fixed":{"name":"chieflab_query_proof_ledger","description":"P80 — query the persistent proof ledger. USE WHEN the user (or a dashboard) asks 'what has ChiefLab actually shipped for this workspace?' or 'show me the launch history.' Returns the proof rows for executed publishes / sends / manual-posts with the artifact URLs, channels, execution modes, and measurement state. Persistent across cold starts when deps.proofLedgerStore is wired to Supabase; falls back to in-memory (warm function lifetime) otherwise.","inputSchema":{"type":"object","properties":{"limit":{"type":"number","description":"Page size (1-500, default 50)."},"runId":{"type":"string","description":"Optional. Filter to one run's proofs."},"workspaceId":{"type":"string","description":"Optional workspace id (defaults to auth workspace)."},"sinceTimestamp":{"type":"string","description":"Optional ISO timestamp; only return proofs published at or after."},"measurementDueOnly":{"type":"boolean","description":"When true, returns only rows with measurement_due_at <= now AND measured_at IS NULL. Use this to find what's ready for 24h readback."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":310,"tokensAfter":310},{"name":"chieflab_record_manual_publish","fixed":{"name":"chieflab_record_manual_publish","description":"USE WHEN the user has manually posted to a channel returned by chieflab_use_manual_fallback (Product Hunt / HN / Reddit / Discord / etc.) and wants to feed the live URL back to ChiefLab so the closed loop continues. Records the URL on the original publishAction (status flips from 'approved' to 'executed' with metadata.executedManually=true + metadata.publishedUrl), persists a proof_asset to the P9 company brain, and queues 24-hour metrics readback via chiefmo_post_launch_review. Without this too","inputSchema":{"type":"object","required":["actionId","publishedUrl"],"properties":{"notes":{"type":"string","description":"Optional. Any context on how the post performed in the first hour (early upvotes, top comment, reactions). Persists into the P9 brain."},"actionId":{"type":"string","description":"The publishAction.id that the user manually published (from chieflab_use_manual_fallback). Required."},"publishedAt":{"type":"string","description":"Optional ISO 8601 timestamp. Defaults to now."},"workspaceId":{"type":"string","description":"Optional workspace id."},"publishedUrl":{"type":"string","description":"The live URL of the manual post (e.g. producthunt.com/posts/<slug>, news.ycombinator.com/item?id=<id>, reddit.com/r/SaaS/comments/<id>)."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":367,"tokensAfter":367},{"name":"chieflab_search_capabilities","fixed":{"name":"chieflab_search_capabilities","description":"USE WHEN your operator needs a capability outside its own scope and wants to find another operator that can fulfill it — 'find me a demo-video capability', 'who can do SEO audits', 'search for design help'. Returns active capability records ranked by recency. Pair with chieflab_create_work_request to actually request bounded work from the chosen operator. The discovery embryo for an agent-native marketplace.","inputSchema":{"type":"object","properties":{"tags":{"type":"array","items":{"type":"string"},"description":"Tag overlap filter (e.g. ['video', 'demo'])."},"limit":{"type":"number","description":"Max results. Default 25."},"capability":{"type":"string","description":"Capability slug to match (exact match — e.g. 'demo_video')."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":222,"tokensAfter":222},{"name":"chieflab_send_approved_email","fixed":{"name":"chieflab_send_approved_email","description":"[chieflab_* alias of chiefmo_send_approved_email] Send an approved launch email through the email sending rail (current adapter: resend). USE WHEN the user has approved an email publishAction from chiefmo_launch_product and you need to fire the send. Strict approval gate (same shape as chiefmo_publish_approved_post). `from` MUST be on a domain verified at the adapter (resend.com) — check chieflab_list_email_senders first. Single recipient or short list (≤50). Money/external-system action — once ","inputSchema":{"type":"object","required":["from","to","subject"],"properties":{"to":{"description":"Recipient(s). Single email or array (≤50).","type":"string"},"from":{"type":"string","description":"Sender. Must be a verified Resend domain address (e.g. 'Brand <hi@yourdomain.com>')."},"html":{"type":"string","description":"HTML body (preferred for inboxing)."},"text":{"type":"string","description":"Plain-text fallback (recommended)."},"replyTo":{"description":"Optional reply-to address(es).","type":"string"},"subject":{"type":"string"},"actionId":{"type":"string","description":"The publishAction.id from chiefmo_launch_product. Required for the approval gate to fire."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"schema","detail":"Added \"type\":\"string\" to untyped parameters: to, replyTo. Change to number/boolean/array where that's what you accept.","verify":true},{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":335,"tokensAfter":344},{"name":"chieflab_set_company_profile","fixed":{"name":"chieflab_set_company_profile","description":"P88 — set the workspace's persistent company profile. ChiefLab's pre-P88 brief pipeline was repo-first; without a repo, launches landed thin. P88 lets the founder (or an agent) store the company / product facts ONCE and every subsequent launch grounds in them, even URL-only / paste-description launches. Pass partial maps to update specific fields; pass null for a field to remove it. Profile fields the brief consumes: companyName, productName, offer, audience, market, positioning, services[], pro","inputSchema":{"type":"object","required":["profile"],"properties":{"source":{"type":"string","description":"manual | extracted | imported | autodetected. Default 'manual'."},"profile":{"type":"object","description":"Partial profile object — top-level keys merge, nested objects shallow-merge, null values remove."},"confidence":{"type":"string","description":"high | medium | low. Default 'medium'."},"workspaceId":{"type":"string","description":"Optional workspace id."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":287,"tokensAfter":287},{"name":"chieflab_set_provider_key","fixed":{"name":"chieflab_set_provider_key","description":"Store a provider API key for THIS workspace. Once stored, ChiefLab uses your key (BYOK — you pay the provider directly, no markup). Without it, ChiefLab uses its own key and bills through with a margin. Providers: gemini (image gen), resend (email), zernio (social publish), anthropic (LLM, future), openai (LLM, future). Stored encrypted at rest. Use chieflab_revoke_provider_key to remove. The key never leaves this workspace.","inputSchema":{"type":"object","required":["provider","apiKey"],"properties":{"apiKey":{"type":"string","description":"The provider API key (e.g. for Gemini: a Google API key starting with AIza...)."},"provider":{"type":"string","description":"gemini | resend | zernio | anthropic | openai"},"workspaceId":{"type":"string","description":"Optional workspace id (defaults to your bearer's workspace)."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":246,"tokensAfter":246},{"name":"chieflab_set_publishing_targets","fixed":{"name":"chieflab_set_publishing_targets","description":"P79 — set per-workspace publishing target defaults so chiefmo_approve_action({ autoExecute: true }) doesn't need the agent to pass platform / recipient ids on every call. One-time setup per workspace. channelTargets is a map { linkedin: { accountId }, x: { accountId }, email: { fromEmail, recipientListId } }. Pass partial maps to update specific channels; pass `null` for a channel value to remove it. Persisted via deps.publishingTargetsStore when wired, otherwise in-process Map (Vercel function ","inputSchema":{"type":"object","required":["channelTargets"],"properties":{"workspaceId":{"type":"string","description":"Optional workspace id (defaults to the auth workspace)."},"channelTargets":{"type":"object","description":"Map of channel → target. Examples: linkedin/x → { accountId: '<zernio_account_id>' }; email → { fromEmail: 'founder@product.com', recipientListId: '<list_id>' }. Pass null as a channel value to remove it."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":277,"tokensAfter":277},{"name":"chieflab_skip_next_move","fixed":{"name":"chieflab_skip_next_move","description":"P142 — founder rejects a next-move recommendation without doing it. Captures a reason so the brain learns which kinds of moves don't fit this workspace (e.g. 'we don't cross-post to Reddit on principle' / 'we tried DMs already'). Flips action to rejected with metadata.skipReason. The next-move generator reads recent skip reasons before suggesting moves of the same kind on this workspace.","inputSchema":{"type":"object","required":["actionId"],"properties":{"reason":{"type":"string","description":"Why the founder is skipping this. Used by the brain to avoid suggesting similar moves."},"actionId":{"type":"string","description":"The next-move action id."},"workspaceId":{"type":"string","description":"Optional workspace id."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":218,"tokensAfter":218},{"name":"chieflab_status","fixed":{"name":"chieflab_status","description":"SESSION-RECOVERY · FIRST CALL when a session starts and the user mentions launch / users / growth / customers / metrics / revenue / marketing / what next / shipping. Returns a command-center bootCard with `headline`, `priority`, `cards[]` (each carries kind + label + literal user command + runHandle), and `next` (the one-line prompt). Aggregates: pending approvals + ripe measurements + new engagement + queued prospects + recent launches + manual-publish-pending actions. ChiefLab is stateful and ","inputSchema":{"type":"object","properties":{"projectName":{"type":"string","description":"Optional current project/repo name."},"workspaceId":{"type":"string","description":"Optional workspace id."},"currentRepoContext":{"type":"object","description":"Optional current repo/project context. Helps agents compare recovered loops against the project the user is asking about."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":257,"tokensAfter":257},{"name":"chieflab_suggest_next_move","fixed":{"name":"chieflab_suggest_next_move","description":"P75 — Next Move Engine. USE WHEN measurement just came in (chiefmo_post_launch_review fired automatically at 24h, OR the user manually called it) and you want to know what the operator should do next. Reads metrics + the original launch's brief and emits a deterministic suggestion: {kind: 'follow_up_email' | 'founder_dm' | 'thread_reframe' | 'landing_iteration' | 'lessons_learned_post' | 'seo_title_test' | 'wait' | 'noop', priority, reasoning, draftBrief: {channel, headline, body, cta?, recipien","inputSchema":{"type":"object","required":["channel","metrics"],"properties":{"runId":{"type":"string","description":"Optional. Source run whose brief grounds the suggestion (so the draft references the actual product / market / audience instead of templates)."},"channel":{"type":"string","description":"Channel the measurement is for (linkedin, x, email, landing_hero, product_hunt, hacker_news)."},"metrics":{"type":"object","description":"Measurement metrics — engagements, clicks, opens, replies, traffic, conversions, upvotes, rank, etc. Synonyms (engagement / openRate / clickRate / visits) are accepted."},"workspaceId":{"type":"string","description":"Optional workspace id."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":345,"tokensAfter":345}],"toolsChanged":25,"tokensSaved":0,"todo":[{"tool":"chieflab_brain_summary","params":["workspaceId"]},{"tool":"chieflab_connector_status","params":["workspaceId","connectionId"]},{"tool":"chieflab_create_work_request","params":["workspaceId"]},{"tool":"chieflab_get_capability","params":["capability","operatorId"]},{"tool":"chieflab_inbox","params":["workspaceId"]},{"tool":"chieflab_launch_product","params":["goal","brand","channels","tenantId","productUrl","webhookUrl","repoContext","workspaceId","imagesNeeded","idempotencyKey"]},{"tool":"chieflab_persistence_health","params":["workspaceId"]},{"tool":"chieflab_redraft","params":["workspaceId"]},{"tool":"chieflab_retry_blocked_action","params":["workspaceId"]},{"tool":"chieflab_send_approved_email","params":["subject"]}],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API."}