Simple CLI tools that any LLM coding agent can invoke via Bash. No MCP servers, no complex protocols — just executable scripts and a README.
Inspired by What if you don't need MCP at all? by Mario Zechner.
LLMs already know how to write code and use Bash. Instead of heavy MCP servers with dozens of tools and thousands of tokens of tool descriptions (Playwright MCP: ~13.7k tokens, Chrome DevTools MCP: ~18k tokens), we use minimal CLI scripts that the agent invokes directly via its Bash tool.
Key benefits:
- Tiny context footprint — a README with usage examples is all the agent needs (~200-400 tokens vs 13-18k for MCP equivalents)
- Composable — scripts output to stdout, pipe into files, chain with other commands
- Easy to extend — ask your agent to write a new tool and slot it in
- Agent-agnostic — works with any harness that has Bash access
- Progressive disclosure — only load tool instructions when you actually need them
| Tool | Description |
|---|---|
| browser-tools | Chrome DevTools Protocol — start browser, navigate, eval JS, screenshot, pick elements, cookies, Google search, content extraction |
Pi discovers tools automatically via its Skills system. Install a skill to ~/.pi/agent/skills/<tool-name>/SKILL.md with frontmatter containing a name and description. Pi injects only the description into the system prompt and loads full instructions on-demand.
# Skills are auto-discovered. Force-load with:
/skill:browser-toolsSee ~/.pi/agent/skills/browser-tools/SKILL.md for the installed skill.
Add the agent-tools directory as a working directory with /add-dir, then reference tool READMEs with @:
# Start Claude Code with tools in PATH
alias cl="PATH=$PATH:$HOME/agent-tools/browser-tools claude --dangerously-skip-permissions"
# In-session: reference a tool's README to load its instructions
@browser-tools/README.mdOr add to your project's CLAUDE.md:
For browser automation, read ~/agent-tools/browser-tools/README.mdAdd tool directories to PATH via your shell config, then reference the README in your system prompt or session:
# In ~/.zshrc or ~/.bashrc
export PATH="$PATH:$HOME/agent-tools/browser-tools"Then tell the agent to read the README when you need browser tools:
Read ~/agent-tools/browser-tools/README.md — use those tools for this task.
Or add to your project's opencode.json instructions field to have it always available.
- Create a directory:
~/agent-tools/my-tool/ - Add executable scripts with a consistent prefix:
my-tool-action.js - Write a
README.mddescribing each script's usage - Optionally, create a pi skill at
~/.pi/agent/skills/my-tool/SKILL.md - Add the directory to your PATH alias or shell config
Each tool should be a self-contained script that:
- Has a shebang (
#!/usr/bin/env nodeor#!/bin/bash) - Shows usage info when called with no args or
--help - Outputs results to stdout (text, file paths, etc.)
- Exits with appropriate codes (0 success, 1 error)