Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add Senpi-ai/senpi-skills --skill senpi-strategy-opsgit clone --depth 1 https://github.com/Senpi-ai/senpi-skillsWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/senpi-ai/senpi-skills/senpi-strategy-ops)<a href="https://agentmods.dev/skills/senpi-ai/senpi-skills/senpi-strategy-ops"><img src="https://agentmods.dev/badge/skills/senpi-ai/senpi-skills/senpi-strategy-ops/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/senpi-ai/senpi-skills/senpi-strategy-ops"><img src="https://agentmods.dev/badge/skills/senpi-ai/senpi-skills/senpi-strategy-ops.svg" alt="Reviewed on agentmods" width="80" height="20"></a>- NVIDIA SkillSpector warn
SkillSpector: 1 finding, up to medium
These are SkillSpector’s own severities. On a checked sample its high-severity flags on skills were ~96% false positives — a documented command, a public API, a “never do X” rule — so we show them as a caution to read, not a verdict. Why →
- medium Excessive Agency · line 201 Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.Fix: Add human-in-the-loop confirmation for destructive, irreversible, or high-impact operations. Never auto-execute commands that modify files, send data, or alter system state.
What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00641 | $0.10953 |
| Opus 5.5 | $0.00256 | $0.04381 |
| Sonnet 5.5 | $0.00128 | $0.02191 |
| Haiku 4.5 | $0.00064 | $0.01095 |
Grade A, and why
senpi-strategy-ops scanned grade A with 1 finding against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured today.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Makes network callslowCapability
Not a fault in itself. Listed so you know the mod talks to something, and to what.
exists against the registry (`curl -s https://raw.githubusercontent.com/Senpi-ai/senpi-skills/refs/heads/main/strategies/catalog.json`); How it starts
The opening of the file, as written. The whole thing — 407 lines — stays where its author put it; the contents beside it link to each section on GitHub.
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 funding
python3 /data/.openclaw/skills/senpi-strategy-ops/scripts/deploy.py create <id> --budget <usd> # 1. THE FUNDED PATH: forks it under their username, proves it, starts the deploy
python3 /data/.openclaw/skills/senpi-strategy-ops/scripts/deploy.py status # 2. read the job until terminal; the verified report (read-only)
python3 /data/.openclaw/skills/senpi-strategy-ops/scripts/status.py # what am I running? (+ health)
python3 /data/.openclaw/skills/senpi-strategy-ops/scripts/close.py <id> | --all # teardown one strategy | EVERY open strategy
"Install"/"reinstall " = deploy.py create <id> — a strategy is a package, not an openclaw/clawhub skill; not on disk just means fetch it by id. Fund through deploy.py create|runtime <id>, not through the bare verb. Both resolve the package,
run the structural preflight, then start the runtime's senpi deploy job, poll it, and relay its
report verbatim. The wrapper's value is resolution, that structural pass and the verbatim relay —
not a gate the verb lacks: the live-universe gate is the verb's own and it fires pre-money.
Both call openclaw gateway call senpi.* (~1 s; the verbs take 30-160 s on 10.x): read the job with deploy.py status.
Always tear down through close.py (one <id> or --all) — it deletes the runtime and closes
the strategy. A raw strategy_close MCP call closes the strategy but leaves the runtime
registered, which collides on the next deploy.
close.py is never a repair. It market-exits every position and returns the funds; a deploy after it is a
NEW wallet whose scanner state starts empty — needed only when update refuses E_UPDATE_WALLET_CHANGED (below).
"Relaunch", "restart", "redeploy", "fix it" → the read-only deploy.py verify on the id they run (status.py
lists their fork). VERIFIED = nothing to relaunch; "my edit isn't live" / "it isn't trading" → status.py <id>,
its ✎ / ⏸ rows; healthy but has never traded → its binding gate, threshold and universe count, never "being
selective" (references/liveness-verification.md). A step verify marks RUNS THE DEPLOY VERB needs their yes first: runtime <id> starts trading
the wallet it adopts, create --budget funds a NEW one (say the amount). PAUSED has no resume: tell the user,
run nothing. Close only on "close" / "tear down" / "withdraw" in their own words, or a yes to your sentence that every position closes at market.
A bare "stop" / "pause" / "stop trading" is ambiguous: ask once, "turn on watch-only (no new entries; open positions keep their DSL stops) or close everything at market?" Watch-only is decision_mode: none (below). Never call the MCP strategy_pause on a runtime strategy: it is for mirror strategies and has no resume.
Pass the strategy id for a CATALOG strategy (what senpi-strategy-discover hands over, e.g.
spider), fetched from the remote if not on disk; for a locally-authored package, pass its DIRECTORY
path. Either way the package belongs in the durable strategies root (SENPI_STRATEGIES_DIR if
set, else the agent workspace strategies/ dir — normally /data/workspace/strategies) and never
inside a skill directory: a package written there is destroyed on the next skill update. An on-disk
package is authoritative; an invalid one surfaces its real errors and is never silently replaced by a
remote fetch. Mechanics + state machine: references/lifecycle.md · manifest schema: references/strategy-yaml-schema.md.
What ships with it
47 files beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.
- references/editing-a-live-strategy.md 16 KB
- references/lifecycle.md 56 KB
- references/liveness-verification.md 18 KB
- references/refusal-playbook.md 27 KB
- references/strategy-yaml-schema.md 6.7 KB
- references/walkthrough.md 12 KB
- scripts/_cli.py 53 KB runs code
- scripts/_fetch.py 6.4 KB runs code
- scripts/_fork.py 9.0 KB runs code
- scripts/_journal.py 2.5 KB runs code
- scripts/_pkg.py 24 KB runs code
- scripts/_yaml.py 13 KB runs code
- scripts/close.py 25 KB runs code
- scripts/deploy.py 138 KB runs code
- scripts/mcp_client.py 6.6 KB runs code
- scripts/min_budget.py 9.8 KB runs code
- scripts/run.sh 3.6 KB runs code
- scripts/status.py 21 KB runs code
- scripts/validate_universe.py 9.1 KB runs code
- tests/test_cli_env.py 3.9 KB runs code
- tests/test_cli_reads.py 26 KB runs code
- tests/test_close.py 35 KB runs code
- tests/test_deploy_durable_root.py 1.8 KB runs code
- tests/test_deploy_update.py 6.4 KB runs code
- tests/test_deploy_where.py 992 B runs code
- tests/test_deploy_wrapper.py 181 KB runs code
- tests/test_dex_awareness.py 8.9 KB runs code
- tests/test_entry_gate_reachability.py 14 KB runs code
- tests/test_error_tail.py 4.9 KB runs code
- tests/test_fetch_fork_prefix.py 4.4 KB runs code
- tests/test_fetch_through_callers.py 2.6 KB runs code
- tests/test_fork.py 11 KB runs code
- tests/test_gateway_call.py 22 KB runs code
- tests/test_min_budget_vendor_parity.py 900 B runs code
- tests/test_never_traded_answer.py 6.5 KB runs code
- tests/test_pkg_refuses_keys_that_stop_no_entries.py 4.8 KB runs code
- tests/test_pkg.py 38 KB runs code
- tests/test_run_sh.py 3.5 KB runs code
- tests/test_skill_edit_not_live_until_applied.py 2.8 KB runs code
- tests/test_skill_serr124.py 4.4 KB runs code
- tests/test_skill_strategy_limits.py 6.1 KB runs code
- tests/test_skill_surface.py 32 KB runs code
- tests/test_status_health.py 13 KB runs code
- tests/test_status_risk.py 11 KB runs code
- tests/test_status.py 9.3 KB runs code
- tests/test_vendored_yaml_parses_every_package.py 12 KB runs code
- tests/test_walkthrough_tradable_minimum.py 3.0 KB runs code
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- today Changed · -1 tokens per session 1ac450848a1a
- yesterday Changed 28d9e964df40
- 8d ago Changed 87c37ff944ff
- 9d ago Changed · +30 tokens per session 60575420ee72
- 10d ago Changed a174eb8e35a7
- 15d ago Changed 57519e9eda76
- 20d ago Changed · +1 lines c6a4ed8e9e16
- 22d ago Changed · +8 lines 8f204b2f1c74
- 24d ago Changed · +11 lines ae5057bc2bd6
- 1mo ago First seen · 387 lines · 612 tokens per session scan A f828d7941041
senpi-strategy-ops is a skill published in the GitHub repository Senpi-ai/senpi-skills (144 stars, last pushed yesterday), licensed MIT. It adds 641 tokens to every session and 10,953 once invoked, about $0.0026 per session on Opus 5.5. A static security scan graded it A with 1 finding (makes network calls). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
senpi-strategy-ops compared with skills from other repositories
| Mod | Type | Stars | Last push | Licence | Scan | Tokens | Works with |
|---|---|---|---|---|---|---|---|
| senpi-strategy-opsSenpi-ai/senpi-skills | Skill | 144 | yesterday | MIT | A | 641 | Claude Code, Codex |
| sector-rotationHKUDS/Vibe-Trading | Skill | 38k | yesterday | MIT | A | 39 | Claude Code, Codex |
| twitter-readerhimself65/finance-skills | Skill | 3.5k | 2d ago | MIT | A | 110 | Claude Code |
| strategy-pivot-designertradermonty/claude-trading-skills | Skill | 3.7k | 2d ago | MIT | A | 28 | Claude Code, Codex |
| energy-procurementhashgraph-online/awesome-codex-plugins | Skill | 1.5k | yesterday | Apache-2.0 | A | 93 | Claude Code, Codex |
| airdrop-hunting-guidenirholas/three.ws | Skill | 269 | yesterday | Apache-2.0 | A | 54 | Claude Code, Codex |
| multi-expert-analyzerdigoal/blog | Skill | 8.6k | 2d ago | GPL-2.0 | A | 292 | Codex |