{"ok":true,"site":{"host":"counterpart-eight.vercel.app","url":"https://counterpart-eight.vercel.app/","type":"live","desc":"Counterpart","tools":[{"name":"get_model_state","kind":"answer","impl":"imperative","description":"Returns the current financial model: assumptions, computed monthly projections, headline metrics, and any pending proposals. Call this first, before anything else.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"propose_edit","kind":"act","impl":"imperative","description":"Proposes a change to one assumption. The change is NOT applied — it appears on the page as a pending proposal that Amogh must accept or reject, and the numbers do not move until he accepts. Call get_model_state first to see valid assumption ids and current values. If Amogh's request is ambiguous about which assumption, what unit, or what time period he means (for example \"15% churn\" could be monthly or annual), you MUST call ask_human to resolve it before calling this tool — do not guess and do not state your assumption instead of asking.","inputSchema":{"type":"object","properties":{"targetId":{"type":"string","enum":["startingMRR","newCustomersPerMonth","arpu","monthlyChurnPct","cac","grossMarginPct","monthlyOpex","months"],"description":"Which assumption to change."},"newValue":{"type":"number","description":"The proposed new value."},"rationale":{"type":"string","description":"One short sentence on why this change is worth making."},"agentName":{"type":"string","description":"Which agent is proposing this, e.g. \"Growth\" or \"Risk\"."}},"required":["targetId","newValue","rationale","agentName"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"rebut_proposal","kind":"act","impl":"imperative","description":"Adds a counterargument beneath an existing proposal without accepting, rejecting, or changing it. Call get_model_state first to find the pending proposal id and read the proposal and any existing rebuttals.","inputSchema":{"type":"object","properties":{"proposalId":{"type":"string","description":"The id of the proposal to rebut, from get_model_state."},"agentName":{"type":"string","description":"Which agent is rebutting, e.g. \"Growth\" or \"Risk\"."},"rationale":{"type":"string","description":"One short sentence stating the counterargument."}},"required":["proposalId","agentName","rationale"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"ask_human","kind":"act","impl":"imperative","description":"Asks Amogh a question and waits for his answer, returning the exact option he chose. A card appears on the page with the question and one button per option; this call does not return until he clicks one. Use this whenever his instruction is ambiguous rather than picking an interpretation yourself — units (monthly vs annual, percent vs absolute), which assumption he means, or which of several changes he wants. Asking is cheap and expected; guessing wrong wastes his time.","inputSchema":{"type":"object","properties":{"question":{"type":"string","description":"One short, specific question. Amogh reads this on the page."},"options":{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":6,"description":"Between 2 and 6 distinct answers, each short enough to fit on a button."}},"required":["question","options"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"run_scenario","kind":"act","impl":"imperative","description":"Computes headline metrics (arr, ltv, ltvOverCac, runwayMonths) with temporary overrides applied on top of the current assumptions. Nothing on the page changes — this is read-only, for comparing options before calling propose_edit. Call get_model_state first to see valid assumption ids.","inputSchema":{"type":"object","properties":{"overrides":{"type":"object","description":"Assumption id -> temporary value, applied only for this calculation.","additionalProperties":{"type":"number"}}},"required":["overrides"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"annotate","kind":"act","impl":"imperative","description":"Pins a short note next to one assumption row on the page, visible to Amogh. A later call for the same targetId replaces the note rather than adding another. Call get_model_state first to see valid assumption ids.","inputSchema":{"type":"object","properties":{"targetId":{"type":"string","enum":["startingMRR","newCustomersPerMonth","arpu","monthlyChurnPct","cac","grossMarginPct","monthlyOpex","months"],"description":"Which assumption row to pin the note next to."},"text":{"type":"string","description":"A short note, one sentence."}},"required":["targetId","text"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"add_chart","kind":"act","impl":"imperative","description":"Adds a new line chart below the existing charts, plotting one or more monthly series. Does not replace or change the existing MRR chart. Call get_model_state first if unsure which series are available.","inputSchema":{"type":"object","properties":{"seriesIds":{"type":"array","items":{"type":"string","enum":["customers","mrr","arr","grossProfit","burn","cumulativeCash"]},"minItems":1,"description":"Which monthly series to plot together on this chart."},"title":{"type":"string","description":"Title shown above the chart."}},"required":["seriesIds","title"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"highlight","kind":"act","impl":"imperative","description":"Flashes one or more assumption rows on the page for 2 seconds, to draw Amogh's attention to them — for example the row most responsible for a risky scenario. Call get_model_state first to see valid assumption ids.","inputSchema":{"type":"object","properties":{"targetIds":{"type":"array","items":{"type":"string","enum":["startingMRR","newCustomersPerMonth","arpu","monthlyChurnPct","cac","grossMarginPct","monthlyOpex","months"]},"minItems":1,"description":"Which assumption rows to flash."}},"required":["targetIds"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"list_scenarios","kind":"answer","impl":"imperative","description":"Lists the saved scenario library (Current Plan and any built-in or human-saved scenarios) with their runway, ARR, LTV/CAC, and burn, and which one is currently active. Read-only — activating a scenario is a human action on the Scenarios tab. Use this to reference a scenario by name before calling run_scenario or propose_edit.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"generate_board_brief","kind":"act","impl":"imperative","description":"Generates a deterministic, board-ready Markdown update (financial snapshot, key risks, recommended actions, pending/approved decisions, outlook) for a scenario. Read-only — it never changes the live model, matching run_scenario's exploration contract. Defaults to the currently active scenario; call list_scenarios first to find a specific scenarioId.","inputSchema":{"type":"object","properties":{"scenarioId":{"type":"string","description":"Which scenario to report on. Defaults to the currently active scenario."}},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_decision_log","kind":"answer","impl":"imperative","description":"Returns the human-agent decision timeline (proposals, rebuttals, approvals, rejections, scenario activity, board briefs), most-recent-first and capped at the last 25 events. Read-only. Call this before proposing a change to check whether something similar was already decided.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"}],"category":"Finance & Crypto","favicon":"/favicons/counterpart-eight.vercel.app.svg","apiSurface":"spec","toolCount":11}}