agnix
Checks AI agent config files such as SKILL.md, CLAUDE.md, hooks and MCP configs against agnix's lint rules
Bash-style shell for agents on Windows, translated to PowerShell and run natively
By 20000419 (individual) TypeScript Local · stdio Developer tools
60 popularity score ★ 899 ↓ 79/wk
Opens the app, which asks before it adds the server.
npm install -g fauxnix-cliclaude mcp add fauxnix -- fauxnix mcp{
"mcpServers": {
"fauxnix": {
"command": "fauxnix",
"args": [
"mcp"
]
}
}
}{
"mcpServers": {
"fauxnix": {
"command": "fauxnix",
"args": [
"mcp"
]
}
}
}{
"servers": {
"fauxnix": {
"type": "stdio",
"command": "fauxnix",
"args": [
"mcp"
]
}
}
}[mcp_servers.fauxnix]
command = "fauxnix"
args = ["mcp"]gemini mcp add --scope user fauxnix fauxnix -- mcpFAUXNIX_PS |
Optional: Set to pwsh to use PowerShell 7 instead of Windows PowerShell 5.1. pwsh.exe must sit in an absolute PATH folder outside the working directory, and other values make it fail at start. |
|---|---|
FAUXNIX_TOOL_NAME |
Optional: Name of the main shell tool. The batch tool becomes this name plus _batch. |
FAUXNIX_NATIVE_ENCODING |
Optional: Set to ansi to decode native program output as GBK instead of UTF-8, for localized Windows admin tools. |
fauxnix gives a coding assistant on Windows a shell tool that accepts the bash commands models tend to write and turns each one into a PowerShell script by fixed rules, with no model calls involved. The script runs in a resident PowerShell process on your machine, and the reply is shaped like GNU output: ls -l style columns, bash-style error lines and bash exit codes (127 for an unknown command, 124 on timeout, 130 when cancelled). About 109 commands are covered, from file and text tools (ls, find, grep, sed, awk, sort) to process, network and archive commands. Anything it does not translate, such as git, node or python, is passed through to the real program.
The MCP server in v2.1.1 registers four tools (src/mcp.ts), though the README's MCP section only names two. There is a bash tool that keeps working directory, exported variables and positional parameters between calls, and bash_batch for running up to 32 steps in one call with a shared time and output budget. fauxnix_translate shows the PowerShell it would run without executing it, and fauxnix_session checks or resets the shell state. The main tool's name can be changed with FAUXNIX_TOOL_NAME, and the batch tool follows it with a _batch suffix.
The same npm package also ships a command-line tool and an installer that writes the config for Claude Code, Codex, OpenCode, Kimi Code and Qwen Code. It is the work of one developer, not of Microsoft.
| Runtime | Node.js 22.20.0+ |
|---|---|
| Runs on | Windows |
| Also |
|
Install the package globally with npm install -g fauxnix-cli. Running fauxnix install --claude (or --codex, --opencode, --kimi, --qwen) writes the client config for you with the absolute paths filled in. To write it by hand, find the package folder with npm root -g. Node 18 and 20 are not supported from v2. No account or sign-in is needed.
Windows only. It covers a subset of bash: heredocs, background &, tail -f, eval, alias and env -i are refused with an error, and sed and awk lack hold space, labels, arrays and loops. yes stops at 65,536 lines. chmod only maps the read-only bit and chown does nothing. Each call times out after 120 s by default (up to 600 s with timeout_ms); bash_batch output defaults to 256 KiB stdout and 64 KiB stderr. A timeout or cancel kills the PowerShell host, and per SECURITY.md programs the command started may keep running. In non-interactive codex exec, MCP tool calls are denied unless approvals are bypassed.
Suits people running Claude Code, Codex or similar agents on Windows machines where Git Bash or WSL is missing, unreliable or not allowed, such as CI runners or locked-down PCs, and who want the agent to keep writing bash. Its own README says that if Git Bash already works for you, you should keep using it, since that gives real GNU behaviour. Pick WSL when you need full Linux tools. Not for macOS or Linux, where a normal shell already does the job. Since it runs commands as you with no sandbox, use it behind a client that asks before each command if you want that check.
1 only reads, 1 changes things, 2 can delete or overwrite. A ? marks an optional parameter.
bash deletescommand: stringtimeout_ms?: integerbash_batch deletessteps: arraystop_on_error?: booleantimeout_ms?: integerstdout_limit_bytes?: integerstderr_limit_bytes?: integerfauxnix_translatecommand: stringfauxnix_session changesaction?: enum