Skip to content

Cheat Sheet

Copy-paste ready. Every command runs headless (no prompts, no TTY needed) unless marked Interactive. Agents: this page is the canonical scrape target. Section anchors match tool names.

Each tool block has three parts: drone profile (one-line role · classification · chain position), commands table (every canonical invocation), and terminal sample (Monokai-print of real output as the agent sees it).

⚠ MCP CALLERS — READ THIS FIRST

If you call fsuite tools through the MCP server, every call is sequential — the MCP protocol does not pipe. You’ll get correct results, but you’ll lose the parallelism that makes Unix pipes fast.

For full performance, install fsuite as a native CLI (Debian package or shell scripts) and pipe directly: fsearch -o paths ‘*.py’ | fmap -o json. You can keep fbash as your MCP entry point and have the agent call other fsuite tools through it via shell — that’s how you unlock combination calls instead of being trapped in sequential MCP.


fsUnified search orchestrator · the front door
RoleRECON
Chain position1 (entry)
Auto-routes tofsearch · fcontent · fmap
MCPstructured output
CallWhat it does
fs "authenticate"Unified search — scouts, finds, maps, returns ranked results in one call
fs "error handler" --scope '**/*.py'Narrow the search surface to a glob
fs "class AuthHandler" --intent symbolForce symbol-name intent over auto-detection
fs "TODO" --intent contentForce in-file text content intent
fs "*.log" --intent fileForce file-name pattern intent
fs "def authenticate" -o jsonJSON with ranked hits, tool breakdown, confidence
fs(teleport) · symbol intent · 328ms · ~80 tokens
 Now let me find the teleport code and the Telegram agent:
·
fs(teleport | path: “/home/user/Projects/nightfox/src” | intent: “symbol” | scope: “*.ts”)
└─ symbol (high) via fsearch  fcontent  fmap
explicit intent=symbol
50 candidates, 1 enriched, 328ms
·
nightfox/src/claude/command-parser.ts (1 matches)
50  · ‘/teleport’  // Move session to terminal (forked)
·
next  fread(path: “/home/user/…/command-parser.ts”, around: teleport)
·

ftreeTerritory scout · directory recon
RoleRECON
Chain position2 (scout)
Pipenot chainable (arg-based)
Outputpretty · paths · json
CommandWhat it does
ftree /projectTree view, depth 3, default excludes, 200-line cap
ftree --recon /projectRecon: per-dir item counts and sizes
ftree -L5 /project/srcDeeper tree (depth 5) of a subdir
ftree -o json /projectStructured JSON tree with metadata envelope
ftree -o paths /projectFlat file list, one per line
ftree --recon -o json /projectRecon JSON: per-dir inventory
ftree --snapshot /projectRecon inventory + tree excerpt in one output
ftree --snapshot -o json /projectSnapshot JSON: recon + tree, agent-ready
ftree --recon --hide-excluded /projectClean recon, no excluded summaries
ftree --include .git /projectShow .git even though normally ignored
ftree -I 'docs|*.md' /projectExclude additional patterns
ftree --no-default-ignore /projectDisable built-in ignore list
ftree --self-checkVerify tree availability

flsStructured directory listing · ls replacement with recon mode
RoleRECON
Chain positionspecialist
Pipenot chainable
Outputpretty · json
CommandWhat it does
fls /projectStructured listing with type, size, language hints
fls /project --reconAdds per-entry recon data — sizes + counts
fls /project -o jsonJSON for programmatic decisions
fls /project --depth 1Limit recursion depth
fls(/project/src/telegram) · recon mode
fls(“/home/user/Projects/nightfox/src/telegram” | mode: “recon”)
└─ Recon(/home/user/Projects/nightfox/src/telegram, depth=1)
7 entries (7 visible, 0 default-excluded)
·
message-sender.ts          —    17.9K
telegraph.ts               —    12K
terminal-renderer.ts       —    10.3K
markdown.ts                —    6.7K
terminal-settings.ts       —    2.8K
session-lane.ts            —    1.2K
deduplication.ts           —    1005
·

