ΛXIØM Lens Documentation

ΛXIØM Lens Console issues keys and shows the ledger. The ΛXIØM Kernel owns governance execution. Branchable names live on POST /v1/govern as AxiomGovernanceDecision. Chat Completions and Messages still return axiom_governance.action as allow | warn | repair | refuse. This page documents the join. It does not reimplement the kernel routes.

This page is structured as a small implementation help center: search first, then use the reference sections for exact request shapes, governance behavior, MCP wiring, fake customer scenarios, and operational failure modes.

Access options

ΛXIØM Lens Console supports hosted HTTP API keys, while the kernel repository provides a separate local or self-hosted MCP process. They can both be used by one organization, but they do not automatically share authentication, usage, or ledger state.

API Keys

Use for server-side HTTP integrations, backend workers, and apps that call /v1/govern, /v1/messages, /v1/chat/completions, /process, or /chain.

MCP Access

Use for agent clients, IDEs, and tool surfaces such as Claude Desktop, Cursor, Codex-compatible clients, or Gemini.

Both

Teams may use both, but hosted HTTP receipts are tied to the portal team while MCP keeps its own process-local access and signal ledgers unless explicitly integrated.

Quickstart

Sign up at console.axiomlens.com/sign-up. We create a test key. Use it as a Bearer token and choose the compatibility shape your client already speaks.

Branchable decision shape

curl https://api.axiomlens.com
/v1/govern \
  -H "Authorization: Bearer axm_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "current_state": {
      "release": "candidate",
      "evidence": "incomplete"
    },
    "proposed_next_action": {
      "type": "promote",
      "target": "production"
    }
  }'

OpenAI Chat Completions shape

curl https://api.axiomlens.com
/v1/chat/completions \
  -H "Authorization: Bearer axm_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "model": "claude-sonnet-4-6",
    "max_tokens": 256,
    "messages": [
      {
        "role": "user",
        "content": "Summarize: ..."
      }
    ]
  }'

Anthropic Messages shape

curl https://api.axiomlens.com
/v1/messages \
  -H "Authorization: Bearer axm_live_..." \
  -H "Content-Type: application/json" \
  -H "X-Axiom-Operator: oracle" \
  -H "X-Axiom-Tier: throughput" \
  -d '{
    "model": "claude-sonnet-4-6",
    "max_tokens": 256,
    "messages": [
      {
        "role": "user",
        "content": "Summarize: ..."
      }
    ]
  }'

Portable evidence shape

curl https://api.axiomlens.com
/process \
  -H "Authorization: Bearer axm_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "signal": "Use ΛXIØM to check whether this support queue policy is stable, recurrent, and auditable.",
    "context": "New signup onboarding: prove the evidence contract before the first live workflow call.",
    "assumption_witnesses": {
      "noether": {
        "transition": "app.step",
        "quantity": "governance_mass",
        "quantity_trace": [
          1,
          1,
          1
        ]
      },
      "lyapunov": {
        "potential_trace": [
          84,
          70,
          63.5,
          51
        ]
      },
      "poincare": {
        "bounded": true,
        "reaches_boundary": true,
        "cycle_trace": [
          0,
          0.5,
          1,
          0
        ]
      },
      "fixed_point": {
        "regime": "banach",
        "fixed_point_residual": 0,
        "lipschitz_bound": 0.42
      },
      "information_loss": {
        "states": [
          "appeal_pending",
          "sarcastic_quote",
          "policy_violation"
        ],
        "observer_outputs": [
          "allow",
          "allow",
          "block"
        ],
        "closed_under_transition": true,
        "observer_invariant": true
      },
      "empirical": {
        "dataset_uri": "s3://axiom/studies/diminishing_returns.csv",
        "schema_uri": "git:replication/v1/schema/diminishing_returns_v1_schema.json",
        "protocol_uri": "git:replication/v1/PROTOCOL.md",
        "result_uri": "git:replication/v1/results/run_2026_05_06.json",
        "run_hash": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
      }
    }
  }'

TypeScript helper

type Operator = "oracle" | "validator" | "lens" | "governor" | "codex";
type Tier = "throughput" | "judgment";

