
Renders markdown to self-contained HTML with a custom dark stylesheet and opens in browser. Use when previewing markdown documents, generating styled HTML from README or report files.
Gather facts from the web using evidence-first approach with mandatory citations. Use when researching topics, answering factual questions, or any task requiring web-sourced evidence.
Manage version control with Jujutsu (jj) — no staging area, immediate changes, smart rebasing. Use when navigating history, squashing, or pushing to Git remotes.
Author pre/post-iteration hooks for an experiment session. Use when the user asks to add research fetching, Slack/webhook notifications, persistent learnings, auto-tagging, anti-thrash intervention, idea rotation, or any side effect around iterations.
Programmatic hunk selection for Jujutsu — split, commit, or squash specific hunks without interactive prompts. Use when making partial commits or selective squashes.
Inform the user what is happening — skip passive lookups
Write Conventional Commits messages (v1.0.0) — type(scope): subject format for changelogs and semver. Use when drafting commit messages, PR titles, or release notes.
Choose between hash tables and tree structures for lookups, counting, and grouping. Use when deciding between O(1) hash operations and O(log n) ordered operations.
Wrap file-like objects with read/write counters. Use when implementing IO wrappers, tracking file access, or counting bytes read/written through a proxy.
Query pi agent session logs as JSON Lines using Nushell pipelines. Use when debugging agent sessions, analyzing tool calls, or tracking file access in session history.
Choose the right sorting approach using Python's built-in Timsort, heapq, or custom strategies. Use when sorting arrays, finding top-k elements, or ordering by multiple keys.
Check workspace for problem specs and convention docs before writing code. Use when starting implementation tasks, fixing tests, or any code change to find format rules and constraints.
Apply ordered rules for string transformations like pig latin, atbash, or rot. Use when translating words with specific prefix/suffix rules and ordered predicate matching.
Navigate immutable trees with a zipper cursor. Use when implementing tree traversal, editing tree structures functionally, or tracking focus through breadcrumbs.
Visual Studio Code keyboard shortcuts and keybindings.json configuration. Use when looking up VS Code shortcuts or configuring custom keybindings.
Type-safe JavaScript with bun and vitest. Use when setting up tsconfig.json, defining interfaces, writing branded types, discriminated unions, or type guards.
Re-root an undirected tree from any node using DFS/BFS. Use when changing the point of view in a tree, finding paths between nodes, or reparenting tree structures.
Verify all claims are backed by evidence before producing a final answer. Use when completing research tasks, writing cited answers, or ensuring factual accuracy.
Execute a single shell command in the project working directory. Returns stdout+stderr combined. Stateless — use shell-session for multi-step workflows.
Map symbols across codebases with codemapper (cm) — tree-sitter AST parsing for call graphs, callers/callees, and entrypoints. Use when exploring unknown code or tracing dependencies.
Search and rewrite code with GritQL — declarative queries backed by tree-sitter. Use when refactoring across languages or applying AST transformations at scale.
Create CLI plots from tabular data — 27 chart types from stdin/CSV/TSV. Use when generating bar, line, scatter, or box charts from DuckDB pipe output.
Switch NixOS/Home Manager configs with nh — cleaner interface for builds, switches, and garbage collection. Use when running os/home switch or pruning old generations.
Creates reproducible builds, manages flake inputs, defines devShells, and builds packages with flake.nix. Use when initializing Nix projects, locking dependencies, or running nix build/develop commands.
Check for broken links with lychee — fast Rust link checker for Markdown, HTML, and codebases. Use when validating URLs or finding dead links.
Use Helix (hx) modal editor — selection-first editing with tree-sitter textobjects. Use when configuring keybindings, setting up language servers, or customizing themes.
Creates terminal screenshots and GIFs using VHS tape files. Use when automating terminal recordings, capturing TUI screenshots, or generating demo GIFs.
Find files matching a glob pattern. Use when searching for files by extension, name pattern, or directory structure.
Refactors TypeScript codebases with AST-aware rename, extract, and reference finding. Use for moving functions between files, renaming across codebase, or finding all usages of a symbol.
Run commands in a persistent bash session with stateful cd, env vars, and job state. Use when running multi-step workflows, building projects, or any task requiring state between commands.
Search and rewrite code with ast-grep (sg) using AST patterns and $VAR meta-variables. Use when finding code patterns or refactoring at scale.
Search file contents with regex using ripgrep. Use when finding code patterns, locating function definitions, searching for imports, or finding references.
Initializes Python projects, manages dependencies, pins Python versions, and runs scripts with uv. Use when adding/removing packages, syncing environments, running tools with uvx, or building distributions.
Save a short citable evidence snippet with source and note. Use when gathering facts for research tasks, saving claims for final answers, or building citation chains.
Transcribes audio files to text using whisper-cpp (local, offline). Use when converting speech to text, transcribing podcasts, lectures, meetings, or any audio content.
Manages containers, builds images, configures pods and networks with Podman. Use when running containers, creating Containerfiles, grouping services in pods, or managing container resources.
Build GTK4 desktop apps with GTKX — React JSX renders as native Linux widgets via Rust FFI. Use when creating Adwaita widgets, styling GTK with CSS-in-JS, or debugging GTKX components.
Solve pair-sum, sliding window, and cycle detection problems with two pointers. Use when reducing O(n²) nested loops to O(n) on sorted or sequential data.
Finalize an experiment session into clean, reviewable branches. Use when asked to "finalize experiment", "clean up experiments", or "prepare experiment for review".
Choose between DFS and BFS for graph traversal problems. Use when deciding whether to explore depth-first (cycle detection, paths) or breadth-first (shortest path, levels).
Solve problems with overlapping subproblems and optimal substructure using memoization or tabulation. Use when finding minimum cost, counting ways, or computing longest/shortest subsequences.
Query Firefox bookmarks stored in places.sqlite via Nushell SQLite. Use when looking up bookmarked URLs, browsing Firefox bookmark history, or finding saved links.
Author SYSTEM.md or APPEND_SYSTEM.md for pi coding agent. Use when extending the default system prompt with custom principles, guidelines, or project rules.
Build terminal UI with @mariozechner/pi-tui — component-based TUI with differential rendering. Use when creating TUI screens, input widgets, overlays, or keybindings.
Generate all valid arrangements using backtracking with pruning. Use when solving permutations, combinations, subsets, N-queens, sudoku, or constraint satisfaction problems.
Build Vicinae launcher extensions with TypeScript and React. Use when creating extension commands, List/Form/Detail views, or no-view actions.
Create SKILL.md files that teach the agent new domains. Use when authoring a new pi skill with frontmatter, body structure, and references.
Break complex tasks into GIVEN/UNKNOWN/PLAN before taking action. Use when tasks have multiple steps, require planning, or involve multi-step reasoning.
Process JSON with DuckDB — schema inference, SQL queries, complex joins, and streaming. Use when Nushell pipelines aren't enough for JSON analytics.
Runs packages temporarily, creates isolated shell environments, and evaluates Nix expressions. Use when executing tools without installing, debugging derivations, or working with nixpkgs.
Read file contents with line numbers. Use when viewing source code, reading configuration files, examining documentation, or inspecting any text file.
Semantic version control analysis. Use sem to understand actual code changes vs cosmetic/stylistic modifications, identify impacted entities, and review diffs at the semantic level.
Writes and runs tests, configures test environments, mocks dependencies, and generates coverage reports. Use when setting up vitest.config.ts, writing test suites, mocking modules, or measuring code coverage.
Manages background processes, captures command output, and handles session multiplexing. Use when running long-running commands, capturing output from detached processes, or managing concurrent tasks in headless environments.
Reads, filters, transforms, and manipulates structured data using Nushell's pipeline commands. Use when working with CSV/TSV files, parsing command output, transforming tabular data, system administration tasks, or building data pipelines.
Create a new file with the given content. Use when creating new files from scratch, generating code files, writing configuration, or producing output files.
Replace exact text in a file. Use when modifying existing files with precise text replacement, making targeted edits, or deleting code.
Search on monotonic predicates for sorted arrays, answer spaces, and rotated arrays. Use when finding minimum/maximum values, insertion points, or solving 'minimize the maximum' problems.
Model minimum-move problems as BFS over a state space. Use when solving bucket pouring puzzles, sliding tiles, or any problem asking for the shortest sequence of moves to reach a goal.
Set up and run an autonomous experiment loop for any optimization target. Gathers what to optimize, then starts the loop immediately. Use when asked to "run experiment", "optimize X in a loop", "set up experiment for X", or "start experiments".
Searches Firefox bookmarks using Nushell's native SQLite query. Use when searching saved bookmarks, finding bookmarked tools/libraries, or browsing Firefox bookmark history.
Writes and reviews Conventional Commits commit messages (v1.0.0) to support semantic versioning and automated changelogs. Use when drafting git commit messages, PR titles, release notes, or when enforcing a conventional commit format (type(scope): subject, BREAKING CHANGE, footers, revert).
Checks for broken links in documentation, websites, and codebases using lychee. Use when finding dead links, validating URLs in markdown files, or checking links in a project.
Builds Vicinae launcher extensions with TypeScript and React, defines commands, and creates List/Form/Detail views. Use when creating new extensions and implementing view/no-view commands.
Runs packages temporarily, creates isolated shell environments, and evaluates Nix expressions. Use when executing tools without installing, debugging derivations, or working with nixpkgs.
Switches NixOS/Home Manager configurations, cleans old generations, and performs system maintenance. Use when running os/home switch, pruning the Nix store, or managing system generations.
Searches and rewrites code using AST patterns. Use when finding code patterns, refactoring at scale, or detecting anti-patterns across a codebase.
Build GTK4 desktop applications with the GTKX React framework, rendering JSX as native Linux widgets via a Rust FFI bridge. Use when creating GTK desktop apps, working with Adwaita/Libadwaita widgets, styling with CSS-in-JS, building virtual lists, or debugging GTKX component issues.
Programmatic hunk selection for jj (Jujutsu). Use when splitting commits, making partial commits, or selectively squashing changes without interactive UI.
Manages version control with Jujutsu (jj), including rebasing, conflict resolution, and Git interop. Use when tracking changes, navigating history, squashing/splitting commits, or pushing to Git remotes.
Reads, filters, transforms, and manipulates structured data using Nushell's pipeline commands. Use when working with CSV/TSV files, parsing command output, transforming tabular data, system administration tasks, or building data pipelines.
Transcribes audio files to text using whisper-cpp (local, offline). Use when converting speech to text, transcribing podcasts, lectures, meetings, or any audio content.
Writes and runs tests, configures test environments, mocks dependencies, and generates coverage reports. Use when setting up vitest.config.ts, writing test suites, mocking modules, or measuring code coverage.
Manages background processes, captures command output, and handles session multiplexing. Use when running long-running commands, capturing output from detached processes, or managing concurrent tasks in headless environments.
Creates terminal screenshots and GIFs using VHS tape files. Use when automating terminal recordings, capturing TUI screenshots, or generating demo GIFs.
Creates reproducible builds, manages flake inputs, defines devShells, and builds packages with flake.nix. Use when initializing Nix projects, locking dependencies, or running nix build/develop commands.
Creates pi skills that teach the agent how to perform one or more use cases within a single domain. Use when creating or improving a pi skill.
Provides Visual Studio Code keyboard shortcuts and commands for efficient code editing. Use when looking up VS Code keybindings, explaining editor shortcuts, or configuring keybindings.json.
Analyzes codebases by mapping symbols (functions, classes, methods) using tree-sitter AST parsing. Use when exploring unknown code, finding bugs, understanding call graphs, or validating code health.
Searches and rewrites codebases using GritQL declarative queries. Use when refactoring across languages, migrating dependencies, enforcing code patterns, or applying complex AST-level transformations at scale.
Creates scientific plots from tabular data via the command line. Use when generating charts from CSV/TSV files, piping structured data to visualizations, or producing SVG/PNG/PDF figures without a GUI.
Builds terminal UI components with @mariozechner/pi-tui using a component-based architecture. Use when creating TUI screens, building interactive input widgets, rendering markdown or images, managing overlays, or wiring keybindings.
Query pi agent session logs using Nushell's structured data pipeline. Use when debugging sessions, analyzing tool usage, finding commands run, or tracking file access patterns.
Semantic version control analysis. Use sem to understand actual code changes vs cosmetic/stylistic modifications, identify impacted entities, and review diffs at the semantic level.
Refactors TypeScript codebases with AST-aware rename, extract, and reference finding. Use for moving functions between files, renaming across codebase, or finding all usages of a symbol.
Manages containers, builds images, configures pods and networks with Podman. Use when running containers, creating Containerfiles, grouping services in pods, or managing container resources.
Configures and uses Helix, a post-modern modal text editor written in Rust. Use when editing files with Helix, configuring keybindings, setting up language servers, or customizing themes.
Initializes Python projects, manages dependencies, pins Python versions, and runs scripts with uv. Use when adding/removing packages, syncing environments, running tools with uvx, or building distributions.
Configures TypeScript projects, defines types and interfaces, writes generics, and implements type guards. Use when setting up tsconfig.json, creating type definitions, or ensuring type safety in JS/TS codebases.
Reads, filters, transforms, and manipulates CSV/TSV files using Nushell's structured data pipeline. Use when working with tabular data, data cleaning, CSV validation, or batch processing spreadsheet-like files.
Authors system prompt additions for pi coding agent. Use when extending pi's default prompt with custom principles, guidelines, or project-specific rules via SYSTEM.md or APPEND_SYSTEM.md.