gradeNot graded
get_model_stateAnswer
Returns the current financial model: assumptions, computed monthly projections, headline metrics, and any pending proposals. Call this first, before anything else.
View tool JSON
{
"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
}
}propose_editAction
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.
View tool JSON
{
"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
}
}rebut_proposalAction
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.
View tool JSON
{
"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
}
}ask_humanAction
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.
View tool JSON
{
"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
}
}run_scenarioAction
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.
View tool JSON
{
"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
}
}annotateAction
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.
View tool JSON
{
"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
}
}add_chartAction
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.
View tool JSON
{
"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
}
}highlightAction
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.
View tool JSON
{
"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
}
}list_scenariosAnswer
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.
View tool JSON
{
"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
}
}generate_board_briefAction
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.
View tool JSON
{
"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
}
}get_decision_logAnswer
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.
View tool JSON
{
"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
}
}