sf-discipline-audit — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited sf-discipline-audit (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.
Reviews every open position with adversarial rigor. Forces you to confront the possibility that your thesis is wrong, your sizing is emotional, and your counterparty knows something you don't.
This is not a status update. This is a stress test of your decision-making.
npm install -g @spfunctions/cli
sf loginOpen positions are user-scoped.
Run these tools in parallel:
sf me portfolio --json --limit 20 # all current positions with P&L
sf portfolio history --json --ticks 10 --since 2026-04-01 # recent decisions
sf me theses --json --limit 10 # active thesis state + confidence
sf feed --json --hours 168 # last 7 days of signalsFor each open position, also:
sf inspect <ticker> --json # current market state(Batch this: parallel-fetch for all your position tickers.)
For EACH open position, work through these five checks. Use the heading template for each position.
═══════════════════════════════════════════
POSITION: <ticker> | qty <n> @ avg <price> | current <price> | P&L $<n>
═══════════════════════════════════════════#### Check 1: Entry Hypothesis
State in one sentence: why did you enter this position? What was the core belief?
If you cannot state it clearly, that itself is a finding. Note "ENTRY HYPOTHESIS UNCLEAR" and consider closing.
#### Check 2: Falsification Condition
What specific, observable event would prove your entry hypothesis wrong?
Not "things could change" — a concrete condition.
Good: "If OPEC announces 2M bpd production increase, the supply shock thesis breaks." Bad: "If the situation changes, I'll reconsider."
If no falsification condition was defined at entry, define one now and record it in the thesis (sf signal <thesis-id> "Falsification: ...").
Then check: has this condition been met or partially met? Scan the sf feed output for relevant signals. If yes, the position should probably close.
#### Check 3: From-Zero Test
Forget you own this position. If you were evaluating it fresh today:
sf discover --quality --json --limit 10)If the answer is "no I wouldn't buy this fresh", then why are you still holding it? Sunk cost is not a reason. Either close or articulate the new reason for holding.
#### Check 4: Counterparty Read
Someone is on the other side of every trade. What do they think they know that you don't?
Examine:
sf inspect <ticker> --json | jq .indicators.vr) — is there elevated volume against you?If you can't articulate the bear case from a smart counterparty's perspective, you may be missing something.
#### Check 5: Sizing Emotion Check
Is the current size driven by:
If size has drifted from the original Kelly fraction, document why. Usually the right move is to scale back to discipline.
After per-position review, check the portfolio level:
sf me portfolio --json | jq '.positions[] | {ticker, category, exposure}'Group positions by category. Are you accidentally concentrated?
Concentrated bets have correlated downside. A single event can wipe a whole category. If any category is >40% of book, you've made a bigger bet than you intended.
Structure:
## Discipline Audit — <date>
### Summary
- Open positions: <n>
- Total exposure: $<n>
- Daily P&L: $<n> | Total: $<n>
### Action items
- CLOSE: <ticker> — <reason: entry hypothesis broken | falsification hit | from-zero fail>
- REDUCE: <ticker> by <pct> — <reason: size drift | concentration concern>
- HOLD: <ticker> — <reason: hypothesis intact, sizing disciplined>
- ADD (if you have a separate <ticker>-specific case): — <reason>
### Concerns to monitor
- <position>: <concern>
- <position>: <concern>
### Category concentration
- macro: <pct>%
- geopolitics: <pct>%
- crypto: <pct>%
### Cognitive bias flags
- "I'm holding <ticker> because I don't want to admit the loss" — yes/no
- "I'm adding to <ticker> because it's been working" — yes/no
- "I'm not closing <ticker> because it might come back" — yes/noFor each CLOSE action:
sf intent sell <ticker> <quantity> --note "Discipline audit close: <reason>" --json
sf intent approve <intentId>For each REDUCE action:
sf intent sell <ticker> <reduction-quantity> --note "Discipline audit reduce: <reason>" --json
sf intent approve <intentId>Document the action chain in the linked thesis:
sf signal <thesis-id> "Audit <date>: <action> on <ticker> — <reason>"The hardest check in this skill is being honest about disposition effect (holding losers, selling winners). Watch for these signs:
If you catch yourself doing any of these, the position is probably the close action.
sf-pre-trade-check — adversarial check for NEW entries (before opening)sf-portfolio-review — descriptive audit (what happened, not what to change)sf-thesis-monitor — set up automatic kill conditions to enforce future discipline~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.