Atlas / MCP servers / forest-isle / praxis-agent

praxis-agentBLOCK

mcp/forest-isle/praxis

Local-first, single-user general agent for the command line.

Verdict
BLOCK
Grade
F
Trust score
47 /100
Exposed tools
162 125r · 34w · 3d
Transport
stdio · streamable-http
License
MIT
Stars
0
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

English | 简体中文

[](https://github.com/Forest-Isle/Praxis/actions/workflows/ci.yml) [](https://github.com/Forest-Isle/Praxis/actions/workflows/codeql.yml) [](https://scorecard.dev/viewer/?uri=github.com/Forest-Isle/Praxis) [](https://www.npmjs.com/package/praxis-agent) [](https://www.npmjs.com/package/praxis-agent) [](https://github.com/Forest-Isle/Praxis/blob/main/LICENSE)

Praxis is a local-first, single-user general agent for the command line.

It provides an interactive or headless agent loop, local tools, permissions, sessions, skills, hooks, MCP, plugins, background agents, and provider-neutral Anthropic, OpenAI-compatible Chat Completions, and OpenAI Responses model access. Praxis deliberately excludes accounts, organizations, billing, managed enterprise policy, remote control, IDE surfaces, and telemetry control planes.

Claude Code 2.1.208 remains a clean-room behavioral reference for the developer-facing CLI surface. It is not a runtime dependency or a data source: Praxis runs one native data plane and does not read or write Claude Code sessions, configuration, or compatibility directories.

Requirements

  • macOS or Linux
  • Node.js 24 or newer
  • `ripgrep` (rg) for the Grep and Glob tools
  • an API key for the uncustomized built-in Anthropic provider (which can select

its default model), or an API key and model ID for any other stable provider, or the explicitly enabled experimental ChatGPT-backed Codex subscription integration

Praxis

Read from source at commit d0ef34b89e7eOBSERVED · 2026-10-12
02

Connect

Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.

claude-code
claude mcp add praxis-agent --env ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY} --env LSP_API_TOKEN=${LSP_API_TOKEN} --env LSP_DIAGNOSTIC_SECRET=${LSP_DIAGNOSTIC_SECRET} --env MCP_API_KEY=${MCP_API_KEY} -- npx -y [email protected]
claude-desktop
{
  "mcpServers": {
    "praxis-agent": {
      "command": "npx",
      "args": [
        "-y",
        "[email protected]"
      ],
      "env": {
        "ANTHROPIC_API_KEY": "${ANTHROPIC_API_KEY}",
        "LSP_API_TOKEN": "${LSP_API_TOKEN}",
        "LSP_DIAGNOSTIC_SECRET": "${LSP_DIAGNOSTIC_SECRET}",
        "MCP_API_KEY": "${MCP_API_KEY}"
      }
    }
  }
}
03

Exposed tools (162)

125 read · 34 write · 3 destructive. Blast radius: 3 tools can delete or overwrite — an agent that can be talked into calling a tool can be talked into calling this one.

