tricorder
Continuous Haskell build status, diagnostics, and tests via a shared daemon
https://github.com/tweag/tricorder#readme
| Stackage Nightly 2026-08-19: | 0.2.1.0 |
| Latest on Hackage: | 0.2.1.0 |
tricorder-0.2.1.0@sha256:21aa6b9ab3108c1e540381cce07add7d2cb1794d1c3c92490c2dde21b51fec17,10578Module documentation for 0.2.1.0
There are no documented modules for this package.
tricorder
tricorder empowers developers and LLM coding agents working with Haskell by surfacing the right information at each stage: build status, diagnostics, test results, and documentation.
Like ghcid and ghciwatch, it rebuilds continuously on every change and reports diagnostics — but it runs builds in a background daemon so multiple clients (an interactive TUI, a tricorder status CLI, a Claude Code skill) can query a single shared build state without triggering redundant rebuilds. It discovers components across multi-package cabal.project workspaces automatically and ships context-friendly output for agentic use.
See the repository README for installation (Nix, Home Manager, NixOS), Claude Code plugin setup, configuration, and custom key bindings.
Built on atelier
tricorder is built on the atelier toolkit, also developed in this repository:
atelier-prelude— relude-based prelude with Effectful conventionsatelier-core— foundational effects and utilitiesatelier-db— relational database effect (Hasql/Rel8)atelier-testing— database-backed test utilities
License
MIT — see LICENSE.
Changes
Changelog
All notable changes to tricorder will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to the PVP.
[Unreleased]
0.2.1.0 - 2026-08-17
Added
- Tricorder now respects all forms of
cabal.projectfiles, likecabal.project.localfor example. See Cabal’s documentation on project description files. (#73) - With
hpackinPATH, Tricorder will now runhpackin the directory of any changedpackage.yamlfile in the root of the project or any subdirectory. Control this behavior with thegenerate_with_hpackconfiguration. - Tricorder will now restart the GHCi session when detecting changes to a
project’s
stack.yaml.
[0.2.0.1] - 2026-08-12
Fixed
tricorder sourcedoes not work withoutcabalinPATH(forstackprojects, for example). Tricorder now fetches tarballs for source distributions manually with good old-fashioned HTTP instead of relying oncabal fetch. This meanstricorder sourceworks regardless whethercabalorstackis inPATH. (Still requiresghc-pkgto be inPATHthough to resolve the module name to a package.)- Incorrect repl command used for eval comments. This caused eval comments not to be able to use a module’s top-level definitions in its expression.
- Auto-resolved targets are not compatible with
stack ghci(and its aliasstack ghci). Targets are now automatically resolved with package name,pkg:kind:namefor multi-package repos and justnamefor single-package repos, instead of just with the component name and kindkind:name.stack ghciis not compatible with the formkind:name(butcabal replis), but both of them are compatible with the fully qualifiedpkg:kind:nameform. If you manually specify akind:nametarget in yourstackrepo’s.tricorder.yamlthough, you are on your own!
[0.2.0.0] - 2026-08-06
Added
- The TUI can now restart the daemon — press
R(therestart_daemonkey event, rebindable like the others). It reconnects automatically once the fresh daemon is ready. - Support for eval comments. See Features of Tricorder - Eval Comments for more information
tricorder eval-commentssubcommand.tricorder log --print-pathprints the path to the current repo’s Tricorder log file.
Fixed
- No diagnostics are listed in single-package repos.
- Build loops on startup failure.
Changed
tricorder sourcenow uses a package’s sdist tarball from cabal’s global cache instead of parsing Haddock-HTML, fetching them if necessary. This allows Tricorder to show sources for packages without documentation.
Removed
- Observability and metrics stack.
[0.1.1.0] - 2026-06-26
Added
- Configurable
watch_exclusion_patternsto exclude paths from the file watcher. - The TUI now presents its different views as tabs.
Fixed
- Terminate the whole cabal process group on shutdown, so children that trap
SIGINTare no longer left running. - Correct watch-directory scoping for bare package-name targets in a multi-package project.
- Building no longer fails for packages that use a custom prelude.
- Use the correct set of targets when constructing the build command.
- Surface location-less GHCi load failures (e.g. plugin errors) without reporting false positives.
- Clear stale diagnostics for failed executable and test
Mainmodules.
[0.1.0.1] - 2026-06-06
Fixed
- Renamed the installed executable from
tricorder-exetotricordersocabal install tricorderprovides a binary matching the package name.
[0.1.0.0] - 2026-06-05
Added
- Initial release: daemon-based GHCi build monitor communicating over a Unix socket.
- Commands:
start,stop,status [--wait],watch. statusoutputs structured JSON with build phase, module count, duration, and messages; each message includesseverity,file,line/col,title(first line), andtext(full body).- Auto-detects cabal/stack projects and builds the
cabal repl --enable-multi-replcommand. - Parses
.cabalfiles to resolvehs-source-dirsfor targeted file watching. - Configurable via
.tricorder.toml(targets, debounce, log file, etc.). - File watcher with debouncing; auto-restarts the GHCi session on crash (fixes ghcid’s crash-on-file-removal bug).