Contributing

Contributions are welcome. Lacy is a bash/zsh plugin — no build step required for core changes.

Dev setup

bash
git clone https://github.com/lacymorrow/lacy.git
cd lacy

# Test ZSH plugin locally:
source lacy.plugin.zsh

# Test Bash plugin locally:
source lacy.plugin.bash

# Test the Node installer:
node packages/lacy/index.mjs
Note

Changes to files in the repo do not automatically update ~/.lacy/. The install dir and repo are separate copies — test by sourcing from the repo directly.

Design principles

  • Single source of truth — all input classification goes through lacy_shell_classify_input() in lib/core/detection.sh. Never create parallel detection logic.
  • No Node in the shell path — core plugin is pure bash. Node is only for the installer UI.
  • Zero config to start — defaults work out of the box. Progressive disclosure for advanced settings.
  • Shell commands still work — lacy never breaks your shell. Emergency bypass (! prefix) is always available.
  • Plugin coexistence — always tag region_highlight entries with memo=lacy. Never clear the array directly.

Adding a new AI tool

To add support for a new AI CLI tool:

  1. Add the tool to LACY_SUPPORTED_TOOLS in lib/core/constants.sh
  2. Add the command template to lacy_tool_cmd() in lib/core/mcp.sh
  3. Update the tool table in CLAUDE.md and this documentation
  4. Add auto-detection logic in lib/core/config.sh if the tool has a standard install path

Conventional commits

text
feat: add new AI tool support
fix: correct agent word detection for "in" prefix
chore: update dependencies
docs: clarify reroute threshold

PR process

  • Open an issue first for significant changes
  • Test in both ZSH and Bash 4+ (macOS Bash 3.2 is not supported)
  • Verify lacy doctor passes after your change
  • Update CLAUDE.md if you change any of the canonical functions or detection logic