parrot
LLM already said it. Why say again?

LLMs waste 30-40% of output tokens restating your question, echoing instructions before executing them, and tacking on summaries that repeat the intro. Parrot kills that.
Before / After
You ask: "Why is my API returning 500 errors?"
| Vanilla (167 tokens) | Parrot (68 tokens) — 59% reduction |
|---|
|
You're asking about why your API is returning 500 errors. Let me help you debug this issue.
The 500 error you're seeing is most likely caused by an unhandled exception in your route handler. Looking at your code, the getUser function doesn't handle the case where the database query returns null.
When the database returns null and you try to access user.name, it throws a TypeError because you can't access properties on null.
To fix this, you should add a null check:
const user = await getUser(id);
if (!user) return res.status(404).json({ error: 'Not found' });
In summary, the 500 error is caused by a missing null check on the database result. Adding the guard clause above will fix the issue.
|
getUser doesn't handle null from the database. When the query returns nothing, user.name throws a TypeError — which surfaces as a 500.
Add a guard:
const user = await getUser(id);
if (!user) return res.status(404).json({ error: 'Not found' });
|
Same information. Half the tokens.
Install
| Agent | Command | Auto-activates | Config file |
|---|
| Claude Code | See below | Yes | .claude-plugin/ |
| Codex | Clone repo | Yes | AGENTS.md, .codex/ |
| Gemini CLI | gemini extensions install animeshpatni94/parrot | Yes | GEMINI.md |
| Cursor | npx skills add animeshpatni94/parrot -a cursor | No | .cursor/rules/parrot.md |
| Windsurf | npx skills add animeshpatni94/parrot -a windsurf | No | .windsurf/rules/parrot.md |
| Cline | Clone repo | Yes | .clinerules/parrot.md |
| Roo Code | Clone repo | Yes | .roo/rules/parrot.md |
| Copilot | Clone repo | Yes | .github/copilot-instructions.md |
| Continue.dev | Clone repo | Yes | .continuerules |
| Zed AI | Clone repo | Yes | .rules |
| Amazon Q | Clone repo | Yes | .amazonq/rules/parrot.md |
| Augment | Clone repo | Yes | .augment-guidelines |
| Aider | Clone repo | Yes | .aider.conf.yml → rules/parrot.md |
Claude Code — setup guide
Option A: Plugin (recommended)
# Step 1: Add the marketplace (one-time)
claude plugin marketplace add animeshpatni94/parrot
# Step 2: Install the plugin
claude plugin install parrot@parrot
Auto-activates every session via SessionStart hook. Supports /parrot lite, /parrot full, /parrot off.
Uninstall: claude plugin uninstall parrot
Option B: Standalone hooks (no plugin)
# macOS / Linux
bash <(curl -s https://raw.githubusercontent.com/animeshpatni94/parrot/main/hooks/install.sh)
# Windows (PowerShell)
irm https://raw.githubusercontent.com/animeshpatni94/parrot/main/hooks/install.ps1 | iex
Copies hook scripts to ~/.claude/hooks/ and registers them in ~/.claude/settings.json.
Option C: Project-level only
Clone this repo into your project. Claude Code reads CLAUDE.md at the project root, which references skills/parrot/SKILL.md. Active for that project only.
GitHub Copilot — setup guide
Option A: Repo-level (auto-activates for everyone on the project)
Add .github/copilot-instructions.md to your repo (already included if you clone parrot). Copilot Chat reads this file automatically — no config needed.
To add parrot to an existing repo:
mkdir -p .github
curl -fsSL https://raw.githubusercontent.com/animeshpatni94/parrot/main/.github/copilot-instructions.md \
-o .github/copilot-instructions.md
Option B: User-level (active across all repos)
In VS Code: Settings → search copilot instructions → GitHub > Copilot > Chat: Code Generation Instructions → Add Item → paste:
Never say the same thing twice. One idea, one expression. No echoes.
NEVER restate the user's question. NEVER echo instructions before executing.
NEVER summarize what you just said. NEVER add a conclusion that repeats the intro.
NEVER use: "as you mentioned", "to summarize", "in summary", "to recap".
One idea, one expression. Said it? Move on.
Option C: settings.json (VS Code)