export async function axiomMessage(input: string, operator: Operator, tier: Tier) {
  const r = await fetch("https://api.axiomlens.com
/v1/messages", {
    method: "POST",
    headers: {
      "Authorization": `Bearer ${process.env.AXIOM_API_KEY}`,
      "Content-Type": "application/json",
      "X-Axiom-Operator": operator,
      "X-Axiom-Tier": tier,
    },
    body: JSON.stringify({
      // Required by /v1/messages; X-Axiom-* overrides it when the pair is mapped.
      model: "claude-sonnet-4-6",
      max_tokens: 256,
      messages: [{ role: "user", content: input }],
    }),
  });
  if (!r.ok) throw new Error(`ΛXIØM ${r.status}: ${await r.text()}`);
  const data = await r.json();
  return {
    text: data.content?.[0]?.text ?? "",
    modelUsed: data.model,
    governance: data.axiom_governance,
  };
}

Python

import os, requests

r = requests.post(
    "https://api.axiomlens.com
/v1/chat/completions",
    headers={
        "Authorization": f"Bearer {os.environ['AXIOM_API_KEY']}",
        "Content-Type": "application/json",
    },
    json={
        "model": "claude-sonnet-4-6",
        "max_tokens": 256,
        "messages": [{"role": "user", "content": "Summarize: ..."}],
    },
    timeout=120,
)
r.raise_for_status()
data = r.json()
print(data["choices"][0]["message"]["content"])
print(data["axiom_governance"])

Implementation Playbooks

Use these as starting points when wiring ΛXIØM into a product. The key implementation habit is to keep governance metadata next to the generated text, tool action, workflow decision, or business object that used it.

Implementation

Drop in ΛXIØM for an OpenAI client

Point an existing Chat Completions client at api.axiomlens.com/v1, keep the request shape, and preserve axiom_governance from the response.

OpenAIbase URLchat completionsmigration
Implementation

Use the Anthropic Messages-compatible route

Call /v1/messages with model, max_tokens, messages, optional system, and optional X-Axiom operator/tier headers.

Anthropicmessagesheadersoperator
Security

Keep keys server-side

Browser code should never receive raw user API keys. Server routes, workers, and MCP server processes own credentials.

keysserver sidesecuritybrowser
Governance

Branch on POST /v1/govern

Call POST /v1/govern or axiom.govern from @axiom/client. The response is an AxiomGovernanceDecision: decision, reason, hidden_axis, required_next_action, system_effect.

governAxiomGovernanceDecision@axiom/clientbranch
Implementation

Classify work before choosing a surface

POST /v1/work/classify before selecting chat, prompt, tools, loops, or a human.

work classifytaskrouting
Implementation

Bound vague intent into a contract

POST /v1/intent/contract converts a task into a bounded contract the later verify step can check.

intent contracttaskverify
Operations

Verify output and close the loop

POST /v1/verify checks output against the intent contract. POST /v1/outcomes reports what the host did after the decision.

verifyoutcomesdecision_idrun_id
Governance

Build the governance sandwich around any model

Call kernel_govern_input before a model call, then kernel_govern on the draft response, and preserve both metadata records.

kernel_govern_inputkernel_governsandwichmetadata
Operations

Audit a governed decision after a call

Use the console decision ledger to inspect verdict, route, model, latency, cost, proof summary, and governance metadata.

ledgerauditdecisionsmetadata
Operations

Handle quota and billing failures

A confirmed over-quota request returns 429. Treat it as a plan state, not a model failure.

quota429billingplan

If you are building an AI feature, prefer the full sandwich: validate the prompt, call a model or the ΛXIØM API, govern the answer, store the governance object, and attach the request id to the user-visible action.

Authentication

Send a ΛXIØM Lens Console API key in Authorization: Bearer. The kernel also accepts x-api-key for Anthropic SDK clients that use that header.

Treat keys as infrastructure credentials. A browser UI may show a prefix for recognition, but raw values should live in server environment variables, encrypted secret stores, backend workers, or trusted MCP server processes. CMNDCNTR Advisor follows the same rule: it uses a scoped server credential rather than copying a user key into the client.

  • axm_live_... — production traffic, billed against your team plan
  • axm_test_... — development traffic; same governance, separate key namespace

Keys validate through the console HTTP contract when the kernel is configured for white-label mode. Revoked keys can remain cached by a kernel instance for roughly 60 seconds.

