shepherdjerred/monorepo/fish-helper
Claude Code and agent skill by shepherdjerred/monorepo
- community
Checking that the SKILL.md file is still in the repository.
Current Fish shell scripting, functions, abbreviations, completions, variables, events, configuration, plugins, testing, and safety guidance. Use when writing or reviewing Fish config, `.fish` scripts, completions, functions, prompts, or plugin setup.
Install
npx vskill@latest install shepherdjerred/monorepo/fish-helperSKILL.md
Fish Helper
Write Fish as Fish rather than translated POSIX shell. Preserve argv boundaries, propagate statuses, make configuration idempotent, and distinguish optional integrations from required tools.
Current baseline
Verified against Fish 4.8.1 on 2026-08-03:
Fish 4.8 changed installed/embedded completion and function layout, added cd -L/-P, and removed automatic __fish_initialized universal creation. Fish 4.7 changed noninteractive theme initialization; Fish 4.6 changed emoji width and added prompt environment controls; Fish 4.5 mainly fixed Vi-mode regressions.
Read references/releases.md for the 51-page research ledger. Read references/syntax-and-safety.md for variables, argv, statuses, reading, tracing, temp directories, and shell boundaries. Read references/functions-completions-config.md for functions, events, abbreviations, completions, startup, prompts, and themes. Read references/plugins-and-testing.md for Fisher, popular plugins, testing, and installation security.
Variables and environment
Use exported global variables in version-controlled config for child-process environment:
Universal variables remain supported, but Fish 4.3 stopped creating several user-facing defaults as universal values. Use universal state only when cross-session persistence is intentional. set -U EDITOR vim is not exported; set -Ux is persistent and exported but can create hidden machine state.
Use fish_add_path --global for idempotent, version-controlled path changes. Do not replace PATH with a short hard-coded list or prepend the same directory every time config is sourced.
Fish supports command-scoped environment overrides:
Standalone assignment still uses set.
Preserve argv
Accept commands as the remaining arguments and invoke them directly:
Do not turn command arguments into source text with eval. Invoke the argv list directly or call an exact function.
Error propagation
Fish functions return the status of their last command unless overridden. A helper named die that only executes return 1 returns from itself; its caller continues unless it propagates the status.
Check mktemp, pushd, reads, generated init commands, and cleanup explicitly. Required tools should fail fast. Only optional integrations may be conditionally absent, and the config should label them optional.
Reading input
read normally reads one line. It does not turn a whole file into an array by adding list flags:
Use string split when delimiter-based parsing is deliberate. Use read --silent for interactive secrets, or a tool-specific credential file/secret manager; do not write credential-shaped literals into shell config.
Abbreviations
Use abbreviations for interactive expansion and functions for reusable logic. Cursor markers default to %:
The expansion needs the marker for cursor movement.
Transient prompts and themes
Enable transient prompts with a variable, not a function:
Fish reruns fish_prompt, fish_right_prompt, and fish_mode_prompt with --final-rendering.
Prefer fish_config theme choose THEME for adaptive theme behavior. fish_config theme save stores universal colors and disables dynamic light/dark switching. Theme files use fish_color_command blue, not assignment syntax.
Startup and configuration
Fish searches user conf.d, system configuration, and user/vendor data directories according to documented priority; snippets are naturally sorted, and only the first same-named file is run. Do not describe a simple system-then-user order.
Put environment and path setup needed by noninteractive Fish before an interactive-only guard:
Use fish --profile-startup <file> -ic exit to profile startup. Plain --profile excludes startup/config loading.
Completions and events
Fish 4.8 embeds bundled completions/functions; use status list-files to inspect embedded files rather than assuming /usr/share/fish/completions.
Register multiple commands with repeated --command or brace expansion:
Dynamic completion generators must be fast, bounded, side-effect-free, and must not interpret untrusted source. Avoid network calls on each Tab press.
Variable event handlers can coalesce updates, can run on same-value sets, and have unspecified ordering across handlers. Universal updates from another shell have distinct delivery behavior. Use events for notifications, not ordering-critical state machines.
Tracing and introspection
type --type name prints classifications such as function, builtin, or file. type --short only suppresses full function definitions.
Tracing is enabled when fish_trace is set and non-empty. Disable it by erasing the variable:
Use $version or compatibility variable $FISH_VERSION; $fish_version does not exist in Fish 4.8.1.
Security
- Avoid
evaland remotecurl | sourceinstallation patterns. - Pin and inspect a downloaded plugin installer before sourcing it.
- Resolve source paths with
type --path, verify exactly one intended file, then source it. - Keep dynamic completions and event handlers free of destructive side effects.
- Use secret managers, protected credential files, or
read --silent; environment variables can still leak through child processes and diagnostics. - Preserve exact arguments rather than re-parsing command text.
- Create and clean temporary directories only after each operation succeeds, preserving the wrapped command status.
Review checklist
- Verify Fish 4.8.1 behavior and the project's minimum version.
- Use exported globals and
fish_add_path --globalfor version-controlled environment setup. - Preserve argv and avoid
eval. - Propagate failures through functions and cleanup.
- Read complete files with a loop or explicit splitting.
- Use the current transient-prompt variable and adaptive theme workflow.
- Put noninteractive environment setup before the interactive guard.
- Treat completion subprocesses and event handlers as bounded, side-effect-free hooks.
- Inspect embedded completion paths with
status list-files. - Pin and review third-party plugin installation.
Security
- Security scanPassed, 95 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingpackages/dotfiles/dot_agents/skills/fish-helper/SKILL.md
Popularity
- 7-day trend score
- 5
Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/shepherdjerred/monorepo/fish-helper)