sf-autopilot-setup — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited sf-autopilot-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.
Default is human-in-the-loop. Autopilot proposes orders, human approves through the dashboard or sf intent commands. Closed-loop (autonomous execution) requires explicit opt-in per thesis AND a global toggle.
Before enabling closed-loop, confirm:
npm install -g @spfunctions/cli
sf loginYou need:
sf portfolio enable --venue kalshiThis launches an interactive flow:
Confirm with:
sf portfolio cloud status --json | jq .credentialsShould show kalshi: { connected: true, lastVerified: "..." }.
sf portfolio cloud config --openrouter-key "sk-or-..."This is also encrypted at rest. Used by autopilot for evaluation LLM calls.
sf portfolio cloud config \
--max-exposure-usd 5000 \
--max-position-pct 10 \
--max-daily-loss-usd 200 \
--drawdown-auto-halt-pct 15 \
--json| Gate | Meaning |
|---|---|
max-exposure-usd | Total open exposure cap (cash + positions) |
max-position-pct | No single position >X% of total |
max-daily-loss-usd | Halt if daily P&L < -X |
drawdown-auto-halt-pct | Halt if peak-to-trough drawdown >X% |
These are pre-trade — orders that would violate are rejected before submission to the exchange. See concepts/risk-gates for the full list.
sf portfolio view create \
--name "macro-events" \
--filter '{
"categories": ["macro", "geopolitics"],
"venue": "kalshi",
"min_volume_24h": 1000,
"max_days_to_event": 60,
"min_iy": 100
}' \
--jsonA view is the set of markets the autopilot considers. Without a view, it considers everything (noisy).
Common view patterns:
macro-events: macro + geo, high volume, 30-60 day windowcross-venue-arb: high-confidence pairs onlyterm-structure-binary: same event, multiple deadlines (see sf-research skill for term structure analysis)sf portfolio strategy create \
--view macro-events \
--name "momentum" \
--rules '{
"entry": "vr > 2 AND price between 20 and 80",
"size_pct": 5,
"exit": "vr < 0.5 OR price hits target",
"max_holds": 5
}' \
--jsonStrategy = entry/exit/sizing rules applied within the view. Multiple strategies can target the same view.
sf portfolio cloud config \
--tick-cadence-hours 12 \
--monthly-budget-usd 50 \
--jsontick-cadence-hours defaults to 12 — that's the intended cadence (per feedback_portfolio_tick_cadence memory). Don't drop below 4h without specific reason (LLM cost).
Run the first tick manually to verify everything works:
sf portfolio cloud tick --dry-run --jsonReturns the handoff note + proposed actions WITHOUT placing orders. Review the proposal. If sensible, proceed.
sf portfolio cloud start --jsonThe cloud cron now fires every tick-cadence-hours. Each tick:
sf intent objects with autoExecute: falsesf intent listsf intent approve <id> → order goes to exchangeIf you want autopilot to execute without human approval:
sf thesis fork <thesis-id> --closed-loop-entry true --closed-loop-exit trueClosed-loop is per-thesis, not global. The thesis must still be within the autopilot's active view + strategy.
Strongly recommended: leave closed-loop off until you've watched 1-2 weeks of human-approved ticks.
sf portfolio cloud status --json | jq '{status, lastTickAt, nextTickAt, monthlySpend, riskGates}'
sf intent list --json --limit 10 # pending intents waiting for approvalnpm i -g @spfunctions/cli@latest.haltedReason. Often: budget exhausted (raise monthly-budget-usd) or no markets matched view (broaden filter).sf-portfolio-review — audit what autopilot has donesf-thesis-monitor — per-thesis monitoring configsf-pre-trade-check — adversarial check for high-value entries (use before approving sf intent)~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.