Tricorder aims to empower users developing programs with Haskell and LLM coding agents. It does so by providing operations to surface the right information required at a given stage: documentation, build status, diagnostics, etc.
ℹ️ More information about how to use
tricordercan be found in this presentation for the Haskell Foundation's "Haskell and AI Workshop".
Like similar tools (ghcid, ghciwatch), it builds the code continuously on
every change, presents diagnostics, and runs the tests afterwards. However,
Tricorder offers other advantages:
- Designed for humans - A
tricorder uiinteractive TUI mode that presents stats in real time for developers. - Designed for agents - A
SKILLis provided to inform agentic usage via thetricorderCLI. - Background builds - Building in the background using a daemon allows
different clients to query the build state simultaneously without triggering
multiple rebuilds. For instance, we ship the
tricorder uiTUI and thetricorder statusCLI command that communicate witha single daemon via a socket. - Sane defaults - Running
tricorder startshould Just Work™ for most cabal-based Haskell projects.- Daemon restarts automatically when cabal files change
- If customization is needed it can be provided at different levels via a
.tricorder.yamlor CLI args.- Optional config includes which cabal packages to watch, which exact command to use to enter a GHCi session, customizable key bindings, etc.
- Multi-package projects - In a
cabal.projectworkspace, Tricorder discovers every package's components automatically, building and running tests across all of them — no manual target configuration needed. - Project context - Tools like
tricorder source Some.Modulewill attempt to find and provide the source code for a given dependency from disk, which allows exploring library APIs more easily. - Machine-readable output - Using
tricorder status --jsonwe can get build information in a format appropriate for programmatic usage.
For a deeper guide on the various features of Tricorder, see Features of Tricorder.
With the tricorder CLI in your path, start the Tricorder daemon either
explicitly with tricorder start or automatically by just running tricorder ui, which will start the daemon if it's not already running and show you the
TUI.
For using Tricorder with Claude Code, Copilot, or another coding agent, see Using with coding agents.
Tricorder is supported on both Linux and macOS.
Tricorder is published on both on Hackage and on
Stackage from
Stackage Nightly 2026-08-19 and onwards, so you
may install it using either cabal or stack, whichever is your preference:
cabal install tricorder
# Or
stack install tricorderTricorder is also released as pre-built binaries on GitHub.
To install and use Tricorder in your NixOS configuration, see Using with Nix.
Currently, multiple of our dependencies do not support GHC 9.14, and as such we are not able to officially support 9.14 just yet. But stay tuned, as we are eager to utilize the new multi-home features!
nix develop
tricorder uiThis repository also contains Atelier, a set of Haskell libraries providing foundational infrastructure for effect-based applications (to be extracted into their own repository).
To scaffold a new Atelier-based service from the bundled canvas flake
template — an internal library plus a WAI/Warp executable with rel8/hasql
Postgres access, sqitch migrations, and a
haskell.nix dev shell:
# Into a new directory:
nix flake new -t github:tweag/tricorder#canvas ./my-service
# …or into the current (empty) directory:
nix flake init -t github:tweag/tricorder#canvasThen, from the generated project:
nix develop # or `direnv allow` to load the dev shell automatically
nix run .#postgres # start a local dev Postgres, then `sqitch deploy dev`
cabal run canvas # start the server (GET /, /health, /metrics, /items)canvas is a placeholder name — the generated README.md explains how to
rename it. See templates/canvas for the full layout. The
template is exercised in CI against both the released Atelier packages and this
repo's in-development sources (canvas-hackage / canvas-local in
nix/template-checks.nix).