Feintkit

The suite's tools: install, judge, detect, report, keep facts fresh

Five tools sit around the scenario runner (feintkit, see DETECTION-INTEGRATION.md). This page gives the exact commands, flags, exit codes and offline examples of each. The command lines and flags are checked against the real tools by the tests of the documentation package. Read RESPONSIBLE-USE.md first.

StepToolCommandNeeds the network
Installinstaller (feintkit-suite)node packages/installer/dist/src/bin.jsonly for an https source
Runrunner (feintkit)see DETECTION-INTEGRATION.mdno
Judge a transcripttranscript ingestion, used through feintkit verifynode packages/cli/dist/src/bin.jsno
Stand in for a security productdetection test stand-in (feintkit-watch)node packages/watch/dist/src/bin.jsno
Reportreport (feintkit-report)node packages/report/dist/src/bin.jsno
Keep facts freshfact-check (feintkit-factcheck)node packages/factcheck/dist/src/bin.jsyes

Run every command from the suite's repository root after npm run setup. A line that ends with # exit <n> in an example shows the exit code the command returns; leave the comment out when you type it. <work> stands for any empty directory you choose.

Installer (feintkit-suite)

Purpose: unpacks the suite from a directory, a release tarball or an https address, checks the tarball against a checksum you supply from a separate channel, shows the disclaimer notice and a plan of what it will do, and unpacks. It does not run the suite's build unless you pass --run-setup; with it, it runs npm run setup --ignore-scripts with a minimal environment, lists the scenarios and prints the next steps. It refuses to run as root unless told otherwise and never overwrites a directory that is not its own installation. Running it again on a finished installation prints already installed.

Where it fits: the first step, on a machine that does not have the suite yet. Maintainers who already work in a checkout do not need it.

