bison-strategy
BISON v3.0.1 — Conviction Holder. Patient multi-asset (BTC/ETH/SOL) conviction trader. MIN_SCORE 11 across 9 components (4H/1H structure, momentum, SM alignment, funding, volume, OI proxy, RSI). Conviction- scaled margin tiers (25%/31%/37%) and 7-10× leverage. DSL is wide by design — time-cuts DISABLED — so a real directional thesis can run multiple days into the move. Few trades. Long holds. Big moves. v3.0.1 ships a race-window dedup cache that eliminates the ENGINE_FAILURE retry noise on already-held assets, plus a doubled DSL exit interval to throttle REDUCE_ONLY spam when runtime position-state lags HL.
What this skill does
# 🦬 BISON v3.0.1 — Conviction Holder
**Asset whitelist (BTC/ETH/SOL).** **Conviction floor (minScore 11).**
**No time-cuts** — Phase 1 + Phase 2 ratchet ladder own all exits.
## v3.0.1 (2026-05-18) — held-asset dedup race-fix + DSL throttle
Operational reliability patch. NO thesis change. NO scoring change.
**Bug observed.** Audit on Bison12 (M192943) 2026-05-13 to 2026-05-17
showed **16 `create_position` ENGINE_FAILUREs** carrying
`BISON_CONVICTION` reasoning text, all for assets the wallet already
held. Each failure was a runtime LLM-gate fire on a producer-emitted
signal that should have been deduped — the producer's on-chain
`heldAssets` check leaked during the race window between
`push_signal()` returning OK and the resulting position appearing
in the next-tick `clearinghouseState` pull.
**Fix 1 — recent-signals cache (`scripts/bison_config.py`).**
`record_signal(coin)` writes `{coin: epoch_seconds}` to
`state/recent-signals.json` after every successful push. `main()`
calls `was_recently_signaled(coin)` BEFORE `build_thesis()` and
skips any coin seen within `RECENT_SIGNAL_TTL_SEC` (default 180s
≈ 3× the typical ALO open-fill window). Skipped coins are echoed
in `recently_signaled_skipped` in the per-tick output for audit.
**Fix 2 — DSL exit interval 30s → 60s (`runtime.yaml`).**
Audit also showed clusters of `CLOSE_FEE_OPTIMIZED_FAILED "Reduce
only order would increase position"` + `CLOSE_NO_POSITION` errors
firing 1-2 ticks after a successful close. The runtime's view of
the closed position takes longer to refresh than the 30s DSL
interval, so DSL re-fires close on a flat HL position. Doubling
the interval gives the runtime position-state pull room to catch
up and halves the wasted close attempts. **Root cause (runtime-
side position-state sync) is escalated to the runtime team** —
this YAML change is downstream mitigation only.
**What this does NOT fix.** Phantom orphan positions where DSL
state and HL state are durably out of sync (i.e. runtime thinks a
position is open after a complete external close, or vice versa).
That class of bug needs runtime-side reconciliation; the producer
has no authority over DSL state.
## v3.0.0 (2026-05-12) — plumbing-only migration
NO thesis change. v2.1 asset whitelist, minScore 11, conviction-scaled margin tiers, direction waterfall, 9-component scoring, and DSL preset all preserved verbatim. Six-layer plumbing flip:
1. **MCP transport**: `mcporter` subprocess (2.5-5s cold-start per call) → `senpi_runtime_helpers.SenpiClient.mcp_call()` in-process HTTPS (~280ms).
2. **Signal emit**: scanner called `create_position` directly (Wolverine pattern); producer now emits via `push_signal()` to runtime `/signals`. Runtime LLM-gated `bison_entry` action opens via FEE_OPTIMIZED_LIMIT, passing `marginUsd` + `leverage` through from signal data for tier-based sizing.
3. **Reentrancy**: no v2 lockfile to replace (Bison v2.x ran on openclaw cron with no producer-side lock); `producer_daemon` owns the per-tick `scanner_lock` with stale-PID auto-recovery.
4. **Scheduler**: openclaw cron (5 min) → `producer_daemon(interval_seconds=300)`. Long-lived process; zero per-tick cold-start cost.
5. **Risk gates**: Python `MAX_DAILY_LOSS_PCT`, dynamic-slots PnL-based cap, per-asset cooldown state files → declarative `risk.guard_rails` block. `state/trade-counter.json` and `state/asset-cooldowns.json` are vestigial in v3.0 and can be deleted.
6. **Exit fee**: DSL exits switched from MARKET (taker, 0.045%) to FEE_OPTIMIZED_LIMIT (maker-first, 0.015%, 60s ALO timeout, taker fallback). Entry exits keep `ensure_execution_as_taker: false` (v2.1 ALO patience rule).
## CRITICAL RULES
### RULE 1: Producer enters. DSL exits. Producer NEVER exits positions.
v1.x had thesis re-evaluation that chopped winners. v2.0 removed it. v3.0 makes it structurally impossible — the producer has no `close_position` call site.
### RULE 2: Producer emits signals via push_signal(); runtime opens
The producer scores conviction theses and emits via `client.push_signal()`. The runtime's LLM-gated `bison_entry` action opens the position via FEE_OPTIMIZED_LIMIT with `ensure_execution_as_taker: false` (v2.1 patience rule preserved — entry ALO waits 30s for maker fill).
### RULE 3: All signals are score contributors, not hard gates
4H trend, 1H trend, 1H momentum, SM direction, funding — all add/subtract points. The minScore threshold (v2.1+: 11) is the ONLY gate. Nothing kills a signal before scoring.
### RULE 4: Asset whitelist enforced (v2.1+)
Only BTC/ETH/SOL by default (configurable via `allowedAssets` in `bison-config.json`). Pre-v2.1 fetched top 10 by 24h notional volume — let small-caps that volume-spiked into the universe (e.g. ZEC on May 4) consume the single daily slot.
### RULE 5: ensureExecutionAsTaker = false on ENTRIES
Entries use FEE_OPTIMIZED_LIMIT with `ensure_execution_as_taker: false` (v2.1 patience rule). Exits use `ensure_execution_as_taker: true` (closes MUST happen — taker fallback is the safety floor).
### RULE 6: Use the DSL preset in runtime.yaml — not a custom DSL state file
v2.x shipped a hardcoded DSL state template in scanner output. v3.0 uses the runtime YAML's `dsl_preset` block as the single source of truth. No scanner-side DSL state.
## How BISON v3.0 trades
### Entry (all score contributors — preserved from v2.1)
| Signal | Points | Type |
|---|---|---|
| 4H trend aligned | +3 | Score |
| 4H trend opposing | -1 | Score |
| 1H trend agrees | +2 | Score |
| 1H trend opposing | -1 | Score |
| 1H strong momentum (≥1%) | +2 | Score |
| 1H moderate momentum (≥0.5%) | +1 | Score |
| 1H counter momentum | -1 | Score |
| SM aligned | +2 | Score |
| SM opposing | -2 | Score |
| Funding aligned | +2 | Score |
| Funding crowded | -1 | Score |
| Volume rising | +1 | Score |
| OI growing | +1 | Score |
| RSI room | +1 | Score |
| RSI extreme | -1 | Score |
| 4H momentum (>1.5%) | +1 | Score |
**Min score: 11. Max possible: ~16.**
### Direction determination (waterfall)
1. 4H trend structure → LONG if BULLISH, SHORT if BEARISH
2. If 4H NEUTRAL → follow SM direction
3. If SM NEUTRAL → follow 1H momentum (>0.5%)
4. If all neutral → no signal
### Conviction-scaled margin
| Score | Margin |
|---|---|
| 8-9 | 25% of account |
| 10-11 | 31% |
| 12+ | 37% |
Producer computes `marginUsd` from tier; signal data carries it; LLM gate passes through to runtime payload. Same pattern for `leverage` (default 10x, MIN 7x, MAX 10x).
### Exit — RatchetStop only
DSL preset wide-by-design for conviction breathing:
- +10% ROE: no lock (confirms working)
- +20% / +25% lock
- +30% / +40% lock
- +50% / +60% lock
- +75% / +75% lock
- +100% ROE: lock 85% — infinite trail
Phase 1 max_loss: 30%. Time-cuts: hard_timeout + dead_weight_cut DISABLED. weak_peak_cut KEPT (self-limiting at 60min/3.0% peak).
## Risk gates (`runtime.yaml` `risk.guard_rails`)
| Gate | Setting | Replaces |
|---|---|---|
| max_entries_per_day | 3 | v2.1 base daily cap |
| per_asset_cooldown_minutes | 120 | v2.1 `cooldownMinutes` |
| daily_loss_limit_pct | 10 | v2.1 `MAX_DAILY_LOSS_PCT` |
| max_consecutive_losses | 3 | v2.1 (implicit) |
| cooldown_minutes (post-loss) | 30 | new (fleet-standard) |
| drawdown_halt_pct | 25 | new (fleet-standard, Roach lesson) |
| drawdown_reset_on_day_rollover | false | fleet-standard |
v2.1's PnL-aware dynamic daily cap (3 base / 6 hard cap, tiered by realized PnL) is dropped in favor of static `max_entries_per_day=3` + `drawdown_halt_pct=25`. The conservative ceiling and -25% hard stop are preserved; the "ride the hot hand" tier is sacrificed for state-file-free reliability.
## Hardcoded constants (not configurable)
- MAX_LEVERAGE: 10
- MIN_LEVERAGE: 7
- XYZ_BANNED: true (banned at producer scan level)
## Operator deployment topology
Bison's runtime + producer pair runs **per strategy wallet, not per
operator**. Operators wanting more capital exposure deploy multiple
strategy wallets, each running its own runtime instance and its own
`Related in Design
contribute
IncludedLocal-only OSS contribution command center. Auto-refreshes the user's in-flight PR and issue state on invoke so conversations start with full context — no need to brief Claude on what's in flight. Helps the user find issues to contribute to on GitHub, builds per-repo dossiers of what each upstream expects (CLA, DCO, branch convention, AI policy, draft-first, review bots, issue templates), runs deterministic gates before any external action so AI-assisted contributions don't reach maintainers as slop. State is markdown-only: candidate files at ~/.contribute-system/candidates/, repo dossiers at ~/.contribute-system/research/, append-only event log at ~/.contribute-system/log.jsonl. No database, no cloud calls. Use when the user asks about their PRs / issues / contributions, wants to find new work to take on, claim an issue, build/refresh a repo's dossier, or draft a Design Issue or PR. Trigger with "/contribute", "what's my PR status", "find a contribution", "claim issue X", "draft a Design Issue for Y", "refresh dossier for Z".
architectural-analysis
IncludedUser-triggered deep architectural analysis of a codebase or scoped subtree across eight modes — information architecture, data flow, integration points, UI surfaces, interaction patterns, data model, control flow, and failure modes. This skill should be used when the user asks to "diagram this codebase," "map the architecture," "show the data flow," "give me an ERD," "trace control flow," "find the integration points," "verify the layout pattern," "audit the UX architecture," or any similar request whose primary deliverable is mermaid diagrams plus cited reports under docs/architecture/. Dispatches haiku/sonnet sub-agents in parallel for per-mode exploration, then verifies every citation mechanically before any node lands in a diagram. Not for one-off prose explanations of code (use code-explanation) or for high-level system design from scratch (use system-design).
mcp
IncludedModel Context Protocol (MCP) server development and tool management. Languages: Python, TypeScript. Capabilities: build MCP servers, integrate external APIs, discover/execute MCP tools, manage multi-server configs, design agent-centric tools. Actions: create, build, integrate, discover, execute, configure MCP servers/tools. Keywords: MCP, Model Context Protocol, MCP server, MCP tool, stdio transport, SSE transport, tool discovery, resource provider, prompt template, external API integration, Gemini CLI MCP, Claude MCP, agent tools, tool execution, server config. Use when: building MCP servers, integrating external APIs as MCP tools, discovering available MCP tools, executing MCP capabilities, configuring multi-server setups, designing tools for AI agents.
react-native-skia
IncludedDesign, build, debug, and optimise high-polish animated graphics in React Native or Expo using @shopify/react-native-skia, Reanimated, and Gesture Handler. Use when the user wants canvas-driven UI, shaders, paths, rich text, image filters, sprite fields, Skottie, video frames, snapshots, web CanvasKit setup, or performance tuning for custom motion-heavy elements such as loaders, hero art, cards, charts, progress indicators, particle systems, or gesture-driven surfaces. Also use when the user asks for fluid, glow, glass, blob, parallax, 60fps/120fps, or GPU-friendly animated effects in React Native, even if they do not explicitly say "Skia". Do not use for ordinary form/layout work with standard views.
plaid
IncludedProduct Led AI Development — guides founders from idea to launched product. Six capabilities: Idea (discover a product idea), Validate (pressure-test the idea against fatal flaws, problem reality, competition, and 2-week MVP feasibility), Plan (vision intake + document generation), Design (translate image references into a design.md spec), Launch (go-to-market strategy), and Build (roadmap execution). Use when someone says "PLAID", "plaid idea", "help me find an idea", "product idea", "idea from my business", "idea from my expertise", "plaid validate", "validate my idea", "pressure-test", "is this idea good", "find fatal flaws", "validate the problem", "plan a product", "define my vision", "generate a PRD", "product strategy", "plaid design", "design from image", "translate image to design", "create design.md", "extract design tokens", "plaid launch", "go-to-market", "launch plan", "GTM strategy", "launch playbook", "plaid build", "build the app", "start building", or "execute the roadmap".
nextjs-framer-motion-animations
IncludedAdds production-safe Motion for React or Framer Motion animations to Next.js apps, including reveal, hover and tap micro-interactions, whileInView, stagger, AnimatePresence, layout and layoutId transitions, reorder, scroll-linked UI, and lightweight route-content transitions. Use when the user asks to add, refactor, or debug Motion or Framer Motion in App Router or Pages Router codebases, especially around server/client boundaries, reduced motion, LazyMotion, bundle size, hydration, or route transitions. Avoid for GSAP-style timelines, WebGL or 3D scenes, heavy scroll storytelling, or CSS-only effects unless Motion is explicitly requested.