v2.94.0 makes fallow easier to discover and adopt from inside coding agents, and starts reporting the value it delivers back to you.
Guided setup, on first contact
- First-run output now points at guided setup. On a project with no fallow config, a run that surfaces findings leads its JSON
next_steps[]with asetupstep (command:fallow schema, the read-only capability manifest that lists the agent-guide and commit-gate commands to offer), and barefallowprints a one-lineSetup:hint after the failure summary. The pointer stays quiet everywhere else: never in CI, never on configured projects or clean runs, and never again afterfallow init --decline, the new flag that records "this project deliberately stays unconfigured" without writing a config file. fallow hooks statusgives agents and scripts a read-only view (human and--format json) of all three hook surfaces: the Git pre-commit hook, the Claude Code gate, and the CodexAGENTS.mdmanaged block, including user-edited detection, the gate script's installer version, and its minimum-version floor.- A task-to-command matrix routes agent intents to the right command. One cheat sheet ("when the agent is about to X, run Y") renders from a single source into
fallow schema, theAGENTS.mdscaffolded byfallow init --agents, the managed block fromfallow hooks install --target agent, and rootfallow --help. Drift tests parse every row through the live CLI, and the matrix never names a mutating command. - The bundled agent skill's CLI flag tables now regenerate from the capability manifest, so global flags, command-local flags, and the dead-code filter table can no longer drift behind the binary. (Closes #1189.)
Fallow Impact: see what the gate is doing for you
- The agent commit gate now feeds Impact. A commit the Claude Code gate blocks and a later retry clears lands in
fallow impactas a containment event (with Impact tracking enabled). The gate script's version floor moves to 2.85.0 to match; older binaries onPATHget an explicit upgrade block instead of a silent pass-through. - Impact reports its value once a week. With tracking enabled and non-zero results,
next_steps[]carries an at-most-weeklyimpact-reportstep with the real counters (commits contained at the gate, findings resolved), and barefallowprints a matching one-lineImpact:summary. Zero results never surface, and CI never sees the digest. - Opt-in prompts can tell "asked and declined" from "never asked".
fallow telemetry statusandfallow impact statusexpose anexplicit_decisionfield set only by an explicit enable or disable, so agents offer each opt-in exactly once and respect a "no" permanently.
Analysis
- Bare
fallowaccepts Istanbul coverage inputs for the embedded health pass.--coverage/--coverage-root,FALLOW_COVERAGE/FALLOW_COVERAGE_ROOT, andhealth.coverage/health.coverageRootnow reach the combined default command, sofallow --format jsonuses the same exact CRAP scoring path asfallow health. The GitHub Action and GitLab CI default runs forward their coverage inputs too. Thanks @stieglma for the follow-up. (Refs #300.) - Opt-in telemetry can count installs instead of runs. When enabled, fallow keeps one anonymous, random install token (never derived from machine, user, repository, or path data), sent only as a private transport header for server-side grouping and deleted on
fallow telemetry disable. The spooled events themselves still carry no identifiers.
Bug fixes
- Angular template scanning no longer panics on a backslash before a multi-byte character. The quoted-attribute scanner could land mid-character and panic with "byte index N is not a char boundary"; it now advances over one full UTF-8 character. Thanks @shawnrice for the report and the patch in #1202. (Closes #1201.)
Full Changelog: v2.93.0...v2.94.0