Optional extra

Web UI

The whole workflow in a browser — browse a project, write the config by ticking boxes, build, run, and read the report. No root, one command.

$ uv tool install 'callsight[ui]'
$ callsight ui                # http://127.0.0.1:8321

Workflow tab

The end-to-end pipeline in four numbered steps, driving exactly the same code as the CLI.

The callsight Workflow tab: a project path input with the detected build system and source count, the trace.config editor, and the selection preview reporting 34 of 35 sources instrumented
Project and configOpening a project reports its source count, build system and instrumented binaries; the preview shows what the current config selects.
  1. Project — browse the filesystem (directories badged make/cmake) and open one. You get the source count, the detected build system, and any instrumented binaries already present.
  2. trace.config — an editor with save, a selection preview (N sources: X instrumented, Y excluded), and a call-subtree helper: type a function name and optional depth to resolve its subtree through the static call graph and append the matching include-func line.
  3. Build & run — one-click instrumented build (make instrument or the CMake flow) with the full log captured, then run the binary with TRACE_ENABLE=1, a TRACE_MAX cap and a timeout.
  4. Report — the analyzer result as a sortable table: calls, inclusive, self and max time, with the summary line turning green on unmatched_exits=0.
The callsight report table sorted by self time, with resolved function names and source locations
The reportClick any column header to re-sort. Rows arrive ordered by self time, so the hot leaves are on top.

Config Builder tab

A visual editor for trace.config — no pattern syntax to memorize.

The config builder: a checkbox pane listing 35 source files with per-file function counts, beside a filtered pane of 315 functions with include-subtree and exclude actions
Files on the left, functions on the rightBoth panes filter live; the symbols: badge names the backend that produced the scan.
  1. Pick a folder and scan. The builder enumerates every source file and the functions defined in them. It uses ctags when available — a symbols: badge next to the Scan button tells you which backend served the scan: system ctags, the bundled static copy (auto-downloaded on first scan), or the built-in regex fallback.
  2. Searchable checkbox panes — one for files, one for functions. Filter either list and tick what you care about.
  3. Per-function actions — for each selected function choose include-subtree (expands through the static call graph, like include-func) or exclude.
  4. Preview — writes the generated config, then dry-runs the selection against it: how many sources would be instrumented versus excluded with your current choices. (The write is required — the dry run reads the saved file.)
  5. Apply — writes trace.config into the project, ready for the next instrumented build.

Both buttons ask before overwriting an existing config whose content differs.

Symbol enumeration

The builder needs to know what functions a project defines. In order of preference:

Notes

It runs builds and binaries on the host. The UI binds to 127.0.0.1 by default. --host 0.0.0.0 exposes it on the network — only do that on a trusted one.