ib-find-short-roll — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited ib-find-short-roll (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.
Analyze roll options for short positions or find best short options to open against long stock using real-time data from Interactive Brokers.
TWS or IB Gateway must be running locally with API enabled:
--port is omitted (e.g. IB_PORT=4001 for a Gateway container). Precedence: --port flag > IB_PORT > built-in default. Set it in the shell or a .env file.Port fallback: If the configured port fails, automatically retry on the other port. If the retry succeeds, save to memory which account type worked (live/paper) and reuse it for all IB skill calls in this and future sessions — until the user explicitly asks for the other account. If both ports fail, ask the user to verify that TWS or IB Gateway is running with API access enabled.
Note: Ifuvis not installed orpyproject.tomlis not found, replaceuv run pythonwithpythonin all commands below.
uv run python scripts/roll.py SYMBOL [--strike STRIKE] [--expiry YYYYMMDD] [--right C|P] [--port PORT] [--account ACCOUNT] [--iv-multiplier N]The script returns JSON to stdout with all position and candidate data.
Read templates/markdown-template.md for formatting instructions. Generate a markdown report from the JSON data and save to sandbox/.
Present key findings to the user: recommended position, credit/debit, and the saved report path.
mode: "roll"): Analyzes roll candidates to different expirations/strikesmode: "spread"): Finds best short call/put to create a vertical spreadmode: "new_short"): Finds best covered call (or protective put) to openSYMBOL - Ticker symbol (e.g., GOOG, AAPL, TSLA)--strike - Current short strike price (optional, auto-detects from portfolio)--expiry - Current short expiration in YYYYMMDD format (optional, auto-detects)--right - Option type: C for call, P for put (default: C)--port - IB port (default: 7497 for paper trading)--account - Specific account ID (optional)--iv-multiplier - Expected-move multiplier for strike band width (default: 2.0); increase for high-IV names to surface wider roll candidatesThe script outputs JSON with mode field indicating the analysis type:
success - Booleangenerated - Timestampmode - "roll", "spread", or "new_short"symbol - Tickerunderlying_price - Current stock priceearnings_date - Next earnings date or nullexpirations_analyzed - List of expiry dates checkedcurrent_position (includes iv and delta from IB greeks), buy_to_close, roll_candidates (dict of expiry -> candidates), iv_multiplierlong_option, right, candidates_by_expirylong_position, right, candidates_by_expiry, iv_multiplierThe strike search window is IV-aware: half_band = iv_multiplier × ATM_IV × spot × √(T/365) where T is the DTE of the nearest roll expiry. For roll mode, ATM IV comes from IB model greeks on the current position's quote; if unavailable, it is estimated from the option mid-price using the Brenner-Subrahmanyam approximation. For new_short mode, a conservative default IV of 30% is used. This makes the band automatically wider for high-IV underlyings without requiring a manual override.
# Auto-detect GOOG position (short option, long option, or long stock)
uv run python scripts/roll.py GOOG --port 7497
# Specify exact short position to roll
uv run python scripts/roll.py GOOG --strike 350 --expiry 20260206 --right C
# Find short call to sell against long call (vertical spread)
uv run python scripts/roll.py AUR --right C
# Find covered put for long stock
uv run python scripts/roll.py TSLA --right Pib-asyncyfinanceAll timestamps and time-based calculations must use the America/New_York timezone. All JSON output must include generated_at (NY time string) and data_delay fields.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.