Endpoints

MethodPathPurpose
POST/v1/work/classifyClassify work before selecting chat, prompt, tools, loops, or humans
POST/v1/intent/contractConvert vague intent into a bounded task contract
POST/v1/governReturn a canonical branchable AxiomGovernanceDecision
POST/v1/verifyVerify output against the intent contract before the host accepts it
POST/v1/outcomesClose the loop by reporting what happened after a decision
POST/v1/chat/completionsOpenAI Chat Completions compatibility
POST/v1/messagesAnthropic Messages compatibility
POST/v1/causal/operateBusiness causal operating loop
GET/v1/modelsDefault upstream model list
GET/v1/governance/statusKernel governance status
POST/processPortable ΛXIØM process with theorem-backed evidence
POST/chainPortable multi-cycle process with theorem-backed evidence

POST /v1/govern is the branchable decision entry point. /v1/chat/completions is the OpenAI-compatible entry point. Set your client base URL to https://api.axiomlens.com /v1 and keep the usual chat request fields. /v1/messages accepts model, max_tokens, messages, optional system, temperature, top_p, and stop_sequences.

Govern loop

The hosted kernel (version 1.3.8) exposes a five-step work loop before and after model calls. The contract lives in axiom-kernel-core docs/GOVERNANCE_DECISION_CONTRACT.md and docs/AXIOM_POWERED_CONTRACT.md. This portal documents the join. It does not import kernel Python and does not reimplement these routes.

PathRequest bodyUse when
POST /v1/work/classifytask, optional contextBefore choosing chat, prompt, tools, loops, or a human
POST /v1/intent/contracttask, optional context, run_id, persistTo bound vague intent before govern or verify
POST /v1/governcurrent_state, proposed_next_action, optional intent_contract, run_idTo receive an AxiomGovernanceDecision
POST /v1/verifyintent_contract, output, optional evidence, run_idBefore the host accepts model output
POST /v1/outcomesdecision_id, run_id, action_taken, optional override and notesAfter the host acts on a decision

Chat axiom_governance.action is allow | warn | repair | refuse. Those four values are not the branchable govern names. Branch on the AxiomGovernanceDecision object from POST /v1/govern or axiom.govern in @axiom/client.

cURL

curl https://api.axiomlens.com
/v1/govern \
  -H "Authorization: Bearer axm_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "current_state": {
      "release": "candidate",
      "evidence": "incomplete"
    },
    "proposed_next_action": {
      "type": "promote",
      "target": "production"
    }
  }'

TypeScript (@axiom/client)

import { Axiom } from '@axiom/client';

const axiom = new Axiom({
  apiKey: process.env.AXIOM_API_KEY,
  baseUrl: 'https://api.axiomlens.com
',
});

const decision = await axiom.govern({
  "current_state": {
    "release": "candidate",
    "evidence": "incomplete"
  },
  "proposed_next_action": {
    "type": "promote",
    "target": "production"
  }
});

AxiomGovernanceDecision

{
  "decision": "require_verification",
  "reason": "The proposed production promotion crosses a proof boundary without rollback evidence.",
  "hidden_axis": "motion_without_progress",
  "required_next_action": "hold_and_request_evidence",
  "system_effect": {
    "should_continue": false,
    "should_call_model": false,
    "should_call_tools": false,
    "should_return_to_human": true
  }
}

Models & Routing

You can name a concrete model in the request body or ask the kernel to route by X-Axiom-Operator and X-Axiom-Tier. Header routing overrides the body model only when the pair is mapped.

Use X-Axiom-Route-Mode with axiom-consensus or frontier-managed. If the header is absent, the portal selects the plan default. Route policy, plan quota, and Managed Frontier spend controls are checked before the provider call. byok is currently refused because secure provider-credential retrieval is not connected.

Model matchProviderKernel behavior
claude-*AnthropicNative Messages API upstream; kernel translates back to a governed response.
hf/<org>/<model>HuggingFace InferenceThe kernel strips the hf/ prefix before forwarding.
<org>/<model>OpenRouterSlash-qualified model names route to OpenRouter.
<bare-name> or omittedDefault upstreamFalls back to hermes3:latest unless the deployment overrides AXIOM_UPSTREAM_MODEL.

