Skip to content

Public Runtime tools ​

Source of truth: packages/mcp/src/catalog.ts (tool definitions and role filter) and PROTECTED_TOOLS in packages/mcp/src/tools.ts in praxis-runtime. The Runtime exposes 62 tools (0.1.0-alpha.49.2). The shipped plugin and MCPB start the server with --role runtime, which exposes all of them.

How to read the tables ​

  • Kind is the catalog kind: read (reads only), preview (computes a plan or runs a local check; does not execute the protected action), apply (changes state).
  • Protected means the tool is in PROTECTED_TOOLS: Praxis obtains approval before it runs (Security model). 16 of the 17 apply tools are protected. The 17th, praxis_review_apply, asks for approval itself: it records a user's review decisions only after the client's own dialog approved exactly those decisions. praxis_approval_journal (read) asks the same way before it appends corrections (amend=true).
  • Preview tools return a previewFingerprint that the matching apply tool must receive.
  • Every apply tool also accepts instanceId and requires confirmation (YES or NO). confirmation=YES is the agent's request, not the user's approval: the approval is the client's own dialog. planText is still accepted and ignored (host-permission mode was removed in 0.1.0-alpha.49.2).
  • Roles: all means BA, Architect, Developer and Quality. The runtime role always sees every tool.

Tools per role: BA 28, Architect 31, Developer 48, Quality 36, runtime 62.

Common ​

ToolKindProtectedRolesPurpose
praxis_doctorreadnoallCapability check: runtime build, repository, .project, provider configuration (presence only, never secret values), Quality health, the client and how protected actions can be approved there (approval.mode: client-ui or no-dialog)
praxis_capabilitiesreadnoallContextual guidance for the current request; executes nothing
praxis_session_startreadnoallRole initialisation for hosts that cannot run the plugin bootstrap: .project status, knowledge rules, work items, role tools
praxis_approval_planreadnoallThe exact plan the user would be asked to approve for a protected apply tool, computed from live state; runs nothing
praxis_approval_journalreadnoallAudits the decision journal kept outside the repository: what was approved, rejected, withdrawn or could not be asked, and which older entries attribute a decision to the user without evidence. With amend=true it appends corrections after the client's dialog approved exactly that list; it never changes an existing line
praxis_project_statusreadnoall.project status for a repository
praxis_project_init_previewpreviewnoallShow the inferred .project YAML; writes nothing
praxis_project_init_applyapplyyesallWrite .project from the previewed inference

Local workflow ​

ToolKindProtectedRolesPurpose
praxis_workflow_statusreadnoallLocal workflow state: requirement ids, stage, next role, all work items with the current one marked. No Jira needed
praxis_workflow_inspectreadnoallStored workflow for one work item, by view (overview, requirements, stories, decisions, work, handoffs, open-items, quality, links, all)
praxis_workflow_previewpreviewnoallPreview a local workflow command (open, select-work-item, link-work-item, add-requirement, handoff, revise-requirement, set-service, quality-check)
praxis_workflow_applyapplyyesallWrite a previewed workflow command. Approval is asked only for human acts (confirm a Story or decision, approve a service); agent-authored records need none
praxis_workflow_commandsreadnoallEvery workflow command with its fields, whether it records the user's own decisions (userOnly, refused from an agent), and an example

Reviews, canon and repositories ​

ToolKindProtectedRolesPurpose
praxis_review_renderreadnoallBuild the HTML review for one stage (requirements, prototype, stories) and return a link the user opens
praxis_review_applyapplyown approvalallRecord the decisions a user made in a review (sent from the page, or a decisions file). Recorded only after the client's dialog approved exactly those decisions; in Claude Desktop they are not recorded (APPROVAL_CLIENT_UI_REQUIRED)
praxis_canon_init_previewreadnoallWhat starting the BA canon in a new project would create, and what already exists; writes nothing
praxis_canon_init_applyapplyyesallCreate the listed BA canon paths; never overwrites
praxis_frontend_discoverreadnoallA repository's frontend before a prototype: framework, style files, components, design tokens
praxis_repository_inspectreadnoallRecord what the Runtime reads in a registered repository of the work item: head commit, branch, manifests, frameworks, agent-instruction files
praxis_repository_briefreadnoallOne repository's share of a multi-repository work item: requirements, stories, services, contracts, order
praxis_context_diagnosereadnoallWhat steers the agent: instruction sources in order, the skills loaded for the role and stage, restored context

Jira (optional) ​

ToolKindProtectedRolesPurpose
praxis_jira_smokereadnoallJira connection check
praxis_jira_discoverreadnoallIssue-type discovery, including the numeric bugTypeId
praxis_jira_epicreadnoallFetch an epic and its children
praxis_jira_statusreadnoallHydrated epic status; filters superseded issues

BA ​

ToolKindProtectedRolesPurpose
praxis_ba_statusreadnobaBA/Jira status for an epic
praxis_ba_previewpreviewnobaPlan of Jira writes (CREATE, UPDATE, UNCHANGED, SUPERSEDED); no write
praxis_ba_applyapplyyesbaMaterialize the previewed BA plan in Jira

