sf-claude-code-setup — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited sf-claude-code-setup (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
npm install -g @anthropic-ai/claude-code or use the desktop app)The CLI has 70+ commands across read/write/trade/runtime safety classes. Claude Code with default permissions could call write commands by accident. This skill establishes the safe profile: read-only Bash allowlist, no trade/runtime/fs categories, and a verification step to confirm the loop works before anything else.
npm install -g @spfunctions/cli
sf --versionIf it says a version, install worked. If not, check which sf and Node version.
These commands work without sf login:
sf world --json | jq .regime
sf scan --keyword "Fed" --json --limit 3
sf inspect KXEXAMPLE --json # replace with a real tickerIf any fail with MissingApiKeyError, that command requires auth. Most reads are free, but world.read and a few others require SF_API_KEY (set via sf login).
sf loginWalks through OAuth or API key entry. After this:
sf me --json --detail --limit 5
sf brief --agent --jsonIf those return data, auth is wired up.
sf doctor --agent --deep --jsonReturns a structured health report. Look for "status": "ok" across all categories:
localConfigpublicHealthjsonContractcommandManifestauthReads (if logged in)runtimeStateIf any are not ok, follow the nextActions for that category.
For non-interactive Claude Code usage with claude -p, use a narrow Bash allowlist:
claude -p '
You are operating SimpleFunctions through shell commands.
Rules:
- Run only commands that begin with: sf status, sf doctor, sf describe, sf tools, sf me, sf brief, sf investigate, sf query, sf inspect, sf world, sf agent.
- Do not run sf buy, sf sell, sf cancel, sf intent, sf runtime, sf quoteengine, or any command that starts a daemon.
- Prefer --json for direct commands.
Task: <your task>
' \
--tools "Bash" \
--allowedTools "Bash(sf status:*),Bash(sf doctor:*),Bash(sf describe:*),Bash(sf tools:*),Bash(sf me:*),Bash(sf brief:*),Bash(sf investigate:*),Bash(sf query:*),Bash(sf inspect:*),Bash(sf world:*),Bash(sf agent:*)" \
--output-format jsonThis is the safest default:
sf command families--allow / --deny policy before any tool executionIf your harness wants to drive tool calls itself (not give Claude Code a prompt), use NDJSON mode:
sf agent --headless --deny trade,runtime,fsThis starts a stdio server. The first stdout line is a ready frame with policy + tools manifest. See sf-agent-sdk-headless skill for the protocol.
sf agent --plain \
--new \
--allow read,user_data,research \
--deny trade,runtime,fs \
--budget-usd 0.25 \
--once "<your prompt>"This runs ONE turn of the SimpleFunctions agent (its own LLM loop with safety policy), then exits. Use this when you want SF to reason across tools and return an analyst-style answer.
Categories:
read — public market data, indicators, regimeuser_data — your portfolio, theses, intentsresearch — investigate/query/inspect routerswrite — create thesis, signal, watchlist, alert (excludes trade)trade — buy/sell/cancel orders (do NOT enable for autonomous loops)runtime — start/stop local daemonsfs — file system operationsRun this as a smoke test:
sf doctor --agent --deep --json | jq '.status'
sf describe --all --json | jq '.commands | length'
sf world --json | jq '.regime.label'
sf brief --agent --json | jq '.summary'Expected: status ok, commands count >50, regime label string, summary populated.
For other agents joining the same workspace:
SimpleFunctions setup:
- CLI installed: <version>
- Auth: <logged in / API key set / none>
- Default allowlist: read,user_data,research
- Default denylist: trade,runtime,fs
- Default budget: $0.25/turn
- Trace dir: ~/.sf/traces/| Category | Default | When to enable |
|---|---|---|
read | ✓ allow | always |
user_data | ✓ allow | when authenticated |
research | ✓ allow | always |
write | ✗ deny | for thesis-write workflows only |
trade | ✗ deny | only with explicit human in the loop |
runtime | ✗ deny | only when intentionally starting daemons |
fs | ✗ deny | only when reading/writing local trace files |
For any unattended automation (cron, CI, scheduled Claude Code), enable only read,user_data,research. Never enable trade without a human approval step.
npm install -g may have failed. Check npm config get prefix and verify the prefix is in $PATH.sf login or use the public HTTP API alternative.--allowedTools. Add the specific Bash(sf <verb>:*) pattern.sf-morning — daily briefing once setup is donesf-research — first real workflow after bootstrapsf-agent-sdk-headless — NDJSON server protocol for tighter integration~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.