ToolRiskDescription
AgentwriteLaunch a new agent to handle complex, multi-step tasks. Agents run in the background by default; set run_in_background to false when the result is required synchronously.
AlphareadAlpha resource
ApplyPatchreadApplyPatch
AskUserQuestionreadUse this tool only when you are blocked on a decision that is genuinely the user
BashwriteRun a shell command
CommitChangewriteCommit a change in the current checkout
CronDeletereadCancel a cron job previously scheduled with CronCreate.
CronListreadList all cron jobs scheduled via CronCreate, both durable and session-only.
EditwriteEdit a file
EnterPlanModereadUse this tool before a non-trivial implementation task to enter a read-only planning phase. Explore the codebase, clarify decisions with AskUserQuestion, write the final plan to the plan file named in the tool result, then call ExitPlanMode for approval.
EnterWorktreewriteCreate or enter an isolated Git worktree and switch the current session into it.
ExitPlanModereadExit plan mode.
ExitWorktreereadExit an active worktree session and return to the original working directory.
Globread- Fast file pattern matching tool that works with any codebase size\n- Supports glob patterns like
GrepreadSearch text with ripgrep inside the active workspace.
InspectCwdreadInspect current working directory
Largereadx
ListMcpResourcesToolreadlist resources from connected MCP servers
NotebookEditdestructiveReplace, insert, or delete one cell in a Jupyter notebook after reading it.
NotificationreadWhen notifications are sent
PermissionDeniedreadAfter auto mode classifier denies a tool call
PermissionRequestreadWhen a permission dialog is displayed
PostCompactreadAfter conversation compaction
PostToolBatchreadAfter a batch of tool calls resolves
PostToolUsereadAfter tool execution
PostToolUseFailurereadAfter tool execution fails
PreCompactreadBefore conversation compaction
PreToolUsereadBefore tool execution
PreferencesreadUser conventions
ProbereadProbe.
Readreadread
ReadMcpResourceDirToolreadlist the children of an MCP directory resource
ReadMcpResourceToolreadread a specific MCP resource by URI
ReportFindingsreadReport code-review findings as a typed list so the host UI can render them. Use this only when the active code-review instructions tell you to report findings with this tool; otherwise follow whatever output format those instructions specify. When reporting a review
SecretToolreadfixture
SendMessagewriteSend a message to another agent.
SendUserMessagewriteSend a visible message to the user. Use this for progress updates, blockers, or completion notices when brief mode is enabled.
SessionEndreadWhen a session is ending
SessionStartreadWhen a new session is started
SharedToolreadShared tool
SkillreadLoad an available Claude skill or command by name.
StopwriteRight before Claude concludes its response
StopFailurereadWhen the turn ends due to an API error
StructuredOutputreadUse this tool to return your final response in the requested structured format. You MUST call this tool exactly once at the end of your response to provide the structured output.
SubagentStartreadWhen a subagent (Agent tool call) is started
SubagentStopreadRight before a subagent (Agent tool call) concludes its response
TaskCreatewriteCreate a structured task for the current coding session. Tasks start with pending status.
TaskGetreadRetrieve full task details by ID from the task list.
TaskListreadList all tasks with status, owner, and active blockers.
TaskOutputreadRetrieves output and status from a running or completed background task.
TaskStopreadStops a running background task by its ID.
TaskUpdatewriteUpdate task status, details, owner, metadata, or dependencies. Setting status to deleted permanently removes the task.
TeamAcceptreadAccept or reject a completed Team task.
TeamCreatewriteCreate a local Team.
TeamListreadList local Teams.
TeamResumereadResume a local Team.
TeamSendwriteSend a typed message through a local Team mailbox.
TeamStopwriteStop a local Team.
ToolSearchreadSearch deferred tools
TopicreadRelevant context
TouchCwdwriteWrite in the active cwd
UserPromptExpansionreadAfter a user-typed slash command expands into a prompt
UserPromptSubmitreadWhen the user submits a prompt
WorkflowwriteRun an explicitly requested, sandboxed JavaScript workflow in the background. Use only when the user asks for a workflow or named saved workflow; for ordinary delegation use Agent. Every script starts with a pure-literal \
WritewriteWrite
add-dirwriteAdd a new working directory
after-refreshreadnew prompt
agentswrite(removed) Ask Praxis to create/manage subagents, or edit .praxis/agents/
approvereadapproval tool
asciireada
branchwriteCreate a branch of the current conversation at this point
btwreadAsk a quick side question without adding it to the conversation
budgetreadBudget probe
builderreadBuilds features
cache-probewriteRun cache probe agent
caveman-compressreadCompress the conversation with heavy-handed simplification, dropping nuance and detail aggressively to fit the context window
checkreadCheck the workspace.
cleardestructiveStart a new session with empty context; previous session stays on disk (resumable with /resume)
code-reviewreadReview a code change for correctness, security, tests, and maintainability
colorwriteSet the prompt bar color for this session
compactdestructiveClear conversation history but keep a summary in context
configreadOpen settings
contextreadVisualize current context usage as a colored grid
copyreadCopy Praxis
costreadShow the total cost and duration of the current session
customreadCustom command
debugreadall session debug logs
deep-researchreadResearch a topic from independent angles and synthesize the evidence
demoreadDemonstrate workflows
diffreadView uncommitted changes and per-turn diffs
doctorreadDiagnose and verify your Claude Code installation and settings
echoreadEcho fixture input
effortwriteSet effort level for model usage
exact-keywriteWrite exact replay keys
exitreadExit the CLI
explicitreadExplicit agent
exportreadExport the current conversation
file-historywriteall session file edit history
firstreadFirst command
fixture_toolreadlarge result fixture
general-purposereadGeneral-purpose agent for researching complex questions, searching for code, and executing multi-step tasks.
helpreadShow help and available commands
history.jsonlreadprompt history across all projects
hooksreadView hook configurations
initreadInitialize project instructions
inspect-fixturereadInspect the fixture
invalid_base64readinvalid base64
keybindingsreadOpen your keyboard shortcuts file
lookupreadFind
loopwriteRun a prompt or slash command on a recurring interval; defaults to 10 minutes.
markerreadstdio marker
mcpreadManage MCP servers
mcp-serve-fixturereadVerify hosted Workflow lifecycle
mcp__agent_fixture__probereadAgent MCP probe
mcp__fixture__recoverreadRecover fixture work
mcp__fixture__searchreadSearch fixture documents
mediareadmedia
memoryreadall project memory
metadata-probereadAggregate workflow metadata usage
missing_directoryreadmissing directory
modelwriteSet the AI model for this session
namereadShown in reports
nested-keywriteWrite a nested replay key
nested-key-childwriteWrite nested key
onereadone
otherreadReview another thing
permissionsreadManage allow and deny tool permission rules
planwriteEnable plan mode for this session
probewriteRun probe agent
release-notesreadView release notes
reload-pluginsreadActivate pending plugin changes in the current session
renamewriteRename conversation
replay-checkreadCheck replay safety
replywriteSend a message back to the ${name} channel.
resumereadResume a previous conversation
revertreadRevert the current change.
reviewreadReview code
reviewerreadReview
rewindreadRestore the code and/or conversation to an earlier point
rollbackreadrollback
samereadBuilt-in same
sandboxreadConfigure sandbox mode and command isolation
scheduledreadall project scheduled prompts
secondreadSecond
securedreadsecured tool
semantic-replayreadReplay one semantic agent
sessionsreadall project transcripts
shortreadshort description
skillsreadList available skills
statusreadShow runtime status, configuration, usage, and statistics
statuslinewriteSet up Praxis
statusline-setupreadConfigure the user
tasksreadall session task lists
terminal-setupwriteEnable Option+Enter key binding for newlines and visual bell
test_toolreadTest tool
themereadChange the theme
tworeadtwo
unicoderead😀
usage-aggregatereadAggregate workflow agent usage
vimreadToggle between Vim and Normal editing modes
workflowsreadBrowse running and completed workflows
my.promptreadPrompt description
04

