Thanks for helping! fable-mode is deliberately small and cross-platform. A few conventions keep it that way.
git clone https://github.com/HalalifyMusic/fable-mode
cd fable-mode
python -m pip install --upgrade pytest
python -m pytest -qRequires Python ≥ 3.9. The hooks and the installer are stdlib-only — keep them dependency-free so they run in any Claude Code environment without a pip install.
install.py— the real installer;install.sh/install.ps1just locate Python and exec it.uninstall.pymirrors it (with the same wrappers).scripts/merge_settings.py— sharedsettings.jsonmerge (importable + CLI).hooks/—fable-trigger.py(playbook injection) andtest-after-edit.py(run tests after an edit). Both must exit 0 and never block a prompt or an edit.shell/—fable.zsh(Unix) andfable.ps1(PowerShell) launchers.skills/,agents/— bundled skills and the grounding-verifier agent.tests/— pytest for the hooks and the installer.
- Cross-platform first. Anything touching paths, shells, or subprocesses must work on Windows, macOS, and Linux. CI runs the suite on all three.
- Add tests. Changes to a hook or the installer need matching tests in
tests/. Keep them hermetic — usetmp_pathand the host interpreter, no Node / make / network. - Don't fight line endings.
.gitattributesenforces LF for shell/Python and CRLF for PowerShell. Let it;.editorconfigmatches. - Leave vendored content alone. The Anthropic skills under
skills/andreference/fable-system-consumer.mdare upstream copies — fix those upstream, not here. - Match the surrounding style and keep diffs focused.
- Branch off
main. python -m pytest -qgreen locally.- Describe what changed and why; note any platform-specific behavior.
- CI must pass on ubuntu/macos/windows before merge.
See SECURITY.md for the security model and how to report issues, and CHANGELOG.md for the running history.