# Reported issues for preflight by newrelic-experimental

Pod holds 24 of 44 GitHub reports that passed its relevance review. This can include external user reports, maintainer-confirmed bugs, and concrete feature gaps. Treat them as evidence to inspect, not a count of distinct defects.

Back to [preflight by newrelic-experimental](/mcp/preflight-by-newrelic-experimental).

## Most discussed

### Foolowed the installation instructions - no data appearing locally or in newrelic

Followed the install instructions - mode is both, newrelic licence and api key are correct-. dashboards installed with --all
restarted claude and it picked up newrelic-preflight mcp, but only 2 tools are available.

preflight setup states that claude will start server on 127.0.0.1:7777 - well irtt did not happen either.
started preflight with --local - server is up but no data is flowing to it.
claude hooks appear to be not firing
yet the /hooks command list those installed.
as a result no…

[Read the thread](https://github.com/newrelic-experimental/preflight/issues/6) · 2026-06-23 · closed · external user · 7 comments

### v1.4.34: registry manifest missing runtime deps (undici, hono, js-yaml) — fresh install crashes at startup

**Summary:** A fresh `npm install -g @newrelic/preflight@1.4.34` produces a broken installation: the CLI crashes at startup with `ERR_MODULE_NOT_FOUND` for `undici`.

```
Error [ERR_MODULE_NOT_FOUND]: Cannot find package 'undici' imported from /usr/lib/node_modules/@newrelic/preflight/dist/proxy/otlp-receiver.js
```

**Root cause:** The npm registry manifest (packument) for 1.4.34 does not match the `package.json` inside the published tarball. Three runtime dependencies are missing from the…

[Read the thread](https://github.com/newrelic-experimental/preflight/issues/189) · 2026-07-14 · closed · external user · 5 comments

### launchd dashboard daemon fails with "env: node: No such file or directory" (exit 127) on Homebrew-node setups

## Summary

After `preflight setup` with the always-on background dashboard enabled, the launchd agent `com.preflight.dashboard` crash-loops and the dashboard never serves persistently. The collector hooks still write event buffers, but nothing processes them — so the dashboard UI only ever shows the live session, and historical sessions never appear.

`launchctl list | grep preflight` shows last exit `127`, and `~/.newrelic-preflight/dashboard.log` is filled with:

```
env: node: No such file…

[Read the thread](https://github.com/newrelic-experimental/preflight/issues/13) · 2026-06-29 · closed · external user · 5 comments

### Native Windows + cloud/both mode: no events are ever sent (NrIngestManager gated on !isProvisional; sync resolution lacks the cwd fallback) - metrics-only, fully silent

## Summary

On **native Windows**, a `mode: 'cloud'` / `mode: 'both'` install silently sends **no events at all** (`AiToolCall`, `AiMcpToolCall`, `AiCodingTask`, `AiAntiPattern`, …). Metrics arrive fine, so the integration looks healthy — logs show `Sent metrics to NR` on schedule, no errors, no warnings — but every NRQL query against the event types returns 0 rows, forever.

Root cause: the `--stdio` MCP's **synchronous** session-id resolution has no cwd-breadcrumb fallback, so on native…

[Read the thread](https://github.com/newrelic-experimental/preflight/issues/320) · 2026-07-31 · closed · external user · 4 comments

### WSL2 (Linux CC): session_id never resolves via official hook alone; harvest scheduler never sends to New Relic even after fixing that

## Environment

- WSL2 (Ubuntu), Claude Code installed via npm inside WSL (Linux CC, not the Windows desktop app) — `platformTarget: wsl-linux-cc`
- Shell: fish
- `@newrelic/preflight` 1.0.5 and 1.0.6 (reproduced on both)
- Tried both manual config and official `preflight install --linux-cc --license-key ... --account-id ...`

## Bug A: session_id never resolves with the official hook alone

With only the installed hook command present (`preflight-collector pre-tool` / `post-tool`),…

[Read the thread](https://github.com/newrelic-experimental/preflight/issues/17) · 2026-07-02 · closed · external user · 4 comments

### Native Windows: --stdio MCP never resolves session_id (Linux-only ancestor-PID breadcrumb walk via Git Bash) -> sessions/ and History always empty

## Summary

On **native Windows Claude Code** (not WSL), the dashboard History / `sessions/` is permanently empty and `nr_observe_health` returns `session_id: null`, even though hooks fire correctly and the live "current session" view works. No session summary is ever persisted, so History, weekly summaries, and MODEL PERFORMANCE never populate — for every native-Windows user.

Root cause: the `--stdio` MCP server can never resolve its owning Claude Code session id, because the breadcrumb…

[Read the thread](https://github.com/newrelic-experimental/preflight/issues/268) · 2026-07-22 · closed · external user · 3 comments

### wsl-windows-cc: model/token/cost collection silently fails — WSL collector can't read the Windows transcript_path

**Summary:** In the officially supported `wsl-windows-cc` setup (Windows Claude Code desktop + preflight installed inside WSL, hooks generated by `preflight install --windows-cc`), tool events arrive fine, but **token/model/cost collection never produces a single event**. The dashboard permanently shows `unknown` with no Eff. / Success / Avg $ under MODEL PERFORMANCE, and Cost per Outcome never populates. No error is surfaced anywhere, so the integration *looks* healthy.

**Root cause:**…

[Read the thread](https://github.com/newrelic-experimental/preflight/issues/193) · 2026-07-14 · closed · external user · 3 comments

### /dev/stdin EACCES when Preflight is launched from Windows-host Claude Code via wsl.exe

**Summary:** When Claude Code runs on the Windows host and spawns Preflight inside WSL (stdio crossing the Windows/Linux boundary via `wsl.exe`), any attempt to (re)open `/dev/stdin` fails with EACCES.

**Root cause:** For `wsl.exe`-launched sessions, the stdin pipe is created by WSL's init/relay, which runs as root. The pipe inode is therefore `root:root` with mode `0600`. Reading the *inherited* fd 0 works fine, but opening `/dev/stdin` (→ `/proc/self/fd/0`) re-opens the pipe inode, which…

[Read the thread](https://github.com/newrelic-experimental/preflight/issues/99) · 2026-07-10 · closed · external user · 3 comments

## Most recent

### GitHub Copilot hooks file uses Claude Code's nested JSON shape, so Copilot's hooks-runner never executes any hook

### Summary

The Copilot hooks file generated by the installer (`generateCopilotHooksFile()` in `src/install/cli.ts`) uses Claude Code's nested settings.json hook shape:

```json
"PreToolUse": [{ "matcher": "", "hooks": [{ "type": "command", "command": "preflight-collector pre-tool" }] }]
```

GitHub Copilot's actual hooks schema is flat — each array entry is the command hook object directly:

```json
"PreToolUse": [{ "type": "command", "command": "preflight-collector pre-tool" }]
```

Both…

[Read the thread](https://github.com/newrelic-experimental/preflight/issues/586) · 2026-09-04 · open · outside contributor · 0 comments

### Per-skill cost/tokens/duration exposed by nr_observe_get_cost_per_tool is not rendered anywhere

## Summary

#568 added `costBySkill` to `nr_observe_get_cost_per_tool` and threaded `skillName` onto `AiToolCall`, so per-skill cost, tokens, and duration are available from both the MCP tool and NRQL. Neither is surfaced anywhere a person would actually look:

- The local dashboard's Cost by Tool card still shows a single `Skill` bar — no breakdown by skill name.
- The shipped `ai-coding-assistant-team-view` NR dashboard still facets by `tool` only, so `code-review` and `security-review`…

[Read the thread](https://github.com/newrelic-experimental/preflight/issues/583) · 2026-09-04 · closed · outside contributor · 0 comments

### Subagent (Task/Workflow) tool calls bypass AuditTrailManager entirely

## Problem

`SubagentWatcher` (`src/hooks/subagent-watcher.ts`) is the only mechanism that observes activity inside Task-tool or Workflow-tool spawned subagents. By its own doc comment, its purpose is narrowly scoped to closing a cost-accounting gap: it polls subagent transcripts and emits `mode: 'subagent_token'` records so subagent token usage reaches `CostTracker`. It never extracts or forwards the subagent's actual tool-call records (Bash, Edit, Write, etc).

As a result, nothing a subagent…

[Read the thread](https://github.com/newrelic-experimental/preflight/issues/578) · 2026-09-04 · open · outside contributor · 0 comments

### Kiro sessions: session_id fails to resolve behind wrapped launchers, misdetected as generic-mcp, tool-map casing wrong

### Summary

Several related bugs affect Kiro (and potentially other launchers that wrap the MCP server process):

1. **`session_id` never resolves when a launcher interposes a process above the MCP server.** `npx` runs `npm exec`, which runs the server — so the server's `process.ppid` no longer matches the breadcrumb the hook collector wrote at its own ppid. Resolution silently fails while the MCP connection still reports healthy.
2. **Kiro sessions record as `platform: "generic-mcp"` instead…

[Read the thread](https://github.com/newrelic-experimental/preflight/issues/570) · 2026-09-03 · closed · outside contributor · 0 comments

### Release workflow's MCP Registry publish step fails: server.json description exceeds 100-char limit

## Problem

The `Release` workflow's "Publish to MCP Registry" step has been failing on every run since roughly 2026-09-02 16:29 UTC (the last success was at 02:10 UTC that day). `npm publish` itself succeeds every time — the package reaches npm fine — but the subsequent `mcp-publisher publish` step fails with:

```
Error: publish failed: server returned status 422:
{"title":"Unprocessable Entity","status":422,"detail":"validation failed",
 "errors":[{"message":"expected length <=…

[Read the thread](https://github.com/newrelic-experimental/preflight/issues/556) · 2026-09-02 · closed · outside contributor · 0 comments

### OTLP SessionSpan mis-tags Claude Code sessions as generic-mcp (same root cause as #539)

## Problem

`SessionSpan`'s `ai.platform` attribute is set from `createDefaultRegistry().getActive().platformName` (`src/index.ts`, in the `if (config.otlp.transport !== 'nr-events-api')` branch at MCP server startup). This hits the same root cause as #539: `ClaudeCodeAdapter.isSupported()` checks env vars (`CLAUDE_CODE`/`CLAUDE_CODE_VERSION`/`MCP_CLIENT==='claude-code'`) that a real Claude Code process doesn't set (it sets `CLAUDECODE=1`/`CLAUDE_CODE_SESSION_ID`/`CLAUDE_CODE_ENTRYPOINT`…

[Read the thread](https://github.com/newrelic-experimental/preflight/issues/540) · 2026-09-01 · open · outside contributor · 0 comments

### ClaudeCodeAdapter.isSupported() checks env vars that real Claude Code hook processes don't set

## Problem

`ClaudeCodeAdapter.isSupported()` (`src/platforms/claude-code-adapter.ts`) checks:

```ts
process.env.CLAUDE_CODE !== undefined ||
process.env.CLAUDE_CODE_VERSION !== undefined ||
process.env.MCP_CLIENT === 'claude-code'
```

None of these match the environment variables Claude Code's own CLI/hook processes actually set. A real Claude Code session sets `CLAUDECODE=1` (no underscore between CLAUDE and CODE), `CLAUDE_CODE_ENTRYPOINT`, and `CLAUDE_CODE_SESSION_ID` — verified directly…

[Read the thread](https://github.com/newrelic-experimental/preflight/issues/539) · 2026-09-01 · closed · outside contributor · 0 comments

### API Failures MCP tool and dashboard always return empty metrics — StopFailure hook never wired in

## Summary

`ApiFailureTracker` exists to report model-API failures — calls that ultimately failed after Claude Code's own retries were exhausted — but nothing feeds it real data. The `nr_observe_get_api_failures` MCP tool always returns empty metrics, and there's no dashboard visibility into API failure rates, error types, or throttling.

## Root cause

Claude Code's `StopFailure` hook (fires once per turn when a model-API call ultimately fails) is never installed or wired into the…

[Read the thread](https://github.com/newrelic-experimental/preflight/issues/518) · 2026-08-31 · closed · outside contributor · 0 comments

### Homelab server mode: no dashboard viewing yet (ingest-only)

## Problem

`preflight server` (homelab remote server mode) accepts events forwarded from remote clients over `/ingest` and accumulates them into standard session-store files, but does not yet serve a dashboard for viewing that aggregated data — visiting `http://<homelab>:<port>/` 404s. The only way to see accumulated sessions today is to inspect the session-store files directly on the server, or run a separate `preflight --local` process against the same storage path (which itself only binds…

[Read the thread](https://github.com/newrelic-experimental/preflight/issues/514) · 2026-08-31 · open · outside contributor · 0 comments

### Copilot tool-call activity captured locally but never reaches New Relic (no owning --stdio engine)

### Summary

When Copilot (CLI or VS Code Copilot Chat) tool calls are only ever captured by the long-running preflight --local dashboard process rather than by a dedicated, correctly-scoped --stdio engine, they show up in the local dashboard but never reach New Relic — silently and with no error surfaced to the user.

### Confirmed findings

1. preflight --local (the dashboard LaunchAgent, com.preflight.dashboard) unconditionally sets process.env.NR_AI_MODE = 'local' at startup…

[Read the thread](https://github.com/newrelic-experimental/preflight/issues/479) · 2026-08-26 · open · outside contributor · 0 comments

### PR tracking only counts `gh` CLI commands; PRs opened via the GitHub MCP tools are captured but never counted

## Summary

The Git Efficiency "PRs Opened" metric only registers pull requests created through the `gh` CLI (`gh pr create` etc.). When an agent opens a PR via the GitHub MCP server's tools (`create_pull_request`, `update_pull_request`, ...) - now a very common path - the tool call **is captured and stored by Preflight**, but the PR metric ignores it and reports zero. The signal is present in the pipeline and simply not consumed.

This is not host-specific: it affects any platform whose agent…

[Read the thread](https://github.com/newrelic-experimental/preflight/issues/470) · 2026-08-20 · closed · outside contributor · 0 comments

### Copilot SDK usage extension: no health-flag/dashboard signal when it silently fails

Follow-up from the review of PR #437's Copilot SDK adapter + `assistant.usage` extension work.

`copilot-sdk-extension/extension.mjs`'s `joinSession()`/write failures now get written to stderr (fixed in a follow-up commit on #437), which the CLI captures into `~/.copilot/logs/extensions/`. That's better than fully silent, but it's still not visible anywhere a user would normally look.

The sibling VS Code integration (`CopilotUsageWatcher`) has a real health flag for the equivalent problem —…

[Read the thread](https://github.com/newrelic-experimental/preflight/issues/462) · 2026-08-19 · closed · outside contributor · 0 comments

### RetryDetector flags normal work as thrashing: tools with no extractInputMeta case always score similarity 1.0 (PowerShell), and the dedupe key never dedupes

## Summary

`RetryDetector` reports thrashing for ordinary, successful, non-repeated work. In a session with **zero failed tool calls**, it emitted **17 thrashing alerts** and drove the dashboard's Compute Waste panel to `needs attention` with ~37,862 "wasted" tokens.

The root cause is that similarity is computed over the serialized `ToolCallRecord`, and for any tool that has no `case` in `extractInputMeta()` the record carries **no input-derived fields at all** — so every call of that tool…

[Read the thread](https://github.com/newrelic-experimental/preflight/issues/460) · 2026-08-18 · closed · external user · 2 comments

### nr_observe_get_context_composition: dominance percentages are ~5 orders of magnitude too high (totalTokens excludes cache tokens)

## Summary

`nr_observe_get_context_composition` (and `GET /api/context-composition`) reports `dominanceAlerts[].percent` values in the **millions of percent**, and `fillPercent` values near **zero**, for every turn.

Root cause: `ContextCompositionTracker.recordTokenEvent()` uses `event.inputTokens` alone as the turn's total context size, while putting `cacheReadTokens + cacheCreationTokens` into the `conversation_history` bucket. With prompt caching, `inputTokens` is only the *uncached* delta…

[Read the thread](https://github.com/newrelic-experimental/preflight/issues/459) · 2026-08-18 · closed · external user · 2 comments

### EfficiencyScorer's session average resets on MCP process restart, with no clean way to reseed it

## Description

Same bug class as #451, different tracker, but a genuinely harder fix than #452/#453. `EfficiencyScorer.scores` (per-task efficiency scores) is pure in-memory state, resetting on every MCP server process restart. `FullSessionSummary.efficiencyScore` persists only the single averaged number (`efficiencyScorer.getSessionAverage()`'s `.score`), not the count of scores that contributed to it.

## Impact

After a restart, a resumed session's `efficiencyScore` reflects only tasks…

[Read the thread](https://github.com/newrelic-experimental/preflight/issues/454) · 2026-08-15 · closed · outside contributor · 0 comments

### QualityProxyTracker's diff-apply/test-pass/backtrack counts reset to zero on MCP process restart

## Description

Same bug class as #451, different tracker. `QualityProxyTracker`'s internal `events` array is pure in-memory state, resetting on every MCP server process restart. Its own doc comment on `getRawCounts()` already says its return shape is "the shape persisted onto `FullSessionSummary.qualityProxy`" — i.e. it's already structured almost identically to `ModelUsageTracker`'s `modelBreakdown`, which was fixed the same way in PR #450.

## Impact

After a restart, `qualityProxy`…

[Read the thread](https://github.com/newrelic-experimental/preflight/issues/453) · 2026-08-15 · closed · outside contributor · 0 comments

The remaining reports are on [the project's issue tracker](https://github.com/newrelic-experimental/preflight/issues).