Default operator map

OperatorTierModel
oraclethroughputclaude-sonnet-4-6
oraclejudgmentclaude-opus-4-7
validatorthroughputclaude-sonnet-4-6
validatorjudgmentclaude-opus-4-7
lensthroughputclaude-sonnet-4-6
lensjudgmentclaude-opus-4-7
governorjudgmentclaude-opus-4-7
codexjudgmentclaude-opus-4-7

Governance

In full mode, the kernel decomposes the last user message, injects structural context, calls the upstream model, and governs the output. The governor pipeline reports action, repairs, warnings, blocking governors, and optional quality scores.

A user message beginning with /lens or another operator command activates the kernel's explicit Lens mode. The command is stripped before the prompt is sent upstream.

For product integrations, preserve axiom_governance exactly where the generated text is stored or displayed. Chat action is allow | warn | repair | refuse. Branchable names live on POST /v1/govern as AxiomGovernanceDecision.

AXIØM Kernel MCP Server

The MCP server exposes the ΛXIØM Kernel as callable tools for agent clients. Use it when an agent needs structural decomposition, governed prompt/response checks, operator selection, coherence reads, canon lookup, world-model memory, or gap analysis without importing kernel source code.

Keep the boundary clear: MCP is a local or self-hosted kernel tool surface. ΛXIØM Lens Console owns hosted API identity, keys, usage, and the decision ledger. MCP uses its own process configuration and local ledgers unless an operator explicitly integrates it with the hosted service.

Simple setup

  1. Create an API key in console.axiomlens.com/dashboard/keys. Use that key for backend HTTP calls to api.axiomlens.com.
  2. Clone or install axiom-kernel-core on the machine running Claude Desktop, Cursor, Gemini, or another MCP client. The MCP entrypoint is mcp-servers/axiom-kernel-mcp/server.py.
  3. Paste an mcpServers block into the client config, set provider credentials in the MCP server environment, restart the client, and call tools such as kernel_govern_input, kernel_govern, and gap_analyze.

Customer-facing rule: API Keys are for hosted server/backend HTTP integration. MCP is for local or self-hosted agent, IDE, and tool integration. Using both does not automatically join their credentials or telemetry.

Copy-paste starter config

Replace the paths and provider key, then restart the MCP client. Use this for local agent/IDE setup; do not treat it as a hosted public MCP URL.

{
  "mcpServers": {
    "axiom-kernel": {
      "command": "python",
      "args": [
        "/path/to/axiom-kernel-core/mcp-servers/axiom-kernel-mcp/server.py"
      ],
      "env": {
        "AXIOM_LLM_PROVIDER": "openai",
        "AXIOM_LLM_API_KEY": "sk-...",
        "AXIOM_LLM_MODEL": "gpt-4o-mini",
        "AXIOM_WORLD_MODEL_PATH": "/tmp/axiom_world_model.json"
      }
    }
  }
}

Local STDIO configuration

For Claude Desktop, Cursor, Gemini, Codex-compatible clients, or any MCP client that launches local commands, point the client at the kernel MCP server file from the kernel checkout:

{
  "mcpServers": {
    "axiom-kernel": {
      "command": "python",
      "args": [
        "/path/to/axiom-kernel-core/mcp-servers/axiom-kernel-mcp/server.py"
      ],
      "env": {
        "AXIOM_LLM_PROVIDER": "stub",
        "AXIOM_LLM_MODEL": "",
        "AXIOM_WORLD_MODEL_PATH": "/tmp/axiom_world_model.json"
      }
    }
  }
}

Remote or multi-project SSE

For remote access, run the same server in SSE mode and put normal network controls around it. The server process owns provider credentials through environment variables; clients call tools through MCP.

cd /path/to/axiom-kernel-core
python mcp-servers/axiom-kernel-mcp/server.py --sse --host 0.0.0.0 --port 8420

# SSE-capable MCP clients connect to:
# http://localhost:8420/sse

Environment variables

