Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx agentmods add commands/freshworks-developers/fw-dev-tools/fw-setup-uninstallgit clone --depth 1 https://github.com/freshworks-developers/fw-dev-toolsWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/commands/freshworks-developers/fw-dev-tools/fw-setup-uninstall)<a href="https://agentmods.dev/commands/freshworks-developers/fw-dev-tools/fw-setup-uninstall"><img src="https://agentmods.dev/badge/commands/freshworks-developers/fw-dev-tools/fw-setup-uninstall.svg" alt="Measured on agentmods" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5 | $0.00024 | $0.03454 |
| Opus 5 | $0.00012 | $0.01727 |
| Sonnet 5 | $0.00005 | $0.00691 |
| Haiku 4.5 | $0.00002 | $0.00345 |
Grade C, and why
fw-setup-uninstall scanned grade C with 1 finding against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 4d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Recursive force deletehighDestructive command
rm -rf with a variable or a broad path is one typo away from removing the wrong tree.
rm -rf ~/.fdk How it starts
The opening of the file, as written. The whole thing — 323 lines — stays where its author put it; the contents beside it link to each section on GitHub.
FDK setup — uninstall (/fw-setup-uninstall)
/fw-setup uninstall: removes FDK and ~/.fdk cache only** — **Node.js and nvm stay installed**. There is **no** **uninstall --all` in this skill (no automated removal of nvm / all Node versions).
Execution
Task({
subagent_type: "shell",
model: "fast",
description: "Uninstall FDK completely",
prompt: `
Completely remove FDK from ALL Node versions and all artifacts.
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" 2>/dev/null || true
DETECTION:
echo "=== Current FDK Status ==="
fdk version 2>/dev/null || echo "Not installed on current Node"
ls ~/.fdk 2>/dev/null || echo "No ~/.fdk cache"
# Check if FDK exists on multiple Node versions
echo ""
echo "=== Checking all Node versions for FDK ==="
if command -v nvm >/dev/null 2>&1; then
CURRENT_NODE=$(nvm current 2>/dev/null || echo "none")
# Check Node 24 if it exists
if nvm list 2>/dev/null | grep -q "v24"; then
echo "Checking Node 24..."
nvm use 24 2>/dev/null || nvm use 24.11 2>/dev/null || true
if command -v fdk >/dev/null 2>&1; then
FDK_24=$(fdk version 2>&1 | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' | head -1)
echo " → FDK $FDK_24 found on Node 24"
else
echo " → No FDK on Node 24"
fi
fi
# Check Node 18 if it exists
if nvm list 2>/dev/null | grep -q "v18"; then
echo "Checking Node 18..."
nvm use 18 2>/dev/null || nvm use 18.20 2>/dev/null || true
if command -v fdk >/dev/null 2>&1; then
FDK_18=$(fdk version 2>&1 | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' | head -1)
echo " → FDK $FDK_18 found on Node 18"
else
echo " → No FDK on Node 18"
fi
fi
# Restore original Node version
if [[ "$CURRENT_NODE" != "none" ]]; then
nvm use "$CURRENT_NODE" 2>/dev/null || true
fi
fi
COMPLETE REMOVAL FROM ALL NODE VERSIONS:
echo ""
echo "=== Removing FDK from all Node versions ==="
# Remove from current Node first
echo "Removing from current Node..."
npm uninstall -g @freshworks/fdk 2>/dev/null || true
npm uninstall -g fdk 2>/dev/null || true
npm uninstall -g @freshworks/fdk --force 2>/dev/null || true
# If nvm is available, remove from other Node versions
if command -v nvm >/dev/null 2>&1; then
CURRENT_NODE=$(nvm current 2>/dev/null || echo "none")
# Remove from Node 24 if it exists
if nvm list 2>/dev/null | grep -q "v24"; then
echo "Removing from Node 24..."
nvm use 24 2>/dev/null || nvm use 24.11 2>/dev/null || true
npm uninstall -g @freshworks/fdk 2>/dev/null || true
npm uninstall -g fdk 2>/dev/null || true
npm uninstall -g @freshworks/fdk --force 2>/dev/null || true
fi
# Remove from Node 18 if it exists
if nvm list 2>/dev/null | grep -q "v18"; then
echo "Removing from Node 18..."
nvm use 18 2>/dev/null || nvm use 18.20 2>/dev/null || true
npm uninstall -g @freshworks/fdk 2>/dev/null || true
npm uninstall -g fdk 2>/dev/null || true
npm uninstall -g @freshworks/fdk --force 2>/dev/null || true
fi
# Restore original Node version
if [[ "$CURRENT_NODE" != "none" ]] && [[ "$CURRENT_NODE" != "system" ]]; then
nvm use "$CURRENT_NODE" 2>/dev/null || true
fi
fi
# Remove ~/.fdk cache (shared across all Node versions)
echo "Removing ~/.fdk cache..."
rm -rf ~/.fdk
# Clean npm cache
echo "Cleaning npm cache..."
npm cache clean --force
MANUAL CLEANUP (if npm fails):
echo "Manual cleanup (if needed)..."
NPM_PREFIX=$(npm config get prefix 2>/dev/null || echo "$HOME/.npm-global")
rm -f "$NPM_PREFIX/bin/fdk" 2>/dev/null || true
rm -rf "$NPM_PREFIX/lib/node_modules/@freshworks/fdk" 2>/dev/null || true
rm -rf "$NPM_PREFIX/lib/node_modules/fdk" 2>/dev/null || true
SHELL CONFIG CLEANUP:
echo "Cleaning shell config..."
cp ~/.zshrc ~/.zshrc.bak 2>/dev/null || true
cp ~/.bashrc ~/.bashrc.bak 2>/dev/null || true
sed -i '/fdk/d' ~/.zshrc 2>/dev/null || sed -i '' '/fdk/d' ~/.zshrc 2>/dev/null || true
sed -i '/fdk/d' ~/.bashrc 2>/dev/null || sed -i '' '/fdk/d' ~/.bashrc 2>/dev/null || true
MANDATORY VERIFICATION:
echo ""
echo "=== Verification ==="
command -v fdk && echo "⚠ FAILED: FDK still exists on current Node" || echo "✓ PASSED: FDK removed from current Node"
zsh -c 'command -v fdk' 2>/dev/null && echo "⚠ FAILED: FDK in new shell" || echo "✓ PASSED: FDK not in new shell"
[ ! -d ~/.fdk ] && echo "✓ PASSED: ~/.fdk removed" || echo "⚠ FAILED: ~/.fdk still exists"
# Verify on all Node versions
if command -v nvm >/dev/null 2>&1; then
if nvm list 2>/dev/null | grep -q "v24"; then
nvm use 24 2>/dev/null || nvm use 24.11 2>/dev/null || true
command -v fdk >/dev/null 2>&1 && echo "⚠ WARNING: FDK still on Node 24" || echo "✓ PASSED: FDK removed from Node 24"
fi
if nvm list 2>/dev/null | grep -q "v18"; then
nvm use 18 2>/dev/null || nvm use 18.20 2>/dev/null || true
command -v fdk >/dev/null 2>&1 && echo "⚠ WARNING: FDK still on Node 18" || echo "✓ PASSED: FDK removed from Node 18"
fi
fi
REPORT FORMAT:
echo ""
echo "========================================="
echo "FDK uninstalled completely from all Node versions"
echo "Node.js and nvm preserved"
echo "========================================="
SLASH_COMMAND_CLOSEOUT: After verification and REPORT (or abort), return from this shell Task immediately.
`
})
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 4d ago First seen · 323 lines · 24 tokens per session scan C d6e61a47ed6d
fw-setup-uninstall is a command published in the GitHub repository freshworks-developers/fw-dev-tools (5 stars, last pushed 2d ago), licensed MIT. It adds 24 tokens to every session and 3,454 once invoked, about $0.0001 per session on Opus 5. A static security scan graded it C with 1 finding (recursive force delete). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.
Other commands, from other repositories
business-feature-map
Generate or refresh the business feature inventory.
master-test-plan
Generate or refresh the risk-ranked master test plan.
bottleneck-detect
Analyze performance bottlenecks in swarm operations and suggest optimizations.
swarm-init
Initialize a Ruflo swarm with specified topology and configuration.
post-task
Execute post-task cleanup, performance analysis, and memory storage.
auto-topology
Automatically select the optimal swarm topology based on task complexity analysis.