Architect and work packages ​

ToolKindProtectedRolesPurpose
praxis_architect_statusreadnoarchitectArchitect/Jira status for an epic
praxis_architect_previewpreviewnoarchitectPlan for one canonical local Work Package (workPackageId scopes it); no write
praxis_architect_applyapplyyesarchitectMaterialize the previewed Architect plan in Jira
praxis_work_package_listreadnoarchitect, developer, qualityList local work packages
praxis_work_package_showreadnoarchitect, developer, qualityLocal work package and its resolved Jira key
praxis_work_package_statusreadnoarchitect, developer, qualityAlias of praxis_work_package_show

Developer ​

ToolKindProtectedRolesPurpose
praxis_developer_statusreadnodeveloperStatus by workPackage (local id or Jira key) or by local workItemId
praxis_developer_claimapplyyesdeveloperClaim a work package (idempotent for the same actor)
praxis_developer_releaseapplyyesdeveloperForce-release a claim
praxis_developer_completeapplyyesdeveloperRun required verification, persist evidence, emit the Developer to Quality handoff; does not mark Done
praxis_developer_complete_recovery_previewpreviewnodeveloperPreview reconciling a premature Jira Done or missing evidence; writes nothing
praxis_developer_complete_recovery_applyapplyyesdeveloperApply the recovery; restores development status and reconciles evidence

Developer: Git delivery ​

ToolKindProtectedRolesPurpose
praxis_developer_git_statusreadnodeveloperGit Delivery assessment: branch, HEAD, working tree, remotes, provider, identity; never prints credentials
praxis_developer_git_connect_previewpreviewnodeveloperPreview adding or selecting a remote; does not create a repository
praxis_developer_git_connect_applyapplyyesdevelopergit remote add or set-url; no push
praxis_developer_git_identity_previewpreviewnodeveloperPreview repository-local user.name and user.email
praxis_developer_git_identity_applyapplyyesdeveloperWrite the repository-local identity
praxis_developer_git_previewpreviewnodeveloperAllowlist, hashes, Quality snapshot binding, commit message, fingerprint; does not branch, stage or commit
praxis_developer_git_commitapplyyesdeveloperCreate a local feature branch, stage the allowlist, commit; no push, no pull request, no Jira
praxis_developer_git_publish_previewpreviewnodeveloperPreview a push (baseline or branch): source SHA, remote branch, refspec; never force
praxis_developer_git_publishapplyyesdevelopergit push without --force
praxis_developer_git_merge_request_previewpreviewnodeveloperPreview a GitHub Pull Request or GitLab Merge Request against the published default branch
praxis_developer_git_merge_requestapplyyesdeveloperCreate the PR or MR after push; deduplicates; does not merge and does not claim CI passed
praxis_developer_git_delivery_statusreadnodeveloperGit Delivery journal: commit SHA, remote, PR or MR URL, CI status if known
praxis_developer_git_link_jira_previewpreviewnodeveloperPreview a Jira comment that links the PR or MR
praxis_developer_git_link_jira_applyapplyyesdeveloperWrite that Jira comment; no status change

Quality ​

ToolKindProtectedRolesPurpose
praxis_quality_statusreadnoqualityQuality service health and the work package Quality lifecycle; does not start the service
praxis_quality_ensurepreviewnoqualityStart or reuse the local Quality HTTP service bundled in the Runtime; runs no review, writes no Jira
praxis_quality_reviewpreviewnoqualityRun a Quality Review for a work package; persists QA evidence and a SQLite review; does not change Jira
praxis_quality_reportpreviewnoqualitySafe alias of praxis_quality_review
praxis_quality_review_showreadnoqualityRead a stored review by id
praxis_quality_apply_previewpreviewnoqualityPreview the Jira writes for a persisted review (live transitions); no write
praxis_quality_applyapplyyesqualityWrite the previewed Quality Apply plan; Jira Done or Bugs only from this approved plan
praxis_quality_apply_statusreadnoqualityPostconditions of a Quality Apply: Jira properties, comment, manifest, journal, consistency

Note: praxis_quality_ensure, praxis_quality_review and praxis_quality_report are preview in the catalog but have local side effects (a local service, evidence files, a SQLite review). They are not in PROTECTED_TOOLS, and the catalog states that they do not write Jira.

The 16 protected tools ​

praxis_project_init_apply, praxis_ba_apply, praxis_architect_apply, praxis_developer_claim, praxis_developer_release, praxis_developer_complete, praxis_developer_complete_recovery_apply, praxis_quality_apply, praxis_developer_git_connect_apply, praxis_developer_git_identity_apply, praxis_developer_git_commit, praxis_developer_git_publish, praxis_developer_git_merge_request, praxis_developer_git_link_jira_apply, praxis_canon_init_apply, praxis_workflow_apply.

praxis_review_apply is not in this list but asks for approval in the same dialog before it records anything.

To check that your client sees the full set, compare praxis_doctor data.build.tools.count (62) and digest with the digest of the sorted tool names. A different count means a stale tool registry or another build.