AGENTS/functions/CLAUDE.md is git-ignored local agent state, not part of the repo -- a comment/commit referencing it as the schema's home points contributors at a file they can't see. The canonical CLASSIFICATION schema now lives at docs/function-classification-schema.md (tracked), with CONTRIBUTING.md's existing function-header-conventions section extended to introduce it, and the C1 shadow doc's pointer updated to match. AGENTS/functions/CLAUDE.md keeps only a one-line pointer to the tracked file instead of duplicating the definitions.
6.0 KiB
title
| title |
|---|
| C1 — Command Shadows |
Disabling __fish_config_op_aliases restores standard system behavior for
all of these commands.
Command / Alias Active behavior Disabled fallback
───────────────────────────────────────────────────────────────────────────
ls eza -l -a --icons --hyperlink system ls
cat bat syntax-highlighted; dirs → ls /usr/bin/cat
cd zoxide frecency-based navigation fish builtin cd
rm moves files to trash (recoverable) command rm (permanent)
less $PAGER → ov → less → more → cat system less
du duf (disk overview) or dust (dir tree) system du
top btop resource monitor system top
ping prettyping --nolegend animation system ping
ssh kitten ssh in Kitty terminal system ssh
rg rg --hyperlink-format=kitty system rg
mkdir verbose path-tree display on creation mkdir -p silently
bash XDG bashrc + $SHELL reset on exit system bash
cp / mv forced -i confirmation prompt cp / mv unmodified
wget forced --continue (resume downloads) system wget
grep/fgrep/egrep forced --color=auto system grep variants
dir / vdir forced --color=auto system dir / vdir
help config intercepts "help config" → config-help fish builtin help
claude auto-links AGENTS.md as CLAUDE.md before launch command claude
edit multi-editor launcher (GUI/term + fallbacks) $EDITOR/nvim/nano/vi
When C1 is disabled, rm uses bare command rm with no wrapper — files
are permanently deleted, not trashed. There is no intermediate safety net.
history itself is never shadowed — every function in this config that
reads history depends on its stock builtin semantics. pretty-history
(same aliases-tricks toggle) is a separate command that prints history
with a timestamp prepended to every entry.
Sub-categories
__fish_config_op_aliases sub-divides into six sub-categories, each with
its own __fish_config_op_aliases_<slug> toggle:
filesystem
ls, cat, cd, du, mkdir, rm, mv, and cd/zoxide navigation --
the everyday filesystem-inspection and -modification shadows.
search
rg, with its Kitty hyperlink formatting.
network
ping, ssh, and yt-dlp -- shadows that talk to the network.
monitor
top -> btop.
shell-tools
bash (XDG bashrc + $SHELL reset), less ($PAGER fallback chain),
and the help config interception.
dev-tools
claude (AGENTS.md/CLAUDE.md auto-linking) and edit (multi-editor
launcher), plus agy.
For function authors
Calling one of these names bare from inside your own function means the
override runs whenever C1 (or its sub-category) is on — which may not be
what your function wants: a shadow can change stdout (cat's syntax
highlighting, mkdir's tree display), prompt interactively where none is
expected (cp/mv's forced -i), or reshape output structurally (ls's
icons/columns, rg's hyperlink markers). If your function's logic depends
on stock behavior, bypass the shadow deterministically, regardless of the
toggle state:
Shadow Bypass Why
─────────────────────────────────────────────────────────────────────────
ls, cat, rm, less, du, command <name> Real external
top, ping, ssh, rg, binaries — a
mkdir, bash, cp, mv, real system command
wget, grep/fgrep/egrep, exists to fall
dir/vdir, claude back to.
cd builtin cd The one true
fish builtin
in this table.
help config __original_help $argv `help` is neither
a builtin nor an
external binary
(embedded in the
fish binary
itself) — see
conf.d/help.fish
for why the
wrapper keeps its
own backup copy.
edit (nothing to bypass to) Purely our own
invention, no
stock command
exists. Call
$EDITOR/$VISUAL
yourself if you
want a plain
editor launch.
A function's own doc header records which of these it depends on: see the
CLASSIFICATION label (uses-shadow(...) / bypasses-shadow(...)),
documented in full at
docs/function-classification-schema.md.