nav-features
Shows every Navigator feature with its current state and toggles them, in the shared project config or in your personal override, without editing JSON by hand.
Triggers
Natural-language phrases that auto-invoke the skill:
- “Show my features” / “navigator features” / “what features are enabled”
- “Enable [feature]” / “disable [feature]” / “turn on/off [feature]”
- “Configure navigator” / “my navigator settings”
- “What can navigator do?”
Not invoked when you ask about your project’s features, mid-implementation, or at session
start (that is nav-start).
What it does
- Reads
.agent/.nav-config.json(shared, committed) and.agent/.nav-config.local.json(personal, gitignored), merges them the same way the hook runtime does (DEFAULTS < shared < local), and renders one table: feature, status, one-line description. enable <feature>/disable <feature>set the block’senabledflag in the shared file.enable|disable <feature> --local(v7.8.0) write the flag to the personal file instead. Rows the personal file decides showLin the status column, with a legend under the table. Toggling a shared value that your local file shadows prints a warning so the “nothing changed” moment has an explanation.info <feature>prints the config key, default, version introduced and, when relevant, which file the current value comes from.- The first session after an install or version update shows the table once automatically.
Example
"Show my features"v8.0.0 Features:
┌─────────────────────────┬────────┬───────────────────────────────────────────────┐
│ Feature │ Status │ Description │
├─────────────────────────┼────────┼───────────────────────────────────────────────┤
│ task_mode │ [x] │ Auto-detects task complexity, defers to sk... │
│ loop_mode │ [ ] │ Autonomous loop execution (enable when nee... │
│ judge │ [ ] L │ Typed judge (TypeSafe Jev) behind the loop... │
│ adhd_mode │ [x] │ Per-person reply shaping (one next action,... │
│ ste_mode │ [ ] │ Per-person Simplified Technical English se... │
│ tier1 │ [ ] │ Zero-token answers for whitelisted prompts │
└─────────────────────────┴────────┴───────────────────────────────────────────────┘
L = personal override from .agent/.nav-config.local.json (not shared)"Disable judge for me only"Writes {"judge": {"enabled": false}} to .agent/.nav-config.local.json; the shared file
and your teammates’ sessions are untouched. Typical when a contributor has no TypeSafe key
in a repo where the judge is on.
Features you can toggle
Core: task_mode, tom_features, loop_mode, simplification, auto_update,
knowledge_graph.
Hook runtime: dispatcher, tier1, stop_completion, reject_log, jit_memory, subagent_context,
failure_diagnosis, judge, adhd_mode, ste_mode, config_guard, setup_hook, plus the
*_hook toggles
(compact_hook, workflow_enforcer_hook, read_guard_hook, workflow_state_hook,
task_graph_sync_hook, profile_sync_hook).
tier1, stop_completion and judge ship off; reject_log ships on (it observes, never blocks). Enabling judge prints where to put the
API key; it never goes in either config file.
adhd_mode and ste_mode are the personal rows: “enable adhd_mode” or “enable ste_mode”
writes your switch under ~/.config/navigator, not the repo (same as saying adhd mode on
or ste mode on); --local instead pins <key>_mode.on in .nav-config.local.json, and a
repo pin wins over the personal switch. See Reply Modes.
Direct invocation
python3 "$PLUGIN_DIR/skills/nav-features/functions/feature_manager.py" show
python3 "$PLUGIN_DIR/skills/nav-features/functions/feature_manager.py" enable loop_mode
python3 "$PLUGIN_DIR/skills/nav-features/functions/feature_manager.py" disable judge --local
python3 "$PLUGIN_DIR/skills/nav-features/functions/feature_manager.py" info tier1Changes apply on the next session start; hook toggles may need a Claude Code restart.
Related
- Configuration — feature blocks and the personal-override layering
- Config schema — every key with its default
- Reply Modes · Typed Prompt Judge · Tier-1 · Completion Gate