Quick Start

1. Materialise a build plan

hypha reads dist-newstyle/cache/plan.json to learn which versions your project builds against. Generate it with a dry-run build:

cd /path/to/your-cabal-project
cabal build --dry-run        # writes dist-newstyle/cache/plan.json

2. Query a symbol — compact YAML

hypha symbol aeson/Data.Aeson/encode
actions:
  module_index: hypha module aeson/Data.Aeson
  package_info: hypha package aeson
  view_source: hypha source aeson/Data.Aeson/encode
result:
  haddock_raw: " Efficiently serialize a JSON value as a lazy 'L.ByteString'.\n\n This is implemented in terms of the 'ToJSON' class's 'toEncoding' method."
  kind: function
  module: Data.Aeson
  name: encode
  package: aeson
  signature: "encode :: (ToJSON a) => a -> L.ByteString"
  version: '2.2.5.0'

YAML is the default output: compact, readable in a terminal, and cheap for an agent to parse. The top level is just result: (the answer) and actions: (suggested follow-up commands). Keys are emitted in sorted order, which is why actions: comes first — do not rely on field order, rely on the field names.

A symbol whose definition lives in another module gains a defined_in: block naming it; encode is declared where it is exported, so there is none here.

hypha symbol — compact YAML output

3. Project only the fields you need

hypha symbol async/Control.Concurrent.Async/concurrently --select signature,haddock

--select post-filters the output to the listed fields; --full opts into every field. See Global Flags.

4. JSON for machine pipelines

When a downstream tool wants JSON, opt in with --json:

hypha symbol async/Control.Concurrent.Async/concurrently --json

Next steps