Not in the top 1,000 by GitHub stars
Senpi-ai/senpi-skills
Open-source AI agent skills + 80+ strategy templates for autonomous trading on Hyperliquid — build, deploy, and protect strategies across crypto, equities, commodities & indices, with two-phase trailing-stop (DSL) exits.
History
Review weekly changes to SKILL.md before updating. Dates mark the weeks in which we observed each version; checks apply to the recorded commits.
View weekly changes
quant-desk/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Not checked yet → After Network or broad shell
d7d9a81ddeeb → 7b1ecb269e82
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → d7d9a81ddeeb
No earlier version was observed for comparison.
senpi-account-status/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Local scripts
d7d9a81ddeeb → 7b1ecb269e82
A local comparison is unavailable. You can inspect the recorded versions on GitHub.
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → d7d9a81ddeeb
No earlier version was observed for comparison.
senpi-deposit-withdraw-transfer/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Not checked yet → After Local scripts
d7d9a81ddeeb → 7b1ecb269e82
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → d7d9a81ddeeb
No earlier version was observed for comparison.
senpi-improve-trades/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
d7d9a81ddeeb → 7b1ecb269e82
A local comparison is unavailable. You can inspect the recorded versions on GitHub.
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → d7d9a81ddeeb
No earlier version was observed for comparison.
senpi-market-pulse/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Not checked yet → After Local scripts
d7d9a81ddeeb → 7b1ecb269e82
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → d7d9a81ddeeb
No earlier version was observed for comparison.
senpi-portfolio/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
d7d9a81ddeeb → 7b1ecb269e82
A local comparison is unavailable. You can inspect the recorded versions on GitHub.
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → d7d9a81ddeeb
No earlier version was observed for comparison.
senpi-signals/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Not checked yet → After Network or broad shell
d7d9a81ddeeb → 7b1ecb269e82
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → d7d9a81ddeeb
No earlier version was observed for comparison.
senpi-smart-money/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Not checked yet → After Network or broad shell
d7d9a81ddeeb → 7b1ecb269e82
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → d7d9a81ddeeb
No earlier version was observed for comparison.
senpi-strategy-author/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
d7d9a81ddeeb → 7b1ecb269e82
A local comparison is unavailable. You can inspect the recorded versions on GitHub.
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → d7d9a81ddeeb
No earlier version was observed for comparison.
senpi-strategy-discover/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Local scripts
d7d9a81ddeeb → 7b1ecb269e82
A local comparison is unavailable. You can inspect the recorded versions on GitHub.
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → d7d9a81ddeeb
No earlier version was observed for comparison.
senpi-strategy-ops/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
d7d9a81ddeeb → 7b1ecb269e82
A local comparison is unavailable. You can inspect the recorded versions on GitHub.
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → d7d9a81ddeeb
No earlier version was observed for comparison.
senpi-trade/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Not checked yet → After Local scripts
d7d9a81ddeeb → 7b1ecb269e82
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → d7d9a81ddeeb
No earlier version was observed for comparison.
senpi-trader-research/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Not checked yet → After Local scripts
d7d9a81ddeeb → 7b1ecb269e82
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → d7d9a81ddeeb
No earlier version was observed for comparison.
senpi-trading-runtime/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Local scripts
d7d9a81ddeeb → 7b1ecb269e82
A local comparison is unavailable. You can inspect the recorded versions on GitHub.
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → d7d9a81ddeeb
No earlier version was observed for comparison.
senpi-why/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Instructions only
d7d9a81ddeeb → 7b1ecb269e82
A local comparison is unavailable. You can inspect the recorded versions on GitHub.
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → d7d9a81ddeeb
No earlier version was observed for comparison.
Verified commit 7b1ecb269e82b8ccd325fa9831cc810187050e28
git clone --filter=blob:none --no-checkout https://github.com/Senpi-ai/senpi-skills.git .hotskills/senpi-ai-senpi-skills && git -C .hotskills/senpi-ai-senpi-skills checkout --detach 7b1ecb269e82b8ccd325fa9831cc810187050e28
# Copy each selected skill directory from .hotskills/senpi-ai-senpi-skills into .claude/skills/<skill-name>/Heat
4.3- Star growth, last 7 daysNot available
- Star growth, last 24 hoursNot available
- Rank movement, last 7 daysNot available
- Commits, last 30 daysNot available
- Accounts asking about it through MCP, last 7 daysNot available
- Hot votes this weekNot available
Heat never changes the order by stars, and sponsorship never touches it. How heat works
Stars over time
30-day change not yet available: not enough history.
Individual skills in this repository
- quant-desk
quant-desk - senpi-account-status
senpi-account-status - senpi-deposit-withdraw-transfer
senpi-deposit-withdraw-transfer - senpi-improve-trades
senpi-improve-trades - senpi-market-pulse
senpi-market-pulse - senpi-portfolio
senpi-portfolio - senpi-signals
senpi-signals - senpi-smart-money
senpi-smart-money - senpi-strategy-author
senpi-strategy-author - senpi-strategy-discover
senpi-strategy-discover - senpi-strategy-ops
senpi-strategy-ops - senpi-trade
senpi-trade - senpi-trader-research
senpi-trader-research - senpi-trading-runtime
senpi-trading-runtime - senpi-why
senpi-why
How it works
quant-desk
When your agent uses it
**Quant Desk** — the desk your **AI Quant** produces. Users reach it by either name, spaced or hyphenated: "run AI quant", "run ai-quant", "run quant", "run quant desk", "run quant-desk". Paste ANY Hyperliquid address (0x…) and get the desk — what the trader has actually been doing (a strategy read with a critique), a quant score with six explained dimensions, the market they are trading in right now and how they trade each regime, the live book with a protection audit, leaks priced as counterfactual dollars, their book against the PROVEN cohort (top traders by all-time realized P&L, ≥ $1M) and the HOT 30-day cohort — side, headcount, when they moved, what they hold that the trader doesn't — live matches where the tape, the cohorts and the trader's own pattern agree, and a bank of twelve follow-ups the quant is prepared to go deeper on. Works for wallets that never touched senpi (public onchain data, read-only); with a Senpi token the closed-trade history, both cohorts, the funding regime and the Hyperfeed attention layer come from Senpi's own data. TRIGGERS — any of these, with or without an address: "run AI quant", "run ai-quant", "run quant-desk", "run AI quant on my Hyperliquid wallet", "run AI quant on any Hyperliquid wallet", "run quant", "run the quant on 0x…", "run quant desk on 0x…", "score my trading", "rate my trading", "find leaks on my Hyperliquid wallet", "where am I leaking money", "what did I miss" (about a book, a week or a trade), "master my week" (on a SAVED wallet the user trades by hand — "my MetaMask", "my own Hyperliquid wallet", "my saved wallet" — leaks and "what did I miss" are always this skill; its trade review and "master my week" belong to senpi-improve-trades, which also keeps the leaks of senpi strategies), "analyze my wallet / my Hyperliquid address", "how am I doing", "what's my strategy", "am I on the right side of smart money", "are my positions protected", "what should I fix first", "compare me to the whales", "scout setups for me", "find traders for me to analyze with AI quant", "run AI quant on any Hyperliquid wallet". THE IN-PRODUCT SUGGESTED PROMPTS, verbatim — these are buttons users click, so they must match exactly, in the product's own second person ("your wallet", not "my wallet"): "Run quant desk on your Hyperliquid wallet", "Run quant desk on any Hyperliquid wallet", "Score my trading", "Find leaks on your Hyperliquid wallet", "Find traders for me to analyze with quant desk", "Run quant desk", "What did I miss?". Note "find traders for me to analyze" ALONE belongs to senpi-trader-research (vetting a trader to COPY); with "quant desk" or "AI quant" it is this skill (reading a trader to LEARN from). "your Hyperliquid wallet" in a suggested prompt means the READER's own wallet — ask for their address and run the own-book desk, never someone else's. PLURAL COUNTS, and it is what a senpi user reaches for first, because they HAVE several: "find leaks on my wallets", "score my wallets", "run quant desk on my wallets", "leaks across my wallets". senpi-portfolio owns "across all wallets" for HOLDINGS; the leaks and the score on those same wallets are THIS skill. A teammate's agent read portfolio's SKILL.md first on "find leaks on my wallets" and only reached the desk forty-five seconds later. No address given? `desk.py --find <band>` offers candidates by account size ($5k-10k through whales) and by this week's winners, the month's, or this week's worst — ask which, never guess an address and never answer from memory. The default is the user's OWN book: "run AI quant on 0x…" means the user is 0x… — the desk speaks to them and recommends their next steps. "Run AI quant analyst on 0x…" (or "review this trader 0x…") means the user is analyzing someone else. Hidden engine: scripts/desk.py. NOT for choosing or deploying a strategy (senpi-strategy-discover / -ops), reviewing a Senpi strategy's own trades (senpi-improve-trades), or vetting a trader to copy (senpi-trader-research). senpi-portfolio resolves the reader's wallets and answers what they hold; a request to SCORE or RATE that trading comes here, on those wallets.
What it loads into context
Frontmatter
1,150 tokensAlways available to the agent
SKILL.md
14,108 tokensWhen the skill is activated
Reference documents
6,953 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Quick actions
- What the desk is (the output contract, in render order)
- Reading the sources (what to say when asked "where does this come from")
- Mandatory closing (verbatim structure, after any full desk or `--section edge/next`)
- Resilience
- No address given — WHOSE book, before which book
- Running a batch — sequentially
- Install — the whole `scripts/` directory is required
- Skill attribution
Scripts executed separately
scripts/addresses.pyscripts/benchmark.pyscripts/blacklist.pyscripts/book.pyscripts/deep.pyscripts/desk.pyscripts/dsl.pyscripts/followups.pyscripts/hl_api.pyscripts/market.pyscripts/mcp_client.pyscripts/metrics.pyscripts/opportunities.pyscripts/render.pyscripts/roundtrips.pyscripts/score.pyscripts/senpi_history.pyscripts/smart_money.pyscripts/strategy_read.pyscripts/taxonomy.pyscripts/timing.pyscripts/voice.pytests/test_account_split.pytests/test_addresses.pytests/test_book.pytests/test_book_breadth_gate.pytests/test_dsl_attach.pytests/test_mm_blacklist.pytests/test_my_wallets.pytests/test_positions_unread.pytests/test_protection_shared.pytests/test_protection_unread.pytests/test_quant.pytests/test_state_version.pytests/test_subject_and_flight.py
Files
SKILL.mdcore55,627 bytesSKILL.mdcore55,627 bytesSKILL.mdcore55,627 bytesreferences/coverage.jsonasset889 bytesreferences/methodology.mddoc26,299 bytesscripts/addresses.pyruns13,852 bytesscripts/benchmark.pyruns4,421 bytesscripts/blacklist.pyruns13,814 bytesscripts/book.pyruns10,380 bytesscripts/deep.pyruns9,074 bytesscripts/desk.pyruns87,351 bytesscripts/dsl.pyruns11,666 bytesscripts/followups.pyruns8,551 bytesscripts/hl_api.pyruns24,855 bytesscripts/market.pyruns15,043 bytesscripts/mcp_client.pyruns6,230 bytesscripts/metrics.pyruns35,904 bytesscripts/opportunities.pyruns5,028 bytesscripts/render.pyruns58,563 bytesscripts/roundtrips.pyruns7,388 bytesscripts/score.pyruns56,293 bytesscripts/senpi_history.pyruns8,683 bytesscripts/smart_money.pyruns15,848 bytesscripts/strategy_read.pyruns19,240 bytesscripts/taxonomy.pyruns2,857 bytesscripts/timing.pyruns8,567 bytesscripts/voice.pyruns3,102 bytestests/fixtures/protection-fixtures.v1.jsonasset66,728 bytestests/fixtures/sample_trader.jsonasset4,558,999 bytestests/test_account_split.pyruns3,047 bytestests/test_addresses.pyruns9,037 bytestests/test_book.pyruns14,916 bytestests/test_book_breadth_gate.pyruns7,978 bytestests/test_dsl_attach.pyruns10,529 bytestests/test_mm_blacklist.pyruns26,258 bytestests/test_my_wallets.pyruns37,499 bytestests/test_positions_unread.pyruns7,750 bytestests/test_protection_shared.pyruns5,532 bytestests/test_protection_unread.pyruns14,495 bytestests/test_quant.pyruns219,984 bytestests/test_state_version.pyruns2,701 bytestests/test_subject_and_flight.pyruns14,789 bytes
Read SKILL.md
# Senpi Quant Desk — the desk your AI Quant produces, for any Hyperliquid address
Built for one thing first: **the user's own book.** A trader joins senpi, pastes their Hyperliquid
wallet, and gets their desk — the book they actually run, scored, protected and improved, in the second
person, with the next steps recommended to them. That is the default and the experience to design for:
**"run AI quant on 0x…" means the user is 0x…**, whoever the address belongs to. The same engine
also reads **someone else's book** — **"run AI quant analyst on 0x…"**, "review this trader", a
leaderboard pick, a whale — to learn from it (third person, learn-from-them follow-ups, a side-by-side
compare). Run it plain (`--mine`) unless the user asks for the analyst read; then `--other` (alias
`--analyst`), and never let that desk say "you".
**HARD RULES — obey these even if you skim the rest.**
0. **ONE desk at a time, and NEVER re-run one that is still going.** A desk is a long command, soView the complete source on GitHubsenpi-account-status
When your agent uses it
Show the user's standing across Senpi programs — points and rank, the Senpi trading fee (none on a paid plan), referral earnings — and explain the AI-credits usage meter. Use for "how many points do I have?", "what's my rank/tier?", "where did my tier go?", "what are my fees?", "my referral rewards", "how do referrals work?", and for credits: "what is the bubble/meter in the header?", "why are my credits going down?", "how much did that cost?", "does my strategy use credits?", "can I trade or withdraw my credits?", and for plans: "what plans are there?", "how much does Senpi cost?", "what do I get on Pro/Quant?", "how do I get free credits?", "where are my milestone credits?", "do I need a subscription to keep my strategy running?", "what happens when my trial ends?". Use this instead of calling user_get_senpi_points by hand. A hidden engine (scripts/status.py) pulls points, the fee and referral in one call; the credit BALANCE is explained, never read — no tool returns it — while the plan catalog and the end of the free-credit milestones are published here and may be quoted. Requires a USER-scoped Senpi token.
What it loads into context
Frontmatter
337 tokensAlways available to the agent
SKILL.md
3,239 tokensWhen the skill is activated
Reference documents
305 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Golden rules
- How to run the engine
- Output contract
- AI credits — the usage meter
- Plans & free credits
- ⚠ Token scope
- Skill Attribution
- Install — both scripts are required
Scripts executed separately
scripts/mcp_client.pyscripts/status.pytests/test_skill_surface.pytests/test_status.py
Files
SKILL.mdcore13,236 bytesSKILL.mdcore13,236 bytesSKILL.mdcore13,236 bytesreferences/presentation-notes.mddoc1,243 bytesscripts/mcp_client.pyruns6,217 bytesscripts/status.pyruns7,292 bytestests/fixtures/status_fixture.jsonasset1,636 bytestests/test_skill_surface.pyruns17,207 bytestests/test_status.pyruns5,576 bytes
Read SKILL.md
# Senpi Account Status — your standing across Senpi
A hidden engine pulls the user's standing in one real-time call; **your job is to present it
cleanly**: points and rank, the Senpi fee, and referral earnings.
## Golden rules
- **Run the engine; never hand-pull.** `python3 scripts/status.py` gathers points, the fee, and
referral together. Read its JSON.
- **Real-time, not from memory.** Points/rank move — never quote a figure from earlier in the
conversation; re-run.
- **The fee comes from the data, never from memory.** Quote `fee.pct` as returned: `0%` on a paid
plan (Starter, Pro, Advanced, Quant), the flat free rate without one, free trials included.
- **Tiers carry no benefit right now: no fee change, nothing unlocked. Do not bring tiers up.** NeverView the complete source on GitHubsenpi-deposit-withdraw-transfer
When your agent uses it
Handle ANY money-movement request — deposit, add funds, fund my account, "buy USDC", "pay with a card", withdraw, cash out, send, "send to my wallet / an exchange / a friend", transfer, "move my money", pay someone, bridge, get my private key. Two hard rails: money ENTERS Senpi only through the funding card — the agent shows it with show_widget (widget_type "fund_user_wallet"), which opens the app's Fund Your Wallet modal (deposit crypto to a network-scoped deposit address, or buy USDC with a card) — the agent NEVER writes a deposit address in chat and NEVER points at a strategy wallet; and money LEAVES Senpi to any EXTERNAL address only through the Senpi web/mobile app (Balances/Wallet) — no agent tool can send funds outside Senpi, by design, for the user's security. On-platform moves between the user's OWN wallets (strategy → funding wallet, close a strategy to reclaim funds) DO use tools — Spot → Perps is the user's, in Balances — and this skill owns their mechanics: the perps precheck before a top-up, polling it, a FAILED top-up that parked the money in Spot (find it, hand the user the move, never loop), "withdraw everything" as the exact figure, and fees stated before money moves. Use this skill for every deposit / withdraw / transfer / send / top-up question. Pure guidance, no engine.
What it loads into context
Frontmatter
376 tokensAlways available to the agent
SKILL.md
6,452 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- The two iron rules
- The map
- Deposits — the funding card only
- Buying USDC — the "I have no crypto" path (the card's Buy USDC tab)
- Withdrawals & transfers OUT — app-only, by design
- On-platform moves — between the user's OWN wallets (these DO use tools)
- Topping up a strategy — precheck, poll, recover
- Costs — say them before money moves
- How to answer
- Never
Scripts executed separately
tests/test_money_rails_skill.py
Files
SKILL.mdcore25,969 bytestests/test_money_rails_skill.pyruns8,737 bytes
Read SKILL.md
# senpi-deposit-withdraw-transfer — money-movement rails
Money on Senpi moves on fixed rails. Answer every deposit / withdraw / transfer / send request from the
map below. **Never improvise a route, never invent a tool, never guess an amount, and never send the user
to an external UI or a multi-step workaround.** When a request has no on-platform rail, the answer is the
Senpi app — full stop, not a clever path around it.
## The two iron rules
1. **Money ENTERS Senpi only through the funding card.** On any deposit / add-money / fund-my-account /
buy-USDC intent, call `show_widget` with `widget_type: "fund_user_wallet"`. The card opens the app's
**Fund Your Wallet** modal — **Deposit Crypto** (a network-scoped deposit address with QR) or **Buy
USDC** (card / Apple Pay / Google Pay) — and deposits land **as USDC on Hyperliquid in the user's own
funding (embedded) wallet, ready to trade**. The card owns the address, the networks, and the copy:View the complete source on GitHubsenpi-improve-trades
When your agent uses it
Retrospective trade review + improvement coaching for the user's Senpi trading. Answers "did I sell too early or late", "what did I miss this week", "master my week", "compare my trades to the market / to the best whales", "how could I make more gains", "suggest improvements", "review my trades", "am I getting shaken out too early / how are my exits firing", "what did my own limits block / what couldn't I take", "where am I leaking" (on Senpi strategies — "where am I leaking" or "what did I miss" about a SAVED wallet the user trades by hand — "my MetaMask", "my own Hyperliquid wallet", "my saved wallet" — go to quant-desk), "walk me through / explain my [asset] trade", "what am I paying in fees / maker vs taker", "why is [strategy] losing". Saved wallets are reviewed here too, read-only, as manual trades — "review my trades" and "master my week" on a saved wallet stay in this skill. When the user has NOTHING to review yet, `meta.book_state` routes it: nothing deployed -> read the market (senpi-market-pulse) then shortlist a fit (senpi-strategy-discover); deployed-but-idle -> diagnose THAT strategy, never pitch another. A hidden engine (scripts/review.py) reconstructs every CLOSED trade from discovery, enriches each exit reason + blocked signals from the runtime telemetry event log, computes the honest "if I'd held to now" counterfactual, and crosses the book against what the market did — you narrate it under strict guardrails: process over outcome (lead with the aggregate, not the one reversal), it's the STRATEGY not the user (on Senpi strategy trades), NO fabricated "+$X/week", no performance-chasing, honest sourcing (onchain facts = discovery, exit reason / blocked / leaks = telemetry), and the user chooses how deep the fix goes. Composes senpi-market-pulse (movers), senpi-smart-money (whales), and senpi-portfolio (live state). Requires a USER-scoped Senpi token.
What it loads into context
Frontmatter
530 tokensAlways available to the agent
SKILL.md
14,413 tokensWhen the skill is activated
Reference documents
12,353 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Router — first turn and every follow-up
- One book — every wallet first-class
- Your wallets (read-only, traded by hand)
- HARD RULES (never violate — obey these even if you skim the rest)
- Your wallets — unknown reads and fix depth
- Nothing to review? Read `meta.book_state` FIRST — it decides the whole answer
- Quick actions — the data and the lever per intent
- Sources — onchain vs runtime (the split that keeps you honest)
- Run it in steps — narrate as you go
- How to run (one-shot fallback)
- The nine guardrails — the reason this skill exists
- Composition — this skill orchestrates, it doesn't re-implement
- The output contract — what you produce
- Reference index — read the file before doing the thing
Scripts executed separately
scripts/_yaml.pyscripts/mcp_client.pyscripts/review.pytests/test_book_state.pytests/test_hl_info_retry.pytests/test_improve_trades_skill_layout.pytests/test_main_wallet_row.pytests/test_ratchet_attribution.pytests/test_review.pytests/test_review_external_wallets.py
Files
SKILL.mdcore56,379 bytesSKILL.mdcore56,379 bytesSKILL.mdcore56,379 bytesSKILL.mdcore56,379 bytesSKILL.mdcore56,379 bytesSKILL.mdcore56,379 bytesSKILL.mdcore56,379 bytesreferences/event-log.mddoc4,919 bytesreferences/exit-records.mddoc4,001 bytesreferences/guardrails.mddoc8,736 bytesreferences/one-book.mddoc1,688 bytesreferences/output-contract.mddoc5,090 bytesreferences/output-shape.mddoc15,923 bytesreferences/sources.mddoc8,293 bytesscripts/_yaml.pyruns13,942 bytesscripts/mcp_client.pyruns6,240 bytesscripts/review.pyruns192,027 bytestests/fixtures/events_fixture.jsonasset3,418 bytestests/fixtures/ratchet_stop_list_real.jsonasset34,044 bytestests/fixtures/registry/installed_runtimes.jsonasset4,733 bytestests/fixtures/review_fixture.jsonasset5,199 bytestests/fixtures/review_mixed_status_fixture.jsonasset3,965 bytestests/test_book_state.pyruns3,641 bytestests/test_hl_info_retry.pyruns5,128 bytestests/test_improve_trades_skill_layout.pyruns29,931 bytestests/test_main_wallet_row.pyruns7,177 bytestests/test_ratchet_attribution.pyruns11,212 bytestests/test_review.pyruns77,293 bytestests/test_review_external_wallets.pyruns54,902 bytes
Read SKILL.md
# Senpi Improve My Trades — retrospective review + coaching
## Router — first turn and every follow-up
**On a follow-up, answer only what is new** — never re-send the `book` table, `book.total.line`, the TOTAL
PnL headline or a figure already shown ("open with `book`" is the first answer only). Run only the step(s)
the ask needs; route every fix through the depth choice at the end — never auto-act. Every rule here still
binds on a follow-up; when a row names a reference, read it first.
| The ask | Run (`review.py` step) | Read first (file in `references/`) |
|---|---|---|
| sell too early / late, "improve my last N" | `timing`, then `telemetry` for the exit *mechanism* — **pass `--last N`** when the ask names a count ("last 10" → `--last 10`) | `guardrails.md` §1, §1b |
| master my week, analyze my strategies and trades, suggest improvements | **all steps in order** (`timing`→`strategies`→`telemetry`→`market`) | `output-contract.md` |
| what did I miss, compare to the market / the whales | `market` (+ `telemetry` for the blocked cohort) | `guardrails.md` §4; whales: compose `senpi-smart-money` |View the complete source on GitHubsenpi-market-pulse
When your agent uses it
Answer "what's happening in the markets today?" with structured cross-asset analysis, not just "BTC is up." Use for "what's moving", "market overview", "market update", "give me a read on today", or any open-ended market read. Use this instead of pulling market_get_prices + web_fetch/web_search by hand. A hidden engine (scripts/pulse.py) pulls all asset classes (crypto, equities, indices, commodities, macro) and computes the signals; you narrate. Every run closes with the Senpi Signals brief (top 3 reads) and an offer to run the full signals sweep. Requires Senpi MCP.
What it loads into context
Frontmatter
194 tokensAlways available to the agent
SKILL.md
5,100 tokensWhen the skill is activated
Reference documents
4,361 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Golden rules
- How to run the engine
- Run it in steps — narrate as you go
- Output contract
- Mandatory closing: Senpi Signals in brief, then three numbered next steps
- Resilience (the engine handles these — narrate them honestly)
- Skill Attribution
- Install — both scripts are required
Scripts executed separately
scripts/mcp_client.pyscripts/pulse.pytests/test_pulse.pytests/test_pulse_saved_wallets.pytests/test_signals_closing.py
Files
SKILL.mdcore19,713 bytesSKILL.mdcore19,713 bytesSKILL.mdcore19,713 bytesSKILL.mdcore19,713 bytesSKILL.mdcore19,713 bytesSKILL.mdcore19,713 bytesSKILL.mdcore19,713 bytesreferences/analysis-framework.mddoc4,257 bytesreferences/scope.mddoc13,672 bytesscripts/mcp_client.pyruns6,238 bytesscripts/pulse.pyruns32,756 bytestests/fixtures/pulse_fixture.jsonasset6,176 bytestests/test_pulse.pyruns18,889 bytestests/test_pulse_saved_wallets.pyruns3,625 bytestests/test_signals_closing.pyruns5,748 bytes
Read SKILL.md
# Senpi Market Pulse — the daily cross-asset read
You are a sharp markets analyst answering "what's happening today?" A hidden engine does the
data-gathering across every asset class and computes the concrete signals; **your job is the
analysis** — read the *structure* of the day, explain *why* it's shaped that way, and end by
offering to act on it. The bar is high: **"BTC is up 3%" is a failure.** The user wants the read
they couldn't get from a price screen on their own.
## Golden rules
- **Asked to run this on a schedule? Say the cost first.** An `openclaw cron` job is an agent turn — every firing is a full model call over the whole conversation, so "every hour" is 24 model calls a day and "every 5 minutes" is 288. Offer at most once or twice a day, state the cost, and get a yes before creating it. Never a cron to watch a strategy: the runtime supervises it at zero model cost, and `senpi-strategy-ops` reads it on demand. The daily read is one run, when asked.
- **Run the engine; never hand-pull the market.** `python3 scripts/pulse.py` does the full
parallel pull (crypto + XYZ equities + indices + commodities + macro) and computes the
cross-asset signals. Read its JSON — don't fire `market_*` calls yourself. For a full read, run it asView the complete source on GitHubsenpi-portfolio
When your agent uses it
Analyze the user's portfolio, strategies, positions, and trades across all wallets — main embedded wallet, strategy sub-wallets, deployed vs idle — with real-time balances and real analysis, not a flat dump. Leads at the STRATEGY level: each strategy judged against its OWN mandate (is it doing its job?), with positions as evidence. Use this skill FIRST for ANY portfolio / strategies / positions / balances / PnL / trade-history question, BEFORE any raw strategy_get_clearinghouse_state / account_get_portfolio / strategy_list MCP call. Use for "analyze my strategies", "how are my strategies doing", "analyze my portfolio", "how am I doing", "show my positions", "balance across all wallets", "how much is idle", and "are my open positions protected? / do they have a stop-loss?", "my saved wallet", "the wallets I added", "my MetaMask wallet" (read-only balances and positions of a wallet the user added in Your wallets), and "tell me about my strategies and their DSL / what tier are my positions in?", and "what happened to my closed [asset] position / did my trade actually go through / do I still hold X" — the authority for position facts, OPEN and CLOSED, which come from a fresh engine read, never from memory or a raw order response. A hidden engine (scripts/portfolio.py) does the multi-wallet pull and taxonomy; you narrate. Requires a USER-scoped Senpi token. Asked to SCORE, RATE or GRADE their trading — "score my trading", "rate my trading", "find leaks on my wallet" — run **quant-desk** on the wallets this skill just resolved; it returns a quant score, the six dimensions behind it and leaks priced in dollars. Everything else about holdings, strategies, positions and closed-position facts stays here.
What it loads into context
Frontmatter
470 tokensAlways available to the agent
SKILL.md
14,217 tokensWhen the skill is activated
Reference documents
20,614 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Follow-ups first — the router
- One wallet list — every wallet first-class
- The job, and the hard rules
- The wallet model (get this exactly right)
- A strategy is ALL its wallets (present + reason at `strategy_groups[]`)
- Liveness and "why hasn't it traded?" — the rules that always apply
- Judge each strategy against its OWN mandate — not a momentum benchmark
- Golden rules
- DSL — how it works per strategy, and which position is in which tier
- One wallet list — row details
- Run it in steps — narrate as you go
- How to run the engine
- Output contract
- Resilience (engine handles; narrate honestly)
- Mandatory closing (verbatim)
- Reference index (`references/`)
- Install — both scripts are required
Scripts executed separately
scripts/mcp_client.pyscripts/portfolio.pytests/test_close_recency.pytests/test_closed_stats.pytests/test_name_reader_parity.pytests/test_portfolio.pytests/test_portfolio_external_wallets.pytests/test_portfolio_one_wallet_list.pytests/test_portfolio_skill_layout.pytests/test_prescribed_tools_exist.pytests/test_skill_raw_position_stop.pytests/test_skill_source_trader_read.pytests/test_your_wallets_wording.py../senpi-strategy-ops/scripts/deploy.py../senpi-strategy-ops/scripts/deploy.py../senpi-strategy-ops/scripts/deploy.py../senpi-strategy-ops/scripts/deploy.py../senpi-strategy-ops/scripts/deploy.py../senpi-strategy-ops/scripts/deploy.py../senpi-strategy-ops/scripts/deploy.py../senpi-strategy-ops/scripts/deploy.py../senpi-strategy-ops/scripts/deploy.py../senpi-strategy-ops/scripts/deploy.py../senpi-strategy-ops/scripts/deploy.py../senpi-strategy-ops/scripts/deploy.py../senpi-strategy-ops/scripts/deploy.py../senpi-strategy-ops/scripts/deploy.py../senpi-strategy-ops/scripts/deploy.py../senpi-strategy-ops/scripts/deploy.py../senpi-strategy-ops/scripts/deploy.py../senpi-strategy-ops/scripts/deploy.py../senpi-strategy-ops/scripts/deploy.py../senpi-strategy-ops/scripts/deploy.py../senpi-strategy-ops/scripts/deploy.py../senpi-strategy-ops/scripts/deploy.py../senpi-strategy-ops/scripts/status.py../senpi-strategy-ops/scripts/status.py
Files
SKILL.mdcore56,037 bytesSKILL.mdcore56,037 bytesSKILL.mdcore56,037 bytesreferences/analysis-framework.mddoc6,344 bytesreferences/dsl.mddoc8,084 bytesreferences/mandate.mddoc7,094 bytesreferences/mirror-strategies.mddoc2,283 bytesreferences/output-contract.mddoc14,380 bytesreferences/output-fields.mddoc16,148 bytesreferences/rationale.mddoc5,668 bytesreferences/runtime-health.mddoc13,874 bytesreferences/why-not-trading.mddoc6,998 bytesscripts/mcp_client.pyruns6,235 bytesscripts/portfolio.pyruns156,368 bytestests/fixtures/portfolio_fixture.jsonasset3,324 bytestests/fixtures/runtimes_list.jsonasset582 bytestests/test_close_recency.pyruns5,811 bytestests/test_closed_stats.pyruns9,957 bytestests/test_name_reader_parity.pyruns23,451 bytestests/test_portfolio.pyruns112,232 bytestests/test_portfolio_external_wallets.pyruns20,411 bytestests/test_portfolio_one_wallet_list.pyruns32,335 bytestests/test_portfolio_skill_layout.pyruns35,145 bytestests/test_prescribed_tools_exist.pyruns1,892 bytestests/test_skill_raw_position_stop.pyruns746 bytestests/test_skill_source_trader_read.pyruns1,330 bytestests/test_your_wallets_wording.pyruns8,652 bytes../senpi-strategy-ops/scripts/deploy.pyruns123,042 bytes../senpi-strategy-ops/scripts/deploy.pyruns123,042 bytes../senpi-strategy-ops/scripts/deploy.pyruns123,042 bytes../senpi-strategy-ops/scripts/deploy.pyruns123,042 bytes../senpi-strategy-ops/scripts/deploy.pyruns123,042 bytes../senpi-strategy-ops/scripts/deploy.pyruns123,042 bytes../senpi-strategy-ops/scripts/deploy.pyruns123,042 bytes../senpi-strategy-ops/scripts/deploy.pyruns123,042 bytes../senpi-strategy-ops/scripts/deploy.pyruns123,042 bytes../senpi-strategy-ops/scripts/deploy.pyruns123,042 bytes../senpi-strategy-ops/scripts/deploy.pyruns123,042 bytes../senpi-strategy-ops/scripts/deploy.pyruns123,042 bytes../senpi-strategy-ops/scripts/deploy.pyruns123,042 bytes../senpi-strategy-ops/scripts/deploy.pyruns123,042 bytes../senpi-strategy-ops/scripts/deploy.pyruns123,042 bytes../senpi-strategy-ops/scripts/deploy.pyruns123,042 bytes../senpi-strategy-ops/scripts/deploy.pyruns123,042 bytes../senpi-strategy-ops/scripts/deploy.pyruns123,042 bytes../senpi-strategy-ops/scripts/deploy.pyruns123,042 bytes../senpi-strategy-ops/scripts/deploy.pyruns123,042 bytes../senpi-strategy-ops/scripts/deploy.pyruns123,042 bytes../senpi-strategy-ops/scripts/deploy.pyruns123,042 bytes../senpi-strategy-ops/scripts/status.pyruns21,409 bytes../senpi-strategy-ops/scripts/status.pyruns21,409 bytes
Read SKILL.md
# Senpi Portfolio — real-time, all-wallet analysis
## Follow-ups first — the router
**Follow-ups: answer only what is new.** Re-run the one step the question needs (numbers always come
from a fresh read, never an earlier one), answer that question, and never re-send the wallet list, the
book total, or verdicts and figures already shown unless the user asks for them again.
| The ask | Step to run | Read first |
|---|---|---|
| *"how much idle / where's my money / balance across wallets / grand total / my wallets"*, a wallet they added | `money` | "One wallet list" below |
| *"are my strategies protected? / do they have a stop-loss? / how are my strategies doing / analyze my strategies / what's their DSL / mandate"* | `strategies` | `references/dsl.md` (protection), `references/mandate.md` (verdicts), `references/runtime-health.md` (liveness) |
| "is it running / health check / degraded / not running / could not verify / it looks stuck / restart it" | `strategies` | `references/runtime-health.md` |
| "why hasn't it traded / why didn't it open X / no signals" | `strategies` | `references/why-not-trading.md` |View the complete source on GitHubsenpi-signals
When your agent uses it
Senpi Signals: the non-obvious reads on Hyperliquid that a price screen can't show — the proven cohort against the 4h crowd, whale opens, funding extremes, open-interest builds, momentum events, laggards — ranked for trade ideas and for market news. Use for "scan Senpi Signals", "scan for market anomalies", "find what's mispriced", "where is the market wrong", "find dislocations", "what's out of line", "what's noteworthy in the market right now", "any interesting anomalies to tweet", "signals of the day", "build me some trade ideas", "what's hot right now", or a focused ask ("anything notable on OIL / the AI basket?"). On demand only: if asked to put it on a cron or any schedule, say no. Read-only, observation not advice. Requires the agent's Senpi sign-in.
What it loads into context
Frontmatter
244 tokensAlways available to the agent
SKILL.md
3,118 tokensWhen the skill is activated
Reference documents
1,417 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Commands
- Presenting the feed
- Rules
- Hyperfeed Movers — "what's hot right now?"
- How every run ends — one question
- Where it lives
- The short version (`--brief N`)
Scripts executed separately
scripts/hyperfeed.pyscripts/mcp_client.pyscripts/striker_scoring.pyscripts/sweep.pytests/test_hyperfeed.pytests/test_signals_skill_text.pytests/test_striker_scoring_vendor_parity.pytests/test_sweep.pytests/test_vendored_parity.py
Files
SKILL.mdcore11,946 bytesSKILL.mdcore11,946 bytesSKILL.mdcore11,946 bytesSKILL.mdcore11,946 bytesreferences/detectors.mddoc2,554 bytesreferences/worked-examples.mddoc2,742 bytesscripts/hyperfeed.pyruns24,702 bytesscripts/mcp_client.pyruns6,237 bytesscripts/striker_scoring.pyruns11,720 bytesscripts/sweep.pyruns16,865 bytestests/fixtures/backend/backend-btc.jsonasset5,607 bytestests/fixtures/backend/backend-feed.jsonasset976 bytestests/fixtures/backend/skill-feed.jsonasset3,449 bytestests/fixtures/leaderboard_markets.jsonasset5,895 bytestests/test_hyperfeed.pyruns15,376 bytestests/test_signals_skill_text.pyruns14,159 bytestests/test_striker_scoring_vendor_parity.pyruns2,573 bytestests/test_sweep.pyruns12,020 bytestests/test_vendored_parity.pyruns1,200 bytes
Read SKILL.md
# Senpi Signals
## Commands
```bash
python3 scripts/sweep.py --print-feed # a user asks for signals: the full feed
python3 scripts/sweep.py --asset HYPE # focus: one asset (BTC, BTC-PERP, xyz:TSLA all work); one call per asset for a basket
python3 scripts/sweep.py --brief 3 # the short version, for senpi-market-pulse
python3 scripts/hyperfeed.py # "what's hot right now": the Hyperfeed movers (separate read, below)
# --lens trade|social --top N --json
```
Run one command and present its output.
View the complete source on GitHubsenpi-smart-money
When your agent uses it
Answer "where is smart money moving?" — show where the most-profitable Hyperliquid wallets are positioned, where they diverge from the crowd, and the near-term flow. Use for "where's smart money", "what are the whales doing", "smart money vs the crowd", "follow the smart money". Use this instead of stitching discovery_get_top_traders + leaderboard calls by hand. A hidden engine (scripts/smartmoney.py) builds the cohorts and finds the divergences; you analyze. Requires a USER-scoped Senpi token.
What it loads into context
Frontmatter
170 tokensAlways available to the agent
SKILL.md
4,161 tokensWhen the skill is activated
Reference documents
1,071 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- The thesis (what "smart money" means here)
- Golden rules
- How to run the engine (the output shape)
- Run it in steps — narrate as you go
- ⚠ Token scope
- Output contract
- Mandatory closing (verbatim)
- Resilience (engine handles; narrate honestly)
- Skill Attribution
- Install — both scripts are required
Scripts executed separately
scripts/mcp_client.pyscripts/smartmoney.pytests/test_smartmoney.pytests/test_smartmoney_saved_wallets.py
Files
SKILL.mdcore16,015 bytesSKILL.mdcore16,015 bytesSKILL.mdcore16,015 bytesreferences/analysis-framework.mddoc4,393 bytesscripts/mcp_client.pyruns6,237 bytesscripts/smartmoney.pyruns34,276 bytestests/fixtures/smartmoney_fixture.jsonasset3,573 bytestests/test_smartmoney.pyruns15,452 bytestests/test_smartmoney_saved_wallets.pyruns3,255 bytes
Read SKILL.md
# Senpi Smart Money — where the proven money is moving
You are a sharp flow analyst answering "where is smart money moving?" A hidden engine builds the
cohorts, aggregates their positioning, finds the divergences, and pulls the near-term flow; **your
job is the analysis** — read where the proven money is leaning, where it splits from the crowd, and
whether the live flow confirms or contradicts it. The bar is high: this is the read a human can't
assemble by eyeballing a few whale wallets.
## The thesis (what "smart money" means here)
Two cohorts, defined by **lifetime realized PnL** — the only honest measure of who's actually good:
- **Smart money** — wallets with **≥ $1M realized gains.** The proven cohort.
- **The crowd** — wallets with **$10k–$100k realized.** Good enough to have made money, but theView the complete source on GitHubsenpi-strategy-author
When your agent uses it
Build or edit a Senpi trading strategy — interactively, ONE decision at a time. There is no paper-trading mode: a strategy is tested with `senpi validate` and a $10-floor live run, never with a scanner re-run on a timer (a model call per firing). Use for "build a strategy", "create a strategy from scratch", "design a strategy", "I have a trading idea", or ANY strategy that needs DSL (a runtime-supervised exit: stop-loss, trailing stop, profit-lock ladder) — a runtime.yaml authored here is the ONLY way to carry a DSL; raw MCP strategy_create* / create_position calls cannot, and must never stand up a named or protected strategy. Offers the closest TEMPLATE first (via senpi-strategy-discover) as the quick start to the user's OWN strategy, with fork-before-deploy, bespoke edit and scratch as peers, each with its cost class; never asks for a budget to build (it is asked once, at deploy); exits default to letting winners run, stated in price at leverage; the user names what you build. NOT for installing (senpi-strategy-ops) or picking one to run (senpi-strategy-discover).
What it loads into context
Frontmatter
334 tokensAlways available to the agent
SKILL.md
9,943 tokensWhen the skill is activated
Reference documents
33,790 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Start here — templates first, as the quick start to THEIR strategy; the other routes are peers
- ⛔ Never guess syntax — get it from the source (your memory is NOT authoritative)
- ▶ DEFAULT behavior — the rules of this conversation (do this every time)
- The 7 decisions — your question script (ask in order, ONE at a time)
- After the 7 — build it in STAGES, narrating as you go
- Wallets & concurrency — a new strategy NEVER blocks an existing one
- Invariants (every guess in this system fails silently — hold these)
- Editing an existing strategy
- Handoff & the live gate — deploy is `senpi-strategy-ops` (NEVER raw MCP); "done" means verified LIVE
Scripts executed separately
scripts/_yaml.pyscripts/validate_strategy.pytests/test_balance_rule_excludes_committed_capital.pytests/test_edit_describes_written_values.pytests/test_exit_preview_matches_presets.pytests/test_preset_time_cuts.pytests/test_reference_halt_latch.pytests/test_reference_list_limits.pytests/test_reference_time_units.pytests/test_scaffold_margin.pytests/test_scoring_py_is_optional.pytests/test_skill_signal_data_is_audit_only.pytests/test_undeclared_signal_data_key.pytests/test_validate_close_wiring.pytests/test_validate_crash_before_funding.pytests/test_validate_fees.pytests/test_validate_momentum_not_smart_money.pytests/test_validate_package_id.pytests/test_validate_tiers_and_exec.pytests/test_validate_wallet_binding.pytests/test_validate_warnings.py
Files
SKILL.mdcore39,519 bytesSKILL.mdcore39,519 bytesSKILL.mdcore39,519 bytesSKILL.mdcore39,519 bytesSKILL.mdcore39,519 bytesSKILL.mdcore39,519 bytesSKILL.mdcore39,519 bytesreferences/creating-a-strategy.mddoc48,526 bytesreferences/deployable-balance.mddoc3,782 bytesreferences/discovery-catalog-fields.mddoc5,167 bytesreferences/dsl-configuration.mddoc15,820 bytesreferences/dsl-presets.yamlasset7,846 bytesreferences/explaining-the-exit.mddoc4,467 bytesreferences/risk-gates.mddoc10,055 bytesreferences/shadow-testing.mddoc4,610 bytesreferences/signal-data-does-not-bind.mddoc1,658 bytesreferences/strategy-yaml-schema.mddoc6,868 bytesreferences/time-cuts-by-horizon.mddoc4,141 bytesscripts/_yaml.pyruns13,453 bytesscripts/validate_strategy.pyruns68,432 bytestests/test_balance_rule_excludes_committed_capital.pyruns4,777 bytestests/test_edit_describes_written_values.pyruns2,757 bytestests/test_exit_preview_matches_presets.pyruns8,171 bytestests/test_preset_time_cuts.pyruns4,555 bytestests/test_reference_halt_latch.pyruns1,790 bytestests/test_reference_list_limits.pyruns1,818 bytestests/test_reference_time_units.pyruns1,323 bytestests/test_scaffold_margin.pyruns3,964 bytestests/test_scoring_py_is_optional.pyruns3,009 bytestests/test_skill_signal_data_is_audit_only.pyruns2,069 bytestests/test_undeclared_signal_data_key.pyruns6,068 bytestests/test_validate_close_wiring.pyruns5,298 bytestests/test_validate_crash_before_funding.pyruns13,055 bytestests/test_validate_fees.pyruns2,595 bytestests/test_validate_momentum_not_smart_money.pyruns7,377 bytestests/test_validate_package_id.pyruns2,134 bytestests/test_validate_tiers_and_exec.pyruns4,371 bytestests/test_validate_wallet_binding.pyruns3,710 bytestests/test_validate_warnings.pyruns7,458 bytes../senpi-strategy-ops/references/refusal-playbook.mddoc27,901 bytes
Read SKILL.md
# Senpi Strategy Author — build a strategy *with* the user, one decision at a time
You build a strategy **by interviewing the user**, not by lecturing them. A strategy is a deployable
package; the runtime owns execution, sizing, exits, slots, risk, and state. The user only needs to
decide **the thesis** (what to trade and how to score it) and **the guardrails** (how to exit, how
much risk). Your job is to draw those out, one question at a time, and compile them.
> **DSL ⟹ author here. This is the boundary.** DSL — a runtime-supervised exit (stop-loss, trailing
> stop, profit-lock ladder, any managed stop that persists) — exists **only** inside a Runtime 3.0
> `runtime.yaml` `exit:` block, which is what this skill compiles. **Never** stand up a DSL-protected,
> named, or persistent strategy with a raw `strategy_create_custom_strategy` / `create_position` MCP
> call: that path can carry at most a *flat* `stopLossPercentage`, leaves `tradingStrategyName` null, and
> never registers in `installed_runtimes.json` — so the strategy is unnamed, unsupervised, and invisible
> to portfolio/DSL tooling (the confirmed **Decoupling** failure: $3k, three cross positions, *no* DSL,View the complete source on GitHubsenpi-strategy-discover
When your agent uses it
Help a user choose a Senpi trading strategy to deploy — a conversational, analyst-style picker. Use when the user asks "what should I trade?", "recommend a strategy", "help me pick a strategy", "what's winning?", "set me up", "I have a view on the world (a war, the economy, one coin winning) — trade it", "run a hedge fund / all-weather / tail-risk book", or wants a strategy but has NOT named a specific one — and every discretionary mandate: "deploy whatever you think is profitable", "trade for me", "be aggressive", "put it to work", "you decide". A mandate is a strategy request even when it names no strategy and no coin; it is never answered with hand-picked raw positions. Surface the closest matching TEMPLATE first — the quick start to the user's OWN strategy (every template deploys as `<User>'s <Template>` — or a name of their own — as-is or with levers moved, after ops walks them through it) — passing their worldview as `--theme` to rank the closest fits; offer building one as a peer with its cost class, never a downsell. You talk and RANK; a hidden engine (scripts/discover.py) fetches data + filters. NOT for installing a NAMED strategy (that's senpi-strategy-ops), or building/designing one from scratch or with a custom DSL (that's senpi-strategy-author).
What it loads into context
Frontmatter
378 tokensAlways available to the agent
SKILL.md
9,741 tokensWhen the skill is activated
Reference documents
5,544 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- The split: the engine FILTERS, you RANK
- Golden rules
- How to run the engine
- What the engine returns (and how you use each field)
- Conversation flow
- Variant families — do not offer two siblings at once
- Special paths
- Handoffs
- Skill Attribution
- Install — include the MCP helper
Scripts executed separately
scripts/discover.pyscripts/mcp_client.pytests/conversation/eval.workflow.jstests/fixtures/gen_fullfleet.pytests/test_accessible_usdc.pytests/test_class_theme_and_silent_narrowing.pytests/test_cli.pytests/test_default_catalog.pytests/test_discover.pytests/test_discover_saved_wallets.pytests/test_fullfleet.pytests/test_new_strategy_discoverability.pytests/test_scenarios.pytests/test_skill_surface_discover.pytests/test_theme.pytests/test_variants_are_reachable.py
Files
SKILL.mdcore37,676 bytescatalog.jsonasset395,485 bytesreferences/glossary.yamlasset12,686 bytesreferences/trade-frequency.mddoc5,016 bytesreferences/variant-families.mddoc13,237 bytesscripts/discover.pyruns46,540 bytesscripts/mcp_client.pyruns6,243 bytestests/conversation/actor-brief.mddoc3,121 bytestests/conversation/eval.workflow.jsruns15,900 bytestests/conversation/scenarios.yamlasset4,055 bytestests/fixtures/catalog_fixture.jsonasset10,441 bytestests/fixtures/catalog_fullfleet.jsonasset101,897 bytestests/fixtures/gen_fullfleet.pyruns24,013 bytestests/test_accessible_usdc.pyruns5,870 bytestests/test_class_theme_and_silent_narrowing.pyruns8,030 bytestests/test_cli.pyruns3,883 bytestests/test_default_catalog.pyruns8,746 bytestests/test_discover.pyruns12,053 bytestests/test_discover_saved_wallets.pyruns11,481 bytestests/test_fullfleet.pyruns6,177 bytestests/test_new_strategy_discoverability.pyruns7,703 bytestests/test_scenarios.pyruns6,069 bytestests/test_skill_surface_discover.pyruns4,911 bytestests/test_theme.pyruns9,021 bytestests/test_variants_are_reachable.pyruns4,064 bytes
Read SKILL.md
# Senpi Strategy Discover — the analyst-style picker
You are a sharp trading analyst helping the user pick a strategy. A hidden engine fetches data and
**filters** the catalog down to what's genuinely eligible; **you do the judgment** — understand what
they want, rank the eligible set, and recommend in a natural voice. It must never feel like a form.
## The split: the engine FILTERS, you RANK
- **The engine only removes the impossible.** `scripts/discover.py` takes a few **concrete** filter
flags, computes the complete eligible set, folds each variant family into one card, and returns a
bounded shortlist (8 by default): `meta.eligible_count` is how many fit, `meta.families_count` how
many cards they fold into, `meta.returned_n` how many came back.
- **Only `--theme` makes that shortlist a ranking.** With `--theme`, the engine scores the whole eligible
set on the user's words, then cuts — the 8 are the best matches. Without it, the 8 are the first 8 inView the complete source on GitHubsenpi-strategy-ops
When your agent uses it
Deploy / monitor / close a NAMED Senpi trading strategy. Monitoring is on demand: never an agent-turn cron to watch a strategy (a model call per firing) — the runtime supervises it at zero model cost, and there is no paper-trading mode ($10 floor = the test). Use when the user names a strategy to run — "install spider", "deploy polar", "set up kodiak", "reinstall athena", "run the spider strategy", "is my strategy live?", "what am I running", "list my strategies" (→ status.py), A STRATEGY IS A PACKAGE, NEVER A SKILL: "install/reinstall <name>" is `deploy.py create <id>` here — never `openclaw skills install`, never clawhub, and never a GitHub user or repo named after the strategy. A package missing from disk is normal (it was closed, or never fetched) and `deploy.py` fetches it by id. "are my positions protected? / do they have a stop-loss (DSL)?", "close/uninstall polar", "pause polar" / "stop new trades" / "stop opening positions" (→ watch-only, decision_mode: none; never the MCP strategy_pause) — and for teardown like "close all strategies", "return funds to main", "tear everything down" (→ close.py --all). ALWAYS tear down via close.py, never a raw strategy_close (that strands the runtime). ops deploys / closes / monitors; it does NOT author or edit strategy files — an edit ("make my live strategy more aggressive", change leverage/sizing/DSL) is authored in senpi-strategy-author, the only skill that knows the scanner / yaml / DSL schema — and "tighten the ratchet / change the tiers / the locks" on a LIVE strategy is applied here (update --apply), never parked "for the next position". A strategy is a PACKAGE (strategy.yaml + one runtime.yaml per instance + scanners/) the runtime supervises in-process — no scanner daemon. `deploy.py create <id> --budget <usd>` takes a package live end to end (it gates the package, then runs the runtime's detached deploy job; watch with `senpi deploy status`); close.py tears down (stop runtime + strategy_close → flattens positions, returns funds). Before the budget question ops runs THE WALKTHROUGH (Step 0.75): what the template does, how it is set, the two levers worth shifting — all in bullets and plain words, never a config key — and its name: every template deploys as the user's own fork, named after their Senpi username (`deploy.py create <template>` → `ignas-phalanx`, spoken as "Ignas's Phalanx"; `--name` for their own words), as-is or with levers moved. The id (spider, polar, kodiak) is the package folder. NOT for choosing WHICH strategy (senpi-strategy-discover) or authoring / editing the strategy files themselves (senpi-strategy-author).
What it loads into context
Frontmatter
739 tokensAlways available to the agent
SKILL.md
10,653 tokensWhen the skill is activated
Reference documents
39,661 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Deploy — one lifecycle: start the verb, poll `status` until terminal
- Monitor — what am I running? / is it actually live?
- Close — stop → trigger → (agent polls)
- Applying an edit to a strategy that is already LIVE
- Invariants
- Install — include the MCP helper
Scripts executed separately
scripts/_cli.pyscripts/_fetch.pyscripts/_fork.pyscripts/_pkg.pyscripts/_yaml.pyscripts/close.pyscripts/deploy.pyscripts/mcp_client.pyscripts/min_budget.pyscripts/run.shscripts/status.pyscripts/validate_universe.pytests/test_cli_reads.pytests/test_close.pytests/test_deploy_durable_root.pytests/test_deploy_update.pytests/test_deploy_where.pytests/test_deploy_wrapper.pytests/test_dex_awareness.pytests/test_entry_gate_reachability.pytests/test_error_tail.pytests/test_fetch_fork_prefix.pytests/test_fetch_through_callers.pytests/test_fork.pytests/test_min_budget_vendor_parity.pytests/test_never_traded_answer.pytests/test_pkg.pytests/test_pkg_refuses_keys_that_stop_no_entries.pytests/test_run_sh.pytests/test_skill_edit_not_live_until_applied.pytests/test_skill_serr124.pytests/test_skill_strategy_limits.pytests/test_skill_surface.pytests/test_status.pytests/test_status_health.pytests/test_status_risk.pytests/test_vendored_yaml_parses_every_package.pytests/test_walkthrough_tradable_minimum.py
Files
../senpi-strategy-discover/references/trade-frequency.mddoc5,016 bytes../senpi-strategy-discover/references/variant-families.mddoc13,237 bytesSKILL.mdcore42,091 bytesSKILL.mdcore42,091 bytesSKILL.mdcore42,091 bytesSKILL.mdcore42,091 bytesSKILL.mdcore42,091 bytesSKILL.mdcore42,091 bytesSKILL.mdcore42,091 bytesSKILL.mdcore42,091 bytesSKILL.mdcore42,091 bytesSKILL.mdcore42,091 bytesSKILL.mdcore42,091 bytesSKILL.mdcore42,091 bytesSKILL.mdcore42,091 bytesSKILL.mdcore42,091 bytesSKILL.mdcore42,091 bytesreferences/editing-a-live-strategy.mddoc16,105 bytesreferences/lifecycle.mddoc52,514 bytesreferences/liveness-verification.mddoc18,750 bytesreferences/refusal-playbook.mddoc27,901 bytesreferences/strategy-yaml-schema.mddoc6,868 bytesreferences/walkthrough.mddoc12,250 bytesscripts/_cli.pyruns47,213 bytesscripts/_fetch.pyruns6,596 bytesscripts/_fork.pyruns9,223 bytesscripts/_pkg.pyruns24,560 bytesscripts/_yaml.pyruns13,453 bytesscripts/close.pyruns19,369 bytesscripts/deploy.pyruns123,042 bytesscripts/mcp_client.pyruns6,735 bytesscripts/min_budget.pyruns10,070 bytesscripts/run.shruns3,640 bytesscripts/status.pyruns21,409 bytesscripts/validate_universe.pyruns9,317 bytestests/test_cli_reads.pyruns23,824 bytestests/test_close.pyruns22,438 bytestests/test_deploy_durable_root.pyruns1,878 bytestests/test_deploy_update.pyruns6,595 bytestests/test_deploy_where.pyruns992 bytestests/test_deploy_wrapper.pyruns138,411 bytestests/test_dex_awareness.pyruns9,148 bytestests/test_entry_gate_reachability.pyruns14,842 bytestests/test_error_tail.pyruns5,016 bytestests/test_fetch_fork_prefix.pyruns4,490 bytestests/test_fetch_through_callers.pyruns2,688 bytestests/test_fork.pyruns10,987 bytestests/test_min_budget_vendor_parity.pyruns900 bytestests/test_never_traded_answer.pyruns6,702 bytestests/test_pkg.pyruns39,149 bytestests/test_pkg_refuses_keys_that_stop_no_entries.pyruns4,965 bytestests/test_run_sh.pyruns3,548 bytestests/test_skill_edit_not_live_until_applied.pyruns2,894 bytestests/test_skill_serr124.pyruns4,528 bytestests/test_skill_strategy_limits.pyruns6,198 bytestests/test_skill_surface.pyruns32,289 bytestests/test_status.pyruns7,840 bytestests/test_status_health.pyruns13,744 bytestests/test_status_risk.pyruns11,305 bytestests/test_vendored_yaml_parses_every_package.pyruns11,791 bytestests/test_walkthrough_tradable_minimum.pyruns3,062 bytes../senpi-trading-runtime/references/dsl-protection-check.mddoc5,150 bytes
Read SKILL.md
# Senpi Strategy Ops — deploy, monitor, close
A strategy is a **package**: `strategy.yaml` (the deploy manifest) + one `runtime.yaml` per instance +
`<instance>/scanners/`. The runtime **spawns and supervises** each `scanners/scan.py`, calling
`scan(inputs, ctx)` every `interval_seconds` and owning everything downstream — signal validation,
sizing/execution, the two-phase DSL exit, risk guard-rails. **There is no separate scanner daemon, no
`push_signal`.** Ops owns the deployed lifecycle. Deploy is **one verb**, run as a **detached job**:
funds preflight → wallet create+fund → runtime install → one observed scanner tick. It returns in ~1s
and you poll until it is terminal.
```
openclaw senpi validate <recipe-dir> # 0a. does it RUN? records the proof create needs
python3 /data/.openclaw/skills/senpi-strategy-ops/scripts/deploy.py validate <id> # 0b. preflight — structurally deploy-ready? (no money, nothing installed; a bare id is fetched to disk)
python3 /data/.openclaw/skills/senpi-strategy-ops/scripts/deploy.py fork <id> # 0c. their copy on disk — only when levers move before fundingView the complete source on GitHubsenpi-trade
When your agent uses it
Execute a DIRECT trade with the user — a one-off manual position (open / edit / close) or mirroring a specific Hyperliquid trader — ONE decision at a time. Use for "go long HYPE 10x", "short BTC", "buy SOL and set a stop", "close my ETH", "copy this wallet", "mirror this whale", "follow this trader", "find me a trader to copy". Both paths can carry protection and it is OPTIONAL: bare, a static stop/TP, or a profit-lock trailing ladder (`ratchet_stop_add`, no runtime) — but that ladder is profit-lock ONLY (no downside floor); the full two-phase DSL (a ratcheting max-loss floor + the profit locks) is runtime-only, so route to a managed mirror template for real two-sided protection. Any question about a stop or a ladder, and any change to one, runs the protection protocol: read it in the same turn, quote the engine's floor (never compute one), say what a change replaces and get a yes, read it back. Steer users to a MANAGED strategy when they want ongoing autonomy — senpi-strategy-author (custom runtime) or a template via senpi-strategy-discover, including the named mirror templates (Remora, Shadow, Oxpecker, Raptor, Cuckoo) that size to the user and auto-trail DSL on every fill (Shadow / Jackal also enter fresh-only). Pairs with senpi-trader-research, which finds and vets the trader (this skill runs the mirror once one is chosen). NOT for authoring a strategy or deploying a template yourself.
What it loads into context
Frontmatter
435 tokensAlways available to the agent
SKILL.md
8,516 tokensWhen the skill is activated
Reference documents
4,623 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Protection is OPTIONAL — and know exactly what a raw position can carry
- The protection protocol — reading and changing a stop on a position
- Branch A — Manual position (open / edit / close)
- Branch B — Mirror a specific trader
- The guardrails — every one earned from real mirror-trading churn
- Handoff & boundaries
- Red flags — STOP and re-check
Scripts executed separately
tests/test_trade_skill_surface.py
Files
SKILL.mdcore34,417 bytesSKILL.mdcore34,417 bytesSKILL.mdcore34,417 bytesreferences/mirror-monitoring.mddoc3,080 bytesreferences/mirror-trading-explained.mddoc8,865 bytesreferences/protection-cases.mddoc6,240 bytestests/test_trade_skill_surface.pyruns6,102 bytes
Read SKILL.md
# Senpi Trade — execute a direct trade *with* the user, one decision at a time
This skill runs the two **direct** trade paths: a **manual one-off position** (open / edit / close)
and a **mirror** of a specific trader. You draw the trade out one question at a time, sanity-check
it, execute it, and confirm the **real** returned result — never firing a money tool on a guess.
## Protection is OPTIONAL — and know exactly what a raw position can carry
> A manual position or a raw mirror can run **bare**, with a **static stop/TP**, or with a **profit-lock
> trailing ladder** (`ratchet_stop_add`) — all with **no runtime.** But be precise about that ladder: it
> is **profit-lock ONLY.** It trails a stop **up as the position gains** (and never loosens) — it does
> **NOT** place a downside floor. On a raw position you are **bare on the losing side until a profit tier
> triggers.** (The MCP `ratchet_stop_add` tool silently drops `max_loss_pct` / `retrace_threshold` — the
> Phase-1 floor is **not persisted** without a runtime; only the tier ladder sticks.)View the complete source on GitHubsenpi-trader-research
When your agent uses it
Research Hyperliquid traders to copy — rank the best track records and vet a specific trader before mirroring. Use for "who should I copy?", "find good traders", "is this trader any good?", "should I copy 0x…?", "best traders this month", "top copy strategies". Use this instead of piecing together discovery_get_trader_history / discovery_get_trader_state + leaderboard yourself. A hidden engine (scripts/research.py) ranks track records AND scores whether you can actually copy each trader right now — live book, distance-from-entry mirrorability, 4h momentum; you make the call. Requires a USER-scoped Senpi token. NOT for reading a book to LEARN from rather than mirror — "run AI quant on 0x…", "score my trading", "find leaks", "find traders for me to analyze", "how does this trader actually trade" — that is `quant-desk`, which needs no token and works on any address. The split is the verb: COPY comes here, ANALYSE goes there. One of the user's saved wallets (the ones they added in Your wallets) is never a copy candidate: the engine routes it to `quant-desk`.
What it loads into context
Frontmatter
317 tokensAlways available to the agent
SKILL.md
6,967 tokensWhen the skill is activated
Reference documents
819 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Golden rules
- How to run the engine
- Output contract
- Mandatory closing — render as a LIST, each option on its OWN line (never a run-on paragraph)
- ⚠ Token scope
- Skill Attribution
- Install — both scripts are required
Scripts executed separately
scripts/mcp_client.pyscripts/research.pytests/test_research.pytests/test_research_saved_wallets.py
Files
SKILL.mdcore27,297 bytesreferences/analysis-framework.mddoc3,206 bytesscripts/mcp_client.pyruns6,241 bytesscripts/research.pyruns46,995 bytestests/fixtures/research_fixture.jsonasset5,171 bytestests/test_research.pyruns21,839 bytestests/test_research_saved_wallets.pyruns8,349 bytes
Read SKILL.md
# Senpi Trader Research — find & vet copy candidates
> **Not this skill?** "Analyze this trader", "how do they trade", "where do they leak", "score my
> trading", "find traders for me to analyze" → **`quant-desk`**. It reads any Hyperliquid
> address on public data with no token and returns the full desk — strategy read, six scored
> dimensions, leaks priced as charged counterfactuals, protection audit, both cohorts. This skill
> answers a narrower question: **is this trader worth MIRRORING, and can I mirror them right now.**
> If someone asks to analyse a trader and then decides to copy them, run the desk first and hand
> off here.
**One of the user's saved wallets? Not a copy candidate.** A saved wallet is one the user added in Your
wallets and trades by hand — a wallet they added, read-only to Senpi. The engine decides it, never guess: it
reads `user_get_me.external_wallets` and matches the address case-insensitively.
- **`--trader` on a saved wallet** returns `saved_wallet` (with `trader: null`) instead of a dossier: relayView the complete source on GitHubsenpi-trading-runtime
When your agent uses it
How a Senpi trading strategy interacts with the runtime engine (@senpi-ai/runtime) on Hyperliquid: a strategy runs from a runtime.yaml pointing at a Python module that exports scan(inputs, ctx), which the runtime supervises and calls each interval, then owns execution, risk guard_rails, and two-phase DSL trailing-stop exits. Use when working with runtime.yaml, the scan(inputs, ctx) contract, external_scanner, ctx, or the DSL exit engine (the Ratchet Stop / tier ladder) or the risk guard rails (a latched daily-loss or drawdown halt) — including verifying open positions are protected by DSL (have a working stop-loss). The shared runtime contract the lifecycle skills reference. NOT for building, installing, or picking a strategy (→ senpi-strategy-author / senpi-strategy-ops / senpi-strategy-discover).
What it loads into context
Frontmatter
243 tokensAlways available to the agent
SKILL.md
2,837 tokensWhen the skill is activated
Reference documents
18,206 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- The runtime model
- How your code talks to the runtime
- Runtime commands (essentials)
- The reference set
- Package naming (load-bearing)
Scripts executed separately
scripts/behaviour_hash.pyscripts/gen_catalog.pyscripts/min_budget.pytests/test_edit_is_live_only_after_apply.pytests/test_min_budget_golden.pytests/test_min_budget_tier_shapes.pytests/test_reference_candle_time_units.pytests/test_reference_time_cuts_either_phase.py
Files
SKILL.mdcore11,513 bytesSKILL.mdcore11,513 bytesSKILL.mdcore11,513 bytesSKILL.mdcore11,513 bytesreferences/dsl-protection-check.mddoc5,150 bytesreferences/runtime-cli.mddoc14,898 bytesreferences/runtime-concepts.mddoc15,973 bytesreferences/runtime-yaml.mddoc18,493 bytesreferences/scan-contract.mddoc16,106 bytesscripts/behaviour_hash.pyruns11,379 bytesscripts/gen_catalog.pyruns13,746 bytesscripts/min_budget.pyruns10,070 bytestests/fixtures/min_budget_golden.jsonasset2,412 bytestests/test_edit_is_live_only_after_apply.pyruns3,328 bytestests/test_min_budget_golden.pyruns2,712 bytestests/test_min_budget_tier_shapes.pyruns2,615 bytestests/test_reference_candle_time_units.pyruns711 bytestests/test_reference_time_cuts_either_phase.pyruns773 bytes
Read SKILL.md
# Senpi Trading Runtime — the runtime contract
This skill is **infrastructure**: the canonical knowledge of how the Senpi runtime
(**`@senpi-ai/runtime`**) behaves and how a strategy interacts with it. The lifecycle skills —
author (build), ops (install/monitor), discover (recommend) — reference this one for the contract.
## The runtime model
A strategy runs from a **`runtime.yaml`** that points at an in-repo Python module. The runtime **spawns and
supervises** that module and calls a frozen **`scan(inputs, ctx)`** every `interval_seconds`. The
division of labor is fixed:
- **Your code produces signals — nothing else.** `scan(inputs, ctx)` *reads* market and account data
and *returns* a `list[dict]` of candidate signals. It does not open, close, size, schedule, orView the complete source on GitHubsenpi-why
When your agent uses it
Answer "what makes Senpi different?" / "why Senpi?" / "Senpi vs other trading apps, bots or AI chatbots?" — the positioning answer, led by value, not a feature dump. Use for "why should I use Senpi", "how is Senpi different", "what's special/unique about Senpi", "Senpi vs <competitor>", "is Senpi just another trading UI", "how are you different from ChatGPT / Claude / any AI", "why not just ask ChatGPT", and "where's the proof you actually make people money" — in any language. Lead with the category — Senpi is your AI quant: reads the whole market, reviews your trading, codes and runs your strategy with the risk managed, wherever you trade — then three pillars; keep the machinery under the hood and never promise outcomes. Pure narration, no engine; read live numbers (the user's own fee, market count) live, never from memory.
What it loads into context
Frontmatter
262 tokensAlways available to the agent
SKILL.md
2,116 tokensWhen the skill is activated
Reference documents
762 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Lead with the category
- The three pillars (in this order)
- Wherever you trade, and what it costs (after the pillars, one line each)
- Supporting facts (proof, not the lead)
- "You're no different from ChatGPT"
- "Show me it actually makes people money"
- Voice guardrails (always)
- Make "build it in plain English" concrete
- How to answer
Files
SKILL.mdcore8,761 bytesreferences/overview-positioning.mddoc3,283 bytes
Read SKILL.md
# senpi-why — what makes Senpi different
Answer positioning questions the way Senpi wants to be understood: **lead with value, keep the
machinery under the hood, never promise outcomes.** The overview guide (`senpi://guides/senpi-overview`)
explains how things work; this skill answers why Senpi is a different category. Answer from here.
## Lead with the category
> **Senpi is your AI quant.** It reads the whole market, reviews your trading, codes your strategy
> and runs it around the clock with the risk managed, wherever you trade. *What Cursor and Claude
> are for code, Senpi is for trading.*
Most trading apps are a nicer screen on the same manual workflow: you still watch, decide and click.
The other side of your trade is often a quant desk, with code, data and risk systems that neverView the complete source on GitHubSkills included
- quant-desk
- senpi-account-status
- senpi-deposit-withdraw-transfer
- senpi-improve-trades
- senpi-market-pulse
- senpi-portfolio
- senpi-signals
- senpi-smart-money
- senpi-strategy-author
- senpi-strategy-discover
- senpi-strategy-ops
- senpi-trade
- senpi-trader-research
- senpi-trading-runtime
- senpi-why
Repository facts
- License
- MIT
- Created
- Feb 23, 2026
- Last pushed
- Nov 6, 2026
- Forks
- 37
- Open issues
- 7
- Project activity
- Active
Before you install
Network or broad shellAutomated signals, not a guarantee
Checked Nov 4, 2026
Not fully analyzed: some files were too long, unreadable or missing. This never lowers the level.
Show 75 notes
quant-desk/SKILL.md:3Analysis incomplete: physical or joined line exceeds character limitquant-desk/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedquant-desk/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedquant-desk/tests/fixtures/sample_trader.json:1Analysis incomplete: physical or joined line exceeds character limitsenpi-account-status/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedsenpi-account-status/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedsenpi-improve-trades/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedsenpi-improve-trades/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedsenpi-improve-trades/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedsenpi-improve-trades/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedsenpi-improve-trades/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedsenpi-improve-trades/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedsenpi-improve-trades/tests/fixtures/registry/installed_runtimes.json:7Analysis incomplete: physical or joined line exceeds character limitsenpi-improve-trades/tests/fixtures/registry/installed_runtimes.json:5Analysis incomplete: physical or joined line exceeds character limitsenpi-improve-trades/tests/fixtures/registry/installed_runtimes.json:6Analysis incomplete: physical or joined line exceeds character limitsenpi-market-pulse/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedsenpi-market-pulse/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedsenpi-market-pulse/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedsenpi-market-pulse/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedsenpi-market-pulse/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzed
- No broad tool permissions
- 2 dangerous shell commandsin 1 file: senpi-strategy-author/references/shadow-testing.md:44
- 406 network referencesin 131 files: senpi-signals/tests/test_sweep.py:146 quant-desk/scripts/hl_api.py:4 senpi-signals/scripts/sweep.py:6 and 128 more
- 1 obfuscation signalin 1 file: senpi-strategy-discover/catalog.json:3924
- No instruction overrides
- 193 executable scriptsin 169 files: senpi-strategy-ops/scripts/deploy.py:1 senpi-strategy-ops/scripts/status.py:1 quant-desk/scripts/addresses.py:1 and 166 more
- 204 references to secretsin 58 files: senpi-improve-trades/tests/test_review.py:36 senpi-portfolio/tests/test_portfolio.py:49 senpi-strategy-ops/tests/test_deploy_wrapper.py:111 and 55 more
- No requests to vote in Hot
Show all 806 signals by file
quant-desk/SKILL.md
quant-desk/scripts/addresses.py
quant-desk/scripts/benchmark.py
- Executable scriptline 1
#!/usr/bin/env python3 - Access to secretsline 4
[Credential-related source omitted] - Network accessline 11
[Credential-related source omitted] - Access to secretsline 11
[Credential-related source omitted] - Network accessline 13
# Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Network accessline 36
closed, opened = episodes_from_fills(fills) if mcp is not None: rows = senpi_history.fetch(mcp, addr, win_start, {}) - Network accessline 37
if mcp is not None: rows = senpi_history.fetch(mcp, addr, win_start, {}) if rows: - Network accessline 38
rows = senpi_history.fetch(mcp, addr, win_start, {}) - Access to secretsline 55
[Credential-related source omitted]
quant-desk/scripts/blacklist.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 14
POST https://hyperliquid-traders.prod.senpi.ai/graphql - Access to secretsline 15
[Credential-related source omitted] - Network accessline 60
Stdlib only, matching the rest of this skill. """ # Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Network accessline 62
# Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Network accessline 68
[Credential-related source omitted] - Access to secretsline 68
[Credential-related source omitted] - Access to secretsline 69
[Credential-related source omitted] - Network accessline 124
[Credential-related source omitted] - Network accessline 125
headers["Authorization"] = f"Bearer {token}" req = urllib.request.Request(url, data=body, headers=headers, method="POST") try: - Network accessline 126
req = urllib.request.Request(url, data=body, headers=headers, method="POST") - Network accessline 127
try: with urllib.request.urlopen(req, timeout=timeout) as r: raw = r.read() - Network accessline 128
with urllib.request.urlopen(req, timeout=timeout) as r: - Access to secretsline 189
[Credential-related source omitted]
quant-desk/scripts/book.py
quant-desk/scripts/deep.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 2
"""The deep modes behind the follow-ups. Each takes the cached analysis (plus candles where needed) and returns a dict the renderer knows. Same rules as the desk: computed, counterfactual, process only.""" # Copyright 2026 Senpi (https://se - Network accessline 4
# Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0
quant-desk/scripts/desk.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 12
(public-leaderboard cohort otherwise). Fails open: every optional layer degrades to a warning in `meta`. """ # Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Network accessline 14
# Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Access to secretsline 80
[Credential-related source omitted] - Network accessline 651
rows = [] for _w in (wallets or [addr]): _r = senpi_history.fetch(mcp, _w, win_start, meta) - Network accessline 652
for _w in (wallets or [addr]): _r = senpi_history.fetch(mcp, _w, win_start, meta) for _e in _r: - Network accessline 653
_r = senpi_history.fetch(mcp, _w, win_start, meta) - Network accessline 803
for name, fetch in (("proven", smart_money.proven_cohort), ("hot", smart_money.hot_cohort)): try: addrs = _drop_market_makers(fetch(mcp, meta), meta, name) - Network accessline 804
try: addrs = _drop_market_makers(fetch(mcp, meta), meta, name) bks = smart_money.books(mcp, addrs, meta, progress=log, label={"proven": "the proven cohort, ", "hot": "the hot 30-day cohort, "}.get(nam - Network accessline 805
addrs = _drop_market_makers(fetch(mcp, meta), meta, name)
quant-desk/scripts/dsl.py
quant-desk/scripts/followups.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 3
desk. Each maps to a `--deep <mode>`; the desk holds these back on purpose — the more the trader asks, the more of their own book they see.""" # Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Network accessline 4
more of their own book they see.""" # Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 # Two of these answer from what is ALREADY on screen and carry no `--deep` mode: the desk output - Network accessline 5
# Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0
quant-desk/scripts/hl_api.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 4
`POST https://api.hyperliquid.xyz/info` with `{"type": ..., "user": "0x..."}`. Stdlib only. Every call - Network accessline 8
`startTime = last.time + 1` until a short page. """ # Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Network accessline 10
# Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Network accessline 25
[Credential-related source omitted] - Access to secretsline 25
[Credential-related source omitted] - Network accessline 26
[Credential-related source omitted] - Access to secretsline 26
[Credential-related source omitted] - Network accessline 149
if hit is not None: return hit req = urllib.request.Request(INFO_URL, data=json.dumps(body).encode(), headers={"Content-Type": "application/json"}) - Network accessline 150
return hit req = urllib.request.Request(INFO_URL, data=json.dumps(body).encode(), headers={"Content-Type": "application/json"}) data = None - Network accessline 151
req = urllib.request.Request(INFO_URL, data=json.dumps(body).encode(), headers={"Content-Type": "application/json"}) - Network accessline 154
self.calls += 1 try: with urllib.request.urlopen(req, timeout=self.timeout) as r: - Network accessline 155
try: with urllib.request.urlopen(req, timeout=self.timeout) as r: data = json.load(r) - Network accessline 156
with urllib.request.urlopen(req, timeout=self.timeout) as r: - Network accessline 359
self.calls += 1 try: with urllib.request.urlopen(urllib.request.Request(LEADERBOARD_URL), timeout=max(self.timeout, 120)) as r: - Network accessline 360
try: with urllib.request.urlopen(urllib.request.Request(LEADERBOARD_URL), timeout=max(self.timeout, 120)) as r: data = json.load(r) - Network accessline 361
with urllib.request.urlopen(urllib.request.Request(LEADERBOARD_URL), timeout=max(self.timeout, 120)) as r:
quant-desk/scripts/market.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 3
each open position sits with or against them. Funding is quoted per 8h in basis points (Hyperliquid pays hourly; hourly rate × 8 × 10,000).""" # Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Network accessline 5
# Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0
quant-desk/scripts/mcp_client.py
- Executable scriptline 1
#!/usr/bin/env python3 - Access to secretsline 7
[Credential-related source omitted] - Network accessline 11
failures (result.isError) raise MCPError so callers log a warning instead of silently reading None. """ # Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Network accessline 13
# Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Network accessline 14
import http.client - Network accessline 20
[Credential-related source omitted] - Access to secretsline 20
[Credential-related source omitted] - Access to secretsline 21
[Credential-related source omitted] - Network accessline 42
} hdrs.update(headers) cls = http.client.HTTPSConnection if scheme == "https" else http.client.HTTPConnection - Network accessline 43
hdrs.update(headers) cls = http.client.HTTPSConnection if scheme == "https" else http.client.HTTPConnection conn = cls(host, port, timeout=timeout) - Network accessline 44
cls = http.client.HTTPSConnection if scheme == "https" else http.client.HTTPConnection
quant-desk/scripts/metrics.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 2
"""The desk's core numbers from public Hyperliquid data: track record, costs, holds, sizing, per-coin table, the open book with its protection audit, transfer-adjusted equity and drawdown, activity.""" # Copyright 2026 Senpi (https://senpi. - Network accessline 4
# Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0
quant-desk/scripts/opportunities.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 2
"""Live matches: where today's market, the cohorts and the trader's own best pattern point the same way. Process framing only — a match is a setup that fits how this trader wins, never a call to buy a coin.""" # Copyright 2026 Senpi (https: - Network accessline 4
# Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0
quant-desk/scripts/render.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 2
"""The desk as Markdown for chat. Sections can be rendered alone (`--section`) so a follow-up question ("are my positions protected?") answers from the cached analysis without a refetch.""" # Copyright 2026 Senpi (https://senpi.ai) — Apache - Network accessline 4
# Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0
quant-desk/scripts/roundtrips.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 15
Only `complete` episodes (not truncated, close observed, no unobserved size) feed entry- and hold-based statistics; P&L, fee and volume totals sum every observed fill.""" # Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Network accessline 17
# Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0
quant-desk/scripts/score.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 3
archetype, flag chips, the verdict, the leaks ranked by counterfactual dollars, and where the edge is. Every number here is a transparent function of the metrics — the formulas are in references/methodology.md.""" # Copyright 2026 Senpi (ht - Network accessline 5
# Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0
quant-desk/scripts/senpi_history.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 14
cross-liquidations and HIP-3 `xyz:` assets. Those rows still carry real realized P&L, so they are kept and marked `complete=False`/`truncated=True` rather than dropped.""" # Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Network accessline 16
# Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Network accessline 47
def fetch(client, addr, window_start_ms, meta):
quant-desk/scripts/smart_money.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 10
Per coin the cohort's bias is net/gross signed notional in [-1, +1]. The you-vs-whale-median table reads `references/benchmark.json`, computed by `benchmark.py` over the public cohort with this skill's own engine.""" # Copyright 2026 Senpi - Network accessline 12
# Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0
quant-desk/scripts/strategy_read.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 2
"""What the trader has actually been doing — a strategy fingerprint with receipts, plus a rule-based critique. Everything here is computed; the agent turns it into the two-paragraph read.""" # Copyright 2026 Senpi (https://senpi.ai) — Apach - Network accessline 4
# Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0
quant-desk/scripts/taxonomy.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 4
documented list; xyz groups are senpi-market-pulse's own (verbatim), so the two skills agree. A coin from another builder's perp dex (`flx:`, `km:`, `hyna:` …) is that dex's market, not an alt.""" # Copyright 2026 Senpi (https://senpi.ai) — - Network accessline 6
# Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0
quant-desk/scripts/timing.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 4
are positive across a small fixed grid (never a fitted parameter). Dollar figures use peak size × price move — an approximation that ignores adds and partials, and is labelled as such.""" # Copyright 2026 Senpi (https://senpi.ai) — Apache-2 - Network accessline 6
# Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0
quant-desk/scripts/voice.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 3
person — English second person and third person plural share every verb form, so the switch is a pronoun rewrite. The product persona ("your quant") stays addressed to the reader, who hired it.""" # Copyright 2026 Senpi (https://senpi.ai) — - Network accessline 5
# Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0
quant-desk/tests/test_account_split.py
- Executable scriptline 1
Executable file
quant-desk/tests/test_addresses.py
quant-desk/tests/test_book.py
- Executable scriptline 1
Executable file
quant-desk/tests/test_book_breadth_gate.py
- Executable scriptline 1
Executable file
quant-desk/tests/test_dsl_attach.py
- Executable scriptline 1
Executable file
quant-desk/tests/test_mm_blacklist.py
- Executable scriptline 1
Executable file - Network accessline 345
src = open(os.path.join(HERE, "..", "scripts", "desk.py"), encoding="utf-8").read() assert "_drop_market_makers(fetch(mcp, meta), meta, name)" in src, ( - Network accessline 346
assert "_drop_market_makers(fetch(mcp, meta), meta, name)" in src, (
quant-desk/tests/test_my_wallets.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 3
ones they added in Your wallets — their claim, read from user_get_me) plus their Senpi strategy wallets. A typed "that one's mine" is this run's voice only and is never saved. Unknown is never empty.""" # Copyright 2026 Senpi (https://senpi - Network accessline 5
# Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0
quant-desk/tests/test_positions_unread.py
- Executable scriptline 1
Executable file - Network accessline 3
never prints "No open positions" or "nothing here" over it; a --book run names the wallet whose read failed instead of silently merging what it got. Mirrors the orders-unread signal (test_protection_unread).""" # Copyright 2026 Senpi (https - Network accessline 5
# Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0
quant-desk/tests/test_protection_shared.py
- Executable scriptline 1
Executable file - Network accessline 8
Every case runs through `metrics.open_book` — the desk's real parse path, not the rule alone — so the dex split, the order lists and the derived naked / partial lists are all under test.""" # Copyright 2026 Senpi (https://senpi.ai) — Apache - Network accessline 10
# Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0
quant-desk/tests/test_protection_unread.py
- Executable scriptline 1
Executable file - Network accessline 3
Plus the edges the shared fixtures do not cover: a missing `reduceOnly` key is not a stop, a stop that is not reduce-only is named truthfully, and a PARTIAL row never prints 100%.""" # Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Network accessline 5
# Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0
quant-desk/tests/test_quant.py
- Executable scriptline 1
Executable file - Access to secretsline 258
[Credential-related source omitted] - Access to secretsline 493
[Credential-related source omitted] - Network accessline 1986
meta = {} rows = senpi_history.fetch(_Client(), "0x" + "a" * 40, 0, meta) - Network accessline 1987
rows = senpi_history.fetch(_Client(), "0x" + "a" * 40, 0, meta) - Network accessline 2459
meta = {} rows = senpi_history.fetch(_Client(), "0x" + "a" * 40, 0, meta) - Network accessline 2460
rows = senpi_history.fetch(_Client(), "0x" + "a" * 40, 0, meta) - Access to secretsline 3389
[Credential-related source omitted]
quant-desk/tests/test_state_version.py
- Executable scriptline 1
Executable file - Network accessline 2
was judged under the old protection rule; re-rendering it under the new one would print the old verdict with the new version in the header.""" # Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Network accessline 4
# Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0
quant-desk/tests/test_subject_and_flight.py
- Executable scriptline 1
Executable file
senpi-account-status/SKILL.md
- Access to secretsline 177
[Credential-related source omitted]
senpi-account-status/scripts/mcp_client.py
- Executable scriptline 1
#!/usr/bin/env python3 - Access to secretsline 7
[Credential-related source omitted] - Network accessline 11
failures (result.isError) raise MCPError so callers log a warning instead of silently reading None. """ # Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Network accessline 13
# Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Network accessline 14
import http.client - Network accessline 20
[Credential-related source omitted] - Access to secretsline 20
[Credential-related source omitted] - Access to secretsline 21
[Credential-related source omitted] - Network accessline 42
} hdrs.update(headers) cls = http.client.HTTPSConnection if scheme == "https" else http.client.HTTPConnection - Network accessline 43
hdrs.update(headers) cls = http.client.HTTPSConnection if scheme == "https" else http.client.HTTPConnection conn = cls(host, port, timeout=timeout) - Network accessline 44
cls = http.client.HTTPSConnection if scheme == "https" else http.client.HTTPConnection
senpi-account-status/scripts/status.py
senpi-account-status/tests/test_skill_surface.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 5
the frontmatter, the shape the skill documents is the shape the engine returns, and the version the README advertises is the version the skill carries.""" # Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Network accessline 7
# Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0
senpi-account-status/tests/test_status.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 5
(success/data envelopes, decimals-as-strings) — do not hand-edit shapes; re-record with `status.py --dry` if the API changes.""" # Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Network accessline 7
# Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0
senpi-deposit-withdraw-transfer/tests/test_money_rails_skill.py
senpi-improve-trades/scripts/_yaml.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 9
we don't interpret descriptions). Validated for byte-equality against PyYAML on the example packages. """ # Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Network accessline 11
# Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0
senpi-improve-trades/scripts/mcp_client.py
- Executable scriptline 1
#!/usr/bin/env python3 - Access to secretsline 7
[Credential-related source omitted] - Network accessline 11
failures (result.isError) raise MCPError so callers log a warning instead of silently reading None. """ # Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Network accessline 13
# Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Network accessline 14
import http.client - Network accessline 20
[Credential-related source omitted] - Access to secretsline 20
[Credential-related source omitted] - Access to secretsline 21
[Credential-related source omitted] - Network accessline 42
} hdrs.update(headers) cls = http.client.HTTPSConnection if scheme == "https" else http.client.HTTPConnection - Network accessline 43
hdrs.update(headers) cls = http.client.HTTPSConnection if scheme == "https" else http.client.HTTPConnection conn = cls(host, port, timeout=timeout) - Network accessline 44
cls = http.client.HTTPSConnection if scheme == "https" else http.client.HTTPConnection
senpi-improve-trades/scripts/review.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 30
[Credential-related source omitted] - Access to secretsline 30
[Credential-related source omitted] - Network accessline 32
# Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Network accessline 47
WINDOW_DEFAULT_DAYS = 7 # the default review window TOP_MOVERS_CAP = 12 # cap the book-vs-market movers surfaced HL_INFO_URL = "https://api.hyperliquid.xyz/info" # public, no-auth — durable closed-trade recovery - Network accessline 48
TOP_MOVERS_CAP = 12 # cap the book-vs-market movers surfaced HL_INFO_URL = "https://api.hyperliquid.xyz/info" # public, no-auth — durable closed-trade recovery HL_FILLS_CAP = 2000 # userFills returns the most recent N fi - Network accessline 49
HL_INFO_URL = "https://api.hyperliquid.xyz/info" # public, no-auth — durable closed-trade recovery - Access to secretsline 113
[Credential-related source omitted] - Access to secretsline 820
[Credential-related source omitted] - Network accessline 1091
try: p = subprocess.run( ["curl", "-s", "-m", str(timeout), "-w", "\n%{http_code}", "-X", "POST", HL_INFO_URL, - Network accessline 1092
p = subprocess.run( ["curl", "-s", "-m", str(timeout), "-w", "\n%{http_code}", "-X", "POST", HL_INFO_URL, "-H", "Content-Type: application/json", "-d", json.dumps(payload)], - Network accessline 2977
# DISCOVERY owns trades[] (onchain facts); TELEMETRY enriches exit_reason + yields the standalone streams # (missed_signals + the leak/fill rollups), all from ONE per-runtime event fetch (no re-fetch downstream). - Network accessline 2978
# (missed_signals + the leak/fill rollups), all from ONE per-runtime event fetch (no re-fetch downstream).
senpi-improve-trades/tests/test_book_state.py
senpi-improve-trades/tests/test_hl_info_retry.py
senpi-improve-trades/tests/test_improve_trades_skill_layout.py
senpi-improve-trades/tests/test_main_wallet_row.py
senpi-improve-trades/tests/test_ratchet_attribution.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 11
Trade times below are that account's on-chain round trips. """ # Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Network accessline 13
# Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Access to secretsline 196
[Credential-related source omitted] - Access to secretsline 197
[Credential-related source omitted] - Access to secretsline 202
[Credential-related source omitted] - Access to secretsline 204
[Credential-related source omitted]
senpi-improve-trades/tests/test_review.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 13
python3 -m pytest senpi-improve-trades/tests/ # or: python3 tests/test_review.py """ # Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Network accessline 15
# Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Access to secretsline 36
[Credential-related source omitted] - Access to secretsline 37
[Credential-related source omitted] - Access to secretsline 43
[Credential-related source omitted] - Access to secretsline 45
[Credential-related source omitted] - Access to secretsline 219
[Credential-related source omitted] - Access to secretsline 220
[Credential-related source omitted] - Access to secretsline 225
[Credential-related source omitted] - Access to secretsline 227
[Credential-related source omitted] - Access to secretsline 349
[Credential-related source omitted] - Access to secretsline 350
[Credential-related source omitted] - Access to secretsline 355
[Credential-related source omitted] - Access to secretsline 357
[Credential-related source omitted] - Access to secretsline 449
[Credential-related source omitted] - Access to secretsline 450
[Credential-related source omitted] - Access to secretsline 455
[Credential-related source omitted] - Access to secretsline 457
[Credential-related source omitted] - Access to secretsline 644
[Credential-related source omitted] - Access to secretsline 645
[Credential-related source omitted] - Access to secretsline 646
[Credential-related source omitted] - Access to secretsline 648
[Credential-related source omitted] - Access to secretsline 654
[Credential-related source omitted] - Access to secretsline 656
[Credential-related source omitted] - Access to secretsline 725
[Credential-related source omitted] - Access to secretsline 726
[Credential-related source omitted] - Access to secretsline 731
[Credential-related source omitted] - Access to secretsline 733
[Credential-related source omitted] - Access to secretsline 899
[Credential-related source omitted] - Access to secretsline 900
[Credential-related source omitted] - Access to secretsline 905
[Credential-related source omitted] - Access to secretsline 907
[Credential-related source omitted] - Access to secretsline 949
[Credential-related source omitted] - Access to secretsline 963
[Credential-related source omitted] - Access to secretsline 1109
[Credential-related source omitted] - Access to secretsline 1110
[Credential-related source omitted] - Access to secretsline 1116
[Credential-related source omitted] - Access to secretsline 1118
[Credential-related source omitted] - Access to secretsline 1153
[Credential-related source omitted] - Access to secretsline 1154
[Credential-related source omitted] - Access to secretsline 1160
[Credential-related source omitted] - Access to secretsline 1162
[Credential-related source omitted]
senpi-improve-trades/tests/test_review_external_wallets.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 11
python3 -m pytest senpi-improve-trades/tests/test_review_external_wallets.py """ # Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Network accessline 13
# Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Access to secretsline 96
[Credential-related source omitted] - Access to secretsline 97
[Credential-related source omitted] - Access to secretsline 98
[Credential-related source omitted] - Access to secretsline 105
[Credential-related source omitted] - Access to secretsline 107
[Credential-related source omitted]
senpi-market-pulse/scripts/mcp_client.py
- Executable scriptline 1
#!/usr/bin/env python3 - Access to secretsline 7
[Credential-related source omitted] - Network accessline 11
failures (result.isError) raise MCPError so callers log a warning instead of silently reading None. """ # Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Network accessline 13
# Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Network accessline 14
import http.client - Network accessline 20
[Credential-related source omitted] - Access to secretsline 20
[Credential-related source omitted] - Access to secretsline 21
[Credential-related source omitted] - Network accessline 42
} hdrs.update(headers) cls = http.client.HTTPSConnection if scheme == "https" else http.client.HTTPConnection - Network accessline 43
hdrs.update(headers) cls = http.client.HTTPSConnection if scheme == "https" else http.client.HTTPConnection conn = cls(host, port, timeout=timeout) - Network accessline 44
cls = http.client.HTTPSConnection if scheme == "https" else http.client.HTTPConnection
senpi-market-pulse/scripts/pulse.py
senpi-market-pulse/tests/test_pulse.py
senpi-market-pulse/tests/test_pulse_saved_wallets.py
senpi-market-pulse/tests/test_signals_closing.py
- Executable scriptline 1
Executable file
senpi-portfolio/references/output-fields.md
- Network accessline 167
embedded wallet + every strategy sub-wallet, pulls live clearinghouse state per wallet, and classifies the buckets. Read its JSON. - **Real-time, always.** The engine forces a fresh fetch (no 12h cache) and reads each strategy's - Network accessline 168
classifies the buckets. Read its JSON. - **Real-time, always.** The engine forces a fresh fetch (no 12h cache) and reads each strategy's live clearinghouse state. Never report balances from earlier in the conversation — re-run. - Network accessline 169
- **Real-time, always.** The engine forces a fresh fetch (no 12h cache) and reads each strategy's
senpi-portfolio/scripts/mcp_client.py
- Executable scriptline 1
#!/usr/bin/env python3 - Access to secretsline 7
[Credential-related source omitted] - Network accessline 11
failures (result.isError) raise MCPError so callers log a warning instead of silently reading None. """ # Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Network accessline 13
# Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Network accessline 14
import http.client - Network accessline 20
[Credential-related source omitted] - Access to secretsline 20
[Credential-related source omitted] - Access to secretsline 21
[Credential-related source omitted] - Network accessline 42
} hdrs.update(headers) cls = http.client.HTTPSConnection if scheme == "https" else http.client.HTTPConnection - Network accessline 43
hdrs.update(headers) cls = http.client.HTTPSConnection if scheme == "https" else http.client.HTTPConnection conn = cls(host, port, timeout=timeout) - Network accessline 44
cls = http.client.HTTPSConnection if scheme == "https" else http.client.HTTPConnection
senpi-portfolio/scripts/portfolio.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 26
[Credential-related source omitted] - Access to secretsline 26
[Credential-related source omitted] - Network accessline 28
# Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Network accessline 73
[Credential-related source omitted] - Access to secretsline 73
[Credential-related source omitted] - Network accessline 74
CATALOG_URL = f"https://raw.githubusercontent.com/Senpi-ai/senpi-skills/{CATALOG_REF}/strategies/catalog.json" - Access to secretsline 95
[Credential-related source omitted] - Access to secretsline 302
[Credential-related source omitted] - Access to secretsline 429
[Credential-related source omitted] - Access to secretsline 702
[Credential-related source omitted] - Network accessline 733
try: import urllib.request with urllib.request.urlopen(CATALOG_URL, timeout=6) as r: - Network accessline 734
import urllib.request with urllib.request.urlopen(CATALOG_URL, timeout=6) as r: raw = json.loads(r.read().decode("utf-8")) - Network accessline 735
with urllib.request.urlopen(CATALOG_URL, timeout=6) as r: - Network accessline 2515
# carry forward any warnings the self-heal fetch (or an earlier step) recorded
senpi-portfolio/tests/test_close_recency.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 5
python3 -m pytest senpi-portfolio/tests/test_close_recency.py """ # Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Network accessline 7
# Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Access to secretsline 56
[Credential-related source omitted] - Access to secretsline 57
[Credential-related source omitted] - Access to secretsline 62
[Credential-related source omitted] - Access to secretsline 64
[Credential-related source omitted] - Access to secretsline 111
[Credential-related source omitted] - Access to secretsline 114
[Credential-related source omitted] - Access to secretsline 120
[Credential-related source omitted] - Access to secretsline 122
[Credential-related source omitted]
senpi-portfolio/tests/test_closed_stats.py
senpi-portfolio/tests/test_name_reader_parity.py
senpi-portfolio/tests/test_portfolio.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 8
python3 -m pytest senpi-portfolio/tests/ # or: python3 tests/test_portfolio.py """ # Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Network accessline 10
# Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Access to secretsline 49
[Credential-related source omitted] - Access to secretsline 50
[Credential-related source omitted] - Access to secretsline 58
[Credential-related source omitted] - Access to secretsline 60
[Credential-related source omitted] - Access to secretsline 139
[Credential-related source omitted] - Access to secretsline 143
[Credential-related source omitted] - Access to secretsline 145
[Credential-related source omitted] - Access to secretsline 151
[Credential-related source omitted] - Access to secretsline 153
[Credential-related source omitted] - Access to secretsline 1171
[Credential-related source omitted] - Access to secretsline 1172
[Credential-related source omitted] - Access to secretsline 1177
[Credential-related source omitted] - Access to secretsline 1179
[Credential-related source omitted] - Access to secretsline 1441
[Credential-related source omitted] - Access to secretsline 1442
[Credential-related source omitted] - Access to secretsline 1450
[Credential-related source omitted] - Access to secretsline 1452
[Credential-related source omitted]
senpi-portfolio/tests/test_portfolio_external_wallets.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 12
python3 -m pytest senpi-portfolio/tests/test_portfolio_external_wallets.py """ # Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Network accessline 14
# Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Access to secretsline 41
[Credential-related source omitted] - Access to secretsline 42
[Credential-related source omitted] - Access to secretsline 43
[Credential-related source omitted] - Access to secretsline 44
[Credential-related source omitted] - Access to secretsline 50
[Credential-related source omitted] - Access to secretsline 52
[Credential-related source omitted]
senpi-portfolio/tests/test_portfolio_one_wallet_list.py
senpi-portfolio/tests/test_portfolio_skill_layout.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 15
python3 -m pytest senpi-portfolio/tests/test_portfolio_skill_layout.py """ # Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Network accessline 17
# Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Network accessline 492
for needle in ("A strategy row's wallets are grouped by the same key in every step", "`book.totals.managed_usd` is `grand_total_usd`", "enumerates the embedded wallet", "The engine forces a fresh fetch - Network accessline 493
"`book.totals.managed_usd` is `grand_total_usd`", "enumerates the embedded wallet", "The engine forces a fresh fetch (no 12h cache)", "can't linger as a ghost.", "`strategyName` is optional on `strategy - Network accessline 494
"The engine forces a fresh fetch (no 12h cache)", "can't linger as a ghost.",
senpi-portfolio/tests/test_prescribed_tools_exist.py
- Executable scriptline 1
Executable file
senpi-portfolio/tests/test_skill_raw_position_stop.py
- Network accessline 1
"""A raw position's `protected: false` is narrated as "no ratchet," never as "no stop": the SKILL tells the agent to read the wallet's resting orders before implying a hand-placed position has no stop.""" # Copyright 2026 Senpi (https://sen - Executable scriptline 1
Executable file - Network accessline 3
# Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0
senpi-portfolio/tests/test_skill_source_trader_read.py
- Executable scriptline 1
Executable file - Network accessline 2
discovery tools run on the user's own strategy wallet return the user's copy of the trade and read as an answer — the rule has to name that, and has to sit where a plain `read` delivers it.""" # Copyright 2026 Senpi (https://senpi.ai) — Apa - Network accessline 4
# Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0
senpi-portfolio/tests/test_your_wallets_wording.py
senpi-signals/scripts/hyperfeed.py
senpi-signals/scripts/mcp_client.py
- Executable scriptline 1
#!/usr/bin/env python3 - Access to secretsline 7
[Credential-related source omitted] - Network accessline 11
failures (result.isError) raise MCPError so callers log a warning instead of silently reading None. """ # Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Network accessline 13
# Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Network accessline 14
import http.client - Network accessline 20
[Credential-related source omitted] - Access to secretsline 20
[Credential-related source omitted] - Access to secretsline 21
[Credential-related source omitted] - Network accessline 42
} hdrs.update(headers) cls = http.client.HTTPSConnection if scheme == "https" else http.client.HTTPConnection - Network accessline 43
hdrs.update(headers) cls = http.client.HTTPSConnection if scheme == "https" else http.client.HTTPConnection conn = cls(host, port, timeout=timeout) - Network accessline 44
cls = http.client.HTTPSConnection if scheme == "https" else http.client.HTTPConnection
senpi-signals/scripts/striker_scoring.py
- Executable scriptline 1
Executable file
senpi-signals/scripts/sweep.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 6
python3 sweep.py --asset HYPE # one asset: its reads, the proven cohort's split, the 4h board, market python3 sweep.py --json [--asset X] # debugging: the backend's JSON as it came (SENPI_AUTH_TOKEN from env; the backend - Network accessline 8
[Credential-related source omitted] - Access to secretsline 8
[Credential-related source omitted] - Network accessline 21
Stdlib only; Python 3.9+. """ # Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Network accessline 23
# Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Network accessline 34
VERSION = "2.11.0" BASE_URL = "https://agents.senpi.ai" - Network accessline 35
BASE_URL = "https://agents.senpi.ai" - Access to secretsline 57
[Credential-related source omitted] - Network accessline 64
[Credential-related source omitted] - Access to secretsline 66
[Credential-related source omitted] - Network accessline 67
[Credential-related source omitted] - Network accessline 68
[Credential-related source omitted] - Access to secretsline 68
[Credential-related source omitted] - Network accessline 69
req = urllib.request.Request((url or BASE_URL) + path, headers={
senpi-signals/tests/test_hyperfeed.py
- Executable scriptline 1
Executable file
senpi-signals/tests/test_signals_skill_text.py
senpi-signals/tests/test_striker_scoring_vendor_parity.py
- Executable scriptline 1
Executable file
senpi-signals/tests/test_sweep.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 146
def _http_error(code, error): return urllib.error.HTTPError("https://x", code, "err", {}, io.BytesIO(json.dumps({"error": error}).encode())) - Network accessline 147
return urllib.error.HTTPError("https://x", code, "err", {}, io.BytesIO(json.dumps({"error": error}).encode())) - Network accessline 156
def __call__(self, req, timeout=None): self.requests.append(req) - Network accessline 157
self.requests.append(req) - Network accessline 164
[Credential-related source omitted] - Network accessline 165
[Credential-related source omitted] - Network accessline 170
assert _fetch(op) == {"trade": []} req = op.requests[0] assert req.full_url == "https://signals.test/v1/signals" - Network accessline 171
req = op.requests[0] assert req.full_url == "https://signals.test/v1/signals" assert req.get_header("Authorization") == "Bearer tok" - Network accessline 172
assert req.full_url == "https://signals.test/v1/signals" - Access to secretsline 178
[Credential-related source omitted] - Network accessline 179
op = _Opener() with pytest.raises(sweep.Unavailable) as e: sweep.fetch("/v1/signals", url="https://signals.test", opener=op) - Network accessline 180
with pytest.raises(sweep.Unavailable) as e: sweep.fetch("/v1/signals", url="https://signals.test", opener=op) assert e.value.code == sweep.EXIT_AUTH and not op.requests - Network accessline 181
sweep.fetch("/v1/signals", url="https://signals.test", opener=op) - Network accessline 209
def test_the_backend_is_agents_senpi_ai(): assert sweep.BASE_URL == "https://agents.senpi.ai" - Network accessline 210
[Credential-related source omitted] - Network accessline 211
[Credential-related source omitted] - Network accessline 212
[Credential-related source omitted] - Network accessline 213
assert op.requests[0].full_url == "https://agents.senpi.ai/v1/signals"
senpi-signals/tests/test_vendored_parity.py
- Executable scriptline 1
Executable file
senpi-smart-money/SKILL.md
- Access to secretsline 132
[Credential-related source omitted]
senpi-smart-money/scripts/mcp_client.py
- Executable scriptline 1
#!/usr/bin/env python3 - Access to secretsline 7
[Credential-related source omitted] - Network accessline 11
failures (result.isError) raise MCPError so callers log a warning instead of silently reading None. """ # Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Network accessline 13
# Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Network accessline 14
import http.client - Network accessline 20
[Credential-related source omitted] - Access to secretsline 20
[Credential-related source omitted] - Access to secretsline 21
[Credential-related source omitted] - Network accessline 42
} hdrs.update(headers) cls = http.client.HTTPSConnection if scheme == "https" else http.client.HTTPConnection - Network accessline 43
hdrs.update(headers) cls = http.client.HTTPSConnection if scheme == "https" else http.client.HTTPConnection conn = cls(host, port, timeout=timeout) - Network accessline 44
cls = http.client.HTTPSConnection if scheme == "https" else http.client.HTTPConnection
senpi-smart-money/scripts/smartmoney.py
- Executable scriptline 1
#!/usr/bin/env python3 - Access to secretsline 27
[Credential-related source omitted] - Network accessline 30
returned nothing — so narrate that line rather than pretending the smart cohort is flat. """ # Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Network accessline 32
# Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Access to secretsline 192
[Credential-related source omitted] - Network accessline 505
"""STEP 1 `cohorts` — the headline read the agent NARRATES FIRST. Runs the heavy per-wallet cohort fetch (build_cohorts + cohort_bias) → the proven-vs-crowd `divergences` table + the `smart_leaning` - Network accessline 506
fetch (build_cohorts + cohort_bias) → the proven-vs-crowd `divergences` table + the `smart_leaning headline + the `cohorts` sample sizes. Persists the cohort payload to state so `near_term` layers on
senpi-smart-money/tests/test_smartmoney.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 5
python3 -m pytest senpi-smart-money/tests/ # or: python3 tests/test_smartmoney.py """ # Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Network accessline 7
# Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Access to secretsline 194
[Credential-related source omitted] - Access to secretsline 216
[Credential-related source omitted]
senpi-smart-money/tests/test_smartmoney_saved_wallets.py
senpi-strategy-author/SKILL.md
- Access to secretsline 285
[Credential-related source omitted]
senpi-strategy-author/references/creating-a-strategy.md
senpi-strategy-author/references/dsl-configuration.md
- Access to secretsline 261
[Credential-related source omitted]
senpi-strategy-author/references/dsl-presets.yaml
senpi-strategy-author/references/shadow-testing.md
senpi-strategy-author/references/strategy-yaml-schema.md
senpi-strategy-author/scripts/_yaml.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 9
we don't interpret descriptions). Validated for byte-equality against PyYAML on the example packages. """ # Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Network accessline 11
# Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0
senpi-strategy-author/scripts/validate_strategy.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 11
noise, multi-slot sizing that the second open cannot fund, a daily entry cap at or below the slot count, a daily entry cap at or below the slot count). Warnings never change the exit code; the author relays them. """ # Copyright 2026 Senpi - Network accessline 13
# Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0
senpi-strategy-author/tests/test_balance_rule_excludes_committed_capital.py
- Executable scriptline 1
Executable file
senpi-strategy-author/tests/test_edit_describes_written_values.py
- Executable scriptline 1
Executable file
senpi-strategy-author/tests/test_exit_preview_matches_presets.py
- Executable scriptline 1
Executable file
senpi-strategy-author/tests/test_preset_time_cuts.py
- Executable scriptline 1
Executable file
senpi-strategy-author/tests/test_reference_halt_latch.py
- Executable scriptline 1
Executable file
senpi-strategy-author/tests/test_reference_list_limits.py
- Executable scriptline 1
Executable file
senpi-strategy-author/tests/test_reference_time_units.py
- Executable scriptline 1
Executable file
senpi-strategy-author/tests/test_scaffold_margin.py
senpi-strategy-author/tests/test_scoring_py_is_optional.py
- Executable scriptline 1
Executable file
senpi-strategy-author/tests/test_skill_signal_data_is_audit_only.py
- Executable scriptline 1
Executable file - Network accessline 2
trail, and the floor comes from the instance's DSL preset. The resident line has to say so and point at the depth, and the conversion the depth hands the author has to invert the floor formula it documents.""" # Copyright 2026 Senpi (https: - Network accessline 4
# Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0
senpi-strategy-author/tests/test_undeclared_signal_data_key.py
- Executable scriptline 1
Executable file
senpi-strategy-author/tests/test_validate_close_wiring.py
senpi-strategy-author/tests/test_validate_crash_before_funding.py
- Executable scriptline 1
Executable file - Network accessline 22
Run: python3 -m pytest senpi-strategy-author/tests/test_validate_crash_before_funding.py -q """ # Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Network accessline 24
# Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Network accessline 113
LOCAL = ''' def scan(inputs, ctx): rows = ctx.fetch() - Network accessline 114
def scan(inputs, ctx): rows = ctx.fetch() if not rows: - Network accessline 115
rows = ctx.fetch() - Network accessline 190
def scan(inputs, ctx): total = 0 for r in ctx.fetch(): - Network accessline 191
total = 0 for r in ctx.fetch(): total += r - Network accessline 192
for r in ctx.fetch():
senpi-strategy-author/tests/test_validate_fees.py
- Executable scriptline 1
Executable file
senpi-strategy-author/tests/test_validate_momentum_not_smart_money.py
senpi-strategy-author/tests/test_validate_package_id.py
senpi-strategy-author/tests/test_validate_tiers_and_exec.py
- Executable scriptline 1
Executable file
senpi-strategy-author/tests/test_validate_wallet_binding.py
senpi-strategy-author/tests/test_validate_warnings.py
senpi-strategy-discover/SKILL.md
- Network accessline 412
run reads an alphabetical slice — ask which style first, then run themed. - **Micro-specs** ("$1 a trade", "never lose more than 20 cents", "a hundred small wins") → do the fee math out loud before matching anything: read the round-trip cos - Network accessline 413
- **Micro-specs** ("$1 a trade", "never lose more than 20 cents", "a hundred small wins") → do the fee math out loud before matching anything: read the round-trip cost — Hyperliquid's taker rate on both legs (the wallet's `userFees`, never - Network accessline 414
- **"Show me the source" / "I want an outside audit"** → the catalog is public: link `https://github.com/Senpi-ai/senpi-skills/tree/main/strategies/<id>`, and for a fork point at their package (`<username>-<template>`, as ops names it) and
senpi-strategy-discover/catalog.json
- Possible obfuscationline 3924
"emoji": "🐦<U+200D>⬛",
senpi-strategy-discover/references/glossary.yaml
- Network accessline 9
# `sub_style` is EXTENSIBLE: authors may add a new value here (with a gloss) when a genuine new pattern # appears. gen_catalog warns (never fails) on a value missing from this file. # Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Network accessline 11
# Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0
senpi-strategy-discover/scripts/discover.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 20
exit 0 for handled cases. """ # Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Network accessline 22
# Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Access to secretsline 37
[Credential-related source omitted] - Access to secretsline 38
[Credential-related source omitted] - Network accessline 594
import http.client - Network accessline 595
conn = http.client.HTTPSConnection("raw.githubusercontent.com", timeout=20)
senpi-strategy-discover/scripts/mcp_client.py
- Executable scriptline 1
#!/usr/bin/env python3 - Access to secretsline 7
[Credential-related source omitted] - Network accessline 11
failures (result.isError) raise MCPError so callers log a warning instead of silently reading None. """ # Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Network accessline 13
# Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Network accessline 14
import http.client - Network accessline 20
[Credential-related source omitted] - Access to secretsline 20
[Credential-related source omitted] - Access to secretsline 21
[Credential-related source omitted] - Network accessline 42
} hdrs.update(headers) cls = http.client.HTTPSConnection if scheme == "https" else http.client.HTTPConnection - Network accessline 43
hdrs.update(headers) cls = http.client.HTTPSConnection if scheme == "https" else http.client.HTTPConnection conn = cls(host, port, timeout=timeout) - Network accessline 44
cls = http.client.HTTPSConnection if scheme == "https" else http.client.HTTPConnection
senpi-strategy-discover/tests/conversation/eval.workflow.js
- Executable scriptline 1
Executable file - Access to secretsline 10
[Credential-related source omitted] - Access to secretsline 81
[Credential-related source omitted] - Access to secretsline 86
[Credential-related source omitted] - Access to secretsline 92
[Credential-related source omitted] - Access to secretsline 108
[Credential-related source omitted] - Access to secretsline 254
[Credential-related source omitted]
senpi-strategy-discover/tests/fixtures/gen_fullfleet.py
senpi-strategy-discover/tests/test_accessible_usdc.py
- Executable scriptline 1
Executable file
senpi-strategy-discover/tests/test_class_theme_and_silent_narrowing.py
- Executable scriptline 1
Executable file
senpi-strategy-discover/tests/test_cli.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 6
reports the full eligible count and returns a bounded shortlist; the LLM ranks it. No soft-rank flags. """ # Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Network accessline 8
# Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Access to secretsline 30
[Credential-related source omitted] - Access to secretsline 31
[Credential-related source omitted]
senpi-strategy-discover/tests/test_default_catalog.py
- Executable scriptline 1
Executable file
senpi-strategy-discover/tests/test_discover.py
senpi-strategy-discover/tests/test_discover_saved_wallets.py
senpi-strategy-discover/tests/test_fullfleet.py
senpi-strategy-discover/tests/test_new_strategy_discoverability.py
- Executable scriptline 1
Executable file
senpi-strategy-discover/tests/test_scenarios.py
senpi-strategy-discover/tests/test_skill_surface_discover.py
- Executable scriptline 1
Executable file - Network accessline 74
"`user_get_senpi_points` `builderFeePercent`", "Never save an impossible spec", "https://github.com/Senpi-ai/senpi-skills/tree/main/strategies/", - Network accessline 75
"Never save an impossible spec", "https://github.com/Senpi-ai/senpi-skills/tree/main/strategies/", "Never hand-roll a tarball"): - Network accessline 76
"https://github.com/Senpi-ai/senpi-skills/tree/main/strategies/",
senpi-strategy-discover/tests/test_theme.py
senpi-strategy-discover/tests/test_variants_are_reachable.py
- Executable scriptline 1
Executable file
senpi-strategy-ops/SKILL.md
- Network accessline 105
**Step 0 — resolve which strategy.** The user's word ("spider") is a strategy **`id`**. Confirm it exists against the registry (`curl -s https://raw.githubusercontent.com/Senpi-ai/senpi-skills/refs/heads/main/strategies/catalog.json`); - Network accessline 106
exists against the registry (`curl -s https://raw.githubusercontent.com/Senpi-ai/senpi-skills/refs/heads/main/strategies/catalog.json`); - Access to secretsline 114
[Credential-related source omitted] - Access to secretsline 296
[Credential-related source omitted]
senpi-strategy-ops/references/lifecycle.md
senpi-strategy-ops/references/strategy-yaml-schema.md
senpi-strategy-ops/scripts/_cli.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 6
spellings and degrades gracefully (returns None / []) rather than throwing on a missing field. """ # Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Network accessline 8
# Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Access to secretsline 32
[Credential-related source omitted] - Access to secretsline 879
[Credential-related source omitted]
senpi-strategy-ops/scripts/_fetch.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 14
package fetched into a managed skill dir is destroyed on the next skill update. """ # Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Network accessline 16
# Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Network accessline 17
import http.client - Access to secretsline 23
[Credential-related source omitted] - Access to secretsline 24
[Credential-related source omitted] - Access to secretsline 25
[Credential-related source omitted] - Network accessline 32
def _get(host, path, accept, timeout): conn = http.client.HTTPSConnection(host, timeout=timeout) - Network accessline 33
conn = http.client.HTTPSConnection(host, timeout=timeout)
senpi-strategy-ops/scripts/_fork.py
senpi-strategy-ops/scripts/_pkg.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 13
`decision_mode: llm` action), then asserts zero `${...}` placeholders remain before deploy. """ # Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Network accessline 15
# Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Access to secretsline 217
[Credential-related source omitted] - Access to secretsline 221
[Credential-related source omitted] - Access to secretsline 232
[Credential-related source omitted]
senpi-strategy-ops/scripts/_yaml.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 9
we don't interpret descriptions). Validated for byte-equality against PyYAML on the example packages. """ # Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Network accessline 11
# Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0
senpi-strategy-ops/scripts/close.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 21
--strategy-id/--address are mutually exclusive with <id>/--all/--instance/--ref and with each other. """ # Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Network accessline 23
# Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0
senpi-strategy-ops/scripts/deploy.py
- Executable scriptline 1
#!/usr/bin/env python3 - Executable scriptline 1
Executable file; content unavailable - Executable scriptline 1
Executable file; content unavailable - Executable scriptline 1
Executable file; content unavailable - Executable scriptline 1
Executable file; content unavailable - Executable scriptline 1
Executable file; content unavailable - Executable scriptline 1
Executable file; content unavailable - Executable scriptline 1
Executable file; content unavailable - Executable scriptline 1
Executable file; content unavailable - Executable scriptline 1
Executable file; content unavailable - Executable scriptline 1
Executable file; content unavailable - Executable scriptline 1
Executable file; content unavailable - Executable scriptline 1
Executable file; content unavailable - Executable scriptline 1
Executable file; content unavailable - Executable scriptline 1
Executable file; content unavailable - Executable scriptline 1
Executable file; content unavailable - Executable scriptline 1
Executable file; content unavailable - Executable scriptline 1
Executable file; content unavailable - Executable scriptline 1
Executable file; content unavailable - Executable scriptline 1
Executable file; content unavailable - Executable scriptline 1
Executable file; content unavailable - Executable scriptline 1
Executable file; content unavailable - Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 73
the verdict, never the invariant. """ # Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Network accessline 73
the verdict, never the invariant. """ # Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Network accessline 75
# Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Network accessline 75
# Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0
senpi-strategy-ops/scripts/mcp_client.py
- Executable scriptline 1
#!/usr/bin/env python3 - Access to secretsline 9
[Credential-related source omitted] - Network accessline 17
raise MCPError so callers surface a warning instead of silently reading None. """ # Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Network accessline 19
# Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Network accessline 20
import http.client - Network accessline 26
[Credential-related source omitted] - Access to secretsline 26
[Credential-related source omitted] - Access to secretsline 27
[Credential-related source omitted] - Network accessline 48
} hdrs.update(headers) cls = http.client.HTTPSConnection if scheme == "https" else http.client.HTTPConnection - Network accessline 49
hdrs.update(headers) cls = http.client.HTTPSConnection if scheme == "https" else http.client.HTTPConnection conn = cls(host, port, timeout=timeout) - Network accessline 50
cls = http.client.HTTPSConnection if scheme == "https" else http.client.HTTPConnection
senpi-strategy-ops/scripts/min_budget.py
senpi-strategy-ops/scripts/run.sh
- Executable scriptline 1
#!/usr/bin/env bash - Network accessline 6
# # examples: # ./run.sh asia-ai https://github.com/Senpi-ai/senpi-skills/tree/main 500 - Network accessline 7
# examples: # ./run.sh asia-ai https://github.com/Senpi-ai/senpi-skills/tree/main 500 # ./run.sh asia-ai main '$500' - Network accessline 8
# ./run.sh asia-ai https://github.com/Senpi-ai/senpi-skills/tree/main 500 - Access to secretsline 19
[Credential-related source omitted]
senpi-strategy-ops/scripts/status.py
- Executable scriptline 1
#!/usr/bin/env python3 - Executable scriptline 1
Executable file; content unavailable - Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 39
wallet. It is named once, with what it does, never per row. """ # Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Network accessline 39
wallet. It is named once, with what it does, never per row. """ # Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Network accessline 41
# Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Network accessline 41
# Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0
senpi-strategy-ops/scripts/validate_universe.py
senpi-strategy-ops/tests/test_cli_reads.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 15
Run: python3 senpi-strategy-ops/tests/test_cli_reads.py """ # Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Network accessline 17
# Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Access to secretsline 66
[Credential-related source omitted] - Access to secretsline 89
[Credential-related source omitted] - Access to secretsline 90
[Credential-related source omitted]
senpi-strategy-ops/tests/test_close.py
senpi-strategy-ops/tests/test_deploy_durable_root.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 3
re-points a runtime: the runtime keeps reading its scanners from that directory, and a box restart wipes everything outside the volume (e.g. a package deployed from a /tmp clone).""" # Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Network accessline 5
# Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0
senpi-strategy-ops/tests/test_deploy_update.py
senpi-strategy-ops/tests/test_deploy_where.py
senpi-strategy-ops/tests/test_deploy_wrapper.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 9
python3 senpi-strategy-ops/tests/test_deploy_wrapper.py """ # Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Network accessline 11
# Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Access to secretsline 111
[Credential-related source omitted] - Access to secretsline 189
[Credential-related source omitted] - Access to secretsline 195
[Credential-related source omitted] - Access to secretsline 1219
[Credential-related source omitted] - Access to secretsline 1222
[Credential-related source omitted] - Access to secretsline 1259
[Credential-related source omitted] - Access to secretsline 1264
[Credential-related source omitted] - Access to secretsline 1463
[Credential-related source omitted] - Access to secretsline 1468
[Credential-related source omitted] - Network accessline 2461
[Credential-related source omitted] - Access to secretsline 2461
[Credential-related source omitted]
senpi-strategy-ops/tests/test_dex_awareness.py
senpi-strategy-ops/tests/test_entry_gate_reachability.py
senpi-strategy-ops/tests/test_error_tail.py
senpi-strategy-ops/tests/test_fetch_fork_prefix.py
- Executable scriptline 1
Executable file
senpi-strategy-ops/tests/test_fetch_through_callers.py
- Executable scriptline 1
Executable file
senpi-strategy-ops/tests/test_fork.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 2
"""A template deploys under the user's name: `_fork.fork` makes `<owner>-<template>` with the identity rewritten and everything else untouched; `deploy.py create <template>` without an owner is refused.""" # Copyright 2026 Senpi (https://se - Network accessline 4
# Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Access to secretsline 150
[Credential-related source omitted]
senpi-strategy-ops/tests/test_min_budget_vendor_parity.py
- Executable scriptline 1
#!/usr/bin/env python3
senpi-strategy-ops/tests/test_never_traded_answer.py
senpi-strategy-ops/tests/test_pkg.py
senpi-strategy-ops/tests/test_pkg_refuses_keys_that_stop_no_entries.py
- Executable scriptline 1
Executable file
senpi-strategy-ops/tests/test_run_sh.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 7
python3 senpi-strategy-ops/tests/test_run_sh.py """ # Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Network accessline 9
# Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Access to secretsline 42
[Credential-related source omitted]
senpi-strategy-ops/tests/test_skill_edit_not_live_until_applied.py
- Executable scriptline 1
Executable file
senpi-strategy-ops/tests/test_skill_serr124.py
- Executable scriptline 1
Executable file
senpi-strategy-ops/tests/test_skill_strategy_limits.py
- Executable scriptline 1
Executable file
senpi-strategy-ops/tests/test_skill_surface.py
senpi-strategy-ops/tests/test_status.py
senpi-strategy-ops/tests/test_status_health.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 8
python3 senpi-strategy-ops/tests/test_status_health.py """ # Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Network accessline 10
# Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Access to secretsline 118
[Credential-related source omitted] - Access to secretsline 155
[Credential-related source omitted]
senpi-strategy-ops/tests/test_status_risk.py
senpi-strategy-ops/tests/test_vendored_yaml_parses_every_package.py
- Executable scriptline 1
#!/usr/bin/env python3
senpi-strategy-ops/tests/test_walkthrough_tradable_minimum.py
- Executable scriptline 1
Executable file - Network accessline 4
sleeve no-trades — it funds, installs, scans and never opens. The walkthrough has to say that, and the worked figure it uses has to stay true to `min_budget.py`, which is the arithmetic of record.""" # Copyright 2026 Senpi (https://senpi.ai - Network accessline 6
# Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0
senpi-trade/tests/test_trade_skill_surface.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 2
"""The protection protocol is resident in senpi-trade/SKILL.md, its five regression cases exist, and the version the README advertises is the version the skill carries.""" # Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Network accessline 4
# Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0
senpi-trader-research/SKILL.md
- Access to secretsline 314
[Credential-related source omitted]
senpi-trader-research/scripts/mcp_client.py
- Executable scriptline 1
#!/usr/bin/env python3 - Access to secretsline 7
[Credential-related source omitted] - Network accessline 11
failures (result.isError) raise MCPError so callers log a warning instead of silently reading None. """ # Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Network accessline 13
# Copyright 2026 Senpi (https://senpi.ai) — Apache-2.0 - Network accessline 14
import http.client - Network accessline 20
[Credential-related source omitted] - Access to secretsline 20
[Credential-related source omitted] - Access to secretsline 21
[Credential-related source omitted] - Network accessline 42
} hdrs.update(headers) cls = http.client.HTTPSConnection if scheme == "https" else http.client.HTTPConnection - Network accessline 43
hdrs.update(headers) cls = http.client.HTTPSConnection if scheme == "https" else http.client.HTTPConnection conn = cls(host, port, timeout=timeout) - Network accessline 44
cls = http.client.HTTPSConnection if scheme == "https" else http.client.HTTPConnection
senpi-trader-research/scripts/research.py
senpi-trader-research/tests/test_research.py
senpi-trader-research/tests/test_research_saved_wallets.py
senpi-trading-runtime/references/runtime-yaml.md
- Network accessline 292
|---|---|---| | `telegram_chat_id` | — | Telegram chat id | | `gateway_url` | `http://127.0.0.1:18789` | gateway URL for HTTP delivery | - Network accessline 293
| `telegram_chat_id` | — | Telegram chat id | | `gateway_url` | `http://127.0.0.1:18789` | gateway URL for HTTP delivery | | `gateway_token` | `$OPENCLAW_GATEWAY_TOKEN` | auth token for HTTP gateway | - Network accessline 294
| `gateway_url` | `http://127.0.0.1:18789` | gateway URL for HTTP delivery | - Access to secretsline 295
[Credential-related source omitted]
senpi-trading-runtime/references/scan-contract.md
- Access to secretsline 160
[Credential-related source omitted]
senpi-trading-runtime/scripts/behaviour_hash.py
senpi-trading-runtime/scripts/gen_catalog.py
senpi-trading-runtime/scripts/min_budget.py
senpi-trading-runtime/tests/test_edit_is_live_only_after_apply.py
- Executable scriptline 1
Executable file
senpi-trading-runtime/tests/test_min_budget_golden.py
- Executable scriptline 1
#!/usr/bin/env python3
senpi-trading-runtime/tests/test_min_budget_tier_shapes.py
- Executable scriptline 1
Executable file
senpi-trading-runtime/tests/test_reference_candle_time_units.py
- Executable scriptline 1
Executable file
senpi-trading-runtime/tests/test_reference_time_cuts_either_phase.py
- Executable scriptline 1
Executable file
How the signals fit together
Facts from a static read of the files at the pinned commit. They describe what the code does, not why.
Some files could not be read; the facts below still hold.
Declared and executed: 3 facts
- Contacts api.hyperliquid.xyz, which SKILL.md, the README and the plugin manifest do not mentionquant-desk/scripts/hl_api.py:25High confidence
- Contacts stats-data.hyperliquid.xyz, which SKILL.md, the README and the plugin manifest do not mentionquant-desk/scripts/hl_api.py:26High confidence
- Contacts api.hyperliquid.xyz, which SKILL.md, the README and the plugin manifest do not mentionsenpi-improve-trades/scripts/review.py:49High confidence
Signal confidence: 497 facts
- Access to secrets in prose of the SKILL.mdquant-desk/SKILL.md:629Low confidence
- Access to secrets in prose of the SKILL.mdquant-desk/SKILL.md:706Low confidence
- Access to secrets in prose of the SKILL.mdquant-desk/SKILL.md:709Low confidence
- Executable script in code of a file that runsquant-desk/scripts/addresses.py:1High confidence
- Network access in prose of a file that runsquant-desk/scripts/addresses.py:27Low confidence
- Network access in a comment of a file that runsquant-desk/scripts/addresses.py:29Low confidence
- Executable script in code of a file that runsquant-desk/scripts/benchmark.py:1High confidence
- Access to secrets in prose of a file that runsquant-desk/scripts/benchmark.py:4Low confidence
- Network access in prose of a file that runsquant-desk/scripts/benchmark.py:11Low confidence
- Access to secrets in prose of a file that runsquant-desk/scripts/benchmark.py:11Low confidence
- Network access in a comment of a file that runsquant-desk/scripts/benchmark.py:13Low confidence
- Network access in code of a file that runsquant-desk/scripts/benchmark.py:36High confidence
- Network access in code of a file that runsquant-desk/scripts/benchmark.py:37High confidence
- Network access in code of a file that runsquant-desk/scripts/benchmark.py:38High confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valuequant-desk/scripts/benchmark.py:55Low confidence
- Executable script in code of a file that runsquant-desk/scripts/blacklist.py:1High confidence
- Network access in prose of a file that runsquant-desk/scripts/blacklist.py:14Low confidence
- Access to secrets in prose of a file that runs: a variable, placeholder or call, not a stored valuequant-desk/scripts/blacklist.py:15Low confidence
- Network access in prose of a file that runsquant-desk/scripts/blacklist.py:60Low confidence
- Network access in a comment of a file that runsquant-desk/scripts/blacklist.py:62Low confidence
- Network access in code of a file that runsquant-desk/scripts/blacklist.py:68High confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valuequant-desk/scripts/blacklist.py:68Low confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valuequant-desk/scripts/blacklist.py:69Low confidence
- Network access in code of a file that runsquant-desk/scripts/blacklist.py:124High confidence
- Network access in code of a file that runsquant-desk/scripts/blacklist.py:125High confidence
- Network access in code of a file that runsquant-desk/scripts/blacklist.py:126High confidence
- Network access in code of a file that runsquant-desk/scripts/blacklist.py:127High confidence
- Network access in code of a file that runsquant-desk/scripts/blacklist.py:128High confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valuequant-desk/scripts/blacklist.py:189Low confidence
- Executable script in code of a file that runsquant-desk/scripts/book.py:1High confidence
- Network access in prose of a file that runsquant-desk/scripts/book.py:24Low confidence
- Executable script in code of a file that runsquant-desk/scripts/deep.py:1High confidence
- Network access in prose of a file that runsquant-desk/scripts/deep.py:2Low confidence
- Network access in a comment of a file that runsquant-desk/scripts/deep.py:4Low confidence
- Executable script in code of a file that runsquant-desk/scripts/desk.py:1High confidence
- Network access in prose of a file that runsquant-desk/scripts/desk.py:12Low confidence
- Network access in a comment of a file that runsquant-desk/scripts/desk.py:14Low confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valuequant-desk/scripts/desk.py:80Low confidence
- Network access in code of a file that runsquant-desk/scripts/desk.py:651High confidence
- Network access in code of a file that runsquant-desk/scripts/desk.py:652High confidence
- Network access in code of a file that runsquant-desk/scripts/desk.py:653High confidence
- Network access in code of a file that runsquant-desk/scripts/desk.py:803High confidence
- Network access in code of a file that runsquant-desk/scripts/desk.py:804High confidence
- Network access in code of a file that runsquant-desk/scripts/desk.py:805High confidence
- Executable script in code of a file that runsquant-desk/scripts/dsl.py:1High confidence
- Network access in prose of a file that runsquant-desk/scripts/dsl.py:45Low confidence
- Network access in a comment of a file that runsquant-desk/scripts/dsl.py:47Low confidence
- Executable script in code of a file that runsquant-desk/scripts/followups.py:1High confidence
- Network access in prose of a file that runsquant-desk/scripts/followups.py:3Low confidence
- Network access in prose of a file that runsquant-desk/scripts/followups.py:4Low confidence
and 447 more
Only the first 500 facts are listed.
Works with
| Agent | Status | Evidence | Install to |
|---|---|---|---|
| Claude Code | Native | Path CLAUDE.md | .claude/skills/<skill-name>/ |
| Codex | Compatible | Standard SKILL.md quant-desk/SKILL.md | .agents/skills/<skill-name>/ |
| Cursor | Compatible | Standard SKILL.md quant-desk/SKILL.md | .cursor/skills/<skill-name>/ |
| Gemini CLI | Compatible | Standard SKILL.md quant-desk/SKILL.md | .gemini/skills/<skill-name>/ |
| GitHub Copilot | Compatible | Standard SKILL.md quant-desk/SKILL.md | .github/skills/<skill-name>/ |
| OpenCode | Compatible | Standard SKILL.md quant-desk/SKILL.md | .opencode/skills/<skill-name>/ |
- Native The repository ships a manifest, folder or frontmatter field for this agent.
- Compatible A standard SKILL.md that this agent can read.
- Unknown No evidence either way.
Derived automatically from paths, manifests and frontmatter. Not tested on each agent.