VariableDefaultPurpose
AXIOM_LLM_PROVIDERstubstub, openai, anthropic, or ollama
AXIOM_LLM_MODELemptyModel name for the configured provider
AXIOM_LLM_API_KEYemptyProvider key for OpenAI or Anthropic modes
AXIOM_LLM_BASE_URLemptyOllama or custom provider base URL
AXIOM_WORLD_MODEL_PATHunsetJSON file path for persistent world model memory
AXIOM_SIGNAL_LEDGER_PATHunsetOptional signal ledger JSONL path
AXIOM_ACCESS_LEDGER_PATHunsetOptional access audit JSONL path

Tool groups

GroupToolsUse when
Cycle processing
kernel_processkernel_chainkernel_decomposekernel_statuskernel_diagnosticskernel_models
Run the 10+Ø cycle, inspect decomposition, check subsystem state, and choose per-request model presets.
Governance sandwich
kernel_govern_inputkernel_govern
Validate prompts before a model call and govern draft responses after generation.
Operators and coherence
kernel_operatorkernel_coherencekernel_inferkernel_last_sro
Select an operator, inspect contradictions, run structural inference, and read the last Structural Resolution Object.
Canon and patterns
kernel_lawskernel_atomskernel_patterns
Query AXIØM laws, semantic atoms, and pattern stores without coupling an app to kernel internals.
Memory and gap analysis
world_model_queryworld_model_summaryworld_model_graphgap_analyze
Query persistent structural memory and report genuinely missing fields instead of guessing.
Audit and operations
kernel_configureaccess_audit_statsaccess_audit_eventsaccess_audit_actorssignal_ledger_timelinesignal_ledger_stats
Configure runtime state, inspect MCP access, and review recent signal ledger activity.

Governed app pattern

  1. Call kernel_govern_input on the user prompt before sending it to a model.
  2. Call your model or the ΛXIØM HTTP API using the server-side credential boundary.
  3. Call kernel_govern on the draft answer and preserve the returned governance metadata.
  4. Use kernel_laws, kernel_atoms, kernel_patterns, kernel_coherence, or gap_analyze when the agent needs a diagnostic read instead of free-form advice.

Implementation Use Cases

These examples are intentionally fictional. They show the product pattern without implying an existing customer deployment. The repeatable shape is always the same: define the operating object, run the governed API or MCP tool, preserve governance metadata, and write the outcome back to the relevant ledger or business object.

Example use casesupporttriagerefunds

Example: support queue triage

A fake support team routes refund, abuse, and escalation messages through input governance, model response, output governance, and ledger audit.

Example company: Northstar Support Ops. The app uses kernel_govern_input to reject prompt-injection attempts in tickets, Chat Completions for draft replies, kernel_govern for tone/grounding checks, and decisions for audit.

Example use casedeploymentDevOpsrelease

Example: deployment decision review

A fake DevOps team asks AXIØM to check whether a release should proceed, then stores evidence and assumptions beside the deploy record.

Example company: Meridian DevTools. The app sends incidents, rollback status, test results, and operator notes to /process, then requires missing assumptions to be discharged before approving the release.

Example use caseCMNDCNTRAdvisorsales

Example: sales handoff diagnosis

A fake revenue team uses CMNDCNTR Advisor to diagnose demo-to-close handoff loss and track return metrics.

Example company: Atlas Revenue. Advisor reads close rate, cycle length, objection frequency, proof assets, and CRM notes. It reports gaps when return metrics are missing instead of making confident recommendations.

Example use caseagentsMCPtools

Example: agent preflight before tool use

A fake internal agent checks user intent, tool plan, and final response through MCP before touching production systems.

Example company: Glasshouse Admin. The agent calls kernel_govern_input on the user request, gap_analyze on required fields, then kernel_govern before returning an operational recommendation.

In each case, a missing mechanism, missing evidence source, or missing return metric should produce a gap report. The Advisor and MCP tools should not turn absent business evidence into a confident recommendation.

Evidence Contract

The portable /process and /chain surfaces accept assumption_witnesses. The kernel returns an evidence object that reports pattern matches, theorem backing, assumptions satisfied, assumptions missing, witness discharge results, empirical provenance, confidence, and limitations.

Witness keyWhat the app exposes
noethertransition, conserved quantity, invariant trace
lyapunovpotential, debt, or energy trace
poincareboundedness, boundary reach, return trace
fixed_pointresidual, contraction, order, period, or reset evidence
information_lossstates, observer outputs, closure, invariance
empiricaldataset, schema, protocol, result artifact, run hash

