AI Slop Code RIsk Monitor

kunchenguid/firstmate

Talk to one agent. Ship with a crew.

13.4 Moderate pattern signal View on GitHub

Maintenance and Governance Review

This report summarizes scanner evidence for kunchenguid/firstmate, a Shell project with 7,811 GitHub stars. SynthScan examined 385,532 lines of code across 647 source files, recording 2754 pattern matches distributed across 13 syntactic categories. The legacy adjusted pattern signal is 13.4 (Moderate pattern signal); it is not an authorship estimate.

Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.

13.4
Adjusted Signal
13.4
Raw Pattern Score
100%
Time Factor
2026-10-11
Last Push
7.8K
Stars
Shell
Language
385.5K
Lines of Code
647
Files
2.8K
Pattern Hits
2026-10-12
Scan Date
0.03
HC Hit Rate

Risk Review · v3

Use each vector to guide manual verification of the underlying findings.

Cognitive Ownership Risk 47.2/100 · MEDIUM

Can maintainers explain intent, assumptions, and trade-offs? 2663 finding(s).

Hallucinated Dependency & Supply Chain Risk 0.0/100 · LOW

Are imports declared and package/API names verified? 1 finding(s).

Agent Over-Engineering Ratio 3.9/100 · LOW

Are wrappers, guards, and repeated structures necessary? 173 finding(s).

PR Review Velocity Impact 48.6/100 · MEDIUM

Which changes need focused human review? 2754 finding(s).

What These Metrics Mean

Adjusted Signal
Legacy pattern score normalized per 1,000 scanned lines and multiplied by the repository-level time factor. It is not an estimate of AI authorship.
Raw Pattern Score
Sum of severity- and context-weighted pattern findings before applying the time factor.
Time Factor
A coarse multiplier based on repository last-push metadata. It does not identify when individual code was written.
Pattern Hits
Count of configured pattern findings. Review each location and surrounding code before acting.
HC Hit Rate
High- and critical-severity findings per scanned file. Severity is a configured detector weight, not proof of a vulnerability or authorship.
Lines / Files
Scan coverage denominators used by the legacy normalized score.

Pattern-Signal History

This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.

Severity Breakdown

Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.

CRITICAL 0HIGH 17MEDIUM 1146LOW 1591

Directory Score Breakdown

This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.

Pattern Findings

The scanner identified 2754 distinct pattern matches across 13 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.

Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.

