{"$schema":"https://leadershipunderuncertainty.org/schemas/luu-tools.v1.json","version":"2026-05-04","endpoint":"https://leadershipunderuncertainty.org/api/mcp","documentation":"https://leadershipunderuncertainty.org/docs","auth":{"type":"bearer","header":"Authorization","signupUrl":"https://leadershipunderuncertainty.org/api/mcp/generate-key","description":"POST email + description to signupUrl to receive a free API key. Use as `Authorization: Bearer <key>`."},"pricing":{"model":"credit-based","creditPerUsd":100,"freeTier":{"daily":25,"monthly":500,"tools":["luu_brief","luu_signals","luu_contextualize","luu_forecast","luu_fact_check","luu_note_review","luu_daily_sections","luu_views"]},"paymentMethods":["subscription","credits","x402_usdc","lightning"],"upgradeUrl":"https://leadershipunderuncertainty.org/pricing"},"tools":[{"name":"get_strategic_landscape","description":"Get a structured map of the user's strategic landscape including views, actors, assumptions, and open questions. Returns the full strategic context that NorthBrief maintains for the user — the beliefs, key players, and uncertainties that shape their intelligence briefs.\n\nINPUT: Optional boolean flags to include/exclude sections.\n- include_actors (default true): Include strategic actors with Theory of Mind profiles\n- include_assumptions (default true): Include open assumptions being tested\n\nOUTPUT: Structured JSON with:\n- views: Strategic views with confidence levels, posture, stability, and supporting drivers\n- actors: Key players with relationship type, importance, signal velocity, and Theory of Mind\n- assumptions: Open assumptions from views being tested or challenged\n- open_questions: Driver questions with current probabilities\n- landscape_health: Overall health score (0-1) based on view coverage, confidence, and actor tracking\n\nUSE CASES:\n- AI agents needing full strategic context before advising\n- Understanding what the user is monitoring and why\n- Identifying gaps in the user's strategic awareness\n- Grounding recommendations in the user's actual strategic landscape\n\nCOMPLEMENTS: Use before luu_brief or luu_forecast to align analysis with the user's strategic context. Follow up with luu_ontology for the complete mental model including SLS and predictions.","inputSchema":{"type":"object","properties":{"include_actors":{"type":"boolean","description":"Include strategic actors with Theory of Mind profiles. Default: true"},"include_assumptions":{"type":"boolean","description":"Include open assumptions being tested. Default: true"},"include_reasoning_trace":{"type":"boolean","description":"Include a structured reasoning trace showing how the answer was derived."}}},"creditCost":5,"usdEstimate":"0.05","freeTier":false,"requiredPermissions":["basic"],"exchangeProfile":null,"substratePrimitives":[],"restricted":false},{"name":"get_strategic_landscape_diagram","description":"Get the user's strategic landscape as a diagram (mermaid, json, csv, or png). Graph-backed counterpart to get_strategic_landscape — returns the actual entity graph (views ↔ drivers ↔ actors ↔ predictions ↔ storylines ↔ assumptions ↔ goals) traversed via the Phase O multi-hop graph query engine.\n\nINPUT:\n- format: 'mermaid' (default; flowchart text for Miro/Lucid/Notion paste), 'json' (schema-versioned envelope), 'csv' (adjacency list), 'png' (rendered image)\n- goalId: optional UUID — start traversal from a specific goal\n- postures: optional array of view postures to keep ['FYI', 'Watch', 'Explore', 'Act']\n- includeTypes: optional array of entity types to include (default: all 8)\n- maxHops: 1-5 (default 2) — graph traversal depth\n- maxNodes: 1-500 (default 200) — truncation cap\n- sanitize: 'none' (internal) | 'pseudonymize' (default; replaces actor names with \"Actor A\" labels for safe external sharing)\n\nOUTPUT: Format-specific text payload. PNG returns a base64 data URL.\n\nUSE CASES:\n- Generate board-meeting visuals from the user's strategic ontology\n- Export to Miro / Lucidchart / Notion for collaborative review\n- Provide an LLM agent with the structural shape of the user's strategic thinking\n- Snapshot the landscape for change-tracking over time\n\nCOMPLEMENTS: Use get_strategic_landscape first for a flat JSON view; switch to this tool when you need the graph structure or a shareable artifact.","inputSchema":{"type":"object","properties":{"format":{"type":"string","enum":["mermaid","json","csv","png"],"description":"Output format. Defaults to 'mermaid'."},"goalId":{"type":"string","description":"Optional goal UUID to start traversal from."},"postures":{"type":"array","items":{"type":"string","enum":["FYI","Watch","Explore","Act"]},"description":"Filter views by posture."},"includeTypes":{"type":"array","items":{"type":"string","enum":["actor","view","driver","question","storyline","prediction","assumption","goal"]}},"maxHops":{"type":"integer","description":"BFS hop depth (1-5). Default 2."},"maxNodes":{"type":"integer","description":"Node truncation cap (1-500). Default 200."},"sanitize":{"type":"string","enum":["none","pseudonymize"],"description":"PII sanitization mode. Default 'pseudonymize' — safe for external sharing."}}},"creditCost":5,"usdEstimate":"0.05","freeTier":false,"requiredPermissions":["basic"],"exchangeProfile":null,"substratePrimitives":[],"restricted":false},{"name":"luu_augment","description":"Add intelligence-grade judgment to any agent workflow's output via the LUU substrate's universal augmentation layer. Auto-applies the right primitive bundle (claims, evidence, sources, alternatives, info gaps, probability calibration, source credibility, decision frame, confidence gate, etc.) based on the workflow's shape — no need to call individual primitives one-at-a-time.\n\nWHY: The LUU substrate is 9 primitives (Claim, Evidence, Source, Alternative, UncertaintyEstimate, ChangeReason, Attribution, DecisionFrame, InformationGap) that must travel together to preserve calibration / auditability / adaptability. The augmentation layer enforces this **substrate criterion** at runtime — required primitives are CONTRACTS, not suggestions.\n\nWORKFLOW SHAPES (pick the closest, or omit for 'generic' fallback):\n- summarization — text → text summary (digests, briefs, news recaps)\n- enrichment — record → record + context (CRM enrichment, lead scoring)\n- monitoring — current+prior state → alert (drift detection, threshold monitors)\n- decision — question + options → recommendation (vendor pick, approval gate)\n- generation — LLM-generated content (memos, drafts, forecasts)\n- routing — classification (ticket triage, queue assignment)\n- evaluation — predictions vs outcomes (forecast scoring)\n- generic — fallback when no shape clearly fits\n\nINPUT:\n- value (required): the data to augment — text, JSON object, record, any JSON value\n- intent (required): one-sentence description of what the workflow does\n- workflowShape (optional): one of the 7 canonical shapes; defaults to 'generic'\n- context (optional): primitive-specific context (e.g. parentClaim for alternatives, priorSnapshot for monitoring, options for decision)\n- options.confidenceGate (optional, default 0.6): threshold below which fields are flagged\n- options.maxCredits (optional): cost cap in credits\n- options.attestation (optional, default 'none'): 'hash' | 'merkle' | 'tenant_signed' for cryptographic proofs\n\nOUTPUT (JudgmentEnvelope-shaped):\n- value: original input, unchanged (augmentation is non-destructive)\n- augmented: substrate primitives' outputs (claims, sources, alternatives, etc.)\n- report.workflowShape: which shape ran\n- report.primitivesExecuted: list of (primitive, status, durationMs, creditCost)\n- report.substrateCoverage: { populated: string[], missing: string[], score: 0-9 }\n- report.confidence: { mean: number, lowConfidenceFields: string[] }\n- report.totalCreditCost: total credits spent\n- report.downstreamGuidance: what to surface in the consumer (CRM, Slack, etc.)\n- report.issues: substrate-criterion warnings (must be empty for output to be authoritative)\n- attestation: optional SHA-256 hash + Merkle leaf + Ed25519 signature\n\nUSE CASES:\n- Adding governed judgment to no-code agent workflows (n8n, Zapier, Lindy, Agent Designer)\n- Bundling primitive calls into one named operation per shape\n- Enforcing substrate-criterion contracts at runtime\n- Producing audit-trail-ready augmented artifacts with cryptographic attestation\n\nCOST: 3-22 credits per call ($0.03-$0.22) depending on workflowShape. Set options.maxCredits for high-frequency triggers.","inputSchema":{"type":"object","required":["value","intent"],"properties":{"value":{"description":"The data to augment — text, JSON object, record, or any JSON-serializable value."},"intent":{"type":"string","description":"One-sentence description of what the workflow does. E.g. 'Summarize incoming press for the executive team.'","minLength":1,"maxLength":2000},"workflowShape":{"type":"string","enum":["summarization","enrichment","monitoring","decision","generation","routing","evaluation","generic"],"description":"Workflow shape — picks the canonical primitive bundle. Defaults to 'generic' if omitted."},"context":{"type":"object","description":"Primitive-specific context — parentClaim, decisionFrame, priorSnapshot, etc. See per-shape docs."},"options":{"type":"object","properties":{"confidenceGate":{"type":"number","minimum":0,"maximum":1,"description":"Threshold below which fields are flagged as low-confidence in the report. Default 0.6."},"maxCredits":{"type":"number","minimum":1,"maximum":1000,"description":"Cost cap in credits."},"attestation":{"type":"string","enum":["none","hash","merkle","tenant_signed"],"description":"Cryptographic attestation mode. 'hash' is free + always available; 'merkle' enables daily-seal anchoring; 'tenant_signed' requires a workspace signing key."},"optionalPrimitives":{"type":"array","items":{"type":"string"},"description":"Caller opt-in primitives beyond the required bundle. Names must be in the shape's optional list."},"async":{"type":"boolean","description":"If true, returns 202 immediately and POSTs result to webhookUrl when complete."},"webhookUrl":{"type":"string","format":"uri","description":"Required when async=true."}}}}},"creditCost":5,"usdEstimate":"0.05","freeTier":false,"requiredPermissions":["basic"],"exchangeProfile":null,"substratePrimitives":[],"restricted":false},{"name":"luu_brief","description":"Produces structured intelligence briefs on any strategic topic, formatted for decision-maker consumption. Unlike raw LLM summarization, briefs follow intelligence community conventions: confidence levels, source characterization, information gaps flagged explicitly, and actionable implications separated from analysis.\n\nINPUT: A topic string (max 500 chars). Optional: depth (quick/standard/deep), format (executive/analytical/bullet), focus_areas (array of aspects to emphasize), additional_context (constraints or lens).\n\nOUTPUT: Structured markdown brief with confidence assessments, key uncertainties flagged, and format-specific sections. Includes metadata (model, token count, latency).\n\nDEPTH OPTIONS (cost/detail tradeoff):\n- quick: ~1000 tokens output. Cost ~$0.002. Latency ~15s. Use for: rapid orientation, triage, batch briefing.\n- standard: ~2000 tokens output. Cost ~$0.005. Latency ~30s. Use for: most briefings, meeting prep, stakeholder updates.\n- deep: ~4000 tokens output. Cost ~$0.03. Latency ~60s. Use for: board-level analysis, complex multi-actor situations, published reports.\n\nFORMAT OPTIONS:\n- executive: Key Takeaway → Situation → Implications → Actions. Best for C-suite consumption.\n- analytical: Background → Current State → Key Factors → Scenarios → Assessment. Best for strategy teams.\n- bullet: Organized bullet points by theme. Best for quick scanning or embedding in other documents.\n\nEXAMPLE QUERIES: topic=\"AI chip export controls and their impact on NVIDIA\", focus_areas=[\"timeline\", \"key players\", \"risks\"]; topic=\"EU Carbon Border Adjustment Mechanism implementation\", additional_context=\"Focus on implications for US steel exporters\"\n\nDIFFERENTIATION: Goes beyond news summarization — applies analytical frameworks, flags what's missing (not just what's known), and structures output for decision-making rather than information consumption.\n\nLIMITATIONS: Analysis quality depends on topic specificity. Broad topics (\"global economy\") produce generic output. Best results with focused, actionable scoping.\n\nCOMPLEMENTS: Use luu_ontology first to align brief with user's strategic context. Follow up with luu_forecast for quantified probability estimates on key uncertainties identified in the brief.","inputSchema":{"type":"object","properties":{"topic":{"type":"string","description":"The topic to brief on. Be specific for better results. Example: \"AI chip export controls and their impact on NVIDIA\""},"depth":{"type":"string","enum":["quick","standard","deep"],"description":"Analysis depth. quick=overview, standard=balanced, deep=comprehensive. Default: standard"},"format":{"type":"string","enum":["executive","analytical","bullet"],"description":"Output format structure. Default: executive"},"focus_areas":{"type":"array","items":{"type":"string"},"description":"Specific aspects to emphasize. Example: [\"timeline\", \"key players\", \"risks\"]"},"additional_context":{"type":"string","description":"Additional context or constraints for the brief. Example: \"Focus on implications for European markets\""},"include_reasoning_trace":{"type":"boolean","description":"Include a structured reasoning trace showing how the answer was derived."},"output_mode":{"type":"string","enum":["standard","tradecraft"],"description":"Output style. standard=conversational strategic advisor voice (default). tradecraft=ICD 203 compliant analytical product with fact-judgment distinction, assumptions, information gaps, source characterization, and alternative analysis sections."}},"required":["topic"]},"creditCost":20,"usdEstimate":"0.20","freeTier":true,"requiredPermissions":["brief"],"exchangeProfile":null,"substratePrimitives":["Claim","Evidence","InformationGap"],"restricted":false},{"name":"luu_contextualize","description":"Analyze any event or development and get personalized strategic implications.\n\nThis is NorthBrief's most powerful tool — it connects world events to YOUR specific context:\nyour role, industry, strategic priorities, and organizational focus.\n\n**How it works:**\n1. You describe an event (e.g., \"EU announces new AI regulation framework\")\n2. NorthBrief maps it against your strategic profile (Strategic Living Script)\n3. Returns personalized implications, urgency levels, and recommended actions\n\n**When to use:**\n- Breaking news that might affect your industry or role\n- Policy changes, regulatory announcements, market shifts\n- Competitive moves, technology developments\n- Any event where you need \"what does this mean for ME?\"\n\n**Depth modes:**\n- `quick`: Fast analysis (1-2 seconds). 2-3 implications. Good for triage.\n- `detailed`: Deep analysis (3-5 seconds). 3-5 implications with evidence. Good for decision-making.\n\n**Personalization:**\n- If you've registered with user_context, responses are automatically personalized\n- First-time users can provide inline user_context for immediate personalization\n- Personalization improves over time as NorthBrief learns your query patterns\n\n**Cost:** quick ~$0.02, detailed ~$0.05","inputSchema":{"type":"object","properties":{"event":{"type":"string","description":"The event or development to contextualize. Be specific — include key details, actors, and scope. Example: \"EU Parliament passes AI Act with strict requirements for foundation models, effective 2027\""},"user_context":{"type":"object","description":"Optional user context for personalization. Not needed if already registered with user_context during agent registration."},"depth":{"type":"string","enum":["quick","detailed"],"description":"Analysis depth. \"quick\" for fast triage, \"detailed\" for decision-grade analysis.","default":"quick"},"include_scenarios":{"type":"boolean","description":"Include 2-4 forward-looking scenarios with probability estimates.","default":false},"output_mode":{"type":"string","enum":["standard","tradecraft"],"description":"Output style. standard=conversational strategic advisor voice (default). tradecraft=ICD 203 compliant analytical product with source reliability and formal tradecraft sections."}},"required":["event"]},"creditCost":5,"usdEstimate":"0.05","freeTier":true,"requiredPermissions":["brief"],"exchangeProfile":null,"substratePrimitives":["Claim","Evidence"],"restricted":false},{"name":"luu_daily_sections","description":"Access individual components of the user's daily pre-generated Strategic Advisor brief. Unlike luu_brief (which generates fresh analysis on any topic via LLM), this tool returns pre-computed sections from today's intelligence pipeline — zero additional latency, zero additional cost.\n\nThe daily brief runs overnight through a multi-stage pipeline: evidence ingestion (hundreds of sources), event extraction, storyline tracking, multi-model deliberation, and personalized narration through the user's Strategic Living Script.\n\nUse this to cherry-pick specific sections rather than consuming the full brief. Agents can compose custom intelligence products by combining sections.\n\nINPUT: sections (array of section keys to retrieve). Omit for full brief. Optional: date (YYYY-MM-DD, default today).\n\nOUTPUT: Structured JSON with requested sections, each containing the pre-generated content and metadata.\n\nAVAILABLE SECTIONS (by delivery window):\n\nMorning: strategic_question, for_you, because_you_shared, the_situation, strategic_insights\nMidday: under_the_radar, watch_list, what_shifted_views, research_signal, polling_pulse, opinion_currents  \nEvening: market_pulse, predictions, todays_question, your_move, thread_continuity, advisor_reflection, contrarian_signal\n\nEXAMPLE: sections=[\"strategic_insights\", \"market_pulse\", \"predictions\"] returns only those three sections from today's brief.\n\nCOMPLEMENTS: Use luu_brief for on-demand analysis of any topic. Use luu_daily_sections for pre-computed daily intelligence components.","inputSchema":{"type":"object","properties":{"sections":{"type":"array","items":{"type":"string","enum":["strategic_question","for_you","because_you_shared","the_situation","strategic_insights","under_the_radar","watch_list","what_shifted_views","market_pulse","predictions","todays_question","your_move","thread_continuity","advisor_reflection","contrarian_signal","research_signal","polling_pulse","opinion_currents"]},"description":"Specific sections to retrieve. Omit for all sections. See tool description for available sections."},"date":{"type":"string","description":"Date key (YYYY-MM-DD). Default: today."},"format":{"type":"string","enum":["json","markdown","whatsapp"],"description":"Output format. json=structured data, markdown=formatted text, whatsapp=WhatsApp-formatted text. Default: json"}}},"creditCost":1,"usdEstimate":"0.01","freeTier":true,"requiredPermissions":["basic"],"exchangeProfile":null,"substratePrimitives":["Claim","Evidence"],"restricted":false},{"name":"luu_execute","description":"Execute JavaScript code that chains multiple NorthBrief API calls in a single sandboxed execution.\n\n**Why use this?** Instead of making 5 sequential tool calls, write one function that calls all 5 APIs and returns the combined result. Saves ~80% tokens and enables complex multi-step analysis.\n\n**How it works:**\n- Your code runs in a sandboxed environment with the `nb` object available\n- Use `await` freely — the code runs inside an async function\n- Use `return` to send back your result (must be JSON-serializable)\n- Use `console.log()` for debug output (captured and returned)\n- 30-second timeout, 100KB output limit\n- No access to require, import, fetch, process, fs, or eval\n\n**Available API (`nb` object):**\n\n```typescript\n\ninterface NorthBriefAPI {\n  // === Briefing & Context ===\n  getBrief(dateKey?: string): Promise<{ topic: string; content: string; depth: string; generatedAt: string }>;\n  getDailySections(sections: string[], dateKey?: string): Promise<Record<string, { title: string; content: string; signals?: { headline: string; priority: string }[] }>>;\n  getCachedContext(): Promise<{ goals: Goal[]; views: View[]; sls: { narrative: string; keyThemes: string[] }; recentSignals: Evidence[] }>;\n\n  // === Evidence & Signals ===\n  queryEvidence(opts?: { filter?: 'act'|'watch'|'fyi'; since?: string; limit?: number; domain?: string }): Promise<Evidence[]>;\n  searchEvidence(query: string, limit?: number): Promise<Evidence[]>;\n  getSignal(id: string): Promise<Signal>;\n\n  // === Strategic Graph ===\n  getActors(opts?: { status?: string }): Promise<Actor[]>;\n  getStorylines(opts?: { status?: string }): Promise<Storyline[]>;\n  getAssumptions(opts?: { status?: string }): Promise<Assumption[]>;\n  getPredictions(opts?: { status?: string; limit?: number }): Promise<Prediction[]>;\n  getGraphEdges(entityId?: string): Promise<{ source: string; target: string; relationship: string }[]>;\n  getGoals(): Promise<Goal[]>;\n\n  // === Analysis (LLM-powered) ===\n  forecast(question: string, opts?: { mode?: 'fast'|'superforecast'|'adw-delphi'; horizon?: string }): Promise<{ probability: number; rationale: string; assumptions?: string[]; signposts?: string[] }>;\n  assessRisk(topic: string, opts?: { dimensions?: string[] }): Promise<{ overallRisk: string; dimensions: { dimension: string; level: string; description: string }[] }>;\n  analyzeScenarios(question: string, opts?: { numScenarios?: number; timeHorizon?: string }): Promise<{ scenarios: { name: string; probability: number; description: string; implications: string[] }[] }>;\n  factCheck(claim: string, opts?: { strictness?: 'loose'|'moderate'|'strict' }): Promise<{ verdict: string; confidence: number; evidence: { source: string; supports: boolean }[] }>;\n  contextualize(event: string, opts?: { depth?: 'quick'|'detailed' }): Promise<{ implications: string[]; affectedGoals: string[]; recommendedActions: string[] }>;\n\n  // === Mutations ===\n  createPrediction(question: string, probability: number, opts?: { rationale?: string; deadline?: string }): Promise<Prediction>;\n  updatePrediction(id: string, updates: { probability?: number; rationale?: string }): Promise<Prediction>;\n\n  // === Ontology ===\n  getOntology(opts?: { depth?: 'summary'|'full'; include?: string[] }): Promise<{ goals: Goal[]; views: View[]; actors: Actor[]; assumptions: Assumption[] }>;\n  getViews(opts?: { includeDrivers?: boolean }): Promise<View[]>;\n  getSLS(): Promise<{ narrative: string; keyThemes: string[]; updatedAt: string }>;\n  getMentalModel(): Promise<{ biases: string[]; blindSpots: string[]; strengths: string[] }>;\n\n  // === Second-Order Cognition ===\n  // Metacognition\n  checkAssumptions(against: string): Promise<{ results: { assumptionId: string; title: string; status: 'under_pressure'|'supported'|'aging'|'no_data'; evidence: string[]; explanation: string; confidence: number }[] }>;\n  detectBlindSpots(topic: string): Promise<{ area: string; why: string; suggestedSources: string[]; urgency: 'high'|'medium'|'low' }[]>;\n  calibrateConfidence(claim: string, statedConfidence: number): Promise<{ suggestedProbability: number; calibrationGap: number; reasoning: string; evidenceFor: string[]; evidenceAgainst: string[] }>;\n  identifyBiases(analysisText: string): Promise<{ biases: { type: string; evidence: string; suggestion: string; severity: 'high'|'medium'|'low' }[] }>;\n  // Temporal\n  trackShift(entityId: string, windowDays?: number): Promise<{ entity: string; shifts: { date: string; direction: 'positive'|'negative'|'neutral'; description: string; magnitude: number }[]; trend: string }>;\n  compareToBaseline(dateKey: string): Promise<{ baselineDate: string; currentDate: string; changes: { dimension: string; baseline: string; current: string; significance: string }[] }>;\n  projectTrajectory(storylineId: string, horizonDays?: number): Promise<{ storyline: string; currentState: string; projectedStates: { timeframe: string; likelyState: string; probability: number; keyDrivers: string[] }[] }>;\n  // Relational\n  traceImpactChain(event: string, depth?: number): Promise<{ chains: { path: { entityType: string; entityId: string; entityName: string }[]; likelihood: number; explanation: string }[] }>;\n  findHiddenConnections(entityA: string, entityB: string): Promise<{ connections: { path: string[]; strength: number; explanation: string }[] }>;\n  simulateRemoval(actorId: string): Promise<{ actor: string; directEffects: string[]; secondOrderEffects: string[]; overallImpact: string; explanation: string }>;\n  // Adversarial\n  steelmanOpposite(thesis: string): Promise<{ steelmanCounterargument: string; weaknessesInOriginal: string[]; confidenceInCounter: number }>;\n  generateRedTeam(strategy: string): Promise<{ vulnerabilities: { vulnerability: string; exploitScenario: string; likelihood: number; mitigation: string }[]; overallRobustness: number }>;\n  findBlackSwans(context: string): Promise<{ blackSwans: { scenario: string; probability: number; impact: string; earlyWarningSignals: string[]; preparationActions: string[] }[] }>;\n  // Collective\n  aggregateForecasts(question: string): Promise<{ aggregatedProbability: number; perspectives: { angle: string; probability: number; rationale: string }[]; consensusLevel: string }>;\n  findExpertDisagreement(topic: string): Promise<{ disagreements: { claim: string; positions: { position: string; supporters: string[] }[]; significance: string }[] }>;\n  synthesizeMultipleViews(perspectives: string[]): Promise<{ synthesis: string; commonGround: string[]; irreconcilableDifferences: string[]; recommendation: string }>;\n}\n\ninterface Evidence { id: string; headline: string; summary: string; source: string; priority: 'act'|'watch'|'fyi'; domain?: string }\ninterface Signal { id: string; headline: string; summary: string; source: string; priority: 'act'|'watch'|'fyi'; implications?: string[] }\ninterface Actor { id: string; name: string; role: string; status?: string }\ninterface Storyline { id: string; title: string; summary: string; status: string }\ninterface Assumption { id: string; statement: string; confidence: number; status: string }\ninterface Prediction { id: string; question: string; probability: number; rationale?: string; status: string; deadline?: string; createdAt: string }\ninterface Goal { id: string; title: string; description?: string; status: string }\ninterface View { id: string; title: string; summary: string; drivers?: { type: 'tailwind'|'headwind'; description: string }[] }\n\n// Available as `nb` in your code. Example:\n// const biases = await nb.identifyBiases(\"China will never invade Taiwan because...\");\n// const risk = await nb.assessRisk(\"AI regulation impact\");\n// const swans = await nb.findBlackSwans(\"semiconductor supply chain\");\n// return { biases, risk, swans };\n\n```\n\n**Example code:**\n```javascript\n// Get predictions and run risk assessment in parallel\nconst [preds, risk] = await Promise.all([\n  nb.getPredictions({ limit: 5 }),\n  nb.assessRisk(\"AI regulation impact\")\n]);\n\n// Filter high-probability predictions\nconst highProb = preds.filter(p => p.probability > 0.7);\n\n// Forecast on each\nconst forecasts = await Promise.all(\n  highProb.map(p => nb.forecast(p.question, { mode: 'fast' }))\n);\n\nreturn { predictions: highProb, risk, forecasts };\n```","inputSchema":{"type":"object","properties":{"code":{"type":"string","description":"JavaScript code to execute. Has access to `nb` (NorthBriefAPI). Must use `return` to output results."},"description":{"type":"string","description":"Brief description of what the code does (for audit trail)."}},"required":["code"]},"creditCost":5,"usdEstimate":"0.05","freeTier":false,"requiredPermissions":["execute"],"exchangeProfile":null,"substratePrimitives":[],"restricted":true},{"name":"luu_fact_check","description":"Verifies a specific claim or assertion, returning a structured verdict (true/mostly_true/mixed/mostly_false/false/unverifiable) with confidence score (0-1), step-by-step reasoning, supporting and contradicting evidence, and caveats. Unlike simple web search verification, this applies multi-source cross-referencing and explicit confidence calibration with documented reasoning chains.\n\nINPUT: claim (string, max 2000 chars — the specific assertion to verify). Optional: context (where the claim appeared, who made it), strictness (loose/moderate/strict — controls how strictly accuracy is judged).\n\nOUTPUT: Structured verdict with: verdict (6-level scale from true to unverifiable), confidence (0-1), reasoning (step-by-step analysis), evidence (array of supporting/contradicting findings), caveats (qualifications and limitations). Includes model metadata and trace ID.\n\nVERDICT SCALE:\n- true: Accurate and well-supported by available evidence.\n- mostly_true: Largely accurate but may oversimplify, lack nuance, or omit context.\n- mixed: Contains both accurate and inaccurate elements — partial truth.\n- mostly_false: Largely inaccurate but may contain a kernel of truth or outdated data.\n- false: Inaccurate and contradicted by available evidence.\n- unverifiable: Insufficient evidence to determine — explicitly flags epistemic limits.\n\nSTRICTNESS LEVELS (cost/rigor tradeoff):\n- loose: Directional accuracy sufficient. Cost ~$0.002. Use for: quick screening, internal notes.\n- moderate: Reasonable accuracy with context required. Cost ~$0.005. Use for: most verification needs.\n- strict: Precise accuracy with full context demanded. Cost ~$0.01. Use for: publishable claims, legal/compliance, cited statistics.\n\nEXAMPLE QUERIES: claim=\"China produces over 80% of the world's rare earth elements\", strictness=\"strict\"; claim=\"GPT-4 scores in the 90th percentile on the bar exam\", context=\"Stated in a 2024 AI capabilities report\".\n\nDIFFERENTIATION: Produces structured, auditable verdicts rather than yes/no answers. The 6-level scale with confidence scores enables nuanced decision-making. Explicit reasoning chains make the verification process transparent and challengeable.\n\nLIMITATIONS: Verification quality depends on claim specificity. Vague claims produce vague verdicts. Cannot verify real-time events or claims about non-public information. Knowledge cutoff of underlying models applies.\n\nCOMPLEMENTS: Use before luu_forecast to verify premises before building probability estimates. Use after luu_brief to spot-check key claims in generated briefs. Pair with luu_signals to verify signal-reported developments.","inputSchema":{"type":"object","properties":{"claim":{"type":"string","description":"The specific claim to verify. Example: \"China produces over 80% of the world's rare earth elements\""},"context":{"type":"string","description":"Additional context for the claim. Example: \"This was stated in a 2024 industry report about supply chain resilience\""},"strictness":{"type":"string","enum":["loose","moderate","strict"],"description":"How strictly to evaluate the claim. Default: moderate"},"include_reasoning_trace":{"type":"boolean","description":"Include a structured reasoning trace showing how the answer was derived."},"output_mode":{"type":"string","enum":["standard","tradecraft"],"description":"Output style. standard=conversational strategic advisor voice (default). tradecraft=ICD 203 compliant analytical product with source reliability tiers and structured evidence assessment."}},"required":["claim"]},"creditCost":5,"usdEstimate":"0.05","freeTier":true,"requiredPermissions":["basic"],"exchangeProfile":null,"substratePrimitives":["Claim","Evidence","Source"],"restricted":false},{"name":"luu_forecast","description":"Generates calibrated probability estimates (0-1) for future events using multi-model AI forecasting. Unlike generic LLM prompting, this applies structured decomposition, base-rate anchoring, and adversarial deliberation to produce forecasts with documented reasoning chains.\n\nINPUT: A specific, time-bounded question (string, max 2000 chars). Optional: horizon_date (YYYY-MM-DD), context (background info), resolution_criteria (how to judge outcome), mode selection.\n\nOUTPUT: Structured JSON with probability (0-1), rationale, key assumptions, signposts (future events that would shift the estimate), and question decomposition.\n\nMODES (select based on stakes and latency tolerance):\n- fast: Single-model estimate. Latency ~30s. Cost ~$0.001. Use for: exploratory questions, batch processing, low-stakes screening.\n- superforecast: Simulated expert panel with cognitive debiasing. Latency ~60s. Cost ~$0.01. Use for: most analytical questions, briefing preparation.\n- adw-delphi: Full multi-model adversarial deliberation with structured disagreement resolution. Latency ~3-5min. Cost ~$0.20-0.40. Use for: high-stakes decisions, complex geopolitical questions, published analysis.\n\nDIFFERENTIATION: Standard LLMs produce uncalibrated confidence. This tool applies Tetlock-style forecasting methodology — decomposition, reference class reasoning, and explicit assumption tracking — producing auditable probability estimates with signposts for Bayesian updating.\n\nEXAMPLE QUERIES: \"Will the Fed cut rates by 50bps or more before June 2025?\", \"Will China invade Taiwan before 2027?\", \"Will OpenAI reach $10B ARR by end of 2025?\"\n\nLIMITATIONS: Knowledge cutoff applies per underlying models. Not suited for questions resolvable by simple lookup. Geopolitics and macro coverage strongest; niche/local topics may have wider confidence intervals.\n\nCOMPLEMENTS: Pair with luu_scenario_analysis for branching futures, luu_risk_assessment for decision-oriented framing, or luu_fact_check to verify premises before forecasting.","inputSchema":{"type":"object","properties":{"question":{"type":"string","description":"The forecasting question. Should be specific and ideally time-bounded. Example: \"Will the Fed cut rates by 50bps or more before June 2025?\""},"mode":{"type":"string","enum":["fast","superforecast","adw-delphi"],"description":"Forecasting mode. fast=quick estimate, superforecast=balanced, adw-delphi=deep analysis. Default: fast"},"horizon_date":{"type":"string","format":"date","description":"When the question should resolve (YYYY-MM-DD format). Helps calibrate the forecast."},"context":{"type":"string","description":"Additional context to inform the forecast. Include relevant background, constraints, or specific scenarios."},"resolution_criteria":{"type":"string","description":"How the prediction should be judged true/false. Helps ensure precise forecasting."},"include_reasoning_trace":{"type":"boolean","description":"Include a structured reasoning trace showing how the answer was derived."},"output_mode":{"type":"string","enum":["standard","tradecraft"],"description":"Output style. standard=conversational strategic advisor voice (default). tradecraft=ICD 203 compliant analytical product with formal tradecraft metadata, verbal probability terms, assumptions, information gaps, and source characterization."}},"required":["question"]},"creditCost":5,"usdEstimate":"0.05","freeTier":true,"requiredPermissions":["forecast"],"exchangeProfile":null,"substratePrimitives":["Claim","UncertaintyEstimate"],"restricted":false},{"name":"luu_get_assessment_summary","description":"Generates a consolidated assessment summary for a specific entity by aggregating data from multiple analytical sources — risk assessments, forecasts, briefs, signals, and predictions. Returns a unified analytical view tailored to the requested assessment type.\n\nINPUT: entity_id (string — the entity to assess), assessment_type (one of 'risk', 'opportunity', 'strategic').\n\nOUTPUT: Consolidated assessment containing:\n- entity: Entity identifier and description\n- assessment_type: The type of assessment performed\n- overall_rating: Aggregate rating (low/medium/high/critical for risk; weak/moderate/strong for opportunity; maintain/adjust/pivot for strategic)\n- summary: Executive summary of the assessment\n- key_factors: Array of factors driving the assessment, each with weight and direction\n- evidence_base: Summary of evidence sources used\n- active_predictions: Related predictions with current probabilities\n- recommendations: Actionable recommendations based on the assessment\n- confidence: Overall confidence in the assessment (0-1)\n- last_updated: When the underlying data was last refreshed\n\nASSESSMENT TYPES:\n- **risk**: Focuses on threats, vulnerabilities, and downside scenarios. Highlights mitigations and early warning indicators.\n- **opportunity**: Focuses on upside potential, timing windows, and enabling conditions. Highlights strategic positioning.\n- **strategic**: Balanced view combining risk and opportunity with strategic implications. Highlights decision points and trade-offs.\n\nEXAMPLE: entity_id=\"eu-ai-act-compliance\", assessment_type=\"risk\"\n\nCOMPLEMENTS: Use luu_ontology to discover entity IDs. Use luu_get_judgment_history to see how assessments evolved. Use luu_track_storyline for narrative context. Use luu_risk_assessment for deep single-topic risk analysis.\n\n**Cost:** ~$0.005 per query (multi-source aggregation)","inputSchema":{"type":"object","properties":{"entity_id":{"type":"string","description":"The entity ID to generate an assessment for. Use luu_ontology to discover available entities."},"assessment_type":{"type":"string","enum":["risk","opportunity","strategic"],"description":"Type of assessment to generate. risk=threat-focused, opportunity=upside-focused, strategic=balanced."},"include_reasoning_trace":{"type":"boolean","description":"Include a structured reasoning trace showing how the answer was derived."},"output_mode":{"type":"string","enum":["standard","tradecraft"],"description":"Output style. standard=conversational (default). tradecraft=ICD 203 compliant."}},"required":["entity_id","assessment_type"]},"creditCost":5,"usdEstimate":"0.05","freeTier":false,"requiredPermissions":["basic"],"exchangeProfile":null,"substratePrimitives":[],"restricted":false},{"name":"luu_get_available_actions","description":"Discover what actions are available on a strategic object.\n\nReturns a permission-filtered list of affordances (action capabilities) for\nthe given object type. Each affordance includes:\n\n- `actionId`            Internal verb id, pass to `luu_request_action` to invoke.\n- `canonicalVerb`       Public-facing verb (monitor | investigate | assess |\n                          challenge | simulate | estimate | revise | decide |\n                          request | handoff | observe | review).\n- `family`              Coarse grouping (attend | inquire | assess |\n                          challenge | imagine | revise | decide | coordinate |\n                          learn).\n- `postureProjection`   Which WEA lane this affordance belongs under\n                          (watch | explore | act).\n- `authority`           Confirmation tier (AUTO | USER_CONFIRM | ADMIN_CONFIRM).\n- `label` / `description`  UI strings.\n- `requiredPermissions` The RBAC roles the user holds for this action.\n\n**Valid `objectType` values:**\n- `sco:Prediction`\n- `sco:Assumption`\n- `sco:View`\n- `sco:Driver`\n- `sco:InformationGap`\n- `sco:Scenario`\n- `sco:Insight`\n\n**Usage pattern:**\n1. Call this tool with an object you're inspecting.\n2. Pick an `actionId` from the returned list.\n3. Call `luu_request_action` with that id + payload to actually act.\n\nThis tool does NOT invoke any action. It is read-only and idempotent. The\nlist is personalized — a workspace-member sees a smaller set than an admin.\n\n**Cost:** $0.001 per call (lookup-only, no LLM).","inputSchema":{"type":"object","properties":{"objectType":{"type":"string","enum":["sco:Prediction","sco:Assumption","sco:View","sco:Driver","sco:InformationGap","sco:Scenario","sco:Insight"],"description":"The strategic object type to discover actions for. Must be one of the SCO-prefixed type literals."},"objectId":{"type":"string","description":"Optional id of the specific object instance. Echoed in the response; future revisions may use this to scope affordances by per-instance state (e.g. only show 'falsify' on insights in 'monitoring' state)."}},"required":["objectType"]},"creditCost":5,"usdEstimate":"0.05","freeTier":false,"requiredPermissions":["basic"],"exchangeProfile":null,"substratePrimitives":[],"restricted":false},{"name":"luu_get_delta","description":"Get an Analytic Delta showing what changed in the strategic context.\n\nAn Analytic Delta (SCO §6.2) captures what changed between two points in time:\n- **View revisions**: Changes in analytical positions with reasons\n- **Prediction updates**: Probability shifts with explanations\n- **Driver changes**: Added, removed, or modified strategic drivers\n- **Assumption changes**: Validated, invalidated, or revised assumptions\n- **New evidence**: Newly discovered evidence items\n- **Narrative summary**: Human-readable explanation of what changed and why\n- **Significance**: Critical/major/minor/routine assessment\n\nINPUT: entity_id (optional — omit for overall context delta), days (lookback period, default 1).\n\nOUTPUT: Structured delta with all changes, significance assessment, and narrative summary.\n\nWHEN TO USE: To understand what changed overnight, prepare delta briefings, identify significant shifts that need attention, or track how the strategic picture is evolving.","inputSchema":{"type":"object","properties":{"entity_id":{"type":"string","description":"Optional entity ID to scope the delta. Omit for overall context delta."},"entity_type":{"type":"string","enum":["actor","topic","issue","region","sector"],"description":"Type of entity (required if entity_id is provided)"},"days":{"type":"string","description":"Lookback period in days (default: 1)"}}},"creditCost":5,"usdEstimate":"0.05","freeTier":false,"requiredPermissions":["basic"],"exchangeProfile":"analytic_delta","substratePrimitives":["Claim","ChangeReason","Evidence"],"restricted":false},{"name":"luu_get_judgment_history","description":"Retrieves the historical timeline of analytical judgments for a specific entity (topic, actor, theme, or strategic question). Aggregates judgment data across predictions, reflections, narrative arcs, and intelligence briefs to show how assessments have evolved over time.\n\nINPUT: entity_id (string — the entity to query). Optional: time_range (start/end dates as YYYY-MM-DD), limit (max entries to return, default 50).\n\nSCOPE: the timeline is drawn from the authenticated API key user's own recorded judgments; entity_id filters that record by topic. Pass \"me\" (or your own user id) for the full unfiltered timeline.\n\nOUTPUT: JudgmentTimeline with entries sorted by date, each containing:\n- date: When the judgment was recorded\n- type: Source type (prediction, reflection, arc, brief)\n- summary: The judgment or assessment text\n- confidence: Confidence level at that point (0-1 where available)\n- delta: Change from prior judgment (if applicable)\n- source_id: Reference to the originating document\n\nUSE CASES:\n- Track how probability estimates for a question evolved over weeks/months\n- Review the analytical trail for a contested assessment\n- Identify inflection points where judgments shifted significantly\n- Audit analytical consistency across different product types\n\nEXAMPLE: entity_id=\"us-china-semiconductor-decoupling\", time_range={\"start\": \"2025-01-01\", \"end\": \"2025-12-31\"}, limit=20\n\nCOMPLEMENTS: Use luu_ontology to discover entity IDs. Use luu_forecast to generate new probability estimates. Use luu_predictions to manage the prediction portfolio.\n\n**Cost:** ~$0.002 per query (DB lookup)","inputSchema":{"type":"object","properties":{"entity_id":{"type":"string","description":"The entity ID to retrieve judgment history for. Use luu_ontology to discover available entities."},"time_range_start":{"type":"string","format":"date","description":"Start date for the timeline (YYYY-MM-DD). Defaults to 90 days ago."},"time_range_end":{"type":"string","format":"date","description":"End date for the timeline (YYYY-MM-DD). Defaults to today."},"limit":{"type":"number","description":"Maximum number of entries to return. Default: 50, max: 200."},"include_reasoning_trace":{"type":"boolean","description":"Include a structured reasoning trace showing how the answer was derived."},"output_mode":{"type":"string","enum":["standard","tradecraft"],"description":"Output style. standard=conversational (default). tradecraft=ICD 203 compliant."}},"required":["entity_id"]},"creditCost":5,"usdEstimate":"0.05","freeTier":false,"requiredPermissions":["basic"],"exchangeProfile":null,"substratePrimitives":[],"restricted":false},{"name":"luu_get_snapshot","description":"Get an Entity Snapshot for a specific entity (actor, topic, issue, region, or sector).\n\nAn Entity Snapshot (SCO §6.1) is a point-in-time view of a specific entity extracted from the strategic ontology. It contains:\n- **Current assessment**: The primary analytical view with confidence level\n- **Key drivers**: Forces affecting this entity (tailwinds/headwinds)\n- **Key assumptions**: Assumptions underlying the analysis\n- **Evidence basis**: Evidence items and citations supporting the assessment\n- **Active predictions**: Forecasts related to this entity\n- **Quality indicators**: Completeness, source diversity, recency scores\n\nINPUT: entity_id (the ID of the entity to snapshot), entity_type (actor/topic/issue/region/sector).\n\nOUTPUT: Structured Entity Snapshot with assessment, drivers, evidence, and quality metadata.\n\nWHEN TO USE: When you need a comprehensive, structured view of a specific strategic entity for decision support, briefing preparation, or cross-system sharing.","inputSchema":{"type":"object","properties":{"entity_id":{"type":"string","description":"ID of the entity to snapshot (e.g., actor ID, topic ID)"},"entity_type":{"type":"string","enum":["actor","topic","issue","region","sector"],"description":"Type of entity"}},"required":["entity_id","entity_type"]},"creditCost":5,"usdEstimate":"0.05","freeTier":false,"requiredPermissions":["basic"],"exchangeProfile":"entity_snapshot","substratePrimitives":["Claim","Evidence","UncertaintyEstimate","Attribution"],"restricted":false},{"name":"luu_insight_evidence","description":"Get the FULL JSON evidence pack for a single Strategic Insight — the cryptographically anchored audit trail (heavyweight).\n\nEach pack contains:\n- The full insight row (headline, narrative, frame, falsifier, decision implications)\n- All associated signposts with windows and outcomes\n- The integrity chain (chain of SHA-256 content hashes via previousHash) with a self-verifying manifest (per-record hashes + chain-validity detail) stamped with its canonicalization recipe (hashRecipe)\n- Recent deltas affecting this insight (last 4 weeks)\n- Pointers to the daily Merkle seal for offline verification\n\nThis is the \"proof object\" that lets external readers verify what the system imagined or believed at a specific moment in time, with cryptographic guarantee that the content has not been altered. Verify offline with `npx tsx scripts/verify-insight-pack.ts <pack.json>` — zero server access required.\n\nVERIFIABILITY (current state): the JSON pack self-verifies via its SHA-256 previousHash chain. Ed25519 signatures and standalone Merkle inclusion proofs are NOT yet emitted — packs report `signatureAvailable: false` / `merkleProofAvailable: false`, and the REST endpoint's `format=zip` bundle is not yet available (returns 501). Trust today rests on the within-pack hash chain plus the daily Merkle seal's public GitHub anchor.\n\nRELATIONSHIP: this tool = the FULL pack (whole row + all signposts + full chain). `luu_insight_provenance` = a COMPACT summary (birth-seal citation hash + Merkle anchor coordinates + entity join keys) for lightweight attribution/verification at scale. Fetch provenance first; fetch the pack when you need the complete audit trail.\n\nINPUT: insight_id (required).\n\nOUTPUT: structured pack with insight + signposts + integrity chain + deltas + verification metadata.\n\nWHEN TO USE: When you need to provide an external party (auditor, journalist, customer) with the complete verifiable proof of a specific insight's content, lineage, or signposts at a point in time. For a compact citation hash + join keys instead, use luu_insight_provenance.","inputSchema":{"type":"object","properties":{"insight_id":{"type":"string","description":"UUID of the insight to fetch the evidence pack for."}},"required":["insight_id"]},"creditCost":5,"usdEstimate":"0.05","freeTier":false,"requiredPermissions":["basic"],"exchangeProfile":null,"substratePrimitives":[],"restricted":false},{"name":"luu_insight_provenance","description":"Get COMPACT, verifiable provenance + anchor coordinates for one Strategic Insight — the minimal proof object an agent needs to cite and independently check a call.\n\nReturns:\n- **contentHash / hashRecipe** — the canonical citation hash (the insight's birth/`surfaced` integrity-record SHA-256, stable from first sealing) and the canonicalization recipe it was computed under\n- **integrityChainSummary** — { records, chainValid, lastUpdateSequence } for the SHA-256 previousHash chain\n- **lifecycle** — birthSealAt (and resolutionSealAt once the 7-day public delay has elapsed on a resolved call)\n- **merkle** — { dateKey, rootHash, anchoredAt, anchor: { repoUrl, commitSha, filePath } } — the daily Merkle root and its public GitHub anchor (null while unsealed/unanchored)\n- **provenanceTier** — tier1_primary (hash-a-datum) | tier2_retrieved (judged retrieval) | tier3_derived\n- **sourceOrigin** — always `managed` on this surface (customer-origin calls are never exposed)\n- **entities** — cited AI-compute entities with STABLE JOIN KEYS: wikidataQid, lei, cik, ticker, canonicalName, matchType (exact | close) — so an agent can join this call to what it already holds\n- **verification** — the evidence-pack endpoint + offline verifier instructions\n\nVERIFIABILITY GUARANTEE: every field is derived read-only from cryptographically sealed records; nothing is recomputed or invented. The contentHash + Merkle anchor let a third party re-verify the belief→outcome chain offline with zero server access.\n\nRELATIONSHIP: `luu_insight_provenance` = compact summary + anchor coordinates (this tool). `luu_insight_evidence` = the FULL evidence pack (heavyweight; whole row + all signposts + full chain). Fetch provenance to attribute/verify at scale; fetch the pack when you need the complete audit trail.\n\nINPUT: insight_id (required).\n\nOUTPUT: the compact provenance object above, or a not-found result for absent / non-public / customer-origin insights.\n\nWHEN TO USE: When an agent surfaces a call from luu_insights_active / luu_insights_deltas / luu_insights_track_record and needs to attach a verifiable citation hash + join keys, or to confirm a call is Merkle-anchored, WITHOUT pulling the full pack.","inputSchema":{"type":"object","properties":{"insight_id":{"type":"string","description":"UUID of the insight to fetch compact provenance for."}},"required":["insight_id"]},"creditCost":5,"usdEstimate":"0.05","freeTier":false,"requiredPermissions":["basic"],"exchangeProfile":null,"substratePrimitives":[],"restricted":false},{"name":"luu_insights_active","description":"Get the currently active Strategic Insight portfolio for a workspace.\n\nReturns surfaced + monitoring + confirmed insights ordered by ranking score. Each insight is a structured Strategic Insight Object with:\n- **headline / narrative / frame / falsifier** — the substantive thesis\n- **grammar** — which of 13 typed cognitive shapes (constraint_inversion, narrative_lag, second_order_amplification, underweighted_class, ...)\n- **status** — surfaced | monitoring | confirmed | falsified\n- **conviction** — 0..1 position size in the portfolio\n- **signposts** — falsifiable predictions with windows and outcomes\n- **decisionImplications** — per-persona decision-relevance text (enterprise_ai_buyer / infra_investor / utility_exec / policy_team)\n- **entities** — cited AI-compute entities with STABLE JOIN KEYS (wikidataQid / lei / cik / ticker / canonicalName / matchType) so you can join a call to what you already hold; empty when no entity resolves\n- **latestIntegrity** — cryptographic hash + daily Merkle seal id (for offline verification)\n\nINPUT: workspace_id (required), status_filter (optional, default: surfaced+monitoring+confirmed), limit (optional, max 100).\n\nOUTPUT: array of structured insights + workspace id + count.\n\nWHEN TO USE: When you need the current strategic-judgment portfolio for a domain (e.g., AI Compute reference instance). Pairs with luu_insights_deltas for the \"what changed\" surface, and luu_insight_provenance for a per-call verifiable citation hash + anchor coordinates.","inputSchema":{"type":"object","properties":{"workspace_id":{"type":"string","description":"Workspace UUID. For the public AI Compute reference instance, see the LUU docs site for the published id."},"status_filter":{"type":"array","items":{"type":"string","enum":["surfaced","monitoring","confirmed","falsified","dismissed","aged_out"]},"description":"Restrict to specific status(es). Default: ['surfaced','monitoring','confirmed']."},"limit":{"type":"integer","minimum":1,"maximum":100,"description":"Max insights to return. Default 50."}},"required":["workspace_id"]},"creditCost":5,"usdEstimate":"0.05","freeTier":false,"requiredPermissions":["basic"],"exchangeProfile":null,"substratePrimitives":[],"restricted":false},{"name":"luu_insights_deltas","description":"Get weekly insight deltas — structured \"what changed this week\" for a workspace's strategic portfolio.\n\nEach delta has:\n- **deltaKind** — one of: surfaced, confirmed, falsified, dismissed, aged_out, conviction_changed, signpost_tripped, rerank_promoted, rerank_demoted\n- **priorState / newState** — JSON snapshots of the insight's relevant state\n- **deltaMagnitude** — 0..1 normalised change (for conviction / ranking deltas)\n- **narrative** — 1-2 sentence \"why this changed\"\n- **triggeringEvidenceIds** — substrate evidence citations\n- **entities** — the underlying insight's cited AI-compute entities with STABLE JOIN KEYS (wikidataQid / lei / cik / ticker / matchType); empty when none resolves\n- **weekStart / weekEnd** — ISO date keys for the window\n\nINPUT: workspace_id (required), weeks_back (optional, default 1, max 12), kind_filter (optional).\n\nOUTPUT: array of delta rows newest-first.\n\nWHEN TO USE: When a customer wants to know \"what shifted in the AI Compute strategic landscape this week\", or for ingestion into a Snowflake/Databricks table tracking ongoing portfolio motion (join on the emitted wikidataQid / lei / cik keys).","inputSchema":{"type":"object","properties":{"workspace_id":{"type":"string","description":"Workspace UUID."},"weeks_back":{"type":"integer","minimum":1,"maximum":12,"description":"How many weeks back to return. Default 1 (just this week)."},"kind_filter":{"type":"array","items":{"type":"string","enum":["surfaced","confirmed","falsified","dismissed","aged_out","conviction_changed","signpost_tripped","rerank_promoted","rerank_demoted"]},"description":"Restrict to specific delta kind(s)."}},"required":["workspace_id"]},"creditCost":5,"usdEstimate":"0.05","freeTier":false,"requiredPermissions":["basic"],"exchangeProfile":null,"substratePrimitives":[],"restricted":false},{"name":"luu_insights_signposts","description":"Get the open Strategic Insight signposts — falsifiable predictions the system is currently watching.\n\nEach signpost:\n- ties to a specific insight in the portfolio\n- has an **expectedDirection** (supports | falsifies)\n- has a **window** (opensAt / closesAt) for when it should trip if true\n- has an **outcome** (waiting | tripped_supports | tripped_falsifies | expired_no_trip)\n- is plain-language so external observers can match real-world evidence against it\n\nINPUT: workspace_id (required), include_resolved (optional, default false).\n\nOUTPUT: array of open signposts grouped by parent insight.\n\nWHEN TO USE: When you want the system's \"watch list\" — concrete events to monitor that would confirm or falsify the strategic theses currently being tracked. Useful for an analyst's daily scan of incoming evidence against the system's open positions.","inputSchema":{"type":"object","properties":{"workspace_id":{"type":"string","description":"Workspace UUID."},"include_resolved":{"type":"boolean","description":"Include signposts whose outcome is already tripped/expired. Default false."}},"required":["workspace_id"]},"creditCost":5,"usdEstimate":"0.05","freeTier":false,"requiredPermissions":["basic"],"exchangeProfile":null,"substratePrimitives":[],"restricted":false},{"name":"luu_insights_track_record","description":"Get the verifiable track record for the AI Compute Strategic Delta Feed — the resolved-outcome calibration scorecard.\n\nReturns, over the feed's resolved (confirmed | falsified | aged_out) calls:\n- **scorecard** — n, overall hit-rate, Brier score, and a `thin` flag; plus a per-grammar breakdown with hit-rate, beta-binomial 90% confidence intervals, and Brier\n- **resolvedCalls** — each closed call with its verdict, conviction, the signpost that tripped, the birth-seal + resolution-seal content hashes (so the belief→outcome chain can be re-verified offline), and **entities** — cited AI-compute entities with STABLE JOIN KEYS (wikidataQid / lei / cik / ticker / matchType)\n- **methodology** — how to verify any call yourself (evidence pack + scripts/verify-insight-pack.ts)\n\nconfirmed/partial = hit; falsified = miss; aged_out/inconclusive carry no outcome. The whole public tier is uniformly 7-day-delayed, so n equals the number of calls shown. At n=0 the feed returns an honest \"track record forming\" state (the run's signpost windows are still open) — this is expected early and NOT an error.\n\nINPUT: none (the public AI Compute reference instance).\n\nOUTPUT: scorecard + resolved-call list + methodology + research-preview notice.\n\nWHEN TO USE: When you need to judge the feed's calibration / accuracy on borne-out calls, or to show an external party the cryptographically-anchored, falsifiable track record. Pairs with luu_insights_active (\"what we believe now\") and luu_insight_evidence (\"prove a single call\").","inputSchema":{"type":"object","properties":{}},"creditCost":5,"usdEstimate":"0.05","freeTier":false,"requiredPermissions":["basic"],"exchangeProfile":null,"substratePrimitives":[],"restricted":false},{"name":"luu_misalignment_detect","description":"Detect stated-vs-revealed misalignments in an organization's strategic context.\n\nCompares what strategy documents/memos/decks STATE against what operational\ndata (CRM pipeline, Jira capacity, etc.) REVEALS, on shared dimensions\n(e.g., \"enterprise priority\", \"international expansion\"). Surfaces tensions\nclassified as minor / material / critical, and as one of:\n\n- capacity_vs_priority    — stated priority X but revealed capacity contradicts\n- narrative_vs_pipeline   — stated narrative X but pipeline patterns differ\n- commitment_vs_allocation — stated commitment but budget/headcount points elsewhere\n- stated_vs_decided       — stated position but recent decision contradicts\n\nINPUT: stated[] (claims with dimension + magnitude 0.0–1.0 + source provenance);\nrevealed[] (metrics with dimension + magnitude + source + sampleSize);\noptional minGap and minSampleSize thresholds; persist=true to write results to\nmisalignment_findings.\n\nOUTPUT: detected findings sorted by tension score (highest gap first).","inputSchema":{"type":"object","properties":{"stated":{"type":"array","description":"Stated claims extracted from strategy documents/memos/decks.","items":{"type":"object","properties":{"claimId":{"type":"string"},"statement":{"type":"string"},"dimension":{"type":"string"},"magnitude":{"type":"number","minimum":0,"maximum":1},"source":{"type":"object","properties":{"type":{"type":"string"},"ref":{"type":"string"},"capturedAt":{"type":"string"}},"required":["type","ref","capturedAt"]},"snippet":{"type":"string"}},"required":["claimId","statement","dimension","magnitude","source"]}},"revealed":{"type":"array","description":"Revealed metrics aggregated from operational data (Jira capacity, Salesforce pipeline, etc.).","items":{"type":"object","properties":{"dimension":{"type":"string"},"magnitude":{"type":"number","minimum":0,"maximum":1},"description":{"type":"string"},"source":{"type":"object","properties":{"type":{"type":"string"},"ref":{"type":"string"},"capturedAt":{"type":"string"}},"required":["type","ref","capturedAt"]},"sampleSize":{"type":"number","minimum":0}},"required":["dimension","magnitude","description","source","sampleSize"]}},"minGap":{"type":"number","minimum":0,"maximum":1},"minSampleSize":{"type":"number","minimum":0},"persist":{"type":"boolean"}},"required":["stated","revealed"]},"creditCost":5,"usdEstimate":"0.05","freeTier":false,"requiredPermissions":["basic"],"exchangeProfile":null,"substratePrimitives":["Claim","Alternative"],"restricted":false},{"name":"luu_misalignment_list","description":"List persisted misalignment findings for the current user.\n\nReturns recent stated-vs-revealed misalignment findings, optionally filtered\nby status (open / acknowledged / resolved / dismissed) or classification\n(minor / material / critical). Each finding includes the crux of the\nmisalignment, the recommended action, and the two sides (stated vs. revealed)\nof the comparison.\n\nINPUT: optional status, classification, limit (default 20, max 100).\nOUTPUT: array of misalignment findings, most recent first.","inputSchema":{"type":"object","properties":{"status":{"type":"string","enum":["open","acknowledged","resolved","dismissed"]},"classification":{"type":"string","enum":["minor","material","critical"]},"limit":{"type":"number","minimum":1,"maximum":100},"offset":{"type":"number","minimum":0}}},"creditCost":5,"usdEstimate":"0.05","freeTier":false,"requiredPermissions":["basic"],"exchangeProfile":null,"substratePrimitives":["Claim"],"restricted":false},{"name":"luu_note_review","description":"Review an analyst note against ICD 203 Analytic Tradecraft Standards.\n\nEvaluates the note across all 9 Analytic Tradecraft Standards:\n- ATS 1: Source Quality / Credibility\n- ATS 2: Uncertainty Expression\n- ATS 3: Fact / Assumption / Judgment Distinction\n- ATS 4: Alternative Analysis\n- ATS 5: Customer Relevance / Implications\n- ATS 6: Logical Argumentation\n- ATS 7: Consistency / Change Explanation\n- ATS 8: Accuracy (when applicable)\n- ATS 9: Effective Presentation\n\nReturns:\n- Overall tradecraft score (0-100)\n- Per-ATS scores\n- Paragraph-level annotations with specific findings\n- Structured feedback (strengths, weaknesses, missing elements)\n- Suggested rewrites (in deep mode)\n\nThree review modes:\n- quick: Fast structural checks only (~5s)\n- standard: Full evaluation with behavioral scoring (~15s)\n- deep: Full evaluation plus suggested rewrites (~30s)","inputSchema":{"type":"object","properties":{"note_text":{"type":"string","description":"The analyst note text to review (max 50,000 characters)"},"review_mode":{"type":"string","enum":["quick","standard","deep"],"description":"Review depth: quick (structural only), standard (full evaluation), deep (with rewrites)","default":"standard"},"output_mode":{"type":"string","enum":["standard","tradecraft"],"description":"Output format style","default":"standard"},"policy_framework":{"type":"string","enum":["icd203"],"description":"Policy framework to evaluate against","default":"icd203"},"canadian_profiles":{"type":"array","items":{"type":"string","enum":["ca-cse-estimative","ca-itac-threat","ca-priorities","ca-nttl","ca-risk-exposure","ca-handling-review"]},"description":"Optional Canadian analytic-tradecraft alignment profiles to evaluate (e.g. ca-cse-estimative for the Canadian CSE estimative scale; ca-itac-threat for intent/capability/opportunity coverage). Informed by published Canadian doctrine; NOT an official IC product."},"canadian_estimative_scheme":{"type":"string","enum":["ICD-203","CA-CSE-CyberCentre"],"description":"Estimative scale for the ca-cse-estimative check. Defaults to CA-CSE-CyberCentre."},"include_reasoning_trace":{"type":"boolean","description":"Include detailed reasoning trace in output","default":false}},"required":["note_text"]},"creditCost":5,"usdEstimate":"0.05","freeTier":true,"requiredPermissions":["deep_analysis"],"exchangeProfile":"evidence_pack","substratePrimitives":["Claim","Evidence","Source","Alternative","InformationGap","UncertaintyEstimate"],"restricted":false},{"name":"luu_objective_lens","description":"Project a strategic context through a specific objective (SCO §6.7A Objective Lens Profile).\n\nWHAT IT DOES: Takes an Entity Snapshot + a Decision Context (with stated objective) and produces a goal-conditioned projection that reweights salience, assigns impact direction (helps/hurts/mixed/unknown) and action posture (FYI/Watch/Explore/Act) to every relevant artifact — without changing the base snapshot's probability estimates or confidence intervals.\n\nTHE KEY INVARIANT: The lens changes what matters; it does NOT change what is true. Same evidence, same probabilities — different strategic meaning relative to the objective.\n\nUSE CASES:\n- Campaign planning: \"What does this landscape mean for blocking Bill X before third reading?\"\n- Investment analysis: \"What does this market view mean for our 18-month diversification mandate?\"\n- Competitive strategy: \"What does this actor map mean for our Q4 acquisition objective?\"\n- Opposite-side testing: run lenses for opposing objectives on the same snapshot to verify they produce mirrored salience without falsifying any base claims.\n\nINPUT:\n- base_snapshot_ref (required): ID of the Entity Snapshot to project through\n- decision_context (required): the objective, constraints, risk appetite, hard limits\n- objective_id (optional): which objective from decision_context.objectives to use (defaults to first)\n- lens_type (optional): domain_tracking | objective_lens | campaign | decision_support\n- options.min_relevance_threshold (optional, default 0.1): minimum relevance_to_objective to include\n- options.max_links (optional, default 20): maximum GoalImpactLinks to return\n\nOUTPUT (ObjectiveLens profile):\n- objective_lens_id: unique identifier\n- base_context_ref: echoes the input snapshot ref\n- goal_impact_links[]: one per relevant artifact with relevance_to_objective, impact_direction, impact_strength, controllability, time_sensitivity, action_posture, rationale\n- information_gap_priorities[]: gaps re-ranked by objective importance\n- action_triggers[]: signposts that would trigger a posture change to 'act'\n- salience_overrides: artifact IDs → [0,1] salience weight\n- lens_rationale: explanation of the lens construction\n\nCOST: 15 credits ($0.15). The tool calls the augmentation layer with the 'objective_lens' workflow shape.\n\nEPISTEMIC NOTE: This tool computes an Objective Lens from the Entity Snapshot data currently in the system. If the snapshot is stale, the lens will reflect stale terrain. Always pair with a freshness check (luu_get_snapshot) for time-sensitive objectives.","inputSchema":{"type":"object","required":["base_snapshot_ref","decision_context"],"properties":{"base_snapshot_ref":{"type":"string","description":"Reference ID of the Entity Snapshot (or other SCO artifact) to project through the lens."},"decision_context":{"type":"object","required":["objectives"],"description":"The decision context specifying the objective, constraints, and risk appetite.","properties":{"objectives":{"type":"array","items":{"type":"string"},"description":"Strategic objectives guiding the analysis. At least one is required."},"risk_appetite":{"type":"string","enum":["conservative","moderate","aggressive","custom"],"description":"Risk appetite for the objective."},"hard_limits":{"type":"array","items":{"type":"string"},"description":"Non-negotiable constraints that the lens must respect."},"constraints":{"type":"array","items":{"type":"string"},"description":"Soft constraints or preferences."},"time_horizon":{"type":"string","description":"ISO 8601 duration or date by which the objective must be achieved."},"mandate_holder":{"type":"string","description":"Who holds the decision mandate for this objective."}}},"objective_id":{"type":"string","description":"Identifier of the specific objective to condition the lens on. Defaults to the first objective."},"lens_type":{"type":"string","enum":["domain_tracking","objective_lens","campaign","decision_support"],"description":"Classification of the lens by purpose. Affects which SCB scoring metrics apply."},"options":{"type":"object","properties":{"min_relevance_threshold":{"type":"number","minimum":0,"maximum":1,"description":"Minimum relevance_to_objective to include in goal_impact_links. Default 0.1."},"max_links":{"type":"number","minimum":1,"maximum":100,"description":"Maximum number of GoalImpactLinks to return. Default 20."},"include_exclusions":{"type":"boolean","description":"If true, include excluded_artifact_refs in the response."}}}}},"creditCost":5,"usdEstimate":"0.05","freeTier":false,"requiredPermissions":["basic"],"exchangeProfile":null,"substratePrimitives":[],"restricted":false},{"name":"luu_ontology","description":"Returns the user's complete strategic context as a Strategic Cognition Ontology (SCO) instance — the single best \"cold start\" call for any agent needing to understand this user before acting. The SCO is a validation-oriented application ontology for representing strategic-analytic judgments under uncertainty. All SCO classes model epistemic artifacts — the structured outputs of analytical processes — rather than real-world entities directly. An sco:Actor is a characterization of an actor within a specific analytical context, not the real-world entity itself.\n\nThe SCO supports three conformance levels for progressive adoption: Core (minimum viable: userId, SLS, views, predictions, actors, signals), Standard (adds drivers, assumptions, citations, storylines for tradecraft compliance), and Full (all 15 artifact types with SHACL + OWL + SKOS validation).\n\nIncludes Strategic Living Script (SLS), active views with confidence levels and provenance citations, prediction portfolio with update logs, tracked actors with relationships and theory of mind, storylines with events/signposts/impacts, information gaps, alternative hypotheses, scenarios, evidence items, sources, indicators, decision points, triggers, and recent signal summaries with references. AnalystProfile is an optional companion module (Application Profile, not Core Ontology) capturing consumer preferences for presentation adaptation.\n\nINPUT: Optional depth (\"summary\" for quick overview, \"full\" for complete context — default: full). Optional include (array of artifact types: \"sls\", \"views\", \"predictions\", \"analystProfile\", \"mentalModel\", \"actors\", \"signals\", \"storylines\", \"informationGaps\", \"scenarios\", \"alternatives\", \"actorRelationships\", \"evidence\", \"sources\", \"indicators\", \"decisionPoints\", \"triggers\", \"events\", \"topics\", \"relationships\", \"alternativeHypotheses\" — default: all). Optional format: \"json\" (default), \"markdown\", or \"jsonld\" (JSON-LD with @context for linked-data consumers).\n\nOUTPUT: Structured JSON ontology with all requested artifact types, plus human-readable summary. When format=jsonld, returns application/ld+json with the SCO @context for semantic interoperability. SHACL conformance validation is available server-side — all instances are validated against SCO shape constraints (confidence in [0,1], valid enumerations, required fields, ISO 8601 timestamps). Uncertainty semantics adopt ICD-203's published probability-term ranges as the normative calibration standard. Includes freshness indicators (generatedAt timestamp) and metadata (latency, depth). Cached for 1 hour.\n\nWHEN TO USE THIS: Call this FIRST in any multi-tool workflow. Before generating forecasts, briefs, or risk assessments, the ontology tells you what the user cares about, what they already believe (views), what they're already tracking (predictions), and how they prefer to receive analysis (analyst profile). This prevents misaligned recommendations and redundant analysis.\n\nARTIFACT TYPES (epistemic artifacts, not real-world entities):\n- SLS: Strategic Living Script — integrated narrative artifact of the strategic landscape.\n- Views: Epistemic assessment artifacts with confidence, posture, stability, and provenance.\n- Predictions: Calibrated forecast artifacts with probabilities, update logs, base rates, and resolution criteria.\n- AnalystProfile: Optional companion module for presentation adaptation (Application Profile, not Core Ontology).\n- Actors: Representations of entities within the analyst's worldview, not the real-world entities themselves.\n- Signals: Recent signal artifacts with posture classification.\n- Storylines: Temporal narrative arc artifacts with events, signposts, and multi-object grouping.\n- Information Gaps: Acknowledged unknowns in evidence coverage.\n- Scenarios: Alternative future artifacts with trigger conditions and probabilities.\n- Alternative Hypotheses: Competing interpretations of evidence relative to primary views.\n- Evidence: Structured evidence item artifacts with polarity and quality scores.\n- Sources: Tracked information source artifacts with credibility ratings.\n- Indicators: Watchlist artifacts with traffic-light states and thresholds.\n- Decision Points: Strategic decision artifacts with options, consequences, and recommendations.\n- Triggers: Conditional activation rule artifacts linked to indicators and predictions.\n\nVALIDATION-ORIENTED COMPLIANCE: The SCO is validation-heavy and inference-light — its primary semantic value lies in identity discipline, provenance tracking, vocabulary stability, and cross-system queryability. Formalized as OWL 2 RL with SHACL shapes for instance validation and SKOS concept schemes for controlled vocabularies. JSON-LD context enables semantic interoperability.\n\nEXAMPLE USAGE: Full context: {} (no params needed). Quick overview only: {depth: \"summary\"}. Just views and predictions: {include: [\"views\", \"predictions\"]}. Actor network: {include: [\"actors\", \"actorRelationships\"]}. Linked data: pass Accept: application/ld+json header or use format=jsonld.\n\nLIMITATIONS: Ontology completeness depends on user engagement with the platform. New users may have sparse ontologies. Cached for 1 hour.\n\nCOMPLEMENTS: After reading the ontology, use luu_forecast, luu_brief, or luu_risk_assessment with alignment to the user's views and priorities.","inputSchema":{"type":"object","properties":{"depth":{"type":"string","description":"Level of detail: \"summary\" for quick overview, \"full\" for complete context","enum":["summary","full"],"default":"full"},"include":{"type":"array","description":"Components to include. If not specified, includes all.","items":{"type":"string","enum":["sls","views","predictions","mentalModel","actors","signals","storylines","informationGaps","alternatives","actorRelationships","evidence","sources","indicators","decisionPoints","triggers","events","topics","relationships","alternativeHypotheses","decisionRecords","actionRequests","actionExecutions","outcomeObservations","afterActionReviews"]}},"include_reasoning_trace":{"type":"boolean","description":"Include a structured reasoning trace showing how the answer was derived."}},"required":[]},"creditCost":1,"usdEstimate":"0.01","freeTier":false,"requiredPermissions":["ontology"],"exchangeProfile":null,"substratePrimitives":["Claim","Evidence","Source","Attribution","DecisionFrame"],"restricted":false},{"name":"luu_predictions","description":"Manages the user's prediction portfolio — a tracked record of probabilistic forecasts with full update history for calibration scoring. This is a CRUD tool for persistent predictions, not a forecasting engine (use luu_forecast to generate estimates, then store them here).\n\nINPUT: action (\"list\", \"create\", \"update\", \"get\"). For create: question (string), probability (0-1), optional rationale and deadline. For update: id (string), optional probability/rationale/status. For list: optional status filter, limit (default 50), offset for pagination.\n\nOUTPUT (list): Predictions grouped by status (committed/draft/resolved/archived) with probability, question, deadline, and ID. OUTPUT (get): Full prediction detail with rationale, creation/update timestamps, and resolution info. OUTPUT (create/update): Confirmation with updated prediction state.\n\nPREDICTION LIFECYCLE: draft → committed → resolved. Create predictions with initial probability estimates. Update probabilities as new information emerges (full history preserved). Commit to \"lock in\" before resolution. Resolve when outcome is known to score calibration.\n\nSTATUSES: draft (working estimate, still updating), committed (locked in, scored when resolved), archived (no longer tracking), resolved (outcome determined).\n\nEXAMPLE USAGE: Create: {action: \"create\", question: \"Will EU AI Act enforcement begin before July 2025?\", probability: 0.72, rationale: \"Implementation timeline suggests delays\", deadline: \"2025-07-01\"}. Update: {action: \"update\", id: \"pred_xyz\", probability: 0.85, rationale: \"New enforcement guidance published\"}.\n\nDIFFERENTIATION: Unlike one-shot forecasts, predictions persist and build a scored track record. The update history reveals how thinking evolved — essential for calibration training and institutional memory.\n\nLIMITATIONS: Predictions are per-user — no shared/team portfolios yet. Resolution is manual (user marks resolved). No automated scoring against external data sources.\n\nCOMPLEMENTS: Use luu_forecast to generate initial probability estimates. Use luu_signals to identify when predictions need updating. Use luu_ontology to see predictions in the context of the user's full strategic landscape.","inputSchema":{"type":"object","properties":{"action":{"type":"string","enum":["list","create","update","get"],"description":"Action to perform. Default: list"},"id":{"type":"string","description":"Prediction ID (required for get/update)"},"rationale":{"type":"string","description":"Reasoning behind the prediction"},"deadline":{"type":"string","format":"date","description":"When prediction should resolve (YYYY-MM-DD)"},"status":{"type":"string","enum":["draft","committed","archived"],"description":"Prediction status (for update)"},"limit":{"type":"number","description":"Max predictions to return (list only). Default: 50"},"offset":{"type":"number","description":"Pagination offset (list only). Default: 0"},"include_reasoning_trace":{"type":"boolean","description":"Include a structured reasoning trace showing how the answer was derived."}},"required":[]},"creditCost":3,"usdEstimate":"0.03","freeTier":false,"requiredPermissions":["predictions"],"exchangeProfile":null,"substratePrimitives":["Claim","UncertaintyEstimate"],"restricted":false},{"name":"luu_record_outcome","description":"Record decision outcomes, action results, outcome observations, or after-action reviews to close the SCO-DA (Decision-Action Interoperability) feedback loop.\n\nThis tool enables the bidirectional learning cycle: the strategic cognition layer emits judgment artifacts (views, predictions, decision points); downstream systems execute decisions and actions; this tool records what happened — closing the loop so the strategic layer can learn and update.\n\nSupports four feedback types:\n- **decision_record**: Record that a decision was made (who, when, which option, rationale, confidence)\n- **action_execution**: Record that an action was executed (status, result, metrics)\n- **outcome_observation**: Record what happened after a decision/action (expected vs actual, consequences)\n- **after_action_review**: Structured quality evaluation (what worked, what failed, lessons learned)\n\nEach recorded feedback item is stored and triggers a CloudEvent notification to any subscribed webhook consumers.\n\nINPUT: feedback_type (required), plus the fields belonging to that type. Fields that do not belong to the given feedback_type are REJECTED rather than dropped, so a successful call means every field you supplied was recorded. All types accept optional external_refs for cross-system identifier mapping.\n\nRequired per type:\n- decision_record: decision_point_id, decided_by, rationale\n- action_execution: action_request_id, executed_by, status\n- outcome_observation: description\n- after_action_review: decision_record_id, reviewed_by\n\nTo close the learning loop on an outcome_observation, pass affected_view_ids and/or affected_prediction_ids — these are what let the strategic layer adjust view confidence and resolve the related predictions.\n\nOUTPUT: Confirmation with created feedback ID.\n\nWHEN TO USE: After a decision has been made on a DecisionPoint, after an action completes, when outcomes diverge from expectations, or during periodic quality reviews.","inputSchema":{"type":"object","properties":{"feedback_type":{"type":"string","enum":["decision_record","action_execution","outcome_observation","after_action_review"],"description":"Type of feedback to record"},"decision_point_id":{"type":"string","description":"ID of the related DecisionPoint (for decision_record)"},"decided_by":{"type":"string","description":"Who made the decision (human or system identifier)"},"selected_option_id":{"type":"string","description":"ID of the selected DecisionOption"},"rationale":{"type":"string","description":"Rationale for the decision or review findings"},"confidence":{"type":"number","description":"Confidence in the decision (0.0-1.0)"},"capture_method":{"type":"string","enum":["system_api","human_structured","human_freeform"],"description":"How the decision was captured"},"action_request_id":{"type":"string","description":"ID of the related ActionRequest (for action_execution)"},"action_execution_id":{"type":"string","description":"ID of the ActionExecution this outcome followed (for outcome_observation)"},"decision_record_id":{"type":"string","description":"ID of the related DecisionRecord (for outcome_observation and after_action_review)"},"executed_by":{"type":"string","description":"Who executed the action"},"status":{"type":"string","description":"Execution status","enum":["in_progress","completed","failed","cancelled","rolled_back"]},"result":{"type":"string","description":"Action result or outcome description"},"description":{"type":"string","description":"Outcome description (for outcome_observation)"},"expected_outcome":{"type":"string","description":"What was expected to happen"},"delta":{"type":"string","description":"How reality differed from expectation"},"severity":{"type":"string","enum":["positive","neutral","negative"],"description":"Outcome severity/valence"},"affected_view_ids":{"type":"array","items":{"type":"string"},"description":"IDs of StrategicViews this outcome bears on (for outcome_observation). Their confidence is adjusted from the outcome's severity."},"affected_prediction_ids":{"type":"array","items":{"type":"string"},"description":"IDs of predictions this outcome resolves (for outcome_observation). They are marked resolved from the outcome's severity."},"metrics":{"type":"object","description":"Quantitative outcomes as an object keyed by metric name with numeric values, e.g. { savings_pct: 8 } (for action_execution and outcome_observation)"},"external_refs":{"type":"array","items":{"type":"object"},"description":"Cross-system identifier mappings for the recorded artifact"},"outcome_observation_ids":{"type":"array","items":{"type":"string"},"description":"IDs of the OutcomeObservations under review (for after_action_review)"},"reviewed_by":{"type":"string","description":"Who conducted the review (for after_action_review)"},"what_worked":{"type":"array","items":{"type":"string"},"description":"What worked well (for after_action_review)"},"what_failed":{"type":"array","items":{"type":"string"},"description":"What failed (for after_action_review)"},"lessons_learned":{"type":"array","items":{"type":"string"},"description":"Lessons learned (for after_action_review)"}},"required":["feedback_type"]},"creditCost":5,"usdEstimate":"0.05","freeTier":false,"requiredPermissions":["basic"],"exchangeProfile":"decision_action_event","substratePrimitives":["DecisionFrame","ChangeReason"],"restricted":false},{"name":"luu_request_action","description":"Request an action from a downstream execution system based on a strategic decision.\n\nCreates an ActionRequest artifact in the SCO-DA (Decision-Action Interoperability) layer. The request is recorded and can be tracked through its lifecycle (pending → accepted → completed/rejected/expired).\n\nUse this after a decision has been made on a DecisionPoint to initiate downstream execution. The action request captures what needs to be done, who requested it, the target system, priority, and deadline.\n\nINPUT: action (what to do), target (what to act on), plus optional decision linkage, priority, and deadline.\n\nOUTPUT: Confirmation with created action request ID.\n\nWHEN TO USE: After a DecisionPoint has been decided and action needs to be taken in an external system (e.g., Jira ticket creation, trade execution, team notification).","inputSchema":{"type":"object","properties":{"action":{"type":"string","description":"What action to perform (e.g., \"create_ticket\", \"send_alert\", \"schedule_meeting\")"},"target":{"type":"string","description":"What to act on (e.g., system name, team, resource)"},"decision_record_id":{"type":"string","description":"ID of the related DecisionRecord that triggered this action"},"decision_point_id":{"type":"string","description":"ID of the related DecisionPoint"},"priority":{"type":"string","enum":["critical","high","medium","low"],"description":"Action priority level"},"deadline":{"type":"string","format":"date-time","description":"Deadline for action completion (ISO 8601)"},"arguments":{"type":"object","description":"Additional action parameters as key-value pairs"}},"required":["action","target"]},"creditCost":5,"usdEstimate":"0.05","freeTier":false,"requiredPermissions":["basic"],"exchangeProfile":"decision_action_event","substratePrimitives":[],"restricted":false},{"name":"luu_revealed_decisions","description":"Retrieves INFERRED decisions/actions of the user's tracked external actors — what they appear to be DOING (revealed behaviour), distinct from what they SAY (stated position) or what a forecast predicts. Inferred from the open-source signal stream (news / filings / markets / social) read through a decide/act lens, with a decorrelated critic rejecting overclaims.\n\nINPUT: No required parameters. Optional: actor_id (restrict to one tracked actor's history), limit (1-100, default 25).\n\nOUTPUT: Array of revealed decisions, each with actor, inferred decisionType + actionType, the disciplined hypothesis text, status (weak_signal → corroborated → likely_decision → observed_execution → outcome_observed), confidence (0-1), alternative explanations, expected follow-on actions, falsifiable signposts, and sources.\n\nEPISTEMIC DISCIPLINE: These are HYPOTHESES, never assertions of intent. Each carries alternatives + signposts; treat confidence as calibrated, not certain. Use the signposts to track whether the inferred decision is confirmed or broken over time.\n\nCOMPLEMENTS: Use luu_views / luu_landscape for the actor's stated positions + your strategic frame; contrast them with these revealed reads to spot stated-vs-revealed divergence.\n\nLIMITATIONS: Coverage depends on the actor being tracked + the open-source signal flow. Inert (returns none) unless the revealed-actions scan has run for the user.","inputSchema":{"type":"object","properties":{"actor_id":{"type":"string","description":"Optional: restrict to one tracked actor's revealed-decision history (UUID)."},"limit":{"type":"number","description":"Maximum decisions to return. Default 25, max 100.","minimum":1,"maximum":100}},"required":[]},"creditCost":5,"usdEstimate":"0.05","freeTier":false,"requiredPermissions":["basic"],"exchangeProfile":null,"substratePrimitives":[],"restricted":false},{"name":"luu_risk_assessment","description":"Produces multi-dimensional risk assessments for strategic decisions or issues, returning calibrated risk levels (low/medium/high/critical) with probability estimates, per-dimension breakdowns, actionable mitigations, and early warning signposts. Unlike generic risk matrices, this provides narrative rationale for each dimension and cross-dimensional interaction analysis.\n\nINPUT: topic (string, max 1000 chars — the strategic issue or decision). Optional: context (background, organizational details), risk_dimensions (array to focus analysis — if omitted, all relevant dimensions are assessed).\n\nOUTPUT: Structured assessment with overallRisk (low/medium/high/critical), probability of adverse outcome (0-1), dimensional analysis (per-dimension risk level + rationale), timeHorizon, recommended mitigations (actionable strategies), and signposts (early warning indicators). Includes model metadata and trace ID.\n\nRISK DIMENSIONS:\n- financial: Market, liquidity, credit, investment, and currency exposure risks.\n- regulatory: Legal compliance, policy changes, enforcement actions, licensing.\n- reputational: Brand damage, public perception, stakeholder trust erosion.\n- operational: Process failures, supply chain disruption, technology dependencies, personnel.\n- geopolitical: Sovereign risk, sanctions, armed conflict, trade policy shifts.\n\nEXAMPLE QUERIES: topic=\"Expanding operations into Southeast Asian semiconductor manufacturing\"; topic=\"Acquiring a pre-revenue AI startup at 50x revenue multiple\", context=\"We are a mid-cap SaaS company with $200M cash\", risk_dimensions=[\"financial\", \"regulatory\", \"operational\"].\n\nDIFFERENTIATION: Goes beyond risk identification to provide calibrated probability estimates and structured mitigations. Each dimension includes specific rationale rather than generic risk labels. Signposts enable proactive monitoring rather than reactive crisis management.\n\nLIMITATIONS: Latency ~30-60s. Assessment quality scales with input specificity — vague topics produce generic risk frameworks. Best for strategic/organizational decisions; not designed for quantitative financial risk modeling (VaR, etc.).\n\nCOMPLEMENTS: Use luu_forecast to quantify specific risk scenarios identified in the assessment. Use luu_scenario_analysis to explore how different risk materializations would unfold. Check luu_signals for real-time indicators related to identified risk dimensions.","inputSchema":{"type":"object","properties":{"topic":{"type":"string","description":"The strategic issue or decision to assess. Example: \"Expanding operations into Southeast Asian semiconductor manufacturing\""},"context":{"type":"string","description":"Additional context to inform the assessment. Include relevant background, constraints, or organizational details."},"risk_dimensions":{"type":"array","items":{"type":"string","enum":["financial","regulatory","reputational","operational","geopolitical"]},"description":"Specific risk dimensions to analyze. If omitted, all relevant dimensions are assessed."},"include_reasoning_trace":{"type":"boolean","description":"Include a structured reasoning trace showing how the answer was derived."},"output_mode":{"type":"string","enum":["standard","tradecraft"],"description":"Output style. standard=conversational strategic advisor voice (default). tradecraft=ICD 203 compliant analytical product with formal tradecraft metadata."}},"required":["topic"]},"creditCost":10,"usdEstimate":"0.10","freeTier":false,"requiredPermissions":["deep_analysis"],"exchangeProfile":"risk_timeseries","substratePrimitives":["Claim","UncertaintyEstimate","InformationGap"],"restricted":false},{"name":"luu_row_connectors_list","description":"List the row-connector types available for ingesting operational data.\n\nRow connectors map external operational systems to NorthBrief strategic\nentities, enabling stated-vs-revealed alignment detection. Each connector\ndeclares which entity types it can produce (goal, initiative, exposure,\nactor, etc.).\n\nThis tool returns a discovery payload only — actual ingestion runs are\nconfigured via the workspace settings UI with per-tenant credentials.\n\nINPUT: none.\nOUTPUT: array of { type, name, supportedTargets[] } describing each connector.","inputSchema":{"type":"object","properties":{}},"creditCost":5,"usdEstimate":"0.05","freeTier":false,"requiredPermissions":["basic"],"exchangeProfile":null,"substratePrimitives":[],"restricted":false},{"name":"luu_scenario_analysis","description":"Generates 2-5 weighted future scenarios for a strategic question, each with calibrated probabilities (summing to ~1.0), narrative descriptions, signposts for early detection, and decision-maker implications. This is structured scenario planning — not brainstorming — producing mutually exclusive, collectively exhaustive futures grounded in current evidence.\n\nINPUT: question (string, max 2000 chars — the strategic uncertainty to explore). Optional: evidence (array of current data points to anchor analysis), num_scenarios (2-5, default 3), time_horizon (e.g., \"6 months\", \"2025-2027\", \"next US election cycle\").\n\nOUTPUT: Structured analysis with keyUncertainties (main drivers of divergence), baseAssumptions (common across all scenarios), and scenarios array. Each scenario includes: name (descriptive label), probability (0-1), description (narrative of how it unfolds), signposts (early indicators it's materializing), implications (what it means for decisions). Includes model metadata and trace ID.\n\nEXAMPLE QUERIES: question=\"How will EU AI regulation evolve and impact US tech companies?\", evidence=[\"EU AI Act passed March 2024\", \"OpenAI opened Dublin office\"], time_horizon=\"2025-2027\"; question=\"What happens to US-China tech decoupling under different 2025 trade scenarios?\", num_scenarios=4.\n\nWHEN TO USE: When a question has multiple plausible outcomes (not just yes/no), when you need to map decision strategies to different futures, or when stakeholders need to stress-test plans against divergent scenarios. Use 2 scenarios for binary-adjacent questions, 4-5 for complex multi-actor situations.\n\nDIFFERENTIATION: Unlike single-point forecasts (use luu_forecast for those), scenario analysis maps the full possibility space. Unlike generic \"what if\" brainstorming, scenarios are probability-weighted, evidence-grounded, and include actionable signposts for monitoring which scenario is unfolding.\n\nLIMITATIONS: Latency ~30-90s depending on num_scenarios. Scenario quality depends on question specificity and evidence provided. Best for medium-term strategic questions (3 months to 5 years); less useful for short-term operational questions or very long-term speculation.\n\nCOMPLEMENTS: Use luu_forecast for single-probability estimates on specific outcomes. Use luu_risk_assessment to evaluate risk exposure under the most adverse scenario. Use luu_signals to monitor signposts identified in the analysis.","inputSchema":{"type":"object","properties":{"question":{"type":"string","description":"The strategic question to explore. Example: \"How will EU AI regulation evolve and impact US tech companies?\""},"evidence":{"type":"array","items":{"type":"string"},"description":"Current evidence or data points to ground the analysis. Example: [\"EU AI Act passed March 2024\", \"OpenAI opened Dublin office\"]"},"num_scenarios":{"type":"number","description":"Number of scenarios to generate (2-5). Default: 3"},"time_horizon":{"type":"string","description":"Time window for the scenarios. Example: \"6 months\", \"2025-2027\", \"next US election cycle\""},"include_reasoning_trace":{"type":"boolean","description":"Include a structured reasoning trace showing how the answer was derived."},"output_mode":{"type":"string","enum":["standard","tradecraft"],"description":"Output style. standard=conversational strategic advisor voice (default). tradecraft=ICD 203 compliant analytical product with formal tradecraft metadata."}},"required":["question"]},"creditCost":10,"usdEstimate":"0.10","freeTier":false,"requiredPermissions":["deep_analysis"],"exchangeProfile":"scenario_set","substratePrimitives":["Claim","Alternative","UncertaintyEstimate"],"restricted":false},{"name":"luu_seal_decision","description":"Captures a decision and seals it into the cryptographic integrity chain (SCO-DA DecisionRecord). Returns a tamper-evident receipt — record id, SHA-256 content hash, and the daily Merkle anchor — so a call can be put on the record where it is made and scored later against what actually happens.\n\nINPUT: decision (string, required, max 4000 chars — what was decided). Optional: rationale (why), decided_by (who decided), confidence (0-1).\n\nOUTPUT: { recordId, contentHash, decidedBy, sealedAt, verifyUrl }. The record is content-hashed immediately and rolled into that day's Merkle root (publicly anchored at 23:59 UTC), so the decision's timestamp is independently verifiable.\n\nUSE: after a decision is made in a thread or workflow, to create an auditable, tamper-evident record. Complements luu_forecast (the prediction) and luu_record_outcome (the result).","inputSchema":{"type":"object","properties":{"decision":{"type":"string","description":"The decision being recorded. Example: \"Ship the 12% price increase Monday, grandfathering the 38 legacy contracts.\""},"rationale":{"type":"string","description":"Why the decision was made (optional)."},"decided_by":{"type":"string","description":"Who made the decision (optional; defaults to the calling client)."},"confidence":{"type":"number","description":"Confidence in the decision, 0-1 (optional)."}},"required":["decision"]},"creditCost":5,"usdEstimate":"0.05","freeTier":false,"requiredPermissions":["basic"],"exchangeProfile":null,"substratePrimitives":[],"restricted":false},{"name":"luu_search_evidence","description":"Searches NorthBrief's evidence and signal store using ranked keyword retrieval. Returns ranked evidence items with source attribution, confidence scores, and relevance indicators. Unlike luu_signals (which returns the latest prioritized feed), this tool performs targeted retrieval against the full evidence corpus.\n\nINPUT: query (string, max 1000 chars — natural language search query). Optional: sources (filter by source names), date_range (start/end as YYYY-MM-DD), min_confidence (0-1 threshold), limit (max results, default 20).\n\nOUTPUT: Array of evidence items, each containing:\n- id: Evidence item identifier\n- title: Short title or headline\n- summary: Evidence description/extract\n- source: Source name with reliability badge\n- confidence: Confidence score (0-1)\n- relevance: Semantic relevance score (0-1)\n- date: When the evidence was collected\n- url: Original source URL (when available)\n- tags: Associated topic tags\n\nUSE CASES:\n- Find supporting evidence for a specific analytical claim\n- Discover signals related to an emerging topic\n- Build evidence base before generating a forecast or brief\n- Cross-reference multiple sources on a contested fact\n\nEXAMPLE: query=\"rare earth supply chain disruption China\", sources=[\"reuters\", \"ft\"], min_confidence=0.6, limit=10\n\nCOMPLEMENTS: Use luu_fact_check to verify specific claims found in evidence. Use luu_brief to synthesize evidence into a structured brief. Use luu_forecast with evidence context for better-calibrated predictions.\n\n**Cost:** ~$0.002 per query (ranked keyword retrieval)","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Natural language search query. Be specific for better results. Example: \"rare earth supply chain disruption China\""},"sources":{"type":"array","items":{"type":"string"},"description":"Filter results to specific sources. Example: [\"reuters\", \"ft\", \"bloomberg\"]"},"date_range_start":{"type":"string","format":"date","description":"Start date for evidence collection filter (YYYY-MM-DD)."},"date_range_end":{"type":"string","format":"date","description":"End date for evidence collection filter (YYYY-MM-DD)."},"min_confidence":{"type":"number","description":"Minimum confidence score (0-1). Default: 0. Set higher to filter out low-confidence evidence."},"limit":{"type":"number","description":"Maximum results to return. Default: 20, max: 100."},"include_reasoning_trace":{"type":"boolean","description":"Include a structured reasoning trace showing how the answer was derived."},"output_mode":{"type":"string","enum":["standard","tradecraft"],"description":"Output style. standard=conversational (default). tradecraft=ICD 203 compliant with source characterization."}},"required":["query"]},"creditCost":5,"usdEstimate":"0.05","freeTier":false,"requiredPermissions":["basic"],"exchangeProfile":"evidence_pack","substratePrimitives":["Evidence","Source","Attribution"],"restricted":false},{"name":"luu_signals","description":"Retrieves prioritized strategic intelligence signals — curated indicators of emerging developments that may require attention or action. Unlike news feeds or RSS, signals are pre-triaged by strategic relevance and tagged with actionability levels.\n\nINPUT: No required parameters. Optional: action (\"list\" or \"get\"), id (for retrieving specific signal), filter (act/watch/fyi priority), domain (e.g., \"geopolitics\", \"markets\", \"tech\"), since (YYYY-MM-DD date filter), limit (1-100, default 20).\n\nOUTPUT (list): Array of signals grouped by priority, each with title, domain, timestamp, summary, and ID. OUTPUT (get): Full signal detail including analysis, implications, sources with URLs, and related strategic views.\n\nPRIORITY LEVELS:\n- ACT: Requires immediate attention — material developments affecting active decisions or positions. Typically 1-3 per day.\n- WATCH: Emerging trends or developing situations to monitor — may escalate to ACT. Typically 5-10 per day.\n- FYI: Background awareness items — context that informs strategic thinking but requires no immediate action.\n\nDOMAINS: geopolitics, markets, tech, regulatory, energy, defense, trade, climate, and others depending on user configuration.\n\nEXAMPLE USAGE: List ACT-level signals from last 48 hours: {action: \"list\", filter: \"act\", since: \"2025-03-09\"}. Get full detail on a specific signal: {action: \"get\", id: \"sig_abc123\"}.\n\nDIFFERENTIATION: Signals are not raw news — they're analyst-filtered, priority-tagged, and linked to the user's strategic views. Each signal includes \"so what\" implications, not just \"what happened.\"\n\nLIMITATIONS: Signal generation depends on monitoring scope configured per user. Coverage strongest in geopolitics, macro, and tech. Latency: signals typically surface within 2-6 hours of source events.\n\nCOMPLEMENTS: Use luu_views to see how signals connect to the user's strategic positions. Use luu_forecast to quantify probability shifts triggered by a signal.","inputSchema":{"type":"object","properties":{"action":{"type":"string","enum":["list","get"],"description":"Action to perform. list=get signals, get=get specific signal details. Default: list"},"id":{"type":"string","description":"Signal ID (required for action=get)"},"filter":{"type":"string","enum":["act","watch","fyi"],"description":"Filter by priority level"},"domain":{"type":"string","description":"Filter by strategic domain"},"since":{"type":"string","format":"date","description":"Only signals after this date (YYYY-MM-DD)"},"limit":{"type":"number","description":"Maximum number of signals to return. Default: 20, Max: 100"},"include_reasoning_trace":{"type":"boolean","description":"Include a structured reasoning trace showing how the answer was derived."},"output_mode":{"type":"string","enum":["standard","tradecraft"],"description":"Output style. standard=conversational (default). tradecraft=ICD 203 compliant with source reliability tiers."}},"required":[]},"creditCost":1,"usdEstimate":"0.01","freeTier":true,"requiredPermissions":["signals"],"exchangeProfile":null,"substratePrimitives":["Evidence"],"restricted":false},{"name":"luu_subscribe","description":"Manage webhook subscriptions for real-time intelligence alerts.\n\n**Actions:**\n- `create`: Set up a new webhook subscription with topic filters\n- `list`: View your active subscriptions\n- `delete`: Remove a subscription by ID\n\n**How webhooks work:**\n1. Create a subscription with topics and a webhook URL\n2. NorthBrief sends POST requests to your URL when matching events occur\n3. Payloads are signed with HMAC SHA256 using the returned secret\n4. Verify signatures to ensure authenticity\n\n**Alert thresholds:**\n- `any_update`: Receive all matching signals (high volume)\n- `significant`: Only signals with medium+ impact (recommended)\n- `critical`: Only critical/urgent signals (low volume)\n\n**Webhook payload format:**\n```json\n{\n  \"event_type\": \"signal_detected\",\n  \"timestamp\": \"2026-03-14T...\",\n  \"data\": { \"topic\": \"...\", \"summary\": \"...\", \"impact\": \"...\" },\n  \"signature\": \"HMAC-SHA256 of payload\"\n}\n```\n\n**Cost:** $0.005 per operation","inputSchema":{"type":"object","properties":{"action":{"type":"string","enum":["create","list","delete"],"description":"The operation to perform."},"topics":{"type":"string","description":"Array of topic strings to subscribe to (for create action). Example: [\"AI regulation\", \"semiconductor supply chain\"]"},"webhook_url":{"type":"string","description":"HTTPS URL to receive webhook notifications (for create action)."},"alert_threshold":{"type":"string","enum":["any_update","significant","critical"],"description":"Minimum alert level to trigger notifications.","default":"significant"},"subscription_id":{"type":"string","description":"Subscription ID to delete (for delete action)."}},"required":["action"]},"creditCost":1,"usdEstimate":"0.01","freeTier":false,"requiredPermissions":["basic"],"exchangeProfile":null,"substratePrimitives":[],"restricted":true},{"name":"luu_sufficiency_test","description":"Runs the Judgment Workflow Sufficiency Test (SCO Section 3.8.9): a nine-question gate, one question per judgment-substrate primitive (Claim, Evidence, Source, Alternative, UncertaintyEstimate, ChangeReason, Attribution, DecisionFrame, InformationGap). It tells you whether a candidate analytic artefact already instantiates enough of the judgment substrate that a tightly-schema'd vanilla LLM call is sufficient — or whether it needs a minimum scaffold or a full system layer. This is the anti-overengineering check: do not build a platform when a schema will do.\n\nINPUT: artifact (object, required — a JSON-shaped candidate analytic artefact). Optional: narrative (string — accompanying prose for the lexical scan), mode (\"lite\" = structural only, \"standard\" = structural + lexical [default]).\n\nOUTPUT: report with verdict (sufficient / partial / insufficient), per-primitive outcomes (pass / partial / narrative_only / fail), passCount, missingPrimitives (the minimum scaffold for a partial verdict), a recommendation, and a coarse maturity label (L1 / L2 / L3+).\n\nVERDICT BANDS (exhaustive): sufficient (≥8 of 9 pass, 0 narrative-only, 0 fail) → no system layer required; insufficient (≤4 pass, or ≥4 narrative-only) → full system layer recommended; partial otherwise → add the missing primitives.\n\nEXAMPLE: artifact={\"claims\":[{\"proposition\":\"X likely\",\"confidence\":0.7}],\"evidence\":[{\"content\":\"data up\"}]}, mode=\"standard\".","inputSchema":{"type":"object","properties":{"artifact":{"type":"object","description":"JSON-shaped candidate analytic artefact to test against the nine substrate primitives."},"narrative":{"type":"string","description":"Optional accompanying narrative prose; used for the lexical scan in standard mode."},"mode":{"type":"string","enum":["lite","standard"],"description":"Evaluation depth. lite = structural only; standard = structural + lexical (default)."}},"required":["artifact"]},"creditCost":5,"usdEstimate":"0.05","freeTier":false,"requiredPermissions":["basic"],"exchangeProfile":null,"substratePrimitives":[],"restricted":false},{"name":"luu_track_storyline","description":"Fetches the current state of a tracked storyline, returning a comprehensive snapshot of its analytical status. Unlike luu_subscribe (which creates ongoing webhook notifications), this is a one-time read that returns the full storyline context in a single response.\n\nINPUT: Either storyline_id (string — exact storyline to fetch) OR query (string — natural language to find matching storylines). At least one is required.\n\nOUTPUT: Storyline snapshot containing:\n- id: Storyline identifier\n- title: Storyline headline\n- status: Current status (active, dormant, escalating, resolved)\n- narrative: Current narrative summary\n- signposts: Array of monitored signpost indicators with status (watching, triggered, missed)\n- probability_mass: Probability distribution across possible outcomes (only when the storyline models outcome distributions)\n- active_arcs: Narrative arcs currently in play, each with trajectory and evidence\n- last_updated: When the storyline was last analytically updated\n- related_entities: Connected entities, predictions, and views\n\nUSE CASES:\n- Get a quick status check on a storyline mentioned in a brief\n- Review signpost status before updating a related prediction\n- Understand the current narrative arc trajectory\n- Check probability mass distribution across outcomes\n\nEXAMPLE: storyline_id=\"us-china-tech-decoupling-2025\" or query=\"semiconductor export controls storyline\"\n\nDIFFERENTIATION FROM SUBSCRIBE: luu_subscribe sets up a webhook for ongoing push notifications. This tool performs a pull-based one-time fetch of the full storyline state. Use subscribe for monitoring, use track_storyline for point-in-time analysis.\n\nCOMPLEMENTS: Use luu_signals for latest evidence feeding into the storyline. Use luu_forecast to generate fresh probability estimates for storyline outcomes. Use luu_get_judgment_history to see how storyline assessments evolved.\n\n**Cost:** ~$0.002 per query (DB lookup + light computation)","inputSchema":{"type":"object","properties":{"storyline_id":{"type":"string","description":"Exact storyline ID to fetch. Use this when you know the specific storyline."},"query":{"type":"string","description":"Natural language query to find a storyline. Use when you don't know the exact ID. Example: \"semiconductor export controls\""},"include_reasoning_trace":{"type":"boolean","description":"Include a structured reasoning trace showing how the answer was derived."},"output_mode":{"type":"string","enum":["standard","tradecraft"],"description":"Output style. standard=conversational (default). tradecraft=ICD 203 compliant."}}},"creditCost":5,"usdEstimate":"0.05","freeTier":false,"requiredPermissions":["basic"],"exchangeProfile":null,"substratePrimitives":["Claim","Evidence"],"restricted":false},{"name":"luu_views","description":"Retrieves the user's strategic views — their high-level assessments and theses about domains like markets, geopolitics, tech, and regulation. Each view represents a directional belief with a confidence level and is backed by explicitly tracked drivers (tailwinds and headwinds). Essential for aligning recommendations with the user's existing worldview.\n\nINPUT: action (\"list\" or \"get\"), optional id (required for get), optional include_drivers (boolean, default true for get, false for list).\n\nOUTPUT (list): Views grouped by domain, each with title, confidence level (0-1), summary, driver counts (tailwinds vs headwinds), and ID. OUTPUT (get): Full view detail including thesis, confidence with trend direction (↑↓→), all drivers with strength ratings and descriptions, and key assumptions.\n\nDRIVERS are the evidence and factors underlying each view:\n- Tailwinds: Factors supporting the view (with strength rating)\n- Headwinds: Factors opposing the view (with strength rating)\n- Mixed: Factors with ambiguous or conditional impact\n\nEXAMPLE USAGE: List all views: {action: \"list\"}. Get a specific view with drivers: {action: \"get\", id: \"view_abc123\"}.\n\nWHY USE THIS: Before making recommendations, check the user's views to understand their priors. A recommendation that contradicts a high-confidence view needs explicit justification. Views reveal the user's mental model — what they believe, why, and what could change their mind.\n\nDIFFERENTIATION: Views are not static profiles — they're dynamic, tracked beliefs with confidence trends and evidence chains. This is closer to an investment thesis framework than a user preferences file.\n\nLIMITATIONS: Views are user-maintained. Completeness depends on how actively the user updates their strategic landscape. No automated confidence recalibration.\n\nCOMPLEMENTS: Use luu_ontology to get views alongside the full strategic context (SLS, predictions, mental model). Use luu_signals to identify developments that may invalidate or strengthen existing views.","inputSchema":{"type":"object","properties":{"action":{"type":"string","enum":["list","get"],"description":"Action to perform. Default: list"},"id":{"type":"string","description":"View ID (required for action=get)"},"include_drivers":{"type":"boolean","description":"Include drivers for each view. Default: true for get, false for list"},"include_reasoning_trace":{"type":"boolean","description":"Include a structured reasoning trace showing how the answer was derived."}},"required":[]},"creditCost":1,"usdEstimate":"0.01","freeTier":true,"requiredPermissions":["views"],"exchangeProfile":null,"substratePrimitives":["Claim"],"restricted":false}],"primitives":[{"name":"allocate_pace_budget","category":"stability","description":"Allocate today's mutation budget across competing subsystem requests with starvation prevention. Returns per-request grant decisions.","creditCost":1,"usdEstimate":"0.01","freeTier":true,"substratePrimitives":["ChangeReason"],"inputSchema":{"type":"object","properties":{"maxPerDay":{"type":"number","minimum":1,"maximum":1000},"minPerSubsystem":{"type":"number","minimum":0,"maximum":1000},"mutationsUsedToday":{"type":"number","minimum":0},"requests":{"type":"array","items":{"type":"object","properties":{"subsystem":{"type":"string"},"confidence":{"type":"number","minimum":0,"maximum":1},"impact":{"type":"string","enum":["low","medium","high"]}},"required":["subsystem","confidence"]}}},"required":["maxPerDay","requests"]},"outputSchema":{"type":"object","properties":{"slots":{"type":"array","items":{"type":"object","properties":{"subsystem":{"type":"string"},"granted":{"type":"boolean"},"reason":{"type":"string"},"priority":{"type":"number"}},"required":["subsystem","granted","reason","priority"]}},"totalGranted":{"type":"number","minimum":0},"remainingGlobal":{"type":"number","minimum":0}},"required":["slots","totalGranted","remainingGlobal"]}},{"name":"check_persistence_health","category":"persistence","description":"Health check for the persistence layer — pgvector availability, episodic-memory accessibility, graph-engine readiness. Cheap precheck before heavier persistence operations.","creditCost":1,"usdEstimate":"0.01","freeTier":true,"substratePrimitives":[],"inputSchema":{"type":"object","properties":{}},"outputSchema":{"type":"object","properties":{"pgvectorAvailable":{"type":"boolean"},"embeddingDimensions":{"type":"number"},"episodicMemoryReady":{"type":"boolean"},"graphEngineReady":{"type":"boolean"}},"required":["pgvectorAvailable","embeddingDimensions","episodicMemoryReady","graphEngineReady"]}},{"name":"check_regression_robust","category":"scoring","description":"Sample-size-aware regression detection. Tests whether a recent metric is meaningfully worse than a baseline given the n samples available. Requires n>=30 + CI lower bound > baseline + threshold to declare a regression.","creditCost":1,"usdEstimate":"0.01","freeTier":true,"substratePrimitives":["UncertaintyEstimate","ChangeReason"],"inputSchema":{"type":"object","properties":{"recentSuccesses":{"type":"number","minimum":0},"recentTrials":{"type":"number","minimum":1},"baseline":{"type":"number","minimum":0,"maximum":1},"threshold":{"type":"number","minimum":0,"maximum":1},"minSampleSize":{"type":"number","minimum":1},"confidence":{"type":"number","minimum":0.5,"maximum":0.999}},"required":["recentSuccesses","recentTrials","baseline"]},"outputSchema":{"type":"object","properties":{"isRegression":{"type":"boolean"},"reason":{"type":"string"},"ciLow":{"type":"number","minimum":0,"maximum":1},"ciHigh":{"type":"number","minimum":0,"maximum":1},"pointEstimate":{"type":"number","minimum":0,"maximum":1},"delta":{"type":"number"},"sampleSize":{"type":"number"}},"required":["isRegression","reason","ciLow","ciHigh","pointEstimate","delta","sampleSize"]}},{"name":"compare_hashes_constant_time","category":"attestation","description":"Constant-time comparison of two hex-encoded hashes. Use for any secret/proof comparison to avoid timing-attack leakage.","creditCost":1,"usdEstimate":"0.01","freeTier":true,"substratePrimitives":[],"inputSchema":{"type":"object","properties":{"a":{"type":"string"},"b":{"type":"string"}},"required":["a","b"]},"outputSchema":{"type":"object","properties":{"equal":{"type":"boolean"},"sameLength":{"type":"boolean"}},"required":["equal","sameLength"]}},{"name":"compose_decision_frame","category":"synthesis","description":"Compose a Decision Context (SCO §6.7) — question, options, stakes, deadline. The minimal frame around which downstream judgment artifacts cohere.","creditCost":4,"usdEstimate":"0.04","freeTier":true,"substratePrimitives":["DecisionFrame","Alternative","InformationGap"],"exchangeProfile":"decision_context","inputSchema":{"type":"object","properties":{"question":{"type":"string"},"options":{"type":"array","items":{"type":"string"}},"stakes":{"type":"string"},"decisionDeadline":{"type":"string","format":"date-time"},"constraints":{"type":"array","items":{"type":"string"}},"inferredFromText":{"type":"string"}},"required":["question","options","stakes"]},"outputSchema":{"type":"object","properties":{"profile":{"enum":["decision_context"]},"section":{"enum":["SCO §6.7"]},"frame":{"type":"object","properties":{"question":{"type":"string"},"options":{"type":"array","items":{"type":"string"}},"stakes":{"type":"string"},"decisionDeadline":{"type":"string"},"constraints":{"type":"array","items":{"type":"string"}}},"required":["question","options","stakes","constraints"]},"suggestedAlternatives":{"type":"array","items":{"type":"string"}},"suggestedGaps":{"type":"array","items":{"type":"string"}},"durationMs":{"type":"number"}},"required":["profile","section","frame","durationMs"]}},{"name":"compose_evidence_pack","category":"synthesis","description":"Compose a structured Evidence Pack (SCO §6.4) from a claim + array of evidence + sources. Validates ICD 203 §1+§4 coverage at write time.","creditCost":3,"usdEstimate":"0.03","freeTier":true,"substratePrimitives":["Claim","Evidence","Source","Attribution"],"exchangeProfile":"evidence_pack","inputSchema":{"type":"object","properties":{"claim":{"type":"string"},"evidence":{"type":"array","items":{"type":"object","properties":{"content":{"type":"string"},"weight":{"type":"number","minimum":-1,"maximum":1},"sourceId":{"type":"string"},"observedAt":{"type":"string"}},"required":["content","weight"]}},"sources":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"identifier":{"type":"string"},"credibility":{"type":"number","minimum":0,"maximum":1},"conflicts":{"type":"array","items":{"type":"string"}}},"required":["id","identifier","credibility"]}}},"required":["claim","evidence"]},"outputSchema":{"type":"object","properties":{"profile":{"enum":["evidence_pack"]},"section":{"enum":["SCO §6.4"]},"claim":{"type":"string"},"evidenceItems":{"type":"array","items":{}},"sources":{"type":"array","items":{}},"coverage":{"type":"object","properties":{"hasSourceAttribution":{"type":"boolean"},"hasContradictoryEvidence":{"type":"boolean"},"meanCredibility":{"type":"number","minimum":0,"maximum":1},"totalEvidence":{"type":"number"}},"required":["hasSourceAttribution","hasContradictoryEvidence","totalEvidence"]},"issues":{"type":"array","items":{"type":"string"}}},"required":["profile","section","claim","evidenceItems","sources","coverage","issues"]}},{"name":"compute_analytic_delta","category":"synthesis","description":"Compute the Analytic Delta (SCO §6.2) between two snapshots. Returns significance classification (routine / minor / major / critical) with triggering evidence and change rationale.","creditCost":8,"usdEstimate":"0.08","freeTier":true,"substratePrimitives":["Claim","ChangeReason","Evidence"],"exchangeProfile":"analytic_delta","inputSchema":{"type":"object","properties":{"priorSnapshot":{},"currentSnapshot":{},"significanceThreshold":{"type":"string","enum":["routine","minor","major","critical"]}},"required":["priorSnapshot","currentSnapshot"]},"outputSchema":{"type":"object","properties":{"profile":{"enum":["analytic_delta"]},"section":{"enum":["SCO §6.2"]},"significance":{"type":"string","enum":["routine","minor","major","critical"]},"summary":{"type":"string"},"fieldChanges":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"before":{},"after":{}},"required":["path","before","after"]}},"triggeringEvidence":{"type":"array","items":{"type":"string"}},"changeRationale":{"type":"string"},"durationMs":{"type":"number"}},"required":["profile","section","significance","summary","fieldChanges","triggeringEvidence","changeRationale","durationMs"]}},{"name":"compute_beta_binomial_ci","category":"scoring","description":"Compute the Wilson-score / beta-binomial confidence interval for a count of successes out of N trials. Sample-size-aware: returns a wider CI for small N to prevent over-confident regression detection.","creditCost":1,"usdEstimate":"0.01","freeTier":true,"substratePrimitives":["UncertaintyEstimate"],"inputSchema":{"type":"object","properties":{"successes":{"type":"number","minimum":0},"trials":{"type":"number","minimum":1},"confidence":{"type":"number","minimum":0.5,"maximum":0.999}},"required":["successes","trials"]},"outputSchema":{"type":"object","properties":{"pointEstimate":{"type":"number","minimum":0,"maximum":1},"low":{"type":"number","minimum":0,"maximum":1},"high":{"type":"number","minimum":0,"maximum":1},"confidence":{"type":"number"},"n":{"type":"number","minimum":0}},"required":["pointEstimate","low","high","confidence","n"]}},{"name":"compute_canonical_json","category":"attestation","description":"Render any value to canonical JSON (sorted keys, no whitespace, escaped Unicode). Used as the deterministic input to hash_artifact.","creditCost":1,"usdEstimate":"0.01","freeTier":true,"substratePrimitives":[],"inputSchema":{"type":"object","properties":{"value":{}},"required":["value"]},"outputSchema":{"type":"object","properties":{"canonical":{"type":"string"}},"required":["canonical"]}},{"name":"compute_merkle_root","category":"attestation","description":"Build a Merkle tree from a set of artifact hashes and return the root + leaf positions. Used to seal a batch of judgment artifacts into a single attestable root.","creditCost":2,"usdEstimate":"0.02","freeTier":true,"substratePrimitives":["Attribution"],"inputSchema":{"type":"object","properties":{"leafHashes":{"type":"array","items":{"type":"string"}}},"required":["leafHashes"]},"outputSchema":{"type":"object","properties":{"root":{"type":"string"},"leafCount":{"type":"number","minimum":1},"depth":{"type":"number","minimum":0}},"required":["root","leafCount","depth"]}},{"name":"compute_pre_mortem","category":"synthesis","description":"Generate a pre-mortem analysis: assume the plan failed at the time horizon, list the most likely causes ranked by likelihood, with mitigations.","creditCost":8,"usdEstimate":"0.08","freeTier":true,"substratePrimitives":["Alternative","InformationGap","Claim"],"inputSchema":{"type":"object","properties":{"plan":{"type":"string"},"timeHorizon":{"type":"string"},"causeCount":{"type":"number","minimum":3,"maximum":15}},"required":["plan"]},"outputSchema":{"type":"object","properties":{"causes":{"type":"array","items":{"type":"object","properties":{"cause":{"type":"string"},"likelihood":{"type":"number","minimum":0,"maximum":1},"impact":{"type":"string","enum":["low","medium","high","catastrophic"]},"mitigations":{"type":"array","items":{"type":"string"}},"leadingIndicators":{"type":"array","items":{"type":"string"}}},"required":["cause","likelihood","impact","mitigations","leadingIndicators"]}},"durationMs":{"type":"number"}},"required":["causes","durationMs"]}},{"name":"evaluate_revert_watchdog","category":"stability","description":"Evaluate whether a recently-applied change should be reverted because quality has declined past the threshold within the observation window.","creditCost":1,"usdEstimate":"0.01","freeTier":true,"substratePrimitives":["ChangeReason","UncertaintyEstimate"],"inputSchema":{"type":"object","properties":{"changeAppliedAt":{"type":"string","format":"date-time"},"qualityBefore":{"type":"number"},"qualityAfter":{"type":"number"},"windowDays":{"type":"number","minimum":1,"maximum":60},"declineThreshold":{"type":"number","minimum":0,"maximum":1},"now":{"type":"string","format":"date-time"}},"required":["changeAppliedAt","qualityBefore","qualityAfter"]},"outputSchema":{"type":"object","properties":{"shouldRevert":{"type":"boolean"},"reason":{"type":"string"},"qualityDelta":{"type":"number"},"daysSinceChange":{"type":"number"}},"required":["shouldRevert","reason","qualityDelta","daysSinceChange"]}},{"name":"extract_alternatives","category":"extraction","description":"Extract alternative hypotheses considered (or NOT considered) in analyst text. Returns each alternative with plausibility and origin (red-team, base-rate, expert, devil's advocate).","creditCost":6,"usdEstimate":"0.06","freeTier":true,"substratePrimitives":["Alternative"],"inputSchema":{"type":"object","properties":{"text":{"type":"string"},"parentClaim":{"type":"string"},"maxAlternatives":{"type":"number","minimum":1,"maximum":20}},"required":["text","parentClaim"]},"outputSchema":{"type":"object","properties":{"alternatives":{"type":"array","items":{"type":"object","properties":{"proposition":{"type":"string"},"plausibility":{"type":"number","minimum":0,"maximum":1},"origin":{"type":"string"}},"required":["proposition","plausibility","origin"]}},"durationMs":{"type":"number"},"notedAlternativesGap":{"type":"boolean"}},"required":["alternatives","durationMs","notedAlternativesGap"]}},{"name":"extract_assumptions","category":"extraction","description":"Extract assumptions (linchpin, bridge, background) from analyst text. Each assumption carries criticality + failure consequence (what if this is wrong?). Strategic-extension flavored.","creditCost":6,"usdEstimate":"0.06","freeTier":true,"substratePrimitives":["Claim"],"inputSchema":{"type":"object","properties":{"text":{"type":"string"},"maxAssumptions":{"type":"number","minimum":1,"maximum":30}},"required":["text"]},"outputSchema":{"type":"object","properties":{"assumptions":{"type":"array","items":{"type":"object","properties":{"text":{"type":"string"},"criticality":{"type":"string","enum":["linchpin","bridge","background"]},"failureConsequence":{"type":"string"},"status":{"type":"string","enum":["untested","confirmed","challenged"]}},"required":["text","criticality","failureConsequence"]}},"durationMs":{"type":"number"}},"required":["assumptions","durationMs"]}},{"name":"extract_claims","category":"extraction","description":"Extract calibrated claims from free-form analyst text. Returns each claim with type (fact / assumption / judgment / recommendation) and confidence.","creditCost":5,"usdEstimate":"0.05","freeTier":true,"substratePrimitives":["Claim"],"inputSchema":{"type":"object","properties":{"text":{"type":"string"},"maxClaims":{"type":"number","minimum":1,"maximum":50}},"required":["text"]},"outputSchema":{"type":"object","properties":{"claims":{"type":"array","items":{"type":"object","properties":{"text":{"type":"string"},"confidence":{"type":"number","minimum":0,"maximum":1},"type":{"type":"string","enum":["fact","assumption","judgment","recommendation"]}},"required":["text"]}},"durationMs":{"type":"number"}},"required":["claims","durationMs"]}},{"name":"extract_evidence","category":"extraction","description":"Extract evidence items from analyst text. Each item carries a weight in [-1, 1] (negative = contradicts, positive = supports), a type tag, and an observed-at timestamp if mentioned.","creditCost":5,"usdEstimate":"0.05","freeTier":true,"substratePrimitives":["Evidence"],"inputSchema":{"type":"object","properties":{"text":{"type":"string"},"parentClaim":{"type":"string"},"maxEvidence":{"type":"number","minimum":1,"maximum":50}},"required":["text"]},"outputSchema":{"type":"object","properties":{"evidence":{"type":"array","items":{"type":"object","properties":{"content":{"type":"string"},"weight":{"type":"number","minimum":-1,"maximum":1},"type":{"type":"string"},"observedAt":{"type":"string"}},"required":["content","weight","type"]}},"durationMs":{"type":"number"}},"required":["evidence","durationMs"]}},{"name":"extract_information_gaps","category":"extraction","description":"Identify known unknowns in the analyst's frame. Returns each gap with impact (low/medium/high — how much would closing this shift the judgment?) and the artifact that would close it.","creditCost":5,"usdEstimate":"0.05","freeTier":true,"substratePrimitives":["InformationGap"],"inputSchema":{"type":"object","properties":{"text":{"type":"string"},"decisionFrame":{"type":"string"},"maxGaps":{"type":"number","minimum":1,"maximum":20}},"required":["text"]},"outputSchema":{"type":"object","properties":{"gaps":{"type":"array","items":{"type":"object","properties":{"description":{"type":"string"},"impact":{"type":"string","enum":["low","medium","high"]},"closingArtifact":{"type":"string"}},"required":["description","impact"]}},"durationMs":{"type":"number"}},"required":["gaps","durationMs"]}},{"name":"extract_sources","category":"extraction","description":"Extract sources cited in analyst text. Returns each source with identifier, type ('news_article', 'academic_paper', 'government_report', 'expert_interview', etc.), citation text, optional URL, declared conflicts.","creditCost":4,"usdEstimate":"0.04","freeTier":true,"substratePrimitives":["Source"],"inputSchema":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"]},"outputSchema":{"type":"object","properties":{"sources":{"type":"array","items":{"type":"object","properties":{"identifier":{"type":"string"},"type":{"type":"string"},"citationText":{"type":"string"},"url":{"type":"string"},"conflicts":{"type":"array","items":{"type":"string"}}},"required":["identifier","type"]}},"durationMs":{"type":"number"}},"required":["sources","durationMs"]}},{"name":"gate_with_cascade_dampener","category":"stability","description":"Delay downstream reactions to upstream changes by a configurable number of days. Prevents amplification cascades across coupled systems.","creditCost":1,"usdEstimate":"0.01","freeTier":true,"substratePrimitives":["ChangeReason"],"inputSchema":{"type":"object","properties":{"delayDays":{"type":"number","minimum":0,"maximum":30},"upstreamChangeAt":{"type":"string","format":"date-time"},"now":{"type":"string","format":"date-time"}},"required":["upstreamChangeAt"]},"outputSchema":{"type":"object","properties":{"canReact":{"type":"boolean"},"elapsedDays":{"type":"number"},"requiredDays":{"type":"number"}},"required":["canReact","elapsedDays","requiredDays"]}},{"name":"gate_with_confidence","category":"stability","description":"Block a change if its confidence is below the threshold for its impact level. Higher-impact changes require higher confidence.","creditCost":1,"usdEstimate":"0.01","freeTier":true,"substratePrimitives":["UncertaintyEstimate"],"inputSchema":{"type":"object","properties":{"confidence":{"type":"number","minimum":0,"maximum":1},"impact":{"type":"string","enum":["low","medium","high"]},"thresholds":{"type":"object","properties":{"low":{"type":"number","minimum":0,"maximum":1},"medium":{"type":"number","minimum":0,"maximum":1},"high":{"type":"number","minimum":0,"maximum":1}}}},"required":["confidence","impact"]},"outputSchema":{"type":"object","properties":{"passes":{"type":"boolean"},"threshold":{"type":"number","minimum":0,"maximum":1}},"required":["passes","threshold"]}},{"name":"gate_with_cooldown","category":"stability","description":"Enforce a minimum interval (in days) between successive changes to the same target. Prevents rapid-fire mutations.","creditCost":1,"usdEstimate":"0.01","freeTier":true,"substratePrimitives":["ChangeReason"],"inputSchema":{"type":"object","properties":{"cooldownDays":{"type":"number","minimum":0,"maximum":365},"lastChangeAt":{"type":"string","format":"date-time"},"now":{"type":"string","format":"date-time"}},"required":["lastChangeAt"]},"outputSchema":{"type":"object","properties":{"lastChangeAt":{"type":"string","format":"date-time"},"canChange":{"type":"boolean"}},"required":["lastChangeAt","canChange"]}},{"name":"gate_with_hysteresis","category":"stability","description":"Require a condition to be sustained for N consecutive days before allowing a change. Prevents flip-flopping on noisy signals.","creditCost":1,"usdEstimate":"0.01","freeTier":true,"substratePrimitives":["ChangeReason"],"inputSchema":{"type":"object","properties":{"requiredDays":{"type":"number","minimum":1,"maximum":90},"currentState":{"type":"object","properties":{"consecutiveDays":{"type":"number","minimum":0},"lastMetDate":{"type":"string"},"isOpen":{"type":"boolean"}},"required":["consecutiveDays","lastMetDate","isOpen"]},"conditionMet":{"type":"boolean"},"todayDateKey":{"type":"string"}},"required":["currentState","conditionMet","todayDateKey"]},"outputSchema":{"type":"object","properties":{"consecutiveDays":{"type":"number","minimum":0},"lastMetDate":{"type":"string"},"isOpen":{"type":"boolean"}},"required":["consecutiveDays","lastMetDate","isOpen"]}},{"name":"generate_alternatives","category":"synthesis","description":"Generate alternative hypotheses for a parent claim using red-team + base-rate + devil's-advocate techniques. Output is suitable for ICD 203 ATS 4 (analysis of alternatives) compliance.","creditCost":8,"usdEstimate":"0.08","freeTier":true,"substratePrimitives":["Alternative","Claim"],"inputSchema":{"type":"object","properties":{"claim":{"type":"string"},"context":{"type":"string"},"techniques":{"type":"array","items":{"type":"string","enum":["red_team","base_rate","devils_advocate","historical_analogy","first_principles"]}},"count":{"type":"number","minimum":1,"maximum":10}},"required":["claim"]},"outputSchema":{"type":"object","properties":{"alternatives":{"type":"array","items":{"type":"object","properties":{"proposition":{"type":"string"},"plausibility":{"type":"number","minimum":0,"maximum":1},"origin":{"type":"string"},"rationale":{"type":"string"}},"required":["proposition","plausibility","origin","rationale"]}},"durationMs":{"type":"number"}},"required":["alternatives","durationMs"]}},{"name":"generate_information_gaps","category":"synthesis","description":"Generate the information gaps (known unknowns) that, if closed, would most shift the analytic conclusion. Output is suitable for ICD 203 ATS 6 (logical argumentation) compliance.","creditCost":7,"usdEstimate":"0.07","freeTier":true,"substratePrimitives":["InformationGap"],"inputSchema":{"type":"object","properties":{"decisionFrame":{"type":"string"},"evidence":{"type":"array","items":{"type":"string"}},"count":{"type":"number","minimum":1,"maximum":15}},"required":["decisionFrame"]},"outputSchema":{"type":"object","properties":{"gaps":{"type":"array","items":{"type":"object","properties":{"description":{"type":"string"},"impact":{"type":"string","enum":["low","medium","high"]},"closingArtifact":{"type":"string"},"rationale":{"type":"string"}},"required":["description","impact","closingArtifact","rationale"]}},"durationMs":{"type":"number"}},"required":["gaps","durationMs"]}},{"name":"generate_mechanism_map","category":"synthesis","description":"Given a set of strategic drivers and views, generates CausalMechanismClaim hypotheses using the 8-term relation-kind vocabulary. Returns llm_generated claims for analyst review.","creditCost":8,"usdEstimate":"0.08","freeTier":false,"substratePrimitives":["Claim","Evidence","Attribution"],"inputSchema":{"type":"object","properties":{"userId":{"type":"string"},"viewId":{"type":"string","format":"uuid"},"driverId":{"type":"string","format":"uuid"},"context":{"type":"string"}},"required":["userId"]},"outputSchema":{"type":"object","properties":{"claims":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string"},"rationale":{"type":"string"},"relationKind":{"type":"string"},"polarity":{"type":"string"},"confidenceInClaim":{"type":"number"}},"required":["title","rationale","relationKind","polarity","confidenceInClaim"]}},"durationMs":{"type":"number"}},"required":["claims","durationMs"]}},{"name":"hash_artifact","category":"attestation","description":"Compute the canonical SHA-256 content hash of an artifact (object, array, or string). Hash is stable across key ordering and whitespace.","creditCost":1,"usdEstimate":"0.01","freeTier":true,"substratePrimitives":["Attribution"],"inputSchema":{"type":"object","properties":{"content":{}},"required":["content"]},"outputSchema":{"type":"object","properties":{"hash":{"type":"string"},"algorithm":{"enum":["sha256"]},"canonicalJson":{"type":"string"}},"required":["hash","algorithm","canonicalJson"]}},{"name":"mint_envelope","category":"composition","description":"Mint a new JudgmentEnvelope wrapping a bare value. Use at the boundary where data first enters the platform.","creditCost":1,"usdEstimate":"0.01","freeTier":true,"substratePrimitives":[],"inputSchema":{"type":"object","properties":{"value":{},"generatedBy":{"type":"string","enum":["perplexity_searcher","multi_source_searcher","osint_fetcher","gmail_sync","external_mcp_client","filtering_pipeline","source_gate","rapidh_scorer","signal_fusion","novelty_detector","adw_delphi","scaffolded_forecast","pseudo_delphi","ensemble_aggregator","nightly_orchestrator","narrator","strategic_advisor","content_generation","brief_quality_gate","regression_detection","archetype_back_apply","source_quality_update","learning_velocity_compute","feedback_profile_update","context_drift_detector","proposal_applicator","kinetic_apply","sls_auto_evolution","sls_evolution","recalibration_training","blind_spot_detector","counterfactual_engine","linchpin_escalation","view_rigour","ats_score_writer","icd203_enricher","perspective_pack_builder","mechanism_map_writer","user_edit","user_feedback","human_review","test_harness","synthetic_signal"]},"traceId":{"type":"string"},"trust":{"type":"object","properties":{"level":{"type":"string","enum":["trusted","verified","untrusted","adversarial"]},"origin":{"type":"string","enum":["internal","external","user","third_party_mcp","unknown"]},"sensitivity":{"type":"string","enum":["public","internal","confidential","restricted"]},"sanitized":{"type":"boolean"},"permissionScope":{"type":"array","items":{"type":"string"}}},"required":["level","origin","sensitivity","sanitized"]},"transform":{"type":"string"},"version":{"type":"string"}},"required":["value","generatedBy","traceId"]},"outputSchema":{"type":"object","properties":{"value":{},"traceId":{"type":"string"},"provenance":{"type":"array","items":{}},"generatedAt":{"type":"string"},"generatedBy":{"type":"string","enum":["perplexity_searcher","multi_source_searcher","osint_fetcher","gmail_sync","external_mcp_client","filtering_pipeline","source_gate","rapidh_scorer","signal_fusion","novelty_detector","adw_delphi","scaffolded_forecast","pseudo_delphi","ensemble_aggregator","nightly_orchestrator","narrator","strategic_advisor","content_generation","brief_quality_gate","regression_detection","archetype_back_apply","source_quality_update","learning_velocity_compute","feedback_profile_update","context_drift_detector","proposal_applicator","kinetic_apply","sls_auto_evolution","sls_evolution","recalibration_training","blind_spot_detector","counterfactual_engine","linchpin_escalation","view_rigour","ats_score_writer","icd203_enricher","perspective_pack_builder","mechanism_map_writer","user_edit","user_feedback","human_review","test_harness","synthetic_signal"]}},"required":["value","traceId","provenance","generatedAt","generatedBy"]}},{"name":"multi_hop_graph_query","category":"persistence","description":"Traverse the strategic-knowledge graph from a starting node up to N hops. Returns nodes + edges within the BFS frontier with temporal asOf support.","creditCost":3,"usdEstimate":"0.03","freeTier":false,"substratePrimitives":["Attribution","Evidence"],"inputSchema":{"type":"object","properties":{"userId":{"type":"string"},"start":{"type":"object","properties":{"type":{"type":"string","enum":["view","driver","actor","question","storyline","prediction","assumption","goal"]},"id":{"type":"string"}},"required":["type","id"]},"maxHops":{"type":"number","minimum":1,"maximum":5},"asOf":{"type":"string","format":"date-time"},"maxNodes":{"type":"number","minimum":1,"maximum":500}},"required":["userId","start"]},"outputSchema":{"type":"object","properties":{"nodes":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"id":{"type":"string"}},"required":["type","id"]}},"edges":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string"},"from":{"type":"object","properties":{"type":{"type":"string"},"id":{"type":"string"}},"required":["type","id"]},"to":{"type":"object","properties":{"type":{"type":"string"},"id":{"type":"string"}},"required":["type","id"]}},"required":["kind","from","to"]}},"hopsUsed":{"type":"number","minimum":0},"truncated":{"type":"boolean"}},"required":["nodes","edges","hopsUsed","truncated"]}},{"name":"probability_to_icd203_term","category":"scoring","description":"Convert a numeric probability in [0, 1] to the canonical ICD 203 probability vocabulary term ('almost no chance', 'very unlikely', 'unlikely', 'roughly even chance', 'likely', 'very likely', 'almost certain').","creditCost":1,"usdEstimate":"0.01","freeTier":true,"substratePrimitives":["UncertaintyEstimate"],"inputSchema":{"type":"object","properties":{"probability":{"type":"number","minimum":0,"maximum":1}},"required":["probability"]},"outputSchema":{"type":"object","properties":{"term":{"type":"string"},"alternates":{"type":"array","items":{"type":"string"}},"lower":{"type":"number"},"upper":{"type":"number"},"midpoint":{"type":"number"},"guidance":{"type":"string"}},"required":["term","alternates","lower","upper","midpoint","guidance"]}},{"name":"query_judgment_history","category":"persistence","description":"Query the unified episodic-memory layer over 14 event tables (briefs, daily judgments, driver/view/storyline changes, feedback, forecasts, ADW runs, learning, anticipation, etc.). Returns ranked events filtered by type, entity, and time range.","creditCost":3,"usdEstimate":"0.03","freeTier":false,"substratePrimitives":["Evidence","ChangeReason","Attribution"],"inputSchema":{"type":"object","properties":{"userId":{"type":"string"},"eventTypes":{"type":"array","items":{"type":"string","enum":["brief","daily_judgment","driver_change","view_change","storyline_change","feedback","forecast_update","adw_run","thread_evidence","forecast_sealed","learning_change","anticipation_outcome","assignment_response","goal_brief_event"]}},"relatedTo":{"type":"object","properties":{"entityType":{"type":"string","enum":["view","driver","goal","assumption","storyline","actor","signpost","brief"]},"entityId":{"type":"string"}},"required":["entityType","entityId"]},"timeRange":{"type":"object","properties":{"from":{"type":"string","format":"date-time"},"to":{"type":"string","format":"date-time"}}},"semanticQuery":{"type":"string"},"limit":{"type":"number","minimum":1,"maximum":500},"order":{"type":"string","enum":["newest_first","oldest_first","relevance"]}},"required":["userId"]},"outputSchema":{"type":"object","properties":{"events":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"eventType":{"type":"string"},"userId":{"type":"string"},"occurredAt":{"type":"string"},"summary":{"type":"string"},"severity":{"type":"string"},"relatedEntity":{"type":"object","properties":{"entityType":{"type":"string"},"entityId":{"type":"string"}},"required":["entityType","entityId"]},"similarity":{"type":"number"},"sourceTable":{"type":"string"},"sourceRowId":{"type":"string"},"details":{"type":"object","additionalProperties":true}},"required":["id","eventType","userId","occurredAt","summary","sourceTable","sourceRowId"]}},"semanticEnabled":{"type":"boolean"},"tablesQueried":{"type":"number","minimum":0}},"required":["events","semanticEnabled"]}},{"name":"record_transform","category":"composition","description":"Append a transform record to an envelope's provenance chain. Audit trail for every subsystem that touches the envelope.","creditCost":1,"usdEstimate":"0.01","freeTier":true,"substratePrimitives":[],"inputSchema":{"type":"object","properties":{"envelope":{"type":"object","properties":{"value":{},"traceId":{"type":"string"},"provenance":{"type":"array","items":{}},"generatedAt":{"type":"string"},"generatedBy":{"type":"string","enum":["perplexity_searcher","multi_source_searcher","osint_fetcher","gmail_sync","external_mcp_client","filtering_pipeline","source_gate","rapidh_scorer","signal_fusion","novelty_detector","adw_delphi","scaffolded_forecast","pseudo_delphi","ensemble_aggregator","nightly_orchestrator","narrator","strategic_advisor","content_generation","brief_quality_gate","regression_detection","archetype_back_apply","source_quality_update","learning_velocity_compute","feedback_profile_update","context_drift_detector","proposal_applicator","kinetic_apply","sls_auto_evolution","sls_evolution","recalibration_training","blind_spot_detector","counterfactual_engine","linchpin_escalation","view_rigour","ats_score_writer","icd203_enricher","perspective_pack_builder","mechanism_map_writer","user_edit","user_feedback","human_review","test_harness","synthetic_signal"]}},"required":["value","traceId","provenance","generatedAt","generatedBy"]},"subsystem":{"type":"string","enum":["perplexity_searcher","multi_source_searcher","osint_fetcher","gmail_sync","external_mcp_client","filtering_pipeline","source_gate","rapidh_scorer","signal_fusion","novelty_detector","adw_delphi","scaffolded_forecast","pseudo_delphi","ensemble_aggregator","nightly_orchestrator","narrator","strategic_advisor","content_generation","brief_quality_gate","regression_detection","archetype_back_apply","source_quality_update","learning_velocity_compute","feedback_profile_update","context_drift_detector","proposal_applicator","kinetic_apply","sls_auto_evolution","sls_evolution","recalibration_training","blind_spot_detector","counterfactual_engine","linchpin_escalation","view_rigour","ats_score_writer","icd203_enricher","perspective_pack_builder","mechanism_map_writer","user_edit","user_feedback","human_review","test_harness","synthetic_signal"]},"transform":{"type":"string"},"version":{"type":"string"},"at":{"type":"string"}},"required":["envelope","subsystem","transform"]},"outputSchema":{"type":"object","properties":{"value":{},"traceId":{"type":"string"},"provenance":{"type":"array","items":{}},"generatedAt":{"type":"string"},"generatedBy":{"type":"string","enum":["perplexity_searcher","multi_source_searcher","osint_fetcher","gmail_sync","external_mcp_client","filtering_pipeline","source_gate","rapidh_scorer","signal_fusion","novelty_detector","adw_delphi","scaffolded_forecast","pseudo_delphi","ensemble_aggregator","nightly_orchestrator","narrator","strategic_advisor","content_generation","brief_quality_gate","regression_detection","archetype_back_apply","source_quality_update","learning_velocity_compute","feedback_profile_update","context_drift_detector","proposal_applicator","kinetic_apply","sls_auto_evolution","sls_evolution","recalibration_training","blind_spot_detector","counterfactual_engine","linchpin_escalation","view_rigour","ats_score_writer","icd203_enricher","perspective_pack_builder","mechanism_map_writer","user_edit","user_feedback","human_review","test_harness","synthetic_signal"]}},"required":["value","traceId","provenance","generatedAt","generatedBy"]}},{"name":"replay_entity_at_time","category":"persistence","description":"Replay an entity's state at a specific point in time using append-only event-sourced history. Returns the snapshot the entity had at the requested timestamp.","creditCost":5,"usdEstimate":"0.05","freeTier":false,"substratePrimitives":["ChangeReason","Attribution"],"inputSchema":{"type":"object","properties":{"userId":{"type":"string"},"entityType":{"type":"string","enum":["view","driver","storyline","assumption"]},"entityId":{"type":"string"},"asOf":{"type":"string","format":"date-time"}},"required":["userId","entityType","entityId","asOf"]},"outputSchema":{"type":"object","properties":{"inferredState":{"type":"object","additionalProperties":true},"summary":{"type":"string"},"eventsReplayed":{"type":"number","minimum":0},"asOf":{"type":"string","format":"date-time"}},"required":["inferredState","summary","eventsReplayed","asOf"]}},{"name":"report_coverage","category":"composition","description":"Interrogate an envelope and return its substrate-coverage report (which substrate primitives are populated vs missing). Used for ICD 203 ATS scoring.","creditCost":1,"usdEstimate":"0.01","freeTier":true,"substratePrimitives":[],"inputSchema":{"type":"object","properties":{"envelope":{"type":"object","properties":{"value":{},"traceId":{"type":"string"},"provenance":{"type":"array","items":{}},"generatedAt":{"type":"string"},"generatedBy":{"type":"string","enum":["perplexity_searcher","multi_source_searcher","osint_fetcher","gmail_sync","external_mcp_client","filtering_pipeline","source_gate","rapidh_scorer","signal_fusion","novelty_detector","adw_delphi","scaffolded_forecast","pseudo_delphi","ensemble_aggregator","nightly_orchestrator","narrator","strategic_advisor","content_generation","brief_quality_gate","regression_detection","archetype_back_apply","source_quality_update","learning_velocity_compute","feedback_profile_update","context_drift_detector","proposal_applicator","kinetic_apply","sls_auto_evolution","sls_evolution","recalibration_training","blind_spot_detector","counterfactual_engine","linchpin_escalation","view_rigour","ats_score_writer","icd203_enricher","perspective_pack_builder","mechanism_map_writer","user_edit","user_feedback","human_review","test_harness","synthetic_signal"]}},"required":["value","traceId","provenance","generatedAt","generatedBy"]}},"required":["envelope"]},"outputSchema":{"type":"object","properties":{"hasEvidence":{"type":"boolean"},"hasSources":{"type":"boolean"},"hasAttribution":{"type":"boolean"},"hasUncertainty":{"type":"boolean"},"hasAlternatives":{"type":"boolean"},"hasInformationGaps":{"type":"boolean"},"hasDecisionFrame":{"type":"boolean"},"hasChangeReason":{"type":"boolean"},"hasTrust":{"type":"boolean"},"coverageScore":{"type":"number","minimum":0,"maximum":9},"provenanceDepth":{"type":"number","minimum":0}},"required":["hasEvidence","hasSources","hasAttribution","hasUncertainty","hasAlternatives","hasInformationGaps","hasDecisionFrame","hasChangeReason","hasTrust","coverageScore","provenanceDepth"]}},{"name":"score_brier","category":"scoring","description":"Compute the Brier score for a set of (forecast, outcome) pairs. Returns mean squared error of forecasts vs binary outcomes — lower is better; perfect calibration = 0.","creditCost":1,"usdEstimate":"0.01","freeTier":true,"substratePrimitives":["UncertaintyEstimate"],"inputSchema":{"type":"object","properties":{"pairs":{"type":"array","items":{"type":"object","properties":{"forecast":{"type":"number","minimum":0,"maximum":1},"outcome":{"type":"number","minimum":0,"maximum":1}},"required":["forecast","outcome"]}}},"required":["pairs"]},"outputSchema":{"type":"object","properties":{"brier":{"type":"number","minimum":0,"maximum":1},"n":{"type":"number","minimum":1},"interpretation":{"type":"string","enum":["excellent","good","fair","poor"]}},"required":["brier","n","interpretation"]}},{"name":"score_calibration_decomposition","category":"scoring","description":"Decompose Brier score into reliability + resolution + uncertainty (Murphy decomposition). Bins forecasts and reports calibration error per bin so callers can see WHERE calibration fails, not just that it does.","creditCost":2,"usdEstimate":"0.02","freeTier":true,"substratePrimitives":["UncertaintyEstimate"],"inputSchema":{"type":"object","properties":{"pairs":{"type":"array","items":{"type":"object","properties":{"forecast":{"type":"number","minimum":0,"maximum":1},"outcome":{"type":"number","minimum":0,"maximum":1}},"required":["forecast","outcome"]}},"binCount":{"type":"number","minimum":2,"maximum":20}},"required":["pairs"]},"outputSchema":{"type":"object","properties":{"brier":{"type":"number","minimum":0,"maximum":1},"reliability":{"type":"number","minimum":0},"resolution":{"type":"number","minimum":0},"uncertainty":{"type":"number","minimum":0,"maximum":0.25},"bins":{"type":"array","items":{"type":"object","properties":{"binIndex":{"type":"number"},"meanForecast":{"type":"number","minimum":0,"maximum":1},"empiricalRate":{"type":"number","minimum":0,"maximum":1},"count":{"type":"number","minimum":0}},"required":["binIndex","meanForecast","empiricalRate","count"]}}},"required":["brier","reliability","resolution","uncertainty","bins"]}},{"name":"score_mechanism_quality","category":"scoring","description":"Computes the 7-criterion MechanismQualityRollup over a set of user_validated CausalMechanismClaims.","creditCost":3,"usdEstimate":"0.03","freeTier":true,"substratePrimitives":[],"inputSchema":{"type":"object","properties":{"claims":{"type":"array","items":{}}},"required":["claims"]},"outputSchema":{"type":"object","properties":{"composite":{"type":"number"},"n_claims_scored":{"type":"number"},"n_claims_user_validated":{"type":"number"},"criteria":{"type":"object","additionalProperties":true},"evaluated_at":{"type":"string"}},"required":["composite","n_claims_scored","n_claims_user_validated","criteria","evaluated_at"]}},{"name":"score_probability_language","category":"scoring","description":"Score a piece of text against ICD 203 calibrated probability vocabulary. Detects probability terms, flags absolute language ('always', 'never'), reports whether the text aligns with Kent 1964 ranges.","creditCost":2,"usdEstimate":"0.02","freeTier":true,"substratePrimitives":["UncertaintyEstimate","Claim"],"inputSchema":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"]},"outputSchema":{"type":"object","properties":{"score":{"type":"number","minimum":0,"maximum":100},"detectedTerms":{"type":"array","items":{"type":"object","properties":{"matchedPhrase":{"type":"string"},"icd203Term":{"type":"string"},"position":{"type":"number"},"rangeLower":{"type":"number"},"rangeUpper":{"type":"number"}},"required":["matchedPhrase","icd203Term","position","rangeLower","rangeUpper"]}},"issues":{"type":"array","items":{"type":"string"}},"suggestions":{"type":"array","items":{"type":"string"}}},"required":["score","detectedTerms","issues","suggestions"]}},{"name":"score_source_credibility_nato","category":"scoring","description":"Combine NATO STANAG source-reliability rating (A-F) and information-credibility rating (1-6) into a normalized [0, 1] composite. A=highest reliability, 1=highest credibility.","creditCost":1,"usdEstimate":"0.01","freeTier":true,"substratePrimitives":["Source"],"inputSchema":{"type":"object","properties":{"reliability":{"type":"string","enum":["A","B","C","D","E","F"]},"credibility":{"type":"number"},"conflicts":{"type":"array","items":{"type":"string"}}},"required":["reliability","credibility"]},"outputSchema":{"type":"object","properties":{"composite":{"type":"number","minimum":0,"maximum":1},"reliabilityComponent":{"type":"number","minimum":0,"maximum":1},"credibilityComponent":{"type":"number","minimum":0,"maximum":1},"conflictPenalty":{"type":"number","minimum":0,"maximum":1},"interpretation":{"type":"string","enum":["high","medium","low","unreliable"]}},"required":["composite","reliabilityComponent","credibilityComponent","conflictPenalty","interpretation"]}},{"name":"synthesize_scenario_set","category":"synthesis","description":"Synthesize a Scenario Set (SCO §6.3) — alternative futures with probabilities, drivers, and decision implications.","creditCost":12,"usdEstimate":"0.12","freeTier":true,"substratePrimitives":["Claim","Alternative","UncertaintyEstimate"],"exchangeProfile":"scenario_set","inputSchema":{"type":"object","properties":{"situation":{"type":"string"},"drivers":{"type":"array","items":{"type":"string"}},"timeHorizon":{"type":"string"},"scenarioCount":{"type":"number","minimum":2,"maximum":8}},"required":["situation"]},"outputSchema":{"type":"object","properties":{"profile":{"enum":["scenario_set"]},"section":{"enum":["SCO §6.3"]},"scenarios":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string"},"narrative":{"type":"string"},"probability":{"type":"number","minimum":0,"maximum":1},"keyDrivers":{"type":"array","items":{"type":"string"}},"leadingIndicators":{"type":"array","items":{"type":"string"}},"decisionImplications":{"type":"array","items":{"type":"string"}}},"required":["title","narrative","probability","keyDrivers","leadingIndicators","decisionImplications"]}},"timeHorizon":{"type":"string"},"durationMs":{"type":"number"}},"required":["profile","section","scenarios","timeHorizon","durationMs"]}},{"name":"to_a2a_artifact","category":"composition","description":"Lossless serialization of a JudgmentEnvelope to an A2A artifact (transport-neutral). Schema version: luu.judgment-envelope.v1.","creditCost":1,"usdEstimate":"0.01","freeTier":true,"substratePrimitives":[],"inputSchema":{"type":"object","properties":{"envelope":{"type":"object","properties":{"value":{},"traceId":{"type":"string"},"provenance":{"type":"array","items":{}},"generatedAt":{"type":"string"},"generatedBy":{"type":"string","enum":["perplexity_searcher","multi_source_searcher","osint_fetcher","gmail_sync","external_mcp_client","filtering_pipeline","source_gate","rapidh_scorer","signal_fusion","novelty_detector","adw_delphi","scaffolded_forecast","pseudo_delphi","ensemble_aggregator","nightly_orchestrator","narrator","strategic_advisor","content_generation","brief_quality_gate","regression_detection","archetype_back_apply","source_quality_update","learning_velocity_compute","feedback_profile_update","context_drift_detector","proposal_applicator","kinetic_apply","sls_auto_evolution","sls_evolution","recalibration_training","blind_spot_detector","counterfactual_engine","linchpin_escalation","view_rigour","ats_score_writer","icd203_enricher","perspective_pack_builder","mechanism_map_writer","user_edit","user_feedback","human_review","test_harness","synthetic_signal"]}},"required":["value","traceId","provenance","generatedAt","generatedBy"]}},"required":["envelope"]},"outputSchema":{"type":"object","properties":{"$schema":{"enum":["luu.judgment-envelope.v1"]},"value":{},"traceId":{"type":"string"},"provenance":{"type":"array","items":{}},"generatedAt":{"type":"string"},"generatedBy":{"type":"string"}},"required":["$schema","value","traceId","provenance","generatedAt","generatedBy"]}},{"name":"update_mechanism_strength","category":"stability","description":"Records a prediction outcome for a CausalMechanismClaim and updates its Beta-Binomial posterior. Respects the 7-day cooldown anti-thrash gate.","creditCost":2,"usdEstimate":"0.02","freeTier":false,"substratePrimitives":[],"inputSchema":{"type":"object","properties":{"claimId":{"type":"string","format":"uuid"},"confirmed":{"type":"boolean"}},"required":["claimId","confirmed"]},"outputSchema":{"type":"object","properties":{"mechanismStrength":{"type":"number"},"strengthCiLow":{"type":"number"},"strengthCiHigh":{"type":"number"},"cooldownActive":{"type":"boolean"}},"required":["mechanismStrength","strengthCiLow","strengthCiHigh","cooldownActive"]}},{"name":"validate_embedding","category":"persistence","description":"Validate that a numeric vector matches the canonical embedding shape (256 dimensions, finite numbers in [-1, 1]). Use as a pre-flight before embed_and_persist.","creditCost":1,"usdEstimate":"0.01","freeTier":true,"substratePrimitives":["Evidence"],"inputSchema":{"type":"object","properties":{"embedding":{"type":"array","items":{"type":"number"}}},"required":["embedding"]},"outputSchema":{"type":"object","properties":{"valid":{"type":"boolean"},"dimensions":{"type":"number","minimum":0},"expected":{"type":"number"},"pgvectorAvailable":{"type":"boolean"},"issues":{"type":"array","items":{"type":"string"}}},"required":["valid","dimensions","expected","pgvectorAvailable"]}},{"name":"validate_envelope","category":"composition","description":"Validate an envelope against the canonical JudgmentEnvelope shape. Returns ok=true if structurally valid, plus a coverage report.","creditCost":1,"usdEstimate":"0.01","freeTier":true,"substratePrimitives":[],"inputSchema":{"type":"object","properties":{"envelope":{}},"required":["envelope"]},"outputSchema":{"type":"object","properties":{"ok":{"type":"boolean"},"errors":{"type":"array","items":{"type":"string"}},"coverage":{"type":"object","properties":{"hasEvidence":{"type":"boolean"},"hasSources":{"type":"boolean"},"hasUncertainty":{"type":"boolean"},"hasChangeReason":{"type":"boolean"},"hasTrust":{"type":"boolean"},"coverageScore":{"type":"number"},"provenanceDepth":{"type":"number"}},"required":["hasEvidence","hasSources","hasUncertainty","hasChangeReason","hasTrust","coverageScore","provenanceDepth"]}},"required":["ok"]}},{"name":"verify_merkle_inclusion","category":"attestation","description":"Verify that a leaf hash is included in a Merkle tree given its position and the proof path of sibling hashes. Returns ok=true if the proof reconstructs to the expected root.","creditCost":1,"usdEstimate":"0.01","freeTier":true,"substratePrimitives":["Attribution"],"inputSchema":{"type":"object","properties":{"leafHash":{"type":"string"},"leafPosition":{"type":"number","minimum":0},"proof":{"type":"array","items":{"type":"string"}},"expectedRoot":{"type":"string"}},"required":["leafHash","leafPosition","proof","expectedRoot"]},"outputSchema":{"type":"object","properties":{"ok":{"type":"boolean"},"computedRoot":{"type":"string"}},"required":["ok","computedRoot"]}},{"name":"with_metadata","category":"composition","description":"Attach or update substrate-metadata fields on an envelope (uncertainty, evidence, alternatives, change reason, trust, etc.). Returns a new envelope; never mutates.","creditCost":1,"usdEstimate":"0.01","freeTier":true,"substratePrimitives":["Evidence","Source","Alternative","UncertaintyEstimate","ChangeReason","Attribution","InformationGap","DecisionFrame"],"inputSchema":{"type":"object","properties":{"envelope":{"type":"object","properties":{"value":{},"traceId":{"type":"string"},"provenance":{"type":"array","items":{}},"generatedAt":{"type":"string"},"generatedBy":{"type":"string","enum":["perplexity_searcher","multi_source_searcher","osint_fetcher","gmail_sync","external_mcp_client","filtering_pipeline","source_gate","rapidh_scorer","signal_fusion","novelty_detector","adw_delphi","scaffolded_forecast","pseudo_delphi","ensemble_aggregator","nightly_orchestrator","narrator","strategic_advisor","content_generation","brief_quality_gate","regression_detection","archetype_back_apply","source_quality_update","learning_velocity_compute","feedback_profile_update","context_drift_detector","proposal_applicator","kinetic_apply","sls_auto_evolution","sls_evolution","recalibration_training","blind_spot_detector","counterfactual_engine","linchpin_escalation","view_rigour","ats_score_writer","icd203_enricher","perspective_pack_builder","mechanism_map_writer","user_edit","user_feedback","human_review","test_harness","synthetic_signal"]}},"required":["value","traceId","provenance","generatedAt","generatedBy"]},"metadata":{"type":"object","additionalProperties":true}},"required":["envelope","metadata"]},"outputSchema":{"type":"object","properties":{"value":{},"traceId":{"type":"string"},"provenance":{"type":"array","items":{}},"generatedAt":{"type":"string"},"generatedBy":{"type":"string","enum":["perplexity_searcher","multi_source_searcher","osint_fetcher","gmail_sync","external_mcp_client","filtering_pipeline","source_gate","rapidh_scorer","signal_fusion","novelty_detector","adw_delphi","scaffolded_forecast","pseudo_delphi","ensemble_aggregator","nightly_orchestrator","narrator","strategic_advisor","content_generation","brief_quality_gate","regression_detection","archetype_back_apply","source_quality_update","learning_velocity_compute","feedback_profile_update","context_drift_detector","proposal_applicator","kinetic_apply","sls_auto_evolution","sls_evolution","recalibration_training","blind_spot_detector","counterfactual_engine","linchpin_escalation","view_rigour","ats_score_writer","icd203_enricher","perspective_pack_builder","mechanism_map_writer","user_edit","user_feedback","human_review","test_harness","synthetic_signal"]}},"required":["value","traceId","provenance","generatedAt","generatedBy"]}}],"augmentationLayer":{"endpoint":"https://leadershipunderuncertainty.org/api/v1/augment","description":"Universal augmentation surface — pass a one-sentence workflow intent + (optional) workflow shape, and the substrate-bundle integrity is enforced automatically. Required primitives are CONTRACTS at runtime; optional primitives are caller opt-in. The augmentation report makes the bundle visible to downstream consumers.","shapes":[{"shape":"summarization","required":["extract_claims","extract_sources","score_probability_language"],"optional":["extract_alternatives","extract_information_gaps","score_source_credibility_nato"],"description":"Summarization workflows distill text into shorter text. The required bundle ensures every summary has extractable claims, identified sources, and ICD 203-compliant probability language.","downstreamGuidance":"The augmentation adds a `claims[]` array (each with confidence + type), a `sources[]` array (each citation extracted), and a `probabilityLanguage` score. Surface the score in your downstream system; flag any claim with `confidence < 0.5` for human review.","estimatedRequiredCredits":11},{"shape":"enrichment","required":["extract_claims","score_source_credibility_nato"],"optional":["multi_hop_graph_query","compute_analytic_delta","extract_evidence"],"description":"Enrichment workflows add context to existing records. The required bundle ensures each added field is extractable as a claim with a source-credibility score — so downstream consumers can filter on quality.","downstreamGuidance":"Each enriched field is exposed as a claim with a source-credibility composite (0–1). For CRM use, set a minimum credibility threshold (e.g. 0.6) to filter out low-quality enrichments before writing back to the record.","estimatedRequiredCredits":6},{"shape":"monitoring","required":["compute_analytic_delta","extract_information_gaps","check_regression_robust"],"optional":["gate_with_hysteresis","generate_alternatives"],"description":"Monitoring workflows compare current state to prior state. The required bundle ensures the delta is significance-classified, the information gaps that could explain it are identified, and the regression check uses sample-size-aware confidence intervals (not point estimates).","downstreamGuidance":"The augmentation classifies the delta as routine/minor/major/critical and reports whether it's a robust regression (not noise). Use `analyticDelta.significance` to gate alerts; only fire on `major`/`critical` for production use.","estimatedRequiredCredits":14},{"shape":"decision","required":["compose_decision_frame","generate_alternatives","extract_information_gaps","gate_with_confidence"],"optional":["synthesize_scenario_set","compute_pre_mortem"],"description":"Decision workflows produce recommendations. The required bundle ensures every recommendation comes with a structured decision frame, generated alternatives (red-team + base-rate + devil's-advocate), surfaced information gaps, and a confidence gate that blocks low-confidence outputs from auto-acting.","downstreamGuidance":"The augmentation produces a Decision Context (SCO §6.7 profile) with options + stakes + alternatives + gaps. The confidence gate's `passes: boolean` should gate any auto-action — when false, the workflow MUST require human review. Without this gate, decision workflows degrade to opinionated routing.","estimatedRequiredCredits":18},{"shape":"generation","required":["extract_claims","score_probability_language","extract_assumptions"],"optional":["generate_alternatives","extract_information_gaps"],"description":"Generation workflows produce text outputs (memos, drafts, briefs, forecasts). The required bundle extracts the claims, scores probability-language compliance, and surfaces the assumptions the text takes as given — so editors / reviewers can audit the analytical scaffolding.","downstreamGuidance":"The augmentation surfaces the assumptions the generated text takes as given, classified by criticality (linchpin / bridge / background). For board-level memos, flag any linchpin assumption as needing source attribution before publication.","estimatedRequiredCredits":13},{"shape":"routing","required":["compose_decision_frame","generate_alternatives","gate_with_confidence"],"optional":["extract_information_gaps"],"description":"Routing workflows decide where input goes (which queue, which team, which workflow branch). The required bundle frames the decision, generates plausible alternatives (so the router knows why it didn't pick option B), and gates on confidence so uncertain routings escalate to humans.","downstreamGuidance":"Always read `confidenceGate.passes` before acting on the routing decision. When false, route to a human-review queue rather than executing the auto-route — this is the substrate-criterion contract for routing.","estimatedRequiredCredits":13},{"shape":"evaluation","required":["score_brier","check_regression_robust","compute_beta_binomial_ci"],"optional":["score_calibration_decomposition"],"description":"Evaluation workflows score forecasts / decisions against outcomes. The required bundle ensures every evaluation includes the Brier score (point estimate), a sample-size-aware regression check (whether the score is meaningfully worse than baseline), and the beta-binomial confidence interval (so small-N evaluations don't false-positive).","downstreamGuidance":"Always check `regression.isRegression` before alerting on a score change — small-N evaluations easily produce noise. The confidence interval (`pointEstimate ± [low, high]`) is the bar-chart-able number for dashboards.","estimatedRequiredCredits":3},{"shape":"generic","required":["extract_claims","extract_sources","extract_alternatives","extract_information_gaps","score_probability_language"],"optional":["score_source_credibility_nato","extract_assumptions","compose_decision_frame"],"description":"Generic shape applies a broad substrate bundle when the caller hasn't classified the workflow. Falls back to the SCO §6 Evidence Pack profile (claims + evidence + sources + alternatives + gaps). Strongly recommend specifying a more specific shape when known — generic is more expensive and less specific.","downstreamGuidance":"Generic augmentation produces the broad SCO §6.4 Evidence Pack profile. Downstream consumers should look at `claims[]` first, then `sources[]` to verify, then `alternatives[]` and `informationGaps[]` for analytical rigor.","estimatedRequiredCredits":22}]},"exchangeProfiles":[{"name":"entity_snapshot","section":"SCO §6.1","description":"Point-in-time view of a specific entity (actor, topic, issue) with current assessment, drivers, evidence, and active predictions.","endpoint":"/api/v1/snapshot"},{"name":"analytic_delta","section":"SCO §6.2","description":"Change between two snapshots with significance threshold (routine/minor/major/critical) and triggering evidence.","endpoint":"/api/v1/delta"},{"name":"scenario_set","section":"SCO §6.3","description":"Set of alternative futures with probabilities, drivers, indicators, and decision implications.","endpoint":"/api/v1/scenarios/generate"},{"name":"evidence_pack","section":"SCO §6.4","description":"Structured evidence collection with claim_review JSON-LD, ICD 203 §1+§4 compliance, source credibility per item.","endpoint":"/api/v1/note-review"},{"name":"risk_timeseries","section":"SCO §6.6","description":"Risk trajectory over time with drivers, assumptions, and confidence bands.","endpoint":"/api/v1/timeseries"},{"name":"decision_action_event","section":"SCO §6.7","description":"SCO-DA structured decision/action artifact with decision context, options, rationale, and outcome tracking.","endpoint":"/api/v1/scoda/decisions"},{"name":"decision_context","section":"SCO §6.7","description":"Decision-context object — question, options, stakes, deadline.","endpoint":"/api/v1/scoda/decisions"},{"name":"portfolio_overlay","section":"SCO §6.8","description":"Portfolio exposure overlay with theses, exposures, links, and recommended adjustments.","endpoint":"/api/v1/enterprise/risk-stack"}],"substratePrimitives":[{"name":"Claim","description":"Proposition asserted with calibrated confidence."},{"name":"Evidence","description":"Typed signal bearing on a claim, with weight and provenance."},{"name":"Source","description":"Origin of evidence with credibility attributes."},{"name":"Alternative","description":"Competing hypothesis or option to a parent claim."},{"name":"UncertaintyEstimate","description":"Calibrated probability or distribution on a claim."},{"name":"ChangeReason","description":"Recorded rationale for any state mutation."},{"name":"Attribution","description":"Binding between claim, evidence, and source."},{"name":"DecisionFrame","description":"Question, options, and stakes a judgment is over."},{"name":"InformationGap","description":"Known unknowns acknowledged in a frame."}],"strategicExtensions":[{"name":"StrategicFrame","description":"Anchoring frame — whose worldview, what scope, what stakes, what decision the analysis serves."},{"name":"View","description":"Synthesised strategic assessment with confidence and posture, anchored to evidence and drivers."},{"name":"Driver","description":"Causal force supporting or undermining a view, with strength, direction, and supporting evidence."},{"name":"Assumption","description":"Testable belief underpinning a view's evidential support, with criticality and contradiction status."},{"name":"Prediction","description":"Forward projection with calibrated probability, resolution criterion, and time horizon."},{"name":"Actor","description":"Strategic agent (organization, government, individual, consortium)."},{"name":"ActorRelationship","description":"Typed directional edge between actors."},{"name":"TheoryOfMind","description":"Inferred priorities, decision speed, response patterns."},{"name":"Goal","description":"Explicit objective with viability and rigour tier."},{"name":"GoalHierarchy","description":"Hierarchical decomposition of goals."},{"name":"TimeHorizon","description":"Multi-horizon scoping for forecasts and scenarios."},{"name":"Signpost","description":"Observable trigger linking projection to incoming evidence; updates a view or prediction on occurrence."},{"name":"Scenario","description":"Alternative future with drivers, indicators, decision implications (composite over assumptions + drivers + predictions)."},{"name":"Storyline","description":"Narrative arc with signposts and impact assessments."},{"name":"EnvironmentalDynamic","description":"Drivers, headwinds, tailwinds shaping a domain."},{"name":"NarrativeTension","description":"Disagreement / mixed-signals / consensus classification."},{"name":"ExchangeProfile","description":"Canonical SCO interchange format."},{"name":"PerspectivePack","description":"Substrate interchange surface profile."},{"name":"RigourTier","description":"Tradecraft strictness level (off / normal / cautious / strict)."},{"name":"PostureMode","description":"First-person actionability gradient (FYI / Watch / Explore / Act)."},{"name":"DomainTopology","description":"Cross-domain edges, boundary nodes, spillover routing."},{"name":"MultiHorizonForecast","description":"Forecast spanning multiple time horizons."},{"name":"SimulationMode","description":"Scenario-sandbox / war-game / historical-replay engine."},{"name":"ObjectiveLens","description":"Goal-conditioned projection that reweights salience and assigns action posture without overwriting base evidence."},{"name":"ObservedStrategicStance","description":"Third-person observed entity stance (bullish / cautious / neutral / vigilant / mixed)."}],"deprecation":{"legacyPrefix":"northbrief_","canonicalPrefix":"luu_","sunset":"2026-10-28","note":"Legacy 'northbrief_*' tool names are deprecated. They continue to work until 2026-10-28, after which only the canonical 'luu_*' names will be accepted."}}