The WOLF hunts for its human. It scans, enters, exits, and rotates positions autonomously — no permission needed. When criteria are met, it acts. Speed is edge.
Works with
AI-first code editor with Composer
Before installing skills in Cursor, ensure your development environment meets these requirements:
node --versionwolf-strategyExecute the skills CLI command in your project's root directory to begin installation:
Fetches wolf-strategy from senpi-ai/senpi-skills and configures it for Cursor.
The CLI shows a list of agents. Use arrow keys and space to select Cursor:
Confirm successful installation by checking the skill directory location:
Restart Cursor to activate wolf-strategy. Access via /wolf-strategy in your agent's command palette.
We perform automated surface-level scans (Gen AI Scanner, Socket, Snyk) during installation. These checks detect common vulnerabilities but do not guarantee complete security. Always review skill source code and verify the publisher's reputation before production use.
Skills execute code in your environment. Always review source, verify the publisher, and test in isolation before production.
Submit your Claude Code skill and start earning
Create detailed user stories, acceptance criteria, and feature specs
Example
Generate user stories for 'password reset feature' with acceptance criteria, edge cases, and test scenarios
Reduce spec writing time by 50%, ensure comprehensive coverage
Research competitors, compare features, identify gaps
Example
Analyze 5 competitor products, create feature comparison matrix, suggest differentiation opportunities
Complete competitive research in 2 hours instead of 2 days
Evaluate features using frameworks (RICE, ICE, Kano) and create prioritized backlogs
Example
Score 20 feature ideas using RICE framework, generate prioritized roadmap with rationale
0
total installs
0
this week
61
GitHub stars
0
upvotes
Run in your terminal
0
installs
0
this week
61
stars
The WOLF hunts for its human. It scans, enters, exits, and rotates positions autonomously — no permission needed. When criteria are met, it acts. Speed is edge.
Proven: +$1,500 realized, 25+ trades, 65% win rate, single session on $6.5k budget.
v6: Multi-strategy support. Each strategy has independent wallet, budget, slots, and DSL config. Same asset can be held in different strategies simultaneously (e.g., Strategy A LONG HYPE + Strategy B SHORT HYPE).
v6.1.1: Risk Guardian & strategy lock. 6th cron (5min, Budget tier) enforcing account-level guard rails — daily loss halt, max entries per day, consecutive loss cooldown. Strategy lock for concurrency protection. Gate check in open-position.py refuses new entries when gate != OPEN.
v6.3: DSL v5.3.1 High Water. Default DSL profile and strategy config use High Water Mode (lockMode: pct_of_high_water) with lockHwPct tiers and per-tier consecutiveBreachesRequired. One DSL cron per strategy runs dsl-v5.py (v5.3.1); state files in {workspace}/dsl/{strategyId_UUID}/. Migration script: wolf-migrate-dsl.py.
v6.2: DSL v5.2 integration. Replaced internal dsl-combined.py with the dsl-dynamic-stop-loss skill. Native Hyperliquid stop-loss sync via dsl-v5.py.
When creating a strategy, include skill_name and skill_version in the call. See references/skill-attribution.md for details.
wolf-strategies.json)Central config holding all strategies. Created/updated by wolf-setup.py.
wolf-strategies.json
├── strategies
│ ├── wolf-abc123 (Aggressive Momentum, 3 slots, tradingRisk=aggressive)
│ └── wolf-xyz789 (Conservative XYZ, 2 slots, tradingRisk=conservative)
└── global (telegram, workspace)
DSL state files live under the DSL skill's directory (by strategy UUID). Wolf-specific state (trade counters) stays in state/:
dsl/ # owned by dsl-dynamic-stop-loss skill
├── abc12345-.../ # Strategy A UUID
│ ├── strategy-abc12345....json # DSL strategy config
│ ├── HYPE.json # Position state
│ └── xyz--SILVER.json # XYZ position
└── xyz78901-.../ # Strategy B UUID
└── HYPE.json # Same asset, different UUID dir, no collision
state/ # wolf-only state (no DSL files here)
├── wolf-abc123/
│ └── trade-counter.json
└── wolf-xyz789/
└── trade-counter.json
When a signal fires, it's routed to the best-fit strategy:
DSL default: Use this skill's dsl-profile.json as the default when setting up DSL (e.g. dsl-cli.py add-dsl / update-dsl with --configuration @<path-to-wolf-strategy>/dsl-profile.json). Use it unless the user explicitly provides a custom DSL configuration via the agent.
python3 scripts/wolf-setup.py --wallet 0x... --strategy-id UUID --budget 2000 \
--chat-id 12345 --name "Conservative XYZ" --dsl-preset conservative --provider anthropic
This adds to the registry without disrupting running strategies. Disable with enabled: false in the registry.
Enter before the peak, not at the top.
Leaderboard rank confirmation LAGS price. When an asset jumps from #31->#16 in one scan, the price is moving NOW. By the time it reaches #7 with clean history, the move is over. Speed is edge.
Core principle: 2 reasons at rank #25 with a big jump = ENTER. 4+ reasons at rank #5 = SKIP (already peaked).
mcporter list should show senpi)dsl-dynamic-stop-loss skill is installed alongside this skill (provides dsl-cli.py and dsl-v5.py)strategy_create_custom_strategy via mcporterstrategy_top_up with your budgetanthropic, openai, or google)python3 scripts/wolf-setup.py --wallet 0x... --strategy-id UUID --budget 6500 --chat-id 12345 --provider anthropic
dsl-cli.py and dsl-v5.py paths and stores them in wolf-strategies.json global configglobal.dslCliPath and global.dslScriptPath manually in the registry (or set env DSL_CLI_PATH)python3 scripts/wolf-migrate-dsl.py
state/{strategyKey}/dsl-{ASSET}.json → dsl/{UUID}/{ASSET}.jsonactive: false). Run once before switching crons.references/cron-templates.md
cronTemplates.dsl_per_strategy from setup output — use the message field directlyTo add a second strategy, run wolf-setup.py again with a different wallet/budget. It adds to the registry and creates the DSL cron for the new strategy.
| # | Job | Interval | Session | Script | Purpose |
|---|---|---|---|---|---|
| 1 | Emerging Movers | 3min | isolated | scripts/emerging-movers.py |
Hunt FIRST_JUMP + IMMEDIATE_MOVER signals — primary entry trigger |
| 2 | DSL (per strategy) | 3min | isolated | dsl-v5.py (DSL skill) |
Trailing stops + native HL SL sync for ONE strategy's positions |
| 3 | SM Flip Detector | 5min | isolated | scripts/sm-flip-check.py |
Cut positions where SM conviction collapses |
| 4 | Watchdog | 5min | isolated | scripts/wolf-monitor.py |
Per-strategy margin buffer, liq distances (Phase 1 auto-cut is handled by DSL cron when configured) |
| 5 | Health Check | 10min | isolated | scripts/job-health-check.py |
Per-strategy orphan DSL detection, state validation |
| 6 | Risk Guardian | 5min | isolated | scripts/risk-guardian.py |
Account-level guard rails: daily loss halt, max entries, consecutive loss cooldown |
v6.2 change: DSL is no longer a combined runner. Each strategy has its own dsl-v5.py cron (from the dsl-dynamic-stop-loss skill), run with --strategy-id {strategyId_UUID} --state-dir {DSL_STATE_DIR} (env vars are fallback). Wolf scripts call dsl-cli.py (add-dsl / delete-dsl) to create and archive DSL state; they never write state directly.
With 2 strategies: 7 crons total (5 wolf + 2 DSL). DSL cron IDs are stored in dslCronJobId in the strategy registry.
IMPORTANT: Determine the user's configured AI provider BEFORE running
wolf-setup.py. Pass--providerto auto-select correct model IDs. Do NOT pick models from an unconfigured provider — crons will fail silently.
wolf-setup.py --provider <name> auto-configures model IDs for all cron templates. Step down to Budget tier for simple threshold crons to save ~60-70% on those runs.
Provider defaults (auto-selected by --provider):
| Provider | Mid Model | Budget Model |
|---|---|---|
anthropic |
anthropic/claude-sonnet-4-5 |
anthropic/claude-haiku-4-5 |
openai |
openai/gpt-4o |
openai/gpt-4o-mini |
google |
google/gemini-2.0-flash |
google/gemini-2.0-flash-lite |
| Cron | Session | Model Tier | Reason |
|---|---|---|---|
| Emerging Movers | isolated | Mid | Multi-strategy routing judgment, entry decisions |
| DSL (per strategy) | isolated | Mid | ndjson parsing, rule-based close/alert, cron lifecycle |
| Health Check | isolated | Mid | Rule-based file repair, action routing |
| SM Flip Detector | isolated | Budget | Binary: conviction≥4 + 100 traders → close |
| Watchdog | isolated | Budget | Threshold checks → alert |
| Risk Guardian | isolated | Budget | Guard rail evaluation, send notifications |
Single-model option: All 6 crons can run on one model. Simpler but costs more for the crons that do simple threshold/binary work.
Model ID gotchas:
--provider auto-selects models. Only use --mid-model/--budget-model to override specific tiers.claude-3-5-haiku-20241022) or hallucinate model names. Always use --provider instead of manually specifying model IDs.Critical: Crons are OpenClaw crons, NOT senpi crons. All crons run in isolated sessions (agentTurn) — each runs in its own session with no context pollution, enabling cheaper model tiers.
Create each cron using the OpenClaw cron tool. The exact mandate text for each cron is in references/cron-templates.md. Replace placeholders ({TELEGRAM}, {SCRIPTS}, {WORKSPACE}).
DSL cron: The DSL per-strategy cron mandate is generated by wolf-setup.py in cronTemplates.dsl_per_strategy.payload.message. Use it directly — wolf-setup.py auto-fills the dsl-v5.py path from global.dslScriptPath in the registry. If the path could not be auto-discovered (placeholder {DSL_SCRIPTS} still present), read global.dslScriptPath from wolf-strategies.json after installing the DSL skill and substitute it manually.
v6.2: 5 shared wolf crons + 1 DSL cron per strategy. No more single DSL Combined cron.
The WOLF operates autonomously by default. The agent does NOT ask permission to:
The agent DOES notify the user (via Telegram) after every action.
What: Asset jumps 10+ ranks from #25+ in ONE scan AND was not in previous scan's top 50 (or was at rank >= #30).
Action: Enter IMMEDIATELY. This is the money signal. Route to best-fit strategy with available slots.
Checklist:
isFirstJump: true in scanner outputtradingRisk + asset maxLeverage + signal conviction= 10 SM traders (crypto); for XYZ equities, ignore trader count
What to ignore:
If CONTRIB_EXPLOSION accompanies it: Double confirmation. Even stronger entry.
What: 3x+ contribution increase in one scan from asset at rank #20+.
Action: Enter even if rank history looks "erratic." The contrib spike IS the signal regardless of prior rank bouncing.
Never downgraded for erratic history. Often accompanies FIRST_JUMP for double confirmation.
What: Steady climb from #30+, positive velocity (>= 0.03), 3+ reasons, clean rank history.
Action: Enter when it crosses into top 20. Route to conservative strategy if available.
What: Appears in top 20 from nowhere (wasn't in top 50 last scan).
Action: Instant entry.
This deserves its own section because it's the #1 way to lose money with WOLF.
The pattern: Scanner fires FIRST_JUMP for ASSET at #25->#14. You hesitate. Next scan it's #10. Next scan #7 with 5 reasons and clean history. NOW it looks "safe." You enter. It reverses from #5.
The fix: Enter on the FIRST signal or don't enter at all. If you missed it, wait for the next asset. There's always another FIRST_JUMP coming.
Rule: If an asset has been in the top 10 for 2+ scans already, it's too late. Move on.
Phase 1 time-based cuts (hard timeout, weak peak, dead weight) are managed by the DSL cron when the skill supplies phase1.hardTimeout, phase1.weakPeakCut, and/or phase1.deadWeightCut in its DSL config. Wolf-strategy does not implement these in the Watchdog; include them in the skill's dsl-profile (or defaultConfig) if desired.
When configured in DSL:
Why: Phase 1 positions have no trailing stop protection. If the skill enables these in DSL config, the DSL cron enforces them; wolf-strategy no longer needs to manage them.
All trailing stops handled automatically by dsl-combined.py across all strategies.
Conv drops to 0 or 4->1 with mass trader exodus -> instant cut.
When DSL config includes phase1.deadWeightCut, the DSL cron closes positions that have never gone positive (ROE negative entire time) after the configured minutes. Other dead-weight logic (e.g. conv 0, negative ROE) can remain in agent mandate if desired.
Conviction 4+ in the OPPOSITE direction with 100+ traders -> cut immediately.
When ANY wolf script closes a position:
dsl-cli.py delete-dsl {strategyId} {asset} {main|xyz} --state-dir {DSL_STATE_DIR} to archive the DSL statecron_to_remove → remove that DSL cron (it was the last position for that strategy)Never set active: false in place. DSL v5.2 archives files by rename; an in-place deactivation will confuse dsl-v5.py.
Wolf delegates all DSL logic to the dsl-dynamic-stop-loss skill. Wolf's role:
dsl-cli.py add-dsl {strategyId} {asset} {dex} --skill wolf-strategy --configuration {...} --state-dir {DSL_STATE_DIR} after opening a positiondsl-cli.py delete-dsl {strategyId} {asset} {dex} --state-dir {DSL_STATE_DIR} after closing a positiondsl-v5.py runs as a per-strategy cron with --strategy-id {UUID} --state-dir {DSL_STATE_DIR} (env vars are fallback)Wolf never writes DSL state files directly.
edit_position. Between cron runs, HL's engine protects the position.| Tier | ROE Trigger | Lock % of High-Water | Breaches (shared) |
|---|---|---|---|
| 1 | 5% | 50% | 2 (majority from wolf tier config) |
| 2 | 10% | 65% | 2 |
| 3 | 15% | 75% | 2 |
| 4 | 20% | 85% | 2 |
Note: DSL v5.2 uses a single consecutiveBreachesRequired for all tiers. build_wolf_dsl_config() derives it from the majority breach count in wolf's tier config.
Location: dsl/{strategyId_UUID}/{ASSET}.json (e.g. dsl/6a23783a-.../HYPE.json).
See references/state-schema.md for schema. Key difference from v4: phase1.retraceThreshold is a fraction (0.10), not a percentage (10).
When slots are full in a strategy and a new FIRST_JUMP or IMMEDIATE fires:
rotationEligibleCoins from the scanner output. Positions younger than rotationCooldownMinutes (default 45 min) are ineligible — they have flat/negative ROE by design. Do NOT override this with judgment.rotationEligibleCoins) is flat/negative ROE with SM conv 0-1hasRotationCandidate: false: all positions are in cooldown. Do not rotate. Output HEARTBEAT_OK.All sizing is calculated from budget (30% per slot):
| Budget | Slots | Margin/Slot | Daily Loss Limit |
|---|---|---|---|
| $500 | 2 | $150 | -$75 |
| $2,000 | 2 | $600 | -$300 |
| $6,500 | 3 | $1,950 | -$975 |
| $10,000+ | 3-4 | ✓ Make data-driven prioritization decisions faster Stakeholder CommunicationDraft PRDs, status updates, and stakeholder presentations Example Create executive summary of Q3 roadmap, monthly progress report, feature launch announcement ✓ Save 3-5 hours/week on communication overhead Implementation GuidePrerequisites
Time Estimate 30-60 minutes to see productivity improvements Steps
Common Pitfalls
Best Practices✓ Do
✗ Don't
💡 Pro Tips
When to Use This✓ Use when Use for user story writing, competitive research, roadmap prioritization, stakeholder communication, and PRD drafting. Best for reducing repetitive documentation and research work. ✗ Avoid when Avoid for strategic product vision (requires deep customer empathy), pricing decisions (needs market and financial expertise), or when face-to-face customer discovery is more valuable than speed. Learning Path
Related Skillsgrill-me704mattpocock/skills Productivitysame category premortem218parcadei/continuous-claude-v3 Productivitysame category deslop163cursor/plugins Productivitysame category travel-planner145ailabs-393/ai-labs-claude-skills Productivitysame category nutritional-specialist140ailabs-393/ai-labs-claude-skills Productivitysame category framer-motion140pproenca/dot-skills Productivitysame category Reviews4.6★★★★★40 reviews
showing 1-10 of 40 1 / 4 DiscussionComments — not star reviews
|