Skip to content

Diagnostics ​

praxis_doctor ​

praxis_doctor is read-only. Pass repo for the repository to inspect. Main fields of data:

FieldMeaning
version, repo, gitRootRuntime version; resolved repository and Git root (or null)
projectstatus (loaded, missing, invalid), path, suggestedPath
jira, github, gitlabWhich settings are configured (booleans and a missing list), never values
providersPer provider state (unconfigured, partial, configured, invalid), missing and invalid settings
qualityLocal Quality service: status, healthy, url, pid, db
capabilitiespraxisRuntime, repository, localRuntime, jiraConfig (ok or unavailable)
hostPlaceholdersIgnoredSettings left blank in the extension (received as ${user_config...}), treated as unset
dotenvRejectedNames of trust keys a repository .env tried to set (ignored)
approvalSee below
nextStepsConcrete actions derived from the above
codesMachine codes for unavailable repository, Jira or GitHub API URL
runtimenode, platform, localExecution
buildIdentity of the running Runtime, see below

approval ​

FieldMeaning
modeclient-ui (the client's dialog can be asked) or no-dialog (protected actions are refused here). Since 0.1.0-alpha.49.2 there are no other modes
trustHow protected actions can be approved here (protectedActions), that independently authenticated human approval is not available (independentHumanApproval), and why when they are refused
observedDialogPresent once Praxis has seen this client answer its own dialog by itself; protected actions are then refused in it
dialogAutomationWhat Praxis found that could answer the dialog: file (a settings file, a definition, or a process with a launch flag), why, kind. While it is present, protected actions are refused
minAnswerMsAnswers faster than this (1000 ms by default) are the client's own and are not taken
ignoredEnvironmentRetired or test settings found in the environment and ignored, for example PRAXIS_APPROVAL_MODE
notePlain-language consequence of the mode
decisionLogPath of the decision journal for this repository
diagnosticsLogPath of mcp.jsonl
clientWhat the connected client declared: name, version, protocolVersion, capabilities (keys), elicitation (declared, form, url), dialog (can Praxis show a dialog), flow (server-initiated-request for legacy, input-required-round-trip for 2026-07-28), reason (why not, when dialog is false)
hostGatePresent when there is no dialog: some hosts hold an apply call at their own tool-permission prompt before it reaches Praxis

build ​

FieldMeaning
versionRuntime version string (not proof of which build runs)
originbundle (shipped file) or source
kindproduction for shipped bundles; anything else is a test build that must not be installed
sourceDigestDigest of the inputs the bundle was built from
coreBaselinepraxis-core commit the vendored Core was packed from
bundleSha256, bundlePathHash and path of the running praxis-mcp.cjs
toolscount and digest of the sorted tool names (and names); expected count in Compatibility

Compare bundleSha256 with the file you installed to know which build the client actually loaded.

Diagnostics log ​

~/.praxis/diagnostics/mcp.jsonl (under PRAXIS_STATE_HOME if set). One JSON object per line, with at and pid. Rotated to mcp.jsonl.1 above 1 MB. It records names, ids, durations, codes and declared capability keys. It never records arguments, plan text, tokens or file contents. Writes are best effort and never break a call.

EventFieldsMeaning
server_startversion, roleThe Runtime process started
tool_entercallId, tool, client, protocol, flow, capabilities, elicitationDeclared, dialog, reasonA call reached the Praxis tool handler
input_requiredcallId, tool, msModern protocol: Praxis returned input_required to ask the dialog; the client retries with the answer
tool_finishedcallId, tool, ms, ok, codeThe call completed, with the result code (or null)
tool_failedcallId, tool, ms, errorThe handler threw

Did a call reach Praxis? ​

  1. Find the call in mcp.jsonl by tool name and time.
  2. tool_enter then tool_finished with a small ms: Praxis answered; read code. For a protected call in a client without a dialog the code is APPROVAL_CLIENT_UI_REQUIRED and the time is short.
  3. tool_enter without tool_finished (or with input_required and no retry): Praxis is waiting for or lost the dialog answer. 3a. Was the answer a person's? For a protected call, compare the input_required time with the next tool_enter of the same tool: the client's answer travels in that retry. A gap of milliseconds is an automatic answer, not a person (a human needs seconds). Since 0.1.0-alpha.49.2 Praxis applies this itself: an answer faster than approval.minAnswerMs (1000 ms), accept or decline, is recorded as auto-answered, and nothing runs. A longer gap does not show that a person answered either: a program can wait. Observed values: the Claude Desktop Code tab answered after 9 ms (not a person); an interactive Claude Code CLI session with a person answered after 402.5 s (compatibility).
  4. No tool_enter at all: the call never reached Praxis. Look at the host, which may be holding it at its own tool-permission prompt (Claude Desktop writes tool_approval_gate ... approvalRequired:true to its own log in that case).
  5. No server_start for the expected time: the server did not start in that session; check PRAXIS_RUNTIME_UNAVAILABLE cases in Troubleshooting.

The server also writes startup lines to stderr ([praxis-mcp] version=..., role=..., transport=stdio, protocol=modern+legacy, ready), and PRAXIS_MCP_ROLE_INVALID or PRAXIS_MCP_START_FAILED when it cannot start.

Report tools ​

ToolWherePurpose
npm run report:tool-originspraxis-runtimeStarts each known Runtime build as a stdio server and prints bundle sha256, build kind, tool count and tool-name digest per origin. A host whose tool list differs from the row of the build it claims to run holds a stale tool registry and needs a new session, not a new version number. Read-only; it only starts servers in a temporary directory
node tools/scripts/verify-release-candidate.mjs --installed-extension=... --installed-plugins=...praxis-marketplaceCompares an installed extension and installed role plugins with the source
praxis_quality_reportRuntime toolNot a diagnostics report: an alias of praxis_quality_review