Pattern detection is not treated as proof. A pattern upgrades to assumption_discharged only when the witness data satisfies the discharge checks for that theorem family.

Evidence response shape

{
  "expression": "...",
  "confidence": 0.71,
  "evidence": {
    "proof_registry_version": "2026-05-06.bridge-1",
    "pattern_matches": [
      {
        "id": "pattern.stability.lyapunov",
        "status": "assumption_discharged",
        "theorem_family": "Lyapunov stability",
        "assumptions_satisfied": [
          "Potential values live in a preorder",
          "The potential is nonincreasing after one transition"
        ],
        "assumptions_missing": []
      }
    ],
    "theorem_backing": [
      {
        "id": "bridge.lyapunov.lyapunov_nonincreasing_iterate",
        "proof_status": "lean_verified",
        "source_file": "AxiomTheorems/Bridge/LyapunovBridge.lean"
      }
    ],
    "assumption_discharge": {
      "results": [{ "id": "discharge.lyapunov", "status": "discharged" }]
    },
    "confidence": 0.82,
    "confidence_level": "high",
    "limitations": [
      "Formal bridge theorems certify theorem-shape under stated assumptions, not every empirical claim."
    ]
  }
}

After calling /process or /chain, inspect retained receipt summaries in Instruments.

Proof and evidence objects

Theorem-family and empirical provenance records are returned inside /process and /chain evidence objects. The live kernel does not expose GET /proof-registry or GET /empirical-provenance.

  • Each evidence entry can name a theorem ID, Lean symbol, source file, domain, assumptions, proof status, and confidence.
  • Dashboard decisions store evidence summaries so production traffic can be audited without storing the whole response body.

Responses

OpenAI-compatible responses preserve choices, message, finish_reason, and integer usage fields. Both compatibility shapes append a non-standard axiom_governance field whose action is allow | warn | repair | refuse. Clients that ignore unknown fields keep working. Do not expect those chat actions on POST /v1/govern.

Anthropic Messages response

{
  "id": "msg_4d470ffa1a8f42d69f02aebb",
  "type": "message",
  "role": "assistant",
  "model": "claude-sonnet-4-6",
  "content": [{ "type": "text", "text": "..." }],
  "stop_reason": "end_turn",
  "stop_sequence": null,
  "usage": { "input_tokens": 142, "output_tokens": 87 },
  "axiom_governance": {
    "action": "allow",
    "passed_all": true,
    "total_repairs": 0,
    "total_warnings": 0,
    "blocked_by": [],
    "mode": "full",
    "lens_active": false,
    "duration_seconds": 1.4,
    "structural_perception": {
      "operator": "oracle",
      "dominant_axis": "functional_coherence",
      "signal_type": "analysis"
    }
  }
}

OpenAI Chat Completions response

{
  "id": "axiom-2f8c9a0b4d2e",
  "object": "chat.completion",
  "created": 1777560000,
  "model": "claude-sonnet-4-6",
  "choices": [{
    "index": 0,
    "message": { "role": "assistant", "content": "..." },
    "finish_reason": "stop"
  }],
  "usage": {
    "prompt_tokens": 142,
    "completion_tokens": 87,
    "total_tokens": 229
  },
  "axiom_governance": { "action": "allow", "mode": "full" }
}

Limits

  • Plan quota is checked before keyed calls when the kernel is wired to the console HTTP API. Confirmed over-quota requests return 429.
  • /v1/messages compatibility is text-first today. Image, tool_use, and tool_result blocks are represented as text placeholders.
  • /v1/chat/completions can return SSE when stream: true. Model deltas arrive before output governance and are advisory until the terminal governance event. For enforcement, buffer the output and read the final governance action before displaying it or acting on it. Output is not enforceably governed before that terminal event.
  • Bare model names fall back to the deployment's default upstream model. For predictable production routing, use claude-*, hf/..., or <org>/<model>.

Errors

  • 401 — missing, invalid, or revoked console key
  • 400 — malformed request body
  • 429 — confirmed plan quota exceeded for this billing period
  • 502 — upstream provider error, timeout, or no upstream choices
  • 500 — internal kernel error; inspect the corresponding request in /dashboard/decisions