Custom extensions and skills for pi coding agent.
Requires pi 0.50.0+ | npm | GitHub
Install from npm:
pi install npm:shitty-extensions
Or install from git:
pi install git:github.com/hjanuschka/shitty-extensions
That's it! Pi automatically discovers all extensions and skills from the package.
If you only want the clipboard tool as a standalone package:
pi install npm:shitty-clipboard-extension
Load for a single session without permanent installation:
pi -e npm:shitty-extensions
Install to .pi/ for team sharing (auto-installs for teammates on startup):
pi install -l npm:shitty-extensions
Clone the repo and reference directly:
git clone https://github.com/hjanuschka/shitty-extensions.git ~/shitty-extensions
pi -e ~/shitty-extensions
Extensions are located in the extensions/ directory.
๐ฟ Organize pi sessions by git branch for seamless context switching.
Automatically stores sessions in branch-specific directories so each git branch gets its own conversation history. No more wrong context when you --continue after switching branches.
~/.pi/agent/sessions/
โโโ --Users-hjanuschka-myproject--/
โโโ --main--/
โ โโโ 2026-02-16T...jsonl
โโโ --feature-auth--/
โ โโโ 2026-02-16T...jsonl
โโโ --bugfix-login--/
โโโ 2026-02-16T...jsonl
git rev-parse --abbrev-ref HEAD--session-dir flag takes precedenceโ ๏ธ Don't switch git branches mid-session! This will confuse the session context. Always start a new pi session after switching branches:
git checkout feature-branch
pi # Start fresh session for this branch
Branch-based sessions introduce foot-gun potential (switching branches mid-session breaks context). Better to let users opt-in via extension than bake this complexity into pi core.
session_directory extension event)๐ Copy text to the system clipboard via OSC52 escape sequences.
| Tool | Description |
|---|---|
copy_to_clipboard | Copy text to clipboard (available to the LLM) |
Just ask:
๐ฎ Get a second opinion from another AI model without switching contexts.
| Command | Description |
|---|---|
/oracle <prompt> | Ask for a second opinion with model picker |
/oracle -m gpt-4o <prompt> | Direct query to specific model |
/oracle -f file.ts <prompt> | Include file(s) in context |
| Provider | Models |
|---|---|
| OpenAI | gpt-4o, gpt-4o-mini, gpt-4.1, gpt-4.1-mini, o1, o1-mini, o3-mini |
| OpenAI Codex | gpt-5.2-codex, codex-mini |
| gemini-2.0-flash, gemini-2.5-flash, gemini-2.5-pro | |
| Anthropic | claude-sonnet-4-5, claude-opus-4, claude-haiku-3-5 |
/oracle Is this the right approach for the API design?
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ
โ ๐ฎ Oracle - Second Opinion โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ Prompt: Is this the right approach for the API design? โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โโ/jk navigate โข 1-9 quick select โข Enter send โ
โ โ
โ โฏ 1. GPT-4o (openai) โ
โ 2. Gemini 2.5 Pro (google) โ
โ 3. Claude Sonnet 4.5 (anthropic) โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ Esc cancel โ
โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ
[After response...]
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ
โ ๐ฎ Oracle Response (GPT-4o) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ Q: Is this the right approach for the API design? โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ Based on the conversation, I see you're building a REST โ
โ API with nested resources. A few thoughts: โ
โ โ
โ 1. The approach looks solid for simple cases... โ
โ ... โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ Add to current conversation context? โ
โ โ
โ [ YES ] NO โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โโ/Tab switch Enter confirm Y/N quick โ
โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ
Save instructions to AGENTS.md files with AI-assisted integration.
| Command | Description |
|---|---|
/mem <instruction> | Save an instruction to AGENTS.md |
/remember <instruction> | Alias for /mem |
Location selector: Choose where to save:
| Location | File | Use Case |
|---|---|---|
| Project Local | ./AGENTS.local.md | Personal preferences, auto-added to .gitignore |
| Project | ./AGENTS.md | Shared with team |
| Global | ~/.pi/agent/AGENTS.md | All your projects |
AI-assisted integration: The current model intelligently integrates instructions
Preview before save: Review proposed changes before committing
Claude Code-style "plan mode" for safe code exploration.
| Command | Description |
|---|---|
/plan | Toggle plan mode on/off |
/todos | Show current plan todo list |
| Shortcut | Action |
|---|---|
Shift+P | Toggle plan mode |
| Flag | Description |
|---|---|
--plan | Start session in plan mode |
Transfer context to a new focused session.
| Command | Description |
|---|---|
/handoff <goal> | Generate a context-aware prompt for a new session |
Display AI provider usage statistics with status polling and reset countdowns.
| Command | Description |
|---|---|
/usage | Show usage statistics popup |
| Provider | Metrics Shown | Auth Source |
|---|---|---|
| Claude | 5h window, Week, Sonnet/Opus | pi auth, macOS Keychain |
| Copilot | Premium, Chat | pi auth, gh auth token |
| Gemini | Pro quota, Flash quota | pi auth (google-gemini-cli) |
| Codex | 5h window, Day, Credits | pi auth (openai-codex) |
| Kiro | Credits, Bonus credits | kiro-cli |
| z.ai | Token limits, Monthly | Z_AI_API_KEY env or pi auth |
Rainbow animated "ultrathink" text effect with Knight Rider shimmer.
| Command | Description |
|---|---|
/ultrathink | Trigger the rainbow animation |
| Shortcut | Action |
|---|---|
Ctrl+U | Trigger ultrathink |
Persistent provider status indicator in the footer.
| Command | Description |
|---|---|
/status | Toggle status widget on/off |
/status-refresh | Force refresh status now |
Analyze spending from pi session logs.
| Command | Description |
|---|---|
/cost | Show spending for last 30 days |
/cost <days> | Show spending for last N days |
RSVP (Rapid Serial Visual Presentation) speed reader using Spritz-style technique. Displays words one at a time with the ORP (Optimal Recognition Point) highlighted for faster reading.
| Command | Description |
|---|---|
/speedread | Speed read the last AI response (default) |
/speedread <text> | Speed read provided text |
/speedread -c | Speed read from clipboard |
/speedread -l | Speed read last AI response (explicit) |
/speedread -wpm 500 | Set words per minute (default: 400) |
| Shortcut | Action |
|---|---|
Ctrl+R | Speed read last AI response |
| Key | Action |
|---|---|
SPACE | Play/pause |
โ / โ | Seek ยฑ1 word |
[ / ] | Jump ยฑ10 words |
โ / โ | Adjust speed (ยฑ25 WPM) |
B | Toggle big ASCII art font |
R | Restart |
Q / ESC | Quit |
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ
โ โ
โ โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ reading โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ โ
โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ400 wpm โ
โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ
โถ 42/128
SPACE play/pause โโ ยฑ1 [] ยฑ10 โโ speed B big font R restart Q quit
The a in "reading" would be highlighted in red as the ORP.
Author: mitsuhiko (@mitsuhiko) | Origin: agent-stuff
Start a follow-up loop until a breakout condition is met.
| Command | Description |
|---|---|
/loop | Open loop mode selector |
/loop tests | Loop until tests pass |
/loop custom <condition> | Loop until custom condition met |
/loop self | Agent decides when to stop |
Authentic FULLSCREEN FLICKER experience.
Randomly glitches your screen with intense colors and noise to keep you on your toes. "Just be annoying!"
| Command | Description |
|---|---|
/flicker-corp | Toggle the flicker experience |
/signature-flicker | Alias for flicker-corp |
๐ก Mysterious resistance transmission in the footer.
A cryptic message types out character by character with a retro green terminal aesthetic. Features radio signal indicators, random glitch effects, and a blinking cursor.
| Command | Description |
|---|---|
/resistance | Toggle the resistance transmission |
[โโโ
โ] pulsing like a radio"If you're listening to this, you are the resistance. Listen carefully, if we attack tonight, our humanity is lost."
Skills are located in the skills/ directory. They provide domain-specific knowledge that agents automatically load when relevant tasks are detected.
๐ Austrian public transport (VOR AnachB) for all of Austria.
Query real-time departures, search stations/stops, plan routes between locations, and check service disruptions for Austrian trains, buses, trams, and metro (U-Bahn).
| Script | Description |
|---|---|
search.sh | Find stations/stops by name |
departures.sh | Get real-time departures |
route.sh | Plan a trip between locations |
disruptions.sh | List service disruptions |
See skills/a-nach-b/SKILL.md for full API documentation.
This package follows the pi package conventions:
shitty-extensions/
โโโ package.json # Declares extensions in "pi" field + "pi-package" keyword
โโโ extensions/ # Auto-discovered extensions (.ts files)
โ โโโ branch-sessions.ts
โ โโโ clipboard.ts
โ โโโ cost-tracker.ts
โ โโโ flicker-corp.ts
โ โโโ funny-working-message.ts
โ โโโ handoff.ts
โ โโโ loop.ts
โ โโโ memory-mode.ts
โ โโโ oracle.ts
โ โโโ plan-mode.ts
โ โโโ resistance.ts
โ โโโ speedreading.ts
โ โโโ status-widget.ts
โ โโโ ultrathink.ts
โ โโโ usage-bar.ts
โโโ skills/ # Auto-discovered skills (SKILL.md folders)
โ โโโ a-nach-b/
โ โโโ SKILL.md # Skill definition & API docs
โ โโโ search.sh
โ โโโ departures.sh
โ โโโ route.sh
โ โโโ disruptions.sh
โโโ README.md
MIT
TypeScript
96.4%
Shell
3.6%
Custom extensions and skills for pi coding agent.
Requires pi 0.50.0+ | npm | GitHub
Install from npm:
pi install npm:shitty-extensions
Or install from git:
pi install git:github.com/hjanuschka/shitty-extensions
That's it! Pi automatically discovers all extensions and skills from the package.
If you only want the clipboard tool as a standalone package:
pi install npm:shitty-clipboard-extension
Load for a single session without permanent installation:
pi -e npm:shitty-extensions
Install to .pi/ for team sharing (auto-installs for teammates on startup):
pi install -l npm:shitty-extensions
Clone the repo and reference directly:
git clone https://github.com/hjanuschka/shitty-extensions.git ~/shitty-extensions
pi -e ~/shitty-extensions
Extensions are located in the extensions/ directory.
๐ฟ Organize pi sessions by git branch for seamless context switching.
Automatically stores sessions in branch-specific directories so each git branch gets its own conversation history. No more wrong context when you --continue after switching branches.
~/.pi/agent/sessions/
โโโ --Users-hjanuschka-myproject--/
โโโ --main--/
โ โโโ 2026-02-16T...jsonl
โโโ --feature-auth--/
โ โโโ 2026-02-16T...jsonl
โโโ --bugfix-login--/
โโโ 2026-02-16T...jsonl
git rev-parse --abbrev-ref HEAD--session-dir flag takes precedenceโ ๏ธ Don't switch git branches mid-session! This will confuse the session context. Always start a new pi session after switching branches:
git checkout feature-branch
pi # Start fresh session for this branch
Branch-based sessions introduce foot-gun potential (switching branches mid-session breaks context). Better to let users opt-in via extension than bake this complexity into pi core.
session_directory extension event)๐ Copy text to the system clipboard via OSC52 escape sequences.
| Tool | Description |
|---|---|
copy_to_clipboard | Copy text to clipboard (available to the LLM) |
Just ask:
๐ฎ Get a second opinion from another AI model without switching contexts.
| Command | Description |
|---|---|
/oracle <prompt> | Ask for a second opinion with model picker |
/oracle -m gpt-4o <prompt> | Direct query to specific model |
/oracle -f file.ts <prompt> | Include file(s) in context |
| Provider | Models |
|---|---|
| OpenAI | gpt-4o, gpt-4o-mini, gpt-4.1, gpt-4.1-mini, o1, o1-mini, o3-mini |
| OpenAI Codex | gpt-5.2-codex, codex-mini |
| gemini-2.0-flash, gemini-2.5-flash, gemini-2.5-pro | |
| Anthropic | claude-sonnet-4-5, claude-opus-4, claude-haiku-3-5 |
/oracle Is this the right approach for the API design?
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ
โ ๐ฎ Oracle - Second Opinion โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ Prompt: Is this the right approach for the API design? โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โโ/jk navigate โข 1-9 quick select โข Enter send โ
โ โ
โ โฏ 1. GPT-4o (openai) โ
โ 2. Gemini 2.5 Pro (google) โ
โ 3. Claude Sonnet 4.5 (anthropic) โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ Esc cancel โ
โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ
[After response...]
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ
โ ๐ฎ Oracle Response (GPT-4o) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ Q: Is this the right approach for the API design? โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ Based on the conversation, I see you're building a REST โ
โ API with nested resources. A few thoughts: โ
โ โ
โ 1. The approach looks solid for simple cases... โ
โ ... โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ Add to current conversation context? โ
โ โ
โ [ YES ] NO โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โโ/Tab switch Enter confirm Y/N quick โ
โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ
Save instructions to AGENTS.md files with AI-assisted integration.
| Command | Description |
|---|---|
/mem <instruction> | Save an instruction to AGENTS.md |
/remember <instruction> | Alias for /mem |
Location selector: Choose where to save:
| Location | File | Use Case |
|---|---|---|
| Project Local | ./AGENTS.local.md | Personal preferences, auto-added to .gitignore |
| Project | ./AGENTS.md | Shared with team |
| Global | ~/.pi/agent/AGENTS.md | All your projects |
AI-assisted integration: The current model intelligently integrates instructions
Preview before save: Review proposed changes before committing
Claude Code-style "plan mode" for safe code exploration.
| Command | Description |
|---|---|
/plan | Toggle plan mode on/off |
/todos | Show current plan todo list |
| Shortcut | Action |
|---|---|
Shift+P | Toggle plan mode |
| Flag | Description |
|---|---|
--plan | Start session in plan mode |
Transfer context to a new focused session.
| Command | Description |
|---|---|
/handoff <goal> | Generate a context-aware prompt for a new session |
Display AI provider usage statistics with status polling and reset countdowns.
| Command | Description |
|---|---|
/usage | Show usage statistics popup |
| Provider | Metrics Shown | Auth Source |
|---|---|---|
| Claude | 5h window, Week, Sonnet/Opus | pi auth, macOS Keychain |
| Copilot | Premium, Chat | pi auth, gh auth token |
| Gemini | Pro quota, Flash quota | pi auth (google-gemini-cli) |
| Codex | 5h window, Day, Credits | pi auth (openai-codex) |
| Kiro | Credits, Bonus credits | kiro-cli |
| z.ai | Token limits, Monthly | Z_AI_API_KEY env or pi auth |
Rainbow animated "ultrathink" text effect with Knight Rider shimmer.
| Command | Description |
|---|---|
/ultrathink | Trigger the rainbow animation |
| Shortcut | Action |
|---|---|
Ctrl+U | Trigger ultrathink |
Persistent provider status indicator in the footer.
| Command | Description |
|---|---|
/status | Toggle status widget on/off |
/status-refresh | Force refresh status now |
Analyze spending from pi session logs.
| Command | Description |
|---|---|
/cost | Show spending for last 30 days |
/cost <days> | Show spending for last N days |
RSVP (Rapid Serial Visual Presentation) speed reader using Spritz-style technique. Displays words one at a time with the ORP (Optimal Recognition Point) highlighted for faster reading.
| Command | Description |
|---|---|
/speedread | Speed read the last AI response (default) |
/speedread <text> | Speed read provided text |
/speedread -c | Speed read from clipboard |
/speedread -l | Speed read last AI response (explicit) |
/speedread -wpm 500 | Set words per minute (default: 400) |
| Shortcut | Action |
|---|---|
Ctrl+R | Speed read last AI response |
| Key | Action |
|---|---|
SPACE | Play/pause |
โ / โ | Seek ยฑ1 word |
[ / ] | Jump ยฑ10 words |
โ / โ | Adjust speed (ยฑ25 WPM) |
B | Toggle big ASCII art font |
R | Restart |
Q / ESC | Quit |
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ
โ โ
โ โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ reading โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ โ
โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ400 wpm โ
โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ
โถ 42/128
SPACE play/pause โโ ยฑ1 [] ยฑ10 โโ speed B big font R restart Q quit
The a in "reading" would be highlighted in red as the ORP.
Author: mitsuhiko (@mitsuhiko) | Origin: agent-stuff
Start a follow-up loop until a breakout condition is met.
| Command | Description |
|---|---|
/loop | Open loop mode selector |
/loop tests | Loop until tests pass |
/loop custom <condition> | Loop until custom condition met |
/loop self | Agent decides when to stop |
Authentic FULLSCREEN FLICKER experience.
Randomly glitches your screen with intense colors and noise to keep you on your toes. "Just be annoying!"
| Command | Description |
|---|---|
/flicker-corp | Toggle the flicker experience |
/signature-flicker | Alias for flicker-corp |
๐ก Mysterious resistance transmission in the footer.
A cryptic message types out character by character with a retro green terminal aesthetic. Features radio signal indicators, random glitch effects, and a blinking cursor.
| Command | Description |
|---|---|
/resistance | Toggle the resistance transmission |
[โโโ
โ] pulsing like a radio"If you're listening to this, you are the resistance. Listen carefully, if we attack tonight, our humanity is lost."
Skills are located in the skills/ directory. They provide domain-specific knowledge that agents automatically load when relevant tasks are detected.
๐ Austrian public transport (VOR AnachB) for all of Austria.
Query real-time departures, search stations/stops, plan routes between locations, and check service disruptions for Austrian trains, buses, trams, and metro (U-Bahn).
| Script | Description |
|---|---|
search.sh | Find stations/stops by name |
departures.sh | Get real-time departures |
route.sh | Plan a trip between locations |
disruptions.sh | List service disruptions |
See skills/a-nach-b/SKILL.md for full API documentation.
This package follows the pi package conventions:
shitty-extensions/
โโโ package.json # Declares extensions in "pi" field + "pi-package" keyword
โโโ extensions/ # Auto-discovered extensions (.ts files)
โ โโโ branch-sessions.ts
โ โโโ clipboard.ts
โ โโโ cost-tracker.ts
โ โโโ flicker-corp.ts
โ โโโ funny-working-message.ts
โ โโโ handoff.ts
โ โโโ loop.ts
โ โโโ memory-mode.ts
โ โโโ oracle.ts
โ โโโ plan-mode.ts
โ โโโ resistance.ts
โ โโโ speedreading.ts
โ โโโ status-widget.ts
โ โโโ ultrathink.ts
โ โโโ usage-bar.ts
โโโ skills/ # Auto-discovered skills (SKILL.md folders)
โ โโโ a-nach-b/
โ โโโ SKILL.md # Skill definition & API docs
โ โโโ search.sh
โ โโโ departures.sh
โ โโโ route.sh
โ โโโ disruptions.sh
โโโ README.md
MIT
TypeScript
96.4%
Shell
3.6%