AI Slop Vocabulary1052 hits · 3342 pts
SeverityFileLineSnippetContext
MEDIUMbin/fm-gate-refuse-lib.sh144# session, a permitted lab home, or when firstmate's own test harness setsCOMMENT
MEDIUMbin/fm-worker-account-lib.sh67# fm_worker_account_file <harness>COMMENT
MEDIUMbin/fm-worker-account-lib.sh77# fm_worker_account_read <harness> <file>COMMENT
MEDIUMbin/fm-worker-account-lib.sh106# fm_worker_account_resolve <harness> <config-dir>COMMENT
MEDIUMbin/fm-worker-account-lib.sh169# fm_worker_account_check <harness> <declared> <root> <executable> [<provider>]COMMENT
MEDIUMbin/fm-worker-account-lib.sh220# fm_worker_account_select <harness> <config-dir> <model> <executable> [<raw-command>]COMMENT
MEDIUMbin/fm-afk-start.sh2# Enter away mode and run the sub-supervisor daemon in a harness-trackedCOMMENT
MEDIUMbin/fm-afk-start.sh21# background process differs by harness/backend and is owned elsewhere:COMMENT
MEDIUMbin/fm-supervision-engine-lib.sh20# bash fm-supervision-engine-lib.sh enabled <config-dir> <primary-harness>COMMENT
MEDIUMbin/fm-supervision-engine-lib.sh27# the primary-harness pin, and the report-turn id). The runner returns theCOMMENT
MEDIUM⚡bin/fm-supervision-engine-lib.sh45# the real argument construction. FM_TEST_HARNESS pins the primary harnessCOMMENT
MEDIUM⚡bin/fm-supervision-engine-lib.sh47# known harness token; otherwise detection remains real (tests/lib.sh armsCOMMENT
MEDIUM⚡bin/fm-supervision-engine-lib.sh52# fm_supervision_host_primary: print the primary harness the home gate judgesCOMMENT
MEDIUM⚡bin/fm-supervision-engine-lib.sh53# (bin/fm-harness.sh, whose supervision-branch pin names the primary inside anCOMMENT
MEDIUMbin/fm-supervision-engine-lib.sh67# fm_supervision_host_enabled <config-dir> [<primary-harness>]: 0 iff this homeCOMMENT
MEDIUMbin/fm-supervision-engine-lib.sh93# fm_supervision_host_config <config-dir> <primary-harness>COMMENT
MEDIUMbin/fm-supervision-engine-lib.sh144# fm_supervision_host_attended_ready <config-dir> <primary-harness>COMMENT
MEDIUMbin/fm-tmux-lib.sh30# stays harness-scoped so one harness's output cannot make another read busy.COMMENT
MEDIUMbin/fm-tmux-lib.sh70# (bin/fm-composer-lib.sh, fm_composer_classify_screen), so a new harnessCOMMENT
MEDIUMbin/fm-tmux-lib.sh163 # herdr, zellij, cmux, and orca use for every harness including this one.COMMENT
MEDIUMbin/fm-tmux-lib.sh166 # harness is untouched.COMMENT
MEDIUMbin/fm-tmux-lib.sh205fm_pane_busy_state() { # <target> [harness] -> busy|idle|unknownCODE
MEDIUM⚡bin/fm-tmux-lib.sh218fm_pane_is_busy() { # <target> [harness]CODE
MEDIUM⚡bin/fm-tmux-lib.sh227# Busy-queued Enter (opencode 1.18.4): the harness accepts Enter while mid-turnCOMMENT
MEDIUM⚡bin/fm-tmux-lib.sh236# harness whose mid-turn screen the classifier cannot positively identify (piCOMMENT
MEDIUM⚡bin/fm-tmux-lib.sh239# typed, an idle-to-busy transition across our Enter is proof the harnessCOMMENT
MEDIUMbin/fm-claude-stop-autoarm.sh14# bin/fm-session-lock-lib.sh decides it: the recorded pid is a harnessCOMMENT
MEDIUMbin/fm-claude-stop-autoarm.sh18# When an existing numeric owner fails the shared harness-liveness predicate,COMMENT
MEDIUMbin/fm-claude-stop-autoarm.sh83# the harness delivers the collected stderr only on exit 2, so an ownedCOMMENT
MEDIUMbin/fm-claude-stop-autoarm.sh201# A prior session may have died after leaving its numeric harness pid in .lock.COMMENT
MEDIUMbin/fm-claude-stop-autoarm.sh264# (cleanup, exit 0) - the harness discards the collected stderr on exit 0, soCOMMENT
MEDIUMbin/fm-claude-stop-autoarm.sh334# is the harness-owned lifecycle. The arm forks the watcher as its own trackedCOMMENT
MEDIUMbin/fm-host-mirror.sh21# with the wrapper a harness puts around a turn it started itself: ClaudeCOMMENT
MEDIUM⚡bin/fm-host-mirror.sh66# VERIFIED WRITERS. `verified <harness>` exits 0 for a primary whose writersCOMMENT
MEDIUM⚡bin/fm-host-mirror.sh67# were proven against the real harness to record a session's dialog from itsCOMMENT
MEDIUM⚡bin/fm-host-mirror.sh74# fm-host-mirror.sh hook <harness> a prompt-submit or turn-end hook payload on stdinCOMMENT
MEDIUM⚡bin/fm-host-mirror.sh78# fm-host-mirror.sh verified <harness>COMMENT
MEDIUMbin/fm-cd-pretool-check.sh11# harness payload, invokes that policy, and renders the established harnessCOMMENT
MEDIUM⚡bin/fm-wake-lib.sh229# persistent every other harness (codex foreground checkpoint, opencode/grokCOMMENT
MEDIUM⚡bin/fm-wake-lib.sh233# the harness). Otherwise bin/fm-harness.sh is the single detection owner, so thisCOMMENT
MEDIUM⚡bin/fm-wake-lib.sh234# stays consistent with the harness-specific repair line the guards already emit.COMMENT
MEDIUMbin/fm-wake-lib.sh217# Print the supervision model of this home's PRIMARY harness:COMMENT
MEDIUMbin/fm-wake-lib.sh317# so a session on one harness cannot vouch for a home held by the other.COMMENT
MEDIUMbin/fm-wake-lib.sh1751# harness delivers the collected stderr banner only on exit 2 and discardsCOMMENT
MEDIUMbin/fm-transition-lib.sh75# status today: herdr reports it precisely when a harness isCOMMENT
MEDIUMbin/fm-remote-secondmate-relaunch.sh2# Relaunch a REMOTE secondmate onto a new harness, model, or effort, thenCOMMENT
MEDIUMbin/fm-remote-secondmate-relaunch.sh5# Usage: fm-remote-secondmate-relaunch.sh <id> <harness> <model|default|-> <effort|default|->COMMENT
MEDIUMbin/fm-remote-secondmate-relaunch.sh16# the confirmed harness, model, and effort back out of the endpoint's ownCOMMENT
MEDIUMbin/fm-remote-secondmate-relaunch.sh82# refreshed harness/model/effort. A pr= line's own identity block (pr_head=COMMENT
MEDIUMbin/fm-remote-secondmate-relaunch.sh85# writing harness/model/effort after it would break PR movement monitoring onCOMMENT
MEDIUMbin/fm-exclude-tools-lib.sh44# fm_exclude_tools_check <harness> <raw-launch 0|1> <config-dir>: succeed whenCOMMENT
MEDIUMbin/fm-supervision-host.sh20# every close it handled itself. Each owner passes its harness asCOMMENT
MEDIUMbin/fm-supervision-host.sh120# checkpoint, whose bound is the park itself rather than a harness timeout,COMMENT
MEDIUMbin/fm-supervision-host.sh132# the primary's harness pin, and this turn's report id, so every guardedCOMMENT
MEDIUMbin/fm-test-run.sh35# gave (empty when it ran), so a lane can say which harness orCOMMENT
MEDIUMbin/fm-test-run.sh116# live-capability (a live-harness guard governed by fm_live_gate, which recordsCOMMENT
MEDIUMbin/fm-test-run.sh664# secondmate lifecycle, bootstrap, the live-harness-optin family, GUI-backend,COMMENT
MEDIUMbin/fm-test-run.sh1471 # The shared harness-process classifier feeds both the tmux and HerdrCOMMENT
MEDIUMbin/fm-test-run.sh1582 # The run tier's two harness-supplied facts (source vocabulary andCOMMENT
MEDIUMbin/fm-test-run.sh1583 # context-reset stdout injection) only show up against a real harness.COMMENT
992 more matches not shown…
Over-Commented Block1401 hits · 1232 pts
SeverityFileLineSnippetContext
LOW.no-mistakes.yaml1# Per-repo no-mistakes overrides.COMMENT
LOWbin/fm-brief-heading-lib.sh1# shellcheck shell=bashCOMMENT
LOWbin/fm-secondmate-registry-lib.sh1#!/usr/bin/env bashCOMMENT
LOWbin/fm-gate-refuse-lib.sh1#!/usr/bin/env bashCOMMENT
LOWbin/fm-gate-refuse-lib.sh21# 1. NO_MISTAKES_GATE set - the durable env marker no-mistakes stamps into everyCOMMENT
LOWbin/fm-gate-refuse-lib.sh41# part of the "lab" back onto the real fleet. The threat model stays a CONFUSEDCOMMENT
LOWbin/fm-gate-refuse-lib.sh61# safety helpers) export it for temp-sandbox fleet tests. The disposable labCOMMENT
LOWbin/fm-remote-file.sh1#!/usr/bin/env bashCOMMENT
LOWbin/fm-worker-account-lib.sh1#!/usr/bin/env bashCOMMENT
LOWbin/fm-worker-account-lib.sh21# is set, even $HOME/.claude; for Pi it is $HOME/.pi/agent. Any other value isCOMMENT
LOWbin/fm-worker-account-lib.sh41# Claude: `claude auth status`, which exits 0 only when signed in.COMMENT
LOWbin/fm-inactive-reconcile.sh1#!/usr/bin/env bashCOMMENT
LOWbin/fm-inactive-reconcile.sh21# fm-crew-state.sh, which applies the same gate: a no-mistakesCOMMENT
LOWbin/fm-inactive-reconcile.sh41# The scan enforces that budget itself through a whole-second deadline, and theCOMMENT
LOWbin/fm-inactive-reconcile.sh61# A terminal-outcomes/<fingerprint>.pending record remains until its upstreamCOMMENT
LOWbin/fm-lint.sh1#!/usr/bin/env bashCOMMENT
LOWbin/fm-lint.sh21# before merge instead of only failing to run as CI.COMMENT
LOWbin/fm-lint.sh41# invocations in the core bin/ and bin/backends/ scripts so every configuredCOMMENT
LOWbin/fm-lint.sh61# (FM_LINT_ROOT_GRACE, default 5), and a per-process address-space limitCOMMENT
LOWbin/fm-lint.sh81# Other findings and failed retries still fail lint. The retry's diagnosticsCOMMENT
LOWbin/fm-lint.sh101# graph identity, wall/CPU/RSS, shard load, and competing ShellCheck processes.COMMENT
LOWbin/fm-lint.sh961# address space, not resident memory; ShellCheck's GHC runtime reserves aboutCOMMENT
LOWbin/fm-secondmate-reconcile.sh1#!/usr/bin/env bashCOMMENT
LOWbin/fm-secondmate-reconcile.sh21# and live work and carries the mismatch for renderers. The books are stillCOMMENT
LOWbin/fm-secondmate-reconcile.sh41# stale, cannot mis-order against a concurrent snapshot, and cannotCOMMENT
LOWbin/fm-secondmate-reconcile.sh61#COMMENT
LOWbin/fm-captain-hold.sh1#!/usr/bin/env bashCOMMENT
LOWbin/fm-captain-hold.sh21#COMMENT
LOWbin/fm-captain-hold.sh41# optional --origin records provenance in the new task's body and supplies theCOMMENT
LOWbin/fm-captain-hold.sh61# act. It requires a non-empty captain decision file of at most 8192 bytes andCOMMENT
LOWbin/fm-captain-hold.sh81# `<task-id>\t<answer>\t<label>[\t<mode>]` lines on stdin and resolves each namedCOMMENT
LOWbin/fm-captain-hold.sh101# The exact answer value `reconcile` means "go re-check reality", never "theCOMMENT
LOWbin/fm-captain-hold.sh121#COMMENT
LOWbin/fm-captain-hold.sh141# verified durable (captain-held, or carrying a recorded resolution),COMMENT
LOWbin/fm-captain-hold.sh161# authoritative evidence first: a row whose notes carry the marker lineCOMMENT
LOWbin/fm-captain-hold.sh181# lifecycle without necessarily touching the task's status log, so a consumerCOMMENT
LOWbin/fm-captain-hold.sh201#COMMENT
LOWbin/fm-captain-hold.sh221COMMENT
LOWbin/fm-captain-hold.sh541COMMENT
LOWbin/fm-captain-hold.sh1841 done <<EOFCOMMENT
LOWbin/fm-captain-hold.sh1861# resolution was not the captain's word.COMMENT
LOWbin/fm-herdr-lab.sh1#!/usr/bin/env bashCOMMENT
LOWbin/fm-herdr-lab.sh21# The run command rejects caller-supplied --session flags, any leading optionCOMMENT
LOWbin/fm-ensure-agents-md.sh1#!/usr/bin/env bashCOMMENT
LOWbin/fm-timing-lib.sh1#!/usr/bin/env bashCOMMENT
LOWbin/fm-timing-lib.sh21# being measured run in bin/fm-bootstrap.sh andCOMMENT
LOWbin/fm-afk-start.sh1#!/usr/bin/env bashCOMMENT
LOWbin/fm-afk-start.sh21# background process differs by harness/backend and is owned elsewhere:COMMENT
LOWbin/fm-afk-start.sh41COMMENT
LOWbin/fm-backlog-handoff.sh1#!/usr/bin/env bashCOMMENT
LOWbin/fm-backlog-handoff.sh21# active home, or the firstmate repo;COMMENT
LOWbin/fm-backlog-handoff.sh41# Item bodies must use at least two leading spaces. The helper refuses a selectedCOMMENT
LOWbin/fm-backlog-handoff.sh61# watcher escalates its unknown delivery; only confirmed delivery prevents aCOMMENT
LOWbin/fm-procevent-lavish.sh1#!/usr/bin/env bashCOMMENT
LOWbin/fm-procevent-lavish.sh21# It is read-only over the capture: it does not arm, poll, or changeCOMMENT
LOWbin/fm-procevent-lavish.sh41# present when it starts is posted before the long-poll: throughCOMMENT
LOWbin/fm-procevent-lavish.sh61#COMMENT
LOWbin/fm-procevent-lavish.sh81# This adapter is deliberately thin. It owns only what is specific to Lavish:COMMENT
LOWbin/fm-procevent-lavish.sh101# to Lavish, so every rule about what a keyed answer DOES belongs to the oneCOMMENT
LOWbin/fm-procevent-lavish.sh121# code: SERVER_ERRORCOMMENT
1341 more matches not shown…
Decorative Section Separators43 hits · 111 pts
SeverityFileLineSnippetContext
MEDIUMbin/fm-composer-lib.sh767# its composer's TOP rule: `──────── <name> ─`, issues #5601 and #5558), provenCOMMENT
MEDIUMbin/fm-supervise-daemon.sh1743# ============================================================================COMMENT
MEDIUMbin/fm-supervise-daemon.sh1746# ============================================================================COMMENT
MEDIUMbin/fm-busy-lib.sh310# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/fm-secondmate-harness.test.sh81# ===========================================================================COMMENT
MEDIUM⚡tests/fm-secondmate-harness.test.sh83# ===========================================================================COMMENT
MEDIUM⚡tests/fm-secondmate-harness.test.sh138# ===========================================================================COMMENT
MEDIUM⚡tests/fm-secondmate-harness.test.sh140# ===========================================================================COMMENT
MEDIUM⚡tests/fm-secondmate-harness.test.sh462# ===========================================================================COMMENT
MEDIUM⚡tests/fm-secondmate-harness.test.sh465# ===========================================================================COMMENT
MEDIUM⚡tests/fm-secondmate-harness.test.sh681# ===========================================================================COMMENT
MEDIUM⚡tests/fm-secondmate-harness.test.sh684# ===========================================================================COMMENT
MEDIUM⚡tests/fm-secondmate-harness.test.sh1078# ===========================================================================COMMENT
MEDIUM⚡tests/fm-secondmate-harness.test.sh1082# ===========================================================================COMMENT
MEDIUMtests/fm-secondmate-harness.test.sh176# ===========================================================================COMMENT
MEDIUMtests/fm-secondmate-harness.test.sh178# ===========================================================================COMMENT
MEDIUMtests/fm-secondmate-harness.test.sh305# ===========================================================================COMMENT
MEDIUMtests/fm-secondmate-harness.test.sh307# ===========================================================================COMMENT
MEDIUMtests/fm-secondmate-harness.test.sh1872# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/fm-secondmate-harness.test.sh1874# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/fm-x-mode.test.sh128# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/fm-afk-launch.test.sh64# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/fm-afk-launch.test.sh69# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/fm-afk-launch.test.sh257# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/fm-afk-launch.test.sh259# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/fm-afk-launch.test.sh337# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/fm-afk-launch.test.sh340# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/fm-afk-launch.test.sh369# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/fm-afk-launch.test.sh376# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/fm-afk-launch.test.sh524# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/fm-afk-launch.test.sh527# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/fm-afk-launch.test.sh1624# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/fm-afk-launch.test.sh1626# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/fm-afk-launch.test.sh1687# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/fm-afk-launch.test.sh1690# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/fm-crew-state.test.sh800# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/fm-backend-herdr-presentation-e2e.test.sh977# ------------------------------------------------------------------COMMENT
MEDIUMtests/fm-backend-herdr-presentation-e2e.test.sh980# ------------------------------------------------------------------COMMENT
MEDIUMtests/fm-composer-lib.test.sh137# =============================================================================COMMENT
MEDIUMtests/fm-composer-lib.test.sh154# =============================================================================COMMENT
MEDIUMtests/fm-remote-reply.test.sh447# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/fm-subagent-pretool-check.test.sh74# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/fm-subagent-pretool-check.test.sh76# ---------------------------------------------------------------------------COMMENT
Modern AI Meta-Vocabulary34 hits · 106 pts
SeverityFileLineSnippetContext
MEDIUM.no-mistakes.yaml3# firstmate is an agent-orchestration repo: its AGENTS.md installs a fleet-captainCOMMENT
MEDIUMbin/fm-backlog-handoff.sh1059# Seed the destination with firstmate's standard three-section scaffold when itCOMMENT
MEDIUMbin/fm-backlog-handoff.sh1073# cleanup is a scaffold we just created. tasks-axi writes both its success andCOMMENT
MEDIUMbin/fm-brief.sh38# after scaffolding and the caller-supplied repo string cannot reliablyCOMMENT
MEDIUM⚡bin/fm-brief.sh98# Every scaffold's status protocol distinguishes the configuredCOMMENT
MEDIUM⚡bin/fm-brief.sh104# bin/fm-classify-lib.sh; each scaffold renders the stamp as a literal <epoch>COMMENT
MEDIUM⚡bin/fm-brief.sh106# scaffold never emits a substitution a file-write tool would copy through.COMMENT
MEDIUM⚡bin/fm-brief.sh107# Every scaffold also carries the steering-inbox receive-and-ack section:COMMENT
MEDIUMbin/fm-brief.sh128# a later scout promotion could not outrank), stops the scaffold beforeCOMMENT
MEDIUMbin/fm-brief.sh247# missing or invalid value stops the scaffold rather than silently defaulting.COMMENT
MEDIUMbin/fm-brief.sh322# unusable file never leaves a partial scaffold behind.COMMENT
MEDIUMbin/fm-brief.sh337# Append the include as the last section of a ship or scout scaffold.COMMENT
MEDIUMbin/fm-brief.sh370# scaffold kind. The record format, doorbell line, and re-ring ladder areCOMMENT
MEDIUMbin/fm-brief.sh515# shellcheck disable=SC2016 # single quotes are deliberate: these lines are literal brief text whose backtick-wrapped $COMMENT
MEDIUMbin/fm-spawn.sh3325 echo "error: forge mismatch for $ID: $PROJ_NAME is registered forge=$STANDING_FORGE but $SOURCE_BRIEF records forge=CODE
MEDIUMbin/fm-dod-lib.sh218# Return 0 when a Task subsection still consists only of its scaffoldCOMMENT
MEDIUMbin/fm-public-followup.sh41# public-followup add` + `bind-work`. This is the event-drivenCOMMENT
MEDIUMbin/fm-task-inbox-lib.sh11# scaffold (bin/fm-brief.sh) tells the worker how to read and acknowledge;COMMENT
MEDIUMtests/fm-muse-harness.test.sh67# --- spawn scaffolding ------------------------------------------------------COMMENT
MEDIUMtests/fm-brief.test.sh182# scaffold ignores the registered posture (test_ship_mode_is_explicit_not_registry).COMMENT
MEDIUMtests/fm-brief.test.sh225# unusable value must stop the scaffold instead of silently defaulting. TheCOMMENT
MEDIUMtests/fm-brief.test.sh252# scaffold must follow the explicit flag even when the project is registeredCOMMENT
MEDIUMtests/fm-brief.test.sh586# destroying the one contract that exists precisely because the scaffold cannotCOMMENT
MEDIUMtests/fm-brief.test.sh855 # Fill the scaffold's generated status-append command the way a worker doesCOMMENT
MEDIUMtests/fm-brief.test.sh1009# Scout and secondmate paths still scaffold well-formed briefs.COMMENT
MEDIUMtests/fm-brief.test.sh1080# Without config/wait-no-turns the scaffold matches the pre-flag brief and drive text.COMMENT
MEDIUMtests/fm-brief.test.sh1123# the scaffold before anything is written when the path is unusable.COMMENT
MEDIUMtests/fm-brief.test.sh1136 # shellcheck disable=SC2016 # The include is literal text and must never expand at scaffold time.COMMENT
MEDIUMtests/fm-brief.test.sh1404# scaffold must prohibit the administrative act itself. The rule is emitted fromCOMMENT
MEDIUMtests/fm-fleet-ledger.test.sh165# Optional arguments are the scaffold's state and config overrides; theCOMMENT
MEDIUMtests/fm-fleet-ledger.test.sh166# scaffold runs from the home, so a relative config override names its config/.COMMENT
MEDIUMtests/fm-backlog-handoff.test.sh969 # in the standard three-section scaffold the handoff seeds for a fresh home.COMMENT
MEDIUMtests/fm-backlog-handoff.test.sh1198 # sub scaffold has In flight / Queued / DoneCOMMENT
MEDIUMtests/fm-control-relaunch.test.sh1175# its brief is the scout scaffold: it never gained a Ship branch line, and aCOMMENT
Example Usage Blocks62 hits · 96 pts
SeverityFileLineSnippetContext
LOWbin/fm-remote-file.sh4# Usage:COMMENT
LOWbin/fm-inactive-reconcile.sh4# Usage:COMMENT
LOWbin/fm-lint.sh105# Usage:COMMENT
LOWbin/fm-secondmate-reconcile.sh5# Usage:COMMENT
LOWbin/fm-captain-hold.sh22# Usage:COMMENT
LOWbin/fm-herdr-lab.sh5# Usage:COMMENT
LOWbin/fm-procevent-lavish.sh4# Usage:COMMENT
LOWbin/fm-remote-home-provision.sh4# Usage:COMMENT
LOWbin/fm-procevent-remote-reply.sh4# Usage:COMMENT
LOW⚡bin/fm-host-mirror.sh73# Usage:COMMENT
LOWbin/fm-cd-pretool-check.sh15# Usage:COMMENT
LOWbin/fm-procevent-when.sh7# Usage:COMMENT
LOWbin/fm-supervision-host.sh6# Usage:COMMENT
LOWbin/fm-startup-growth-check.sh4# Usage:COMMENT
LOWbin/fm-install-shellcheck.sh12# Usage:COMMENT
LOWbin/fm-secondmate-report.sh17# Usage:COMMENT
LOWbin/fm-contributions.sh4# Usage:COMMENT
LOWbin/fm-lint-workflows.sh11# Usage:COMMENT
LOWbin/fm-mail-check.sh4# Usage:COMMENT
LOWbin/fm-tool-update-check.sh5# Usage:COMMENT
LOWbin/fm-remote-inherit.sh4# Usage:COMMENT
LOWbin/fm-backlog-receive.sh4# Usage:COMMENT
LOW⚡bin/fm-remote-secondmate-control.sh4# Usage:COMMENT
LOWbin/fm-public-followup-emit.sh15# Usage:COMMENT
LOWbin/fm-startup-memory-budget.sh3# Usage:COMMENT
LOW⚡bin/fm-arm-pretool-check.sh13# Usage:COMMENT
LOWbin/fm-install-treehouse.sh9# Usage:COMMENT
LOW⚡bin/fm-quota-choose.sh4# Usage:COMMENT
LOWbin/fm-remote-herdr-guard.sh5# Usage:COMMENT
LOWbin/fm-public-followup-collect.sh18# Usage:COMMENT
LOWbin/fm-install-actionlint.sh12# Usage:COMMENT
LOWbin/fm-herdr-ci-cleanup.sh14# Usage:COMMENT
LOWbin/fm-remote-home-seed.sh4# Usage:COMMENT
LOWbin/fm-procevent-quota.sh4# Usage:COMMENT
LOWbin/fm-vendor-auth-probe.sh56# Usage:COMMENT
LOWbin/fm-branch-outcome.sh78# Usage:COMMENT
LOWbin/fm-afk-return.sh5# Usage:COMMENT
LOWbin/fm-git-strip-ai-trailers.sh5# Usage:COMMENT
LOWbin/fm-lab-home.sh10# Usage:COMMENT
LOWbin/fm-test-isolation-proof.sh15# Usage:COMMENT
LOWbin/fm-on.sh4# Usage:COMMENT
LOWbin/fm-public-followup.sh31# Usage:COMMENT
LOWbin/fm-live-lab.sh7# Usage:COMMENT
LOWbin/fm-inbox.sh22# Usage:COMMENT
LOWbin/fm-procevent.sh6# Usage:COMMENT
LOWbin/fm-install-herdr.sh8# Usage:COMMENT
LOWbin/fm-branch-report.sh17# Usage:COMMENT
LOWbin/fm-bearings-board.sh10# Usage:COMMENT
LOWbin/fm-lease.sh11# Usage:COMMENT
LOWbin/fm-kimi-turnend-hook.sh15# Usage:COMMENT
LOWbin/fm-pipeline-spend.sh5# Usage:COMMENT
LOWbin/fm-remote-doctor.sh4# Usage:COMMENT
LOWbin/fm-doc-audience-check.sh4# Usage:COMMENT
LOWbin/fm-remote-delta-read.sh4# Usage:COMMENT
LOWbin/fm-subagent-pretool-check.sh33# Usage:COMMENT
LOWbin/fm-afk-launch.sh68# Usage:COMMENT
LOWbin/fm-afk-contract.sh81# Usage:COMMENT
LOWbin/fm-fleet-ledger.sh22# Usage:COMMENT
LOWbin/fm-home-seed.sh4# Usage:COMMENT
LOWbin/fm-dispatch-resolve.sh5# Usage:COMMENT
2 more matches not shown…
Hyper-Verbose Identifiers83 hits · 84 pts
SeverityFileLineSnippetContext
LOWbin/fm-kimi-turnend-hook.sh201def validate_firstmate_files_for_remove() -> None:STRING
LOWbin/fm-bootstrap.sh1094 def malformed_optional_fields($items):CODE
LOW.opencode/plugins/fm-primary-watch-arm.js302function confirmHandlingDeliveryWithRetry(paths, recovery) {CODE
LOW.opencode/plugins/fm-primary-watch-arm.js370async function restoreAfterActionableClose(paths, sessionID, client, predecessorArmPid) {CODE
LOW.opencode/plugins/lib/fm-operational-input.js10export function encodeFirstmateOperationalInput(root, kind, content) {CODE
LOWtests/fm-pi-branch-extension.test.sh269export function getSupportedThinkingLevels(model) {CODE
LOWtests/fm-pi-branch-extension.test.sh998function directlyRequestsResourceReport(mirror) {CODE
LOWtests/fm-voice-relay.test.sh654async def resolve_while_the_loop_runs():CODE
LOWtests/fm-voice-relay.test.sh1596def lose_connection_while_waiting(record):CODE
LOWtests/fm-voice-relay.test.sh4136 async def invoke_model_with_bidirectional_stream(self, operation):CODE
LOWtests/fm-backend-herdr-eventwait.test.py51 def test_deadline_is_clean_timeout(self):CODE
LOWtests/fm-backend-herdr-eventwait.test.py62 def test_peer_closure_is_runtime_failure(self):CODE
LOW⚡tests/fm-backend-herdr-eventwait.test.py75 def test_receive_error_is_runtime_failure(self):CODE
LOW⚡tests/fm-backend-herdr-eventwait.test.py84 def test_main_reports_early_stream_closure(self):CODE
LOW⚡tests/fm-backend-herdr-eventwait.test.py93 def test_main_does_not_signal_readiness_before_valid_ack(self):CODE
LOWtests/fm-calm-pi-extension.test.sh1666function createInstalledToolHtmlRenderer() {CODE
LOW.claude/mods/firstmate-calm/lib/fm-calm-presentation.ts44export function calmCodeRootFromPluginRoot(pluginRoot: string): string {CODE
LOW.claude/mods/firstmate-calm/lib/fm-calm-presentation.ts114export function classifyRestoredTranscript(rows: readonly CalmSessionRow[]): {CODE
LOW.claude/mods/firstmate-calm/lib/fm-calm-presentation.ts150export function userTextOperationalRecord(text: string): string | undefined {CODE
LOW.claude/mods/firstmate-calm/lib/fm-operational-input.ts68export function firstmateOperationalInputKind(message: string): string | undefined {CODE
LOW.claude/mods/firstmate-calm/lib/fm-operational-input.ts78export function firstmateLegacyOperationalInputKind(message: string): string | undefined {CODE
LOW.claude/mods/firstmate-calm/lib/fm-operational-input.ts100export function classifyFirstmateOperationalText(message: string): string | undefined {CODE
LOW.claude/mods/firstmate-calm/lib/fm-operational-input.ts109export function firstmateOperationalDoorbellPath(message: string): string | undefined {CODE
LOW.claude/mods/firstmate-calm/lib/fm-operational-input.ts128export function firstmateOperationalRecordKind(content: string): string | undefined {CODE
LOW.claude/mods/firstmate-calm/lib/fm-branch-notes.ts138export function recordSessionShownThrough(stored: unknown, sessionId: string, seq: number): [string, number][] {CODE
LOW…mods/firstmate-calm/lib/fm-calm-working-ship-sprite.ts171export function createCalmWorkingShipSprite(): CalmWorkingShipSprite {CODE
LOW.omp/extensions/fm-primary-omp-watch.ts184function replacementCoordinatorFor(handoff: string): ReplacementCoordinator {CODE
LOW.omp/extensions/fm-primary-omp-watch.ts332function validatePendingActionable(value: unknown): PendingActionableClose {CODE
LOW.omp/extensions/fm-primary-omp-watch.ts351function validateReplacementHandoff(value: unknown): PendingActionableClose[] {CODE
LOW.omp/extensions/fm-primary-omp-watch.ts385function persistReplacementHandoff(pending: PendingActionableClose[]): void {CODE
LOW.omp/extensions/fm-primary-omp-watch.ts513async function waitForGenerationChildClose(armChild: ChildProcess | null): Promise<void> {CODE
LOW.omp/extensions/fm-primary-omp-watch.ts633 function confirmHandlingDeliveryWithRetry(CODE
LOW.omp/extensions/fm-primary-omp-watch.ts725 async function processPendingActionables(owner: SessionGeneration): Promise<void> {CODE
LOW.omp/extensions/fm-primary-omp-watch.ts882 async function restoreAfterActionableClose(owner: SessionGeneration, predecessorArmPid: string): Promise<{CODE
LOW.omp/extensions/fm-primary-turnend-guard.ts162function sessionstartGenerationIsLive(generation: SessionstartGeneration): boolean {CODE
LOW.omp/extensions/fm-primary-turnend-guard.ts185function sessionstartProcessGroupAlive(processGroupId: number): boolean {CODE
LOW.omp/extensions/fm-primary-turnend-guard.ts194function waitForSessionstartProcessGroupExit(CODE
LOW.omp/extensions/fm-primary-turnend-guard.ts222function stopSessionstartGeneration(generation: SessionstartGeneration): Promise<void> {CODE
LOW.omp/extensions/fm-primary-turnend-guard.ts390function createSessionstartGeneration(CODE
LOW.pi/extensions/fm-calm.ts117function installCalmPresentationAdapter(name: string, install: () => void): void {CODE
LOW.pi/extensions/fm-primary-pi-watch.ts189function replacementCoordinatorFor(handoff: string): ReplacementCoordinator {CODE
LOW.pi/extensions/fm-primary-pi-watch.ts384function validatePendingActionable(value: unknown): PendingActionableClose {CODE
LOW.pi/extensions/fm-primary-pi-watch.ts402function validateReplacementHandoff(value: unknown): PendingActionableClose[] {CODE
LOW.pi/extensions/fm-primary-pi-watch.ts436function persistReplacementHandoff(pending: PendingActionableClose[]): void {CODE
LOW.pi/extensions/fm-primary-pi-watch.ts557async function waitForGenerationChildClose(armChild: ChildProcess | null): Promise<void> {CODE
LOW.pi/extensions/fm-primary-pi-watch.ts704 function confirmHandlingDeliveryWithRetry(CODE
LOW.pi/extensions/fm-primary-pi-watch.ts827 async function processPendingActionables(owner: SessionGeneration): Promise<void> {CODE
LOW.pi/extensions/fm-primary-pi-watch.ts983 async function restoreAfterActionableClose(owner: SessionGeneration, predecessorArmPid: string): Promise<{CODE
LOW.pi/extensions/fm-primary-turnend-guard.ts146function sessionstartGenerationIsLive(generation: SessionstartGeneration): boolean {CODE
LOW.pi/extensions/fm-primary-turnend-guard.ts169function sessionstartProcessGroupAlive(processGroupId: number): boolean {CODE
LOW.pi/extensions/fm-primary-turnend-guard.ts178function waitForSessionstartProcessGroupExit(CODE
LOW.pi/extensions/fm-primary-turnend-guard.ts206function stopSessionstartGeneration(generation: SessionstartGeneration): Promise<void> {CODE
LOW.pi/extensions/fm-primary-turnend-guard.ts379function createSessionstartGeneration(CODE
LOW.pi/extensions/fm-branch-supervision.ts233function isProcessingCustomMessage(message: { role?: string; customType?: string }): boolean {CODE
LOW.pi/extensions/fm-branch-supervision.ts242function settledPromptProviderError(sessionManager: SessionManager, entryOffset: number): string | null {CODE
LOW.pi/extensions/fm-branch-supervision.ts497function parseVisibleOutcomeRecord(value: unknown): VisibleOutcomeRecord | null {CODE
LOW.pi/extensions/fm-branch-supervision.ts713 function recordSettledProviderError(detail: string): void {CODE
LOW.pi/extensions/fm-branch-supervision.ts732 function recordDurableBranchReport(reportGeneration: number, reportSelectionRevision: number): void {CODE
LOW.pi/extensions/fm-branch-supervision.ts974 function ensureVisibleCaptainOutcome(row: OutcomeRow): boolean {CODE
LOW.pi/extensions/fm-branch-supervision.ts1068 async function presentUnprocessedOutcomes(expectedGeneration: number): Promise<boolean> {CODE
23 more matches not shown…
Empty Error Handlers16 hits · 80 pts
SeverityFileLineSnippetContext
HIGHbin/fm-voice-client.py391except Exception: # noqa: BLE001CODE
HIGHbin/fm-voice-client.py480except Exception: # noqa: BLE001CODE
HIGHbin/fm-voice-client.py681except Exception: # noqa: BLE001CODE
HIGHbin/fm-voice-client.py1176except EOFError:CODE
HIGHbin/fm-voice-relay.py603except (asyncio.TimeoutError, asyncio.CancelledError):CODE
HIGHbin/fm-mail.py138except Exception:CODE
HIGHbin/fm-mail.py406except Exception:CODE
HIGHbin/fm-mail.py471except Exception:CODE
HIGHbin/fm-herdr-lab-viewer.py65except OSError:CODE
HIGHbin/fm-herdr-lab-viewer.py76except OSError:CODE
HIGHbin/fm-herdr-lab-viewer.py151except OSError:CODE
HIGHbin/fm-herdr-lab-viewer.py180except OSError:CODE
HIGHbin/fm-herdr-lab-viewer.py167except OSError:CODE
HIGHbin/fm-herdr-lab-viewer.py172except OSError:CODE
HIGHbin/fm-jev-mem-guard.py48except Exception:CODE
HIGHbin/fm-jev-mem-guard.py83except Exception:CODE
Self-Referential Comments14 hits · 45 pts
SeverityFileLineSnippetContext
MEDIUMbin/fm-brief-heading-lib.sh5# This file is the single owner of how a brief's sections are read: theCOMMENT
MEDIUMbin/fm-afk-start.sh15# This file is sourceable: its BASH_SOURCE guard keeps main from running, whileCOMMENT
MEDIUMbin/fm-x-lib.sh9# This file is sourced, never executed. It defines:COMMENT
MEDIUMbin/fm-tasks-axi-lib.sh27# This file is the single owner of FM_TASKS_AXI_MIN. bin/fm-bootstrap.sh turns aCOMMENT
MEDIUMbin/fm-primary-scope-lib.sh4# This file is sourced by hook entrypoints and has no side effects on source.COMMENT
MEDIUMbin/fm-project-capacity-lib.sh15# This file is the single owner of the declaration format, of what holds aCOMMENT
MEDIUMbin/fm-hook-host-lib.sh4# This file is sourced by hook entrypoints and has no side effects on source.COMMENT
MEDIUMbin/fm-operational-input.sh4# This file is both a source-safe shell library and the cross-language CLI usedCOMMENT
MEDIUMbin/fm-pending-reply-lib.sh313# Create a durable pending-reply expectation. Prints corr_id on success.COMMENT
MEDIUM⚡bin/fm-session-lock-lib.sh14# This file is sourced by scripts and has no side effects on source.COMMENT
MEDIUMbin/fm-dod-lib.sh70# This file is the one owner of the no-mistakes `--intent` contract: only theCOMMENT
MEDIUMbin/fm-env-lib.sh5# This file is the single owner of the one-key .env read: the Relay pairingCOMMENT
MEDIUMbin/fm-quota-axi-lib.sh9# This file is the single owner of that version number. bin/fm-bootstrap.shCOMMENT
MEDIUM⚡tests/fm-afk-inject-e2e.test.sh161# Create a fake crewmate window (the watcher lists fm-* windows for staleCOMMENT
Excessive Try-Catch Wrapping31 hits · 35 pts
SeverityFileLineSnippetContext
MEDIUMbin/fm-voice-client.py476def close(self):CODE
LOWbin/fm-voice-client.py391 except Exception: # noqa: BLE001CODE
LOWbin/fm-voice-client.py480 except Exception: # noqa: BLE001CODE
LOWbin/fm-voice-client.py515 except Exception as exc: # noqa: BLE001CODE
LOWbin/fm-voice-client.py651 except Exception as exc: # noqa: BLE001CODE
LOWbin/fm-voice-client.py681 except Exception: # noqa: BLE001CODE
LOWbin/fm-voice-client.py957 except Exception as exc: # noqa: BLE001CODE
LOWbin/fm-voice-client.py1359 except Exception as exc: # noqa: BLE001CODE
LOWbin/fm-voice-relay.py589 except Exception as exc: # noqa: BLE001CODE
LOWbin/fm-voice-relay.py739 except Exception as exc: # noqa: BLE001CODE
LOWbin/fm-voice-relay.py755 except Exception as exc: # noqa: BLE001CODE
LOWbin/fm-voice-relay.py855 except Exception as exc: # noqa: BLE001CODE
LOWbin/fm-voice-relay.py979 except Exception as exc: # noqa: BLE001CODE
LOWbin/fm-voice-relay.py1244 except Exception as exc: # noqa: BLE001CODE
LOWbin/fm-mail.py62 except Exception:CODE
LOWbin/fm-mail.py99 except Exception:CODE
LOWbin/fm-mail.py138 except Exception:CODE
LOWbin/fm-mail.py141 except Exception as e:CODE
LOWbin/fm-mail.py161 except Exception as e:CODE
LOWbin/fm-mail.py376 except Exception:CODE
LOWbin/fm-mail.py406 except Exception:CODE
LOWbin/fm-mail.py461 except Exception as e:CODE
LOWbin/fm-mail.py471 except Exception:CODE
MEDIUMbin/fm-mail.py104def cmd_read():CODE
MEDIUMbin/fm-mail.py146def cmd_send(to, subj, body):CODE
LOWbin/fm-kimi-turnend-hook.sh191 except Exception:STRING
LOW⚡bin/fm-jev-mem-guard.py48 except Exception:CODE
LOW⚡bin/fm-jev-mem-guard.py58 except Exception:CODE
LOW⚡bin/fm-jev-mem-guard.py63 except Exception:CODE
LOWbin/fm-jev-mem-guard.py83 except Exception:CODE
LOWbin/fm-jev-mem-guard.py91 except Exception:CODE
Deep Nesting10 hits · 9 pts
SeverityFileLineSnippetContext
LOWbin/fm-voice-client.py718CODE
LOWbin/fm-voice-client.py774CODE
LOWbin/fm-voice-relay.py944CODE
LOWbin/fm-voice-relay.py449CODE
LOWbin/fm-mail.py79CODE
LOWbin/fm-mail.py267CODE
LOWbin/fm_voice_records.py361CODE
LOWbin/fm-jev-mem-guard.py36CODE
LOWbin/fm-jev-mem-guard.py53CODE
LOWbin/fm-jev-mem-guard.py98CODE
Redundant / Tautological Comments3 hits · 4 pts
SeverityFileLineSnippetContext
LOWbin/fm-dod-lib.sh180# Print the value of every "Base branch: <name>" line that directly follows theCOMMENT
LOWbin/fm-watch.sh879# Set SECONDMATE_BUSY_CLASS to the first token of the semantic busyCOMMENT
LOWbin/fm-bootstrap.sh117# Set FM_BOOTSTRAP_NETWORK to split this run by whether a step talks toCOMMENT
Structural Annotation Overuse4 hits · 4 pts
SeverityFileLineSnippetContext
LOWdocs/verification/secondmate-parent-channel.md26$ # Step 1: the child appends its terminal line from inside its own real tmux paneCODE
LOWdocs/verification/secondmate-parent-channel.md44$ # Step 2: the mate registers the PR with fm-pr-check; the ready line with the canonical URL reaches the parent from thCODE
LOWdocs/verification/secondmate-parent-channel.md58$ # Step 3: the mate holds a task for the captain; the hold reaches the parent from fm-captain-hold itselfCODE
LOWdocs/verification/secondmate-parent-channel.md63$ # Step 4: the captain's answer is recorded in the mate home; the close reaches the parent from fm-captain-hold itselfCODE
Cross-Language Confusion1 hit · 2 pts
SeverityFileLineSnippetContext
HIGHbin/fm-jev-mem-guard.py19 a false alarm; an unassessed host reports null measured percentages (JSON null,STRING