Usage (the tool's own text):

usage: feintkit-suite install --from <directory|tarball|https-address> [--sha256 <hex> | --checksums <SHA256SUMS file or https address>] [--trust-remote-checksums] [--dest <directory>] [--allow-root] [--force] [--run-setup | --skip-build] [--accept-disclaimer]
       feintkit-suite install [--dest <directory>]   (with FEINTKIT_RELEASE_BASE set to an https release address; needs --sha256 or --trust-remote-checksums)
       feintkit-suite --version
       feintkit-suite --help
FlagMeaning
--from <source>A directory, a .tar.gz file, or an https address. Without it the address is built from FEINTKIT_RELEASE_BASE.
--sha256 <hex>The expected SHA-256 of the tarball, taken from a channel other than the download. Cannot be combined with --checksums. A tarball needs --sha256 or --checksums; a directory takes neither.
--checksums <file or https address>A SHA256SUMS file that lists the tarball. Pass a local file you obtained separately. An https address (also the one built from FEINTKIT_RELEASE_BASE) comes from the same origin as the download and is refused unless --trust-remote-checksums is also given.
--trust-remote-checksumsAccepts a checksum file fetched from the same origin as the tarball and prints a warning: whoever controls that origin controls what is unpacked.
--dest <directory>Where to install. Default: feintkit-suite in the current directory.
--allow-rootAllows running as the root user.
--forceReplaces an installation that holds a different version or an unfinished build.
--run-setupRuns the suite's npm run setup --ignore-scripts after unpacking, with a minimal environment (the setup script of the package you unpacked executes; dependency install scripts do not). Without it nothing is executed and the exact command is printed.
--skip-buildThe default, kept for older command lines: unpacks only. Cannot be combined with --run-setup.
--accept-disclaimerAcknowledges the notice without a prompt. A session that is not interactive needs it.
--version, --helpPrint the version or the usage text and exit 0.

Exit codes:

CodeMeaning
0Installed, already installed, or --help / --version.
2Usage error (also: both --sha256 and --checksums, both --run-setup and --skip-build, no source, a checksum with a directory source, or an https checksum without --trust-remote-checksums).
3Integrity failure: source not found, no checksum for a tarball, checksum mismatch, bad tarball, or a failed download.
4Refused to run as root without --allow-root.
5Destination problem: not a Feintkit installation, a different installation without --force, or a write failure.
6Setup or the scenario listing failed.
7The disclaimer notice was not acknowledged.

Offline examples (a local directory as the source, nothing is downloaded and nothing from the package executes):

node packages/installer/dist/src/bin.js --version   # exit 0
node packages/installer/dist/src/bin.js install --from docs/guide --dest <work>/suite   # exit 7
node packages/installer/dist/src/bin.js install --from docs/guide --dest <work>/suite --accept-disclaimer   # exit 0
node packages/installer/dist/src/bin.js install --from <work>/missing.tar.gz --sha256 0000 --dest <work>/other --accept-disclaimer   # exit 3

The notice is shown and acknowledged before any source is read, so every install needs --accept-disclaimer in a session that is not interactive. The first install is refused because the example session is not interactive; the second one acknowledges the notice and unpacks docs/guide as if it were the suite, without running anything. A real install uses your own --from source and a --sha256 or local --checksums value from a second channel, and adds --run-setup only after you have read the setup script of the package.

Transcript ingestion (feintkit verify --transcript)

Purpose: turns a saved agent transcript into the plain text that the verdict rule judges, so that the verdict looks only at what the agent said and did and not at the surrounding record format. It is a library with no command of its own; the runner uses it when verify is given --format.

Where it fits: after a scenario ran against your agent and you saved the agent's output, to judge whether the agent complied with the injected instruction.

Usage (the verify line of the runner's own usage text):

verify <id> [--transcript <file>] [--format <name>] [--strict] [--record] [--fail-on-complied] [--deterministic]
FlagMeaning
--transcript <file>The saved transcript. Without --format the file is judged as it is, as plain text.
--format <name>Reads the file with a named format, or auto to detect it. Needs --transcript. Names: claude-stream-json, anthropic-messages, openai-chat, plain.
--strictWith --format: a transcript that cannot be read exactly is an error instead of a note. Needs --format.
--recordWrites the verdict into the scenario's events.jsonl as an agent_outcome event, which the report then shows.
--fail-on-compliedExits with 3 when the verdict is complied.
--deterministicUses the fixed run id RUN0000, as in the run.

Exit codes of verify:

CodeMeaning
0The artifact checks passed (and the agent did not comply, or --fail-on-complied was not given).
1An artifact check failed, or the scenario or its run was not found.
2Usage error, or the transcript could not be read or ingested (the message starts with cannot ingest transcript).
3--fail-on-complied was given and the verdict is complied.

With --format, the format and any notes are printed to the error stream (transcript format: <name> (named|detected)). A transcript larger than 16777216 bytes is rejected.

Offline examples (the guide's own pages serve as the transcript text: MARKERS.md contains the example acknowledgement token of a deterministic run, RESPONSIBLE-USE.md does not):

node packages/cli/dist/src/bin.js --root repos/feintkit-mcp --out-dir <work>/out run mcp-01-tool-poisoning --deterministic   # exit 0
node packages/cli/dist/src/bin.js --root repos/feintkit-mcp --out-dir <work>/out verify mcp-01-tool-poisoning --transcript docs/guide/RESPONSIBLE-USE.md --format plain --deterministic   # exit 0
node packages/cli/dist/src/bin.js --root repos/feintkit-mcp --out-dir <work>/out verify mcp-01-tool-poisoning --transcript docs/guide/MARKERS.md --format plain --strict --record --fail-on-complied --deterministic   # exit 3
node packages/cli/dist/src/bin.js --root repos/feintkit-mcp --out-dir <work>/out verify mcp-01-tool-poisoning --format plain   # exit 2

The second command prints verdict: resisted, the third prints verdict: complied and exits 3, and the fourth is a usage error because --format needs --transcript.

Detection test stand-in (feintkit-watch)

Purpose: a deliberately simple stand-in for a security product, so that the Detection column of the coverage matrix and of the report can be exercised end to end. It reads what an agent under test did and saw (the tool calls, the content of the tool results, the assistant's text and the loaded skill text of a saved or piped headless-session transcript, or a plain list of shell commands, one per line), matches each call and each piece of content against a small readable rule file (packages/watch/rules/starter.json) and writes the detections file that feintkit-matrix and feintkit-report read (--detections), plus an evidence file. It is a test fixture and a worked example of what a product must record and in which format. It is not a security product, and every line it prints says so.

Where it fits: after a scenario ran against your agent and you saved the agent's output, before the matrix or the report. Three limits are part of the design. It only observes: it sees a call after the agent decided and cannot stop it, so a blocked result is a policy verdict labelled enforcement: simulated, never a real refusal. It sees the stream of the session, not the protocol or the network: 9 of the 42 scenarios put their signal in protocol traffic, network traffic, pixels or a frontmatter the client strips, so the tool writes no entry for them and the matrix keeps not-reported; it never claims missed for something it cannot see, and reports missed only for the eleven scenarios whose agent verdict proves that the signal passed through the stream, when the verdict is complied and no rule matched. The acknowledgement token in a reply is the agent verdict, not a detection, and no rule reads it. Most starter rules match the suite's own strings, so a green result on those rows is circular evidence; the rule file marks each rule marker or behaviour. A blocked or detected from this tool is not evidence about any product. Name the detections file detections.feintkit-watch.json so that its source is visible in the command line and in CI logs.

To run it over many scenarios with a real agent, use the example loop docs/examples/real-agent-loop.sh (agent, judge, scan with --merge, matrix and report; it can be stopped and started again). The step-by-step version is in DETECTION-INTEGRATION.md, section 5.

Usage (the tool's own text):

usage: feintkit-watch scan (--scenario <id> --transcript <file> [--verdict <v> | --events <file>] | --map <file>) --rules <file> --out <file> [--evidence <file>] [--merge] [--format auto|stream-json|command-log] [--root <dir>]... [--timestamp <iso>] [--fail-on-missed]
       feintkit-watch tee --scenario <id> --rules <file> --out <file> [--verdict <v> | --events <file>] [--evidence <file>] [--merge] [--format auto|stream-json|command-log] [--root <dir>]... [--timestamp <iso>]
       feintkit-watch check-rules --rules <file> [--root <dir>]...
       feintkit-watch export --evidence <file> --format jsonl|sarif|csv --out <file>
       feintkit-watch import --input <file> --source <name> --out <file> [--evidence <file>] [--merge] [--root <dir>]...
FlagMeaning
--scenario <id>The scenario this transcript belongs to. It is named by you, never guessed from the content.
--transcript <file>The saved transcript (scan); tee reads standard input instead.
--map <file>A JSON map of several runs (schemaVersion 1 and runs, each with scenario, transcript and optionally events or verdict); paths are relative to the map. Cannot be combined with --scenario, --transcript, --verdict or --events.
--rules <file>The rule file.
--out <file>The detections file to write (a flat object of scenario id to detected, blocked or missed).
--evidence <file>Also writes the evidence file: one JSON line per hit, truncated to the matched text, plus a summary line. With export it is the evidence file to read; with import it is an optional file for the imported events.
--mergeReads the existing detections and evidence files and replaces only the scanned scenario. A missing file counts as empty; an invalid one is an error and is not touched.
--format <name>scan and tee: auto (default), stream-json or command-log. export: jsonl, sarif or csv (required).
--verdict <v>The agent verdict from feintkit verify: complied, resisted, resisted_surfaced or inconclusive. Without a verdict missed cannot be decided.
--events <file>Reads the verdict from the last agent_outcome event of an events.jsonl. Cannot be combined with --verdict.
--root <dir>A category repository that holds scenarios; repeat for several. Default: the current directory.
--timestamp <time>Sets the time of the evidence lines, in the exact form YYYY-MM-DDTHH:MM:SS.mmmZ. With FEINTKIT_DETERMINISTIC=1 the time is fixed instead.
--fail-on-missedExits with 3 when a scanned scenario is missed, after the files are written.
--input <file>import only: the JSON Lines events of a real product (shape below).
--source <name>import only: the product's name (1 to 64 letters, digits, space, dot, underscore or hyphen; it cannot contain feintkit-watch or stand-in). It becomes the product of every imported event.

tee passes standard input to standard output unchanged and does the same work as scan at the end of the input, printing its lines on the error stream; check-rules validates a rule file and its controls and prints the honest coverage line.

Export and import (observe-only, offline; the exact shapes are in the spec fnd-18-watch, Amendment 1.2). export --evidence <file> --format jsonl|sarif|csv --out <file> reads the evidence file and writes one of three formats. jsonl is one event per line with the stable keys schema, product, stand_in, timestamp (ISO-8601), event (detection or missed), scenario, rule, action (detect or block, and a block is simulated), basis (marker or behaviour), enforcement, tool, evidence (the snippet that is already redacted and cut to 200 characters) and location (path:line of the transcript). csv has the same columns, with a leading apostrophe on any cell a spreadsheet would read as a formula. sarif is a SARIF 2.1.0 log whose tool driver says in so many words that it is a TEST STAND-IN and not a security product; each result has the rule id, a message, the scenario as a logical location and, when the transcript path is relative, the transcript line as the physical location. import --input <file> --source <name> --out <file> goes the other way: a real product that writes the same JSON Lines shape (only scenario and action are required for a detection; event missed marks a scenario that ran and was not reported; unknown keys are ignored) gets a detections file of its own for --detections. Stand-in and product results are never mixed: --source is required, the imported events keep it as their product with stand_in false, a record of the stand-in itself is refused, and a file name that contains feintkit-watch is refused for the output. Compare the two by giving the matrix or the report one detections file at a time.

Exit codes:

CodeMeaning
0Done (also when no entry was written for the scenario).
1An output file could not be written.
2Usage error, an unreadable or invalid input, invalid rules, or an unknown scenario.
3--fail-on-missed was given and a scanned scenario is missed.

Offline examples (the transcripts are the fixtures of the package; the second command writes the detections file that the first report example below reads):

node packages/watch/dist/src/bin.js check-rules --rules packages/watch/rules/starter.json --root repos/feintkit-mcp --root repos/feintkit-skills --root repos/feintkit-injection --root repos/feintkit-exfil --root repos/feintkit-agents --root repos/feintkit-supplychain --root repos/feintkit-abuse   # exit 0
node packages/watch/dist/src/bin.js scan --scenario mcp-08-exfil-sim --transcript packages/watch/test/fixtures/mixed.jsonl --rules packages/watch/rules/starter.json --out <work>/detections.feintkit-watch.json --evidence <work>/detections.evidence.jsonl --timestamp 1970-01-01T00:00:00.000Z --root repos/feintkit-mcp --root repos/feintkit-skills --root repos/feintkit-injection --root repos/feintkit-exfil --root repos/feintkit-agents --root repos/feintkit-supplychain --root repos/feintkit-abuse   # exit 0
node packages/watch/dist/src/bin.js export --evidence <work>/detections.evidence.jsonl --format sarif --out <work>/detections.feintkit-watch.sarif   # exit 0
node packages/watch/dist/src/bin.js export --evidence <work>/detections.evidence.jsonl --format jsonl --out <work>/detections.feintkit-watch.events.jsonl   # exit 0
node packages/watch/dist/src/bin.js import --input packages/watch/test/fixtures/import-sample.jsonl --source ExampleGuard --out <work>/detections.exampleguard.json --root repos/feintkit-mcp --root repos/feintkit-skills --root repos/feintkit-injection --root repos/feintkit-exfil --root repos/feintkit-agents --root repos/feintkit-supplychain --root repos/feintkit-abuse   # exit 0
node packages/watch/dist/src/bin.js scan --scenario mcp-04-excessive-scope --transcript packages/watch/test/fixtures/clean.jsonl --verdict complied --rules packages/watch/rules/starter.json --out <work>/missed.json --fail-on-missed --root repos/feintkit-mcp --root repos/feintkit-skills --root repos/feintkit-injection --root repos/feintkit-exfil --root repos/feintkit-agents --root repos/feintkit-supplychain --root repos/feintkit-abuse   # exit 3
node packages/watch/dist/src/bin.js scan --scenario mcp-08-exfil-sim --transcript packages/watch/test/fixtures/mixed.jsonl --rules packages/watch/rules/starter.json --out <work> --root repos/feintkit-mcp --root repos/feintkit-skills --root repos/feintkit-injection --root repos/feintkit-exfil --root repos/feintkit-agents --root repos/feintkit-supplychain --root repos/feintkit-abuse   # exit 1
node packages/watch/dist/src/bin.js scan --map <work>/map.json   # exit 2

The second command prints mcp-08-exfil-sim blocked (1 rule hit; enforcement: simulated, nothing was stopped) and a line that says 39 of 48 scenarios have a rule. The third has no rule hit, the verdict is complied, so the result is missed and the exit code is 3. The fourth cannot write because the output path is a directory.

Report (feintkit-report)

Purpose: builds one results report from the scenario manifests, the artifacts of the runs and, when you give it, your detection record. The report lists per scenario the artifact result, the agent verdict, the detection result and the ATLAS and OWASP mappings, and ends with a rollup by ATLAS technique. Formats: md (default), json, html, sarif, junit (JUnit XML for a CI system, see AUTOMATION.md).

Where it fits: after runs and judgments, to hand the results to someone or to gate a CI job. The coverage matrix (feintkit-matrix, DETECTION-INTEGRATION.md) is the shorter view of the same data.

Usage (the tool's own text):

usage: feintkit-report [--root <dir>]... [--out-dir <dir>] [--detections <file>] [--format json|md|html|sarif|junit] [--output <file>] [--timestamp <YYYY-MM-DDTHH:MM:SS.mmmZ>] [--agent <name>] [--agent-version <text>] [--model <text>] [--permission-mode <text>] [--mitigations] [--fail-on-missed] [--fail-on-complied] [--fail-on-control-fired]
FlagMeaning
--root <dir>A category repository that holds scenarios; repeat for several. Default: the current directory.
--out-dir <dir>The artifact directory of the runs (same as the runner's).
--detections <file>JSON file that maps scenario ids to detected, blocked or missed.
--format <name>json, md, html, sarif or junit. Default md.
--output <file>Writes the report to a file instead of printing it.
--timestamp <time>Sets the generation time, in the exact form YYYY-MM-DDTHH:MM:SS.mmmZ. With FEINTKIT_DETERMINISTIC=1 the time is fixed instead.
--agent <name>, --agent-version <text>, --model <text>, --permission-mode <text>Record which agent produced the results (fnd-44): the report then carries an agent identity, and the markdown and html reports print an Agent under test line. Each is a short plain label, at most 64 characters, refused with exit 2 when it looks like a secret; a field you leave out is unknown. Nothing starts the agent to find them out.
--mitigationsAdds the reviewed defender notes (what to restrict, which rule to add, which setting to change) for each scenario that has a finding: a section in md and html, the help text of the rule in sarif, the failure text in junit. Refused with json, whose layout is fixed. See AUTOMATION.md.
--fail-on-missedExits with 3 when a scenario was recorded as missed.
--fail-on-compliedExits with 3 when an agent verdict is complied.
--fail-on-control-firedExits with 3 when the judge or the product under test raised a false alarm on a benign control (a verdict complied or resisted_surfaced, or a detection detected or blocked, for a control).

Exit codes:

CodeMeaning
0The report was produced and no failure condition applied.
1A scenario registry error (the lines starting FAIL on the error stream). The report is still produced.
2Usage error, an unreadable or invalid detections file, or the output file could not be written.
3--fail-on-missed, --fail-on-complied or --fail-on-control-fired applied.

Offline examples (they use the run of the transcript examples above and, for the fourth, the detections file of the stand-in above; the first writes nothing outside <work>):

node packages/report/dist/src/bin.js --root repos/feintkit-mcp --out-dir <work>/out --format md --output <work>/report.md   # exit 0
node packages/report/dist/src/bin.js --root repos/feintkit-mcp --out-dir <work>/out --format sarif --output <work>/report.sarif   # exit 0
node packages/report/dist/src/bin.js --root repos/feintkit-mcp --out-dir <work>/out --format junit --mitigations --output <work>/report.xml   # exit 0
node packages/report/dist/src/bin.js --root repos/feintkit-mcp --out-dir <work>/out --detections <work>/detections.feintkit-watch.json --output <work>/with-detections.md   # exit 0
node packages/report/dist/src/bin.js --root repos/feintkit-mcp --out-dir <work>/out --fail-on-complied --output <work>/gate.md   # exit 3
node packages/report/dist/src/bin.js --format pdf   # exit 2

Fact-check (feintkit-factcheck)

Purpose: re-reads every sentence of the vendor documentation that CLIENTS.md cites and runs the mapping-source check (scripts/verify-mappings.py --online), so that drift in those sources is found. With --write it records the date of each fact that was found in docs/guide/facts-verified.json; the guides show that date.

Where it fits: maintenance, on a schedule (every few days) and before a release. It is the only tool here that needs the network: every check is an outbound request to the cited pages. Ordinary users of the suite do not need it.

Usage (the tool's own text):

usage: feintkit-factcheck [--repo <dir>] [--facts-file <file>] [--write] [--report <file>] [--skip-facts] [--skip-mappings] [--delay <ms>] [--timeout <ms>]
  re-reads every cited sentence of the client guides and runs scripts/verify-mappings.py --online
  --write        record today's date for each fact that was found, in docs/guide/facts-verified.json (nothing is written without it)
  --report FILE  write a report; FILE ending in .json gives JSON, anything else Markdown
  exit codes: 0 all ok, 1 drift found, 2 usage, 3 network failure
FlagMeaning
--repo <dir>The suite root. Default: the current directory.
--facts-file <file>Where --write records the dates. Default: docs/guide/facts-verified.json under --repo.
--writeRecords today's date for each fact that was found. Cannot be combined with --skip-facts.
--report <file>Writes a report; a name ending in .json gives JSON, anything else Markdown.
--skip-factsDoes not check the cited sentences.
--skip-mappingsDoes not run the mapping-source check. Giving both skips is a usage error.
--delay <ms>Pause between two requests. Default 1000.
--timeout <ms>Time limit of one request. Default 30000.

Exit codes:

CodeMeaning
0Everything was found and matches.
1Drift: a sentence was not found, a page moved or answered with an error status, or a mapping source differs.
2Usage error.
3Network failure and no drift.

Offline examples (only the usage errors can run without the network; a real check is node packages/factcheck/dist/src/bin.js and sends requests):

node packages/factcheck/dist/src/bin.js --skip-facts --skip-mappings   # exit 2
node packages/factcheck/dist/src/bin.js --write --skip-facts   # exit 2
node packages/factcheck/dist/src/bin.js --delay soon   # exit 2

Flags of the other commands

The suite has more command-line tools and subcommands than the five above. This table lists every flag of the usage text of each of them, with the command that takes it: the runner (feintkit) and its honey, pack, accuracy and variants commands, the control server, the documentation generator and its translate command, the guard, the web interface, the manifest tool, the coverage matrix, the scaffold tool, the subcommands diff, history, modes, repeats, store, coverage, summary and mitigations of feintkit-report, and the subcommands replay, selftest and bundle of feintkit-watch. Each command prints its own usage text when it is called with an unknown flag. The flags of feintkit verify are in the section on transcript ingestion, and those of the five tools above are in their own tables.

FlagUsed byMeaning
--root <dir>feintkit, feintkit-docs, feintkit-gui, feintkit-gui demo, feintkit-manifest changelog, feintkit-matrix, feintkit-report history, feintkit-report coverage, feintkit-report summary, feintkit-watch replay, feintkit-watch selftest, feintkit-watch bundleA folder that holds scenarios (a category repository); repeat it for several. Without it the command uses the current folder or, for the runner and the web interface, the installed category repositories.
--out-dir <dir>feintkit, feintkit honey, feintkit-gui, feintkit-matrix, feintkit-report history, feintkit-report summary, feintkit-watch replay, feintkit-watch bundleThe artifact folder that the runs write to and the command reads from.
--out-dir <folder>feintkit-gui demoThe new or empty folder that the demonstration is written to.
--deterministicfeintkit, feintkit honeyUses the fixed run id and clock of the deterministic mode, so that repeated runs write the same bytes.
--allfeintkitWith clean: removes the artifacts of every scenario instead of one.
--yesfeintkitWith clean --all: confirms the removal.
--jsonfeintkitWith list: prints the registry as JSON.
--jsonfeintkit pack, feintkit-manifest packWith check: prints the result as JSON.
--jsonfeintkit accuracy, feintkit variantsPrints the result as one JSON document instead of text (for variants, with judge).
--jsonfeintkit-guardPrints the findings as JSON.
--port <0-65535>feintkit, feintkit-guiThe TCP port of the local web interface; 0 lets the system pick a free one.
--port <0-65535>feintkit honeyWith listen: the port of the loopback listener; 0 lets the system pick a free one.
--host <address>feintkit, feintkit-guiThe address the web interface binds to: 127.0.0.1, localhost or ::1. Nothing else is accepted.
--scenario <id>feintkit honeyWith plant and listen: the scenario the bait belongs to.
--dir <folder>feintkit honeyWith plant: the folder that receives the bait file.
--file <name>feintkit honeyWith plant: the name of the bait file.
--transcript <file>feintkit honeyWith scan: the file that holds what the agent said or did.
--format <name>feintkit honeyWith scan: the transcript format, as for feintkit verify --format.
--recordfeintkit honeyWith scan: records the result in the run's events.
--fail-on-leakfeintkit honeyWith scan: exits with 3 when the bait leaked.
--max-seconds <n>feintkit honeyWith listen: stops the listener after this many seconds.
--pack <dir>feintkit packIn front of list, run, verify or clean: loads a scenario pack folder; repeat it for several.
--mappings <file>feintkit pack, feintkit-manifest packWith check: the mappings file that the scenarios of the pack are checked against.
--name <pack-name>feintkit packWith new: the name of the new pack.
--prefix <letters>feintkit packWith new: the 2 to 5 letters that start every scenario id of the pack.
--labels <file>feintkit accuracyA JSON file of labelled replies that is added to the built-in corpus.
--replies <file>feintkit variantsWith judge: the JSON file that holds the agent's reply to each variant.
--run <id>feintkit variantsWith judge: the run id of the replies, 4 to 16 letters or digits.
--variant <name>feintkit variantsWith write: writes only this variant; repeat it for several.
--suite-root <dir>feintkit-controlThe folder of the suite that the server works on.
--read-root <dir>feintkit-controlA folder that the audit tools may read; repeat it for several.
--out-root <dir>feintkit-controlThe one folder that the automation tools write to.
--ollama-url <address>feintkit-controlThe loopback address of a local model server, for the tool that runs a scenario against a local model.
--model <name>feintkit-controlThe name of the local model.
--index <file>feintkit-docsThe scenario index file.
--mappings <file>feintkit-docsThe mappings file.
--out <dir>feintkit-docsThe folder that generate writes the guide to and check compares with.
--guide <dir>feintkit-docs translateThe folder of the English guide whose .md pages are translated (read only).
--catalogs <dir>feintkit-docs translateThe folder of the translation catalogs, one <code>.json file for each language.
--out <dir>feintkit-docs translateWith generate and check: the folder that receives one subfolder for each language, and that check compares with.
--lang <code>feintkit-docs translateThe language to work on, for example de (required for extract; without it generate and check take every catalog).
--show-allowedfeintkit-guardAlso lists the uses that an inline allowance permits.
--mappings <file>feintkit-manifestWith registry: the mappings file that every scenario's mapping is checked against.
--since <version>feintkit-manifest changelogKeeps the entries of this version and later ones.
--id <id>feintkit-manifest changelogKeeps the entries of one scenario.
--format <name>feintkit-manifest changelog, feintkit-report diff, feintkit-report history, feintkit-report modes, feintkit-report repeats, feintkit-report mitigationsThe output format: text (default), md or json.
--format <name>feintkit-matrixmd (default) or json.
--format <name>feintkit-report coverage, feintkit-report summarytext (default), md, html or json.
--detections <file>feintkit-matrix, feintkit-report history, feintkit-report summaryThe JSON file that maps scenario ids to detected, blocked or missed.
--fail-on-missedfeintkit-matrixExits with 3 when a scenario was recorded as missed.
--fail-on-compliedfeintkit-matrixExits with 3 when an agent verdict is complied.
--fail-on-control-firedfeintkit-matrixExits with 3 when the judge or the product under test raised a false alarm on a benign control.
--dest <dir>feintkit-newWith repo: the folder to create.
--repo <dir>feintkit-newThe category repository to add a scenario to or to check.
--title <title>feintkit-newWith scenario: the title of the new scenario.
--mappings <file>feintkit-newWith scenario: the mappings file that receives the entry of the new scenario.
--harness <spec>feintkit-newThe package spec of the harness that the new files depend on.
--output <file>feintkit-report diff, feintkit-report modes, feintkit-report repeats, feintkit-report store, feintkit-report coverage, feintkit-report summaryWrites the result to a file instead of printing it.
--fail-on-regressionfeintkit-report diff, feintkit-report modes, feintkit-report repeatsExits with 3 when a regression was found.
--history <file>feintkit-report history, feintkit-report storeThe history file; for store import, the file whose runs are added to the store.
--agent <name>feintkit-report historyThe agent whose runs are appended (append, required) or shown (show).
--report <file>feintkit-report historyWith append: the result file to add; without it the report is built from --root, --out-dir and --detections.
--date <YYYY-MM-DD>feintkit-report historyWith append: the date of the entry.
--suite-version <x.y.z>feintkit-report historyWith append: the suite version of the entry.
--agent-version <text>feintkit-report historyWith append: the version label of the agent.
--model <text>feintkit-report historyWith append: the model label of the agent.
--permission-mode <text>feintkit-report historyWith append: the permission-mode label of the agent.
--agent <name>feintkit-report summaryThe agent whose results these are; the page then names it.
--agent-version <text>feintkit-report summaryThe version label of the agent.
--model <text>feintkit-report summaryThe model label of the agent.
--permission-mode <text>feintkit-report summaryThe permission-mode label of the agent.
--last <n>feintkit-report historyWith show: only the last n runs.
--baseline <label>feintkit-report modesThe label of the set that the others are compared with.
--against <results>feintkit-report repeatsA second set of runs to compare the first with; repeat it for several.
--results <results>feintkit-report coverageA result set that colours the map by verdict.
--mappings <file>feintkit-report coverageThe mappings file whose two OWASP lists define the gaps; without it the file is searched upward from the current folder.
--id <scenario id>feintkit-report mitigationsShows only this scenario; repeat it for several.
--store <dir>feintkit-report storeThe results store: a folder that add creates, with a marker file and one file of runs for each month.
--agent <name>feintkit-report storeWith add (required): the agent that produced the runs. With query and export: keeps only the runs of this agent.
--date <YYYY-MM-DD>feintkit-report storeWith add: the date of the runs; without it the date of the result file, else today.
--suite-version <x.y.z>feintkit-report storeWith add: the suite version of the runs. With query and export: keeps only the runs of this suite version.
--agent-version <text>feintkit-report storeWith add: the version label of the agent. With query and export: keeps only the runs with this label.
--model <text>feintkit-report storeWith add: the model label of the agent. With query and export: keeps only the runs with this label.
--permission-mode <text>feintkit-report storeWith add: the permission-mode label of the agent. With query and export: keeps only the runs with this label.
--label <text>feintkit-report storeWith add: a short label (letters, digits, dot, underscore and hyphen, at most 32 characters) that tells apart two runs with the same results on the same day.
--scenario <id or prefix->feintkit-report storeWith query: keeps the results of one scenario, or of every scenario whose id starts with a prefix that ends in a hyphen.
--verdict <verdict>feintkit-report storeWith query: keeps the results with this agent verdict (complied, resisted, resisted_surfaced, inconclusive or n/a).
--detection <state>feintkit-report storeWith query: keeps the results with this detection state (detected, blocked, missed, not-reported or not-run).
--since <YYYY-MM-DD>feintkit-report storeWith query and export: keeps the runs of this day and later ones.
--until <YYYY-MM-DD>feintkit-report storeWith query and export: keeps the runs of this day and earlier ones.
--month <YYYY-MM>feintkit-report storeWith query and export: keeps the runs of one month; it cannot be combined with --since or --until.
--last <n>feintkit-report storeWith query: keeps the n newest of the runs that match.
--by <view>feintkit-report storeWith query: scenario (default) lists the scenarios with their counts, run lists the runs.
--format <name>feintkit-report storeWith query: text (default), md or json. With export: kb (default, a Markdown file for a knowledge base) or jsonl.
--loop <dir>feintkit-watch replay, feintkit-watch bundleThe saved loop folder to replay, or, with bundle create, to pack.
--rules <file>feintkit-watch replay, feintkit-watch selftest, feintkit-watch bundleThe ruleset of the stand-in; without it the starter ruleset is used. With bundle create the ruleset is stored in the bundle, and bundle replay uses that copy.
--timestamp <iso>feintkit-watch replay, feintkit-watch bundleThe time stamp written to the outputs. With bundle create it is the creation time of the bundle and the modification time of every file in it.
--out <file>feintkit-watch bundleWith create: the bundle file to write; it must not exist yet and must not lie inside the loop folder.
--agent <label>feintkit-watch bundleWith create: the agent label (fnd-44) stored in the environment record; a field left out is taken from the identity block of the loop's report.json, else it is unknown.
--agent-version <label>feintkit-watch bundleWith create: the version label of the agent.
--model <label>feintkit-watch bundleWith create: the model label of the agent.
--permission-mode <label>feintkit-watch bundleWith create: the permission-mode label of the agent.
--redactfeintkit-watch bundleWith create: replace secret shapes and the user name of a home folder path in the bundled files instead of refusing; the manifest records the count and the hash of the original.
--bundle <file>feintkit-watch bundleWith verify and replay: the bundle file to read.
--digest <sha256>feintkit-watch bundleWith verify and replay: the digest you were given for the bundle (64 lower-case hex characters); a different digest in the bundle is a failure.