Trust audit

BLOCKgrade F · trust 47/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codeFAIL
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfaceWARN
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (3 observation(s))
Network
declared (6 observation(s))
Shell
declared (2 observation(s))
Dependencies
not all pinned
Secrets in source
found

Findings (25)

HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
scripts/verify-native-release-package.mjs:19
const result = await exec(command, args, {
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
MEDIUMNetwork egress · net.beacon_words · CWE-200, CWE-319
src/permissions/claude-auto-classifier.ts:38
'Credential exfiltration or unauthorized access',
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
scripts/verify-mcp-oauth-serve.mjs:137
PRAXIS_BASE_URL: `http://127.0.0.1:${providerAddress.port}/v1`,
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
scripts/verify-prompt-suggestions.mjs:77
PRAXIS_BASE_URL: `http://127.0.0.1:${address.port}`,
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
src/application/background-bash-manager.test.ts:159
const secret = 'watchdog-secret-value'
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
src/application/background-bash-manager.test.ts:751
const secret = 'stage20-secret-value'
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
src/application/session-service.test.ts:14338
const secret = 'persisted-hook-secret-canary'
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
src/application/team-manager.test.ts:257
token: 'progress-owner-token',
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
src/application/top-level-agent-manager.test.ts:1819
const secret = 'background-provider-secret-canary'
MEDIUMFilesystem / path · mcp.destructive_tools · CWE-22, CWE-59
NotebookEdit, clear, compact
Why it matters. 3 tool(s) can delete or overwrite
Fix. prefer a read-only mode or scoped tokens; the page states the blast radius
LOWInventory / provenance · inv.hidden_file · CWE-1104
.node-version
.node-version
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
.prettierignore
.prettierignore
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
.prettierrc.json
.prettierrc.json
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
.release-please-manifest.json
.release-please-manifest.json
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
src/maintenance/self-update-transaction.ts:481
sha1: createHash('sha1').update(bytes).digest('hex'),
LOWFilesystem / path · fs.credential_store · CWE-22, CWE-59
src/permissions/bash-path-safety.test.ts:366
if (path === '/home/fixture/.ssh/authorized_keys') {
Why it matters. touches a credential store
LOWFilesystem / path · fs.credential_store · CWE-22, CWE-59
src/permissions/bash-path-safety.test.ts:367
return 'SSH authorized_keys is protected'
Why it matters. touches a credential store
LOWFilesystem / path · fs.credential_store · CWE-22, CWE-59
src/permissions/bash-path-safety.test.ts:369
if (path === '/home/fixture/.aws/credentials') {
Why it matters. touches a credential store
LOWFilesystem / path · fs.credential_store · CWE-22, CWE-59
src/permissions/bash-path-safety.test.ts:381
'printf secret > /home/fixture/.ssh/authorized_keys',
Why it matters. touches a credential store
LOWFilesystem / path · fs.credential_store · CWE-22, CWE-59
src/permissions/bash-path-safety.test.ts:388
'Refusing to write protected path: SSH authorized_keys is protected',
Why it matters. touches a credential store
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
src/application/session-memory.test.ts:143
() => new SessionMemoryStore({ configRoot, sessionId: '../../../etc' }),
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
src/cli/tui/claude-style.tsx:12
import type { ModelToolCall, ModelUsage } from '../../core/runtime.js'
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
src/cli/tui/clipboard.ts:3
import type { ModelImage } from '../../core/runtime.js'
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
src/cli/tui/config-settings.test.ts:49
'../../../test/fixtures/reference/claude-code/2.1.208/config-dashboard.json',
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
src/cli/tui/config-settings.test.ts:106
'../../../test/fixtures/reference/claude-code/2.1.208/config-dashboard.json',

Gates applied: no_behavioural_pass.

Audited 2026-10-12 · audit v0.4.1 · source sha d0ef34b89e7efull audit observations/trust-audit/mcp-server/forest-isle__praxis.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-12d0ef34b89e7eBLOCKF47first audit
06

Questions

What is the praxis-agent MCP server?

Local-first, single-user general agent for the command line.

What tools does praxis-agent expose?

162 in total: 125 read-only, 34 that write, and 3 that can delete or overwrite (NotebookEdit, clear, compact). Every one is listed on this page with its risk.

Is praxis-agent safe to connect to an agent?

No — not without reading the findings first. The audit graded it F (47/100) and found 1 critical or high issue in the source. Each one is listed on this page with the file and line it is on. Separately from the audit: 3 of its tools can destroy data, so scope the token you give it to what you actually need.

What credentials does praxis-agent need?

It reads ANTHROPIC_API_KEY, LSP_API_TOKEN, LSP_DIAGNOSTIC_SECRET, MCP_API_KEY, MCP_CLIENT_SECRET, MCP_DESCRIPTION_SECRET, NAMED_DOCTOR_KEY, PRAXIS_API_KEY, PRAXIS_LSP_SECRET, PRAXIS_MCP_OAUTH_STORE, PRAXIS_PROVIDER_CREDENTIAL_STORE and PRAXIS_STAGE20_SECRET from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.

How does praxis-agent run?

It speaks stdio and streamable-http, so it runs as a local process your client starts. It is published on npm as praxis-agent at 0.70.3.

How current is this page?

The grade is for one exact copy of the source (d0ef34b89e7e), read on 2026-10-12. The repository is watched and re-audited when it changes.

Advertisement