fsearchFilename / path search · fd-aware
RoleNARROW
Chain position3 (narrow files)
Pipeproducer (-o paths)
Outputpretty · paths · json
CommandWhat it does
fsearch '*.log' /var/logFind all .log files (pretty output)
fsearch log /var/logBare word log auto-expands to *.log
fsearch 'upscale*' /home/userFiles starting with upscale
fsearch '*progress*' /home/userFiles containing progress
fsearch --output paths '*.py' /projectOne path per line — pipe currency
fsearch --output json '*.conf' /etcJSON with total_found, results[], backend
fsearch --include 'src' --exclude '*test*' '*.py' /projectScope to source, skip tests
fsearch --max 10 '*.py' /projectLimit to first 10 results
fsearch --backend fd '*.rs' /srcForce fd backend (faster)
fsearch --self-checkShow available backends

fcontentBounded content search · token-capped ripgrep
RoleNARROW
Chain position3 (narrow content)
Pipeproducer + consumer
Outputpretty · paths · json
CommandWhat it does
fcontent "ERROR" /var/logSearch for ERROR inside files
fcontent "TODO" /projectFind every TODO in a project tree
fcontent --output paths "ERROR" /var/logOnly file paths that matched
fcontent --output json "ERROR" /var/logJSON with matches[], counts
fcontent -m 20 "debug" /projectCap output to 20 match lines
fcontent -n 50 "debug" /projectCap to 50 files searched
fcontent --rg-args "-i" "error" /var/logCase-insensitive
fcontent --rg-args "-w" "main" /projectWhole-word match

fmapSymbol cartography · the keystone — the gap native CLI doesn’t fill
RoleKEYSTONE
Chain position4 (bridge to read)
Pipeconsumer (stdin paths)
Languages50+
CommandWhat it does
fmap /projectMap all source files (pretty output)
fmap /project/src/auth.pyMap a single file
fmap -o json /projectJSON output with symbol metadata
fmap --name authenticate -o json /projectFilter by symbol-name match
fmap -o paths /projectFile paths that contain symbols
fmap -t function /projectFunctions only
fmap -t class /projectClasses only
fmap --no-imports /projectSkip import lines
fmap -L bash /project/scriptsForce language
fmap -m 50 /projectCap shown symbols
fsearch -o paths '*.py' /project | fmap -o jsonPipeline: find then map
fmap(reconciler.ts) · 27 symbols · typescript ~98K tokens saved vs cat
fmap(path: “/home/user/Projects/brane-code/src/ink/reconciler.ts”)
[ 27 symbols | typescript ]
3    import     import { appendFileSync } from ‘fs’
4    import     import createReconciler from ‘react-reconciler’
5    import     import { getYogaCounters } from ‘src/native-ts/yoga-layout/index’
24   import     import { Dispatcher } from ’./events/dispatcher.js’
28   import     import applyStyles, { type Styles, type TextStyles } from ’./styles’
60   type       type AnyObject = Record<string, unknown>
92   function   const diff = (before: AnyObject, after: AnyObject): AnyObject
95   function   const cleanupYogaNode = (node: DOMElement | TextNode): void
114  function   function setEventHandler(node: DOMElement, key: string, value: unknown)
158  function   export function getOwnerChain(fiber: unknown): string[] {
191  constant   const COMMIT_LOG = process.env.CLAUDE_CODE_COMMIT_LOG
205  export     export function recordYogaMs(ms: number): void
217  function   export function resetProfileCounters(): void
·

freadBudgeted reading · symbol & line-range resolution · PDF + image media
RoleREAD
Chain position5 (read)
Pipeconsumer (—from-stdin)
MediaPDF · image · diff
CommandWhat it does
fread /path/to/file.pyRead a file with default caps
fread /path/to/file.py -r 120:220Precise inclusive line range
fread /path/to/file.py --head 50First 50 lines
fread /path/to/file.py --tail 40Last 40 lines
fread /path/to/file.py --around-line 150 -B 5 -A 15Context around line 150
fread /path/to/file.py --around "def authenticate" -B 5 -A 20Context around literal pattern
fread /path/to/file.py --symbol authenticate -o jsonOne exact symbol block
fread /project/src --symbol authenticate -o jsonResolve & read symbol from a directory
fread /path/to/file.py --max-lines 80 --max-bytes 12000Hard output budgets
fread /path/to/file.py --token-budget 2000 -o jsonCap by estimated tokens
fsearch -o paths '*.py' /p | fread --from-stdin --stdin-format=paths --max-files 5Read first 5 from a pipeline
git diff | fread --from-stdin --stdin-format=unified-diff -B 3 -A 10Read context around hunks
fread screenshot.pngRead image with auto-resize
fread invoice.pdfExtract PDF text
fread paper.pdf --render --pages 1:5Rasterize PDF pages
fread big.pdf --meta-onlyPDF metadata only
fread(—around teleport) · 66 lines · -829 tokens vs full read
fread(/home/user/Projects/nightfox/src/discord/commands/teleport.ts | head: 80)
[ 66 lines | -829 tokens ]
1  import { ChatInputCommandInteraction } from ‘discord.js’;
2  import { discordChatId } from ’../id-mapper.js’;
3  import { sessionManager } from ’../../claude/session-manager.js’;
4  import { config } from ’../../config.js’;
5  import path from ‘path’;
6
7  export async function handleTeleport(interaction: ChatInputCommandInteraction): Promise<void> {
8     const chatId = discordChatId(interaction.user.id);
9
10 // Try active in-memory session first, then fall back to most recent from history
11 let session = sessionManager.getSession(chatId);
12 if (!session) {
13    session = sessionManager.resumeLastSession(chatId) ?? undefined;
14 }
·

feditSurgical patches · line-range · symbol-scoped · anchor-based
RolePATCH
Chain position7 (act)
Defaultdry-run (CLI)
Guard—expect · —expect-sha256
CommandWhat it does
fedit /path/file.py --replace 'old' --with 'new'Preview exact replacement (dry-run)
fedit /path/file.py --replace 'old' --with 'new' --applyApply the replacement
fedit /path/file.py --lines 71:73 --with " return deny()\n"Replace a specific line range
fedit /path/file.py --after 'def authenticate(user):' --content-file patch.txtInsert after anchor
fedit /path/file.py --before 'return True' --stdin --applyInsert from stdin before anchor
fedit /path/file.py --symbol authenticate --replace 'X' --with 'Y'Symbol-scoped patch
fedit /path/file.py --function authenticate --replace 'X' --with 'Y'Function-scoped (no —symbol-type needed)
fedit /path/file.py --class AuthHandler --after '...' --with '...'Class-block scoped
printf '/a.py\n/b.py\n' | fedit --targets-file - --targets-format paths --replace 'x' --with 'y'Batch from stdin
fedit --targets-file map.json --targets-format fmap-json --function auth --replace 'X' --with 'Y' --applySymbol-scoped batch via fmap JSON
fedit /path/file.py --expect 'def authenticate' --replace 'X' --with 'Y'Require expected text first
fedit /path/file.py --expect-sha256 HASH --replace 'X' --with 'Y' --applyGuard with content hash
fedit --create /path/new.py --content-file body.txt --applyCreate new file from payload
fedit --replace-file /path/file.py --content-file rewrite.txt --applyReplace entire file

fwriteAtomic file creation · MCP-only
RolePATCH
AvailableMCP only (no CLI)
Use forcreate or full rewrite
Use fedit forsurgical changes

MCP-only tool. Not available as a CLI binary. Call via the fsuite MCP server. Writes or overwrites a file from a string payload. Use fedit for surgical patches; fwrite for complete file creation or full rewrites.


fbashToken-budgeted shell · classification · session state · MCP entry point
RoleEXEC
Chain positionspecialist
MCP advantageshells out to all CLI tools
Outputbudgeted · classified

The MCP escape hatch. When you’re calling fsuite through MCP and feel sequential limits biting, route through fbash and run real Unix pipes inside it: fbash "fsearch -o paths '*.py' src | fmap -o json". You get pipe-speed inside an MCP-friendly tool.


fcaseInvestigation continuity ledger · cross-session state machine
RoleSTATE
Chain positionwraps every chain
Lifecycleinit → note → handoff → resolve
Storage~/.fsuite/fcase.db
CommandWhat it does
fcase init auth-seam --goal "Trace authenticate flow"Create a new investigation
fcase list -o jsonList known cases
fcase status auth-seam -o jsonRead current case state
fcase note auth-seam --body "Focused on denial branch"Append a note
fcase target add auth-seam --path /p/src/auth.py --symbol authenticate --symbol-type function --state activeMark a seam as active
fcase evidence auth-seam --tool fread --path /p --lines 40:72 --summary "..."Store structured proof
fcase hypothesis add auth-seam --body "Cleanup bug in cancellation"Track a hypothesis
fcase reject auth-seam --hypothesis-id 1 --reason "..."Reject a hypothesis
fmap -o json /p | fcase target import auth-seamImport mapped symbols as targets
fread -o json /p --around "def auth" -A 20 | fcase evidence import auth-seamImport bounded reads
fcase next auth-seam --body "Patch denial branch next"Update next best move
fcase handoff auth-seam -o jsonEmit handoff packet
fcase export auth-seam -o jsonExport full envelope

freplayDerivation chain replay · deterministic rerun
RoleREPLAY
Chain positionspecialist
Pairs withfcase
Use forpost-mortems · regression
CommandWhat it does
freplay record auth-seam --purpose "Traced denial" -- fread /p --around 'def auth'Record a derivation step
freplay record auth-seam -- fcontent -o paths "auth" srcRecord without purpose annotation
freplay show auth-seamShow full replay chain
freplay show auth-seam -o jsonMachine-readable chain w/ timestamps
freplay listList cases with replay chains
freplay list -o jsonJSON list with step counts

fprobeBinary / bundle inspection + patching · text tools can’t reach
RoleBINARY
Chain positionspecialist branch
Use whentarget is compiled or obfuscated
Subcommandsstrings · scan · window · patch
CommandWhat it does
fprobe strings /path/to/binaryExtract printable strings
fprobe strings /path --min-len 8Strings 8+ chars
fprobe strings /path --filter "http"Strings containing literal substring
fprobe scan /path --pattern "userFacingName"Find literal byte pattern (offset + context)
fprobe scan /path --pattern "x" --context 200 -o jsonJSON with offset, hex, surrounding bytes
fprobe window /path --offset 0x100 --after 256Read 256 bytes after offset
fprobe window /path --offset 0x100 --before 64 --after 256Read bytes before + after
fprobe window /path --offset 0x100 --after 256 --decode hexHex dump

fmetricsTelemetry analytics · tool-chain prediction
RoleLEARN
Chain positionspecialist
StorageSQLite
Use forpredict best next step
CommandWhat it does
fmetrics importImport telemetry.jsonl into SQLite
fmetrics statsAggregate runtime + reliability dashboard
fmetrics stats -o jsonMachine-readable stats
fmetrics history --tool ftree --limit 10Recent runs for one tool
fmetrics history --project MyAppFilter by project
fmetrics combos --project fsuiteEvidence-backed combo patterns
fmetrics combos --starts-with ftree,fsearch --contains fmap -o jsonFilter combo analytics
fmetrics recommend --after ftree,fsearch --project fsuiteSuggest the strongest next step
fmetrics predict /projectEstimate runtimes
fmetrics profileShow machine profile
fmetrics clean --days 30Prune old telemetry

WorkflowCommand chain
Full scoutftree --snapshot -o json /project
Find + mapfsearch -o paths '*.py' /p | fmap -o json
Find + grepfsearch -o paths '*.log' /var/log | fcontent "ERROR"
Find + readfsearch -o paths '*.py' /p | fread --from-stdin --stdin-format=paths --max-files 5 -o json
Map + readfmap --name auth -o json /p | fread --symbol auth -o json
Binary reconfprobe scan /bin && fprobe strings /bin --filter "http"
Investigationfcase init seam --goal "..." && fmap -o json /p | fcase target import seam && fcase handoff seam -o json
Batch patchfsearch -o paths '*.py' /p | fedit --targets-file - --targets-format paths --replace 'x' --with 'y' --apply
Git diff readgit diff | fread --from-stdin --stdin-format=unified-diff -o json

ModePipe behaviorPerformance
CLI (Debian / shell)Real Unix pipes, parallel where possibleFastest
CLI inside fbash (MCP)Real pipes inside the budgeted shellFast — MCP escape hatch
Pure MCP tool callsSequential, agent constructs chain by handCorrect, slower

The MCP adapter handles -o json automatically — agents always get structured JSON back regardless of mode.