jackal-tracker
JACKAL v3.0.0 โ The Smart Stalker (senpi_runtime_helpers migration). Plumbing-only port from v2.0: producer rewritten on `senpi_runtime_helpers` (in-process SenpiClient, no openclaw / mcporter subprocesses). NO thesis change. Architecture is identical to v2: pure producer + external_scanner + LLM-gated OPEN_POSITION action + declarative risk guardrails + runtime-managed DSL. Producer observes top-performing Senpi traders, detects new entries by pool members, enriches with consensus + TA + funding context, and lets an LLM (operator-selected via `$JACKAL_DECISION_MODEL`) evaluate each candidate before the runtime executes with our own DSL.
What this skill does
# ๐บ JACKAL v2.0 โ The Smart Stalker (v2-native)
The jackal watches bigger predators hunt. v2 splits the hunt into two
processes that can't step on each other:
- **The producer** runs as a long-lived daemon (`producer_daemon`),
builds the trader pool, detects new entries, enriches with context,
and pushes candidate signals. Nothing else. No execution, no DSL,
no risk code.
- **The runtime** receives signals, gates each through an LLM decision
prompt with `min_confidence: 7`. The model is required at deploy
time via the `$JACKAL_DECISION_MODEL` env var (no default by design
โ operators pick whatever model they prefer from the runtime's
registry โ bare model name, NO provider prefix).
The runtime executes approved entries, auto-manages DSL exits, and
enforces declarative risk guardrails.
This is the fleet's first v2-runtime-native agent. Legacy v1 scanner +
pool code is preserved in `legacy-v1/` for reference.
---
## What changed from v1.1
| Layer | v1.1 | v2.0 |
|---|---|---|
| Scanner | 760-line Python scanner with execution + DSL + risk logic | 400-line producer that only emits signals |
| Entry decision | Hardcoded score thresholds in Python | LLM `decision_prompt` with `min_confidence: 7` (model via `actions.decision_model`) |
| DSL attach | Manual `ratchet_stop_add` call after every entry | Runtime manages via position_tracker lifecycle events |
| Risk gates | `MAX_POSITIONS`, `MAX_DAILY_ENTRIES`, cooldowns in code | `risk.guard_rails` YAML block |
| Pool maintenance | Two-tier (Watchlist + Active) with quality scoring | Single top-N pool from `discovery_get_top_traders` |
| Fresh-entry gate | Position age 15mโ8h in scanner | `entry_age < 10 min` in producer (runtime handles cooldowns) |
| Signal shape | Internal dict passed to execute function | Typed JSON matching `config.fields` schema |
| Execution code | `create_position` + `ratchet_stop_add` in scanner | None โ runtime handles |
---
## Why this thesis wants LLM gating
Jackal's thesis has subjective elements that don't compress into hard
scoring thresholds well:
- **Source quality is multidimensional.** Win rate, ROI, consistency,
trader age, fee efficiency โ a scoring formula flattens these into one
number. An LLM can weigh them contextually (e.g., "win rate 60% is
weaker for a 14-day trader than for a 90-day trader").
- **Consensus is nuanced.** 2 other pool members in the same trade is
stronger if all 3 traders are independently high-quality, weaker if
they share correlation (e.g., all subscribe to the same paid signal).
- **TA + fundamentals interact.** A LONG copy when 4h is BULLISH + funding
is LONG_CROWDED is riskier than when funding is neutral. Hard scoring
can't capture the interaction gracefully.
- **Regression risk is a feel call.** A trader on a 5-win streak might
be peaking (regress incoming) or riding a genuine alpha period. An LLM
can reason about which.
v2 moves these decisions from code to prompt โ easier to iterate, and
decisions are auditable via `openclaw senpi action decisions`.
---
## Architecture
```
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ jackal-producer.py (60s tick)โ โโ 1. refresh pool daily via discovery_get_top_traders
โ โ โโ 2. diff positions against last-seen
โ โ โโ 3. enrich with consensus + TA + funding + BTC macro
โ โ โโ 4. push signal via
โ โ client.push_signal() (direct HTTP POST)
โโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโ
โ
โผ POST /signals
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ senpi-trading-runtime (v2) โ
โ jackal_signals scanner โ โโ receives typed signal payload
โ jackal_entry action โ โโ LLM (actions.decision_model) evaluates
โ decision_mode: llm โ with decision_prompt
โ min_confidence: 7 โ โโ executes if confidence >= 7
โ position_tracker โ โโ detects open โ starts DSL
โ DSL exit engine โ โโ Phase 1/2, hard_timeout 72h,
โ โ weak_peak 4h @ 3%, no dead_weight
โ risk.guard_rails โ โโ enforces daily_loss_limit,
โ โ max_entries, consecutive_losses,
โ โ drawdown_halt, per_asset_cooldown
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
```
---
## Pool selection (v2 simplified)
v1.1 maintained a two-tier pool (Watchlist + Active) with quality-score
promotion/demotion rules. v2 replaces that with a daily refresh from
`discovery_get_top_traders`:
- Filters: win_rate โฅ 0.50, roi_30d โฅ 10%, trader_age โฅ 14 days
- Sort: by composite quality score (win_rate, ROI, age, gain-to-pain)
- Size: top 25
The v1 complexity (velocity scoring, watchlist sustain windows,
demotion cooldowns) is replaced by the Senpi discovery API's own
ranking. If that ranking isn't good enough, we can reintroduce
trajectory scoring inside the producer โ but starting simple and
validating the v2 plumbing first.
---
## Risk guard rails (runtime-enforced)
Declared in `runtime.yaml`, enforced before every entry:
```yaml
risk:
guard_rails:
daily_loss_limit_pct: 5
max_entries_per_day: 4
max_consecutive_losses: 3
cooldown_minutes: 120
drawdown_halt_pct: 20
per_asset_cooldown_minutes: 240
```
No Python bookkeeping required. No risk of counter-reset bugs (like
Dire's daily-cap issue on 2026-04-23). Runtime is the source of truth.
---
## DSL (patience preserved)
Jackal's v1 patience profile survives:
| Control | v1.1 | v2.0 |
|---|---|---|
| hard_timeout | 72h | 72h |
| weak_peak_cut | 8h @ 3% | 4h @ 3% (tightened โ v1 was too forgiving on fade) |
| dead_weight_cut | 4h | **disabled** (runtime auto-disables once Phase 2 reached; single-decision thesis doesn't benefit from time-based loss cuts) |
| Phase 1 max_loss | 22% | 22% |
| Phase 2 tiers | 6 tiers | 6 tiers (same ladder) |
---
## Producer install (on OpenClaw host)
```bash
# 1. Pull the skill
curl -s https://raw.githubusercontent.com/Senpi-ai/senpi-skills/main/jackal/runtime.yaml \
-o /data/workspace/skills/jackal-tracker/runtime.yaml
curl -s https://raw.githubusercontent.com/Senpi-ai/senpi-skills/main/jackal/scripts/jackal-producer.py \
-o /data/workspace/skills/jackal-tracker/scripts/jackal-producer.py
curl -s https://raw.githubusercontent.com/Senpi-ai/senpi-skills/main/jackal/scripts/jackal_config.py \
-o /data/workspace/skills/jackal-tracker/scripts/jackal_config.py
curl -s https://raw.githubusercontent.com/Senpi-ai/senpi-skills/main/jackal/scripts/jackal_state.py \
-o /data/workspace/skills/jackal-tracker/scripts/jackal_state.py
# 2. Install the runtime
# JACKAL_DECISION_MODEL is REQUIRED โ pick any model supported by the
# runtime's model registry. Use the BARE model name (NO provider prefix
# like "google/..." or "anthropic/..." โ OpenClaw double-prefixes those
# and rejects them as 500 Unknown model). There is no default by design.
WALLET_ADDRESS=0x... \
TELEGRAM_CHAT_ID=... \
JACKAL_DECISION_MODEL=<your-preferred-model> \
openclaw senpi runtime create --path /data/workspace/skills/jackal-tracker/runtime.yaml
# 3. Launch the producer daemon (60s tick).
SENPI_AUTH_TOKEN=<your-token> \
JACKAL_WALLET=0x... \
nohup python3 -u /data/workspace/skills/jackal-tracker/scripts/jackal-producer.py \
> /tmp/jackal-producer.log 2>&1 &
# 4. Verify
openclaw senpi runtime list
openclaw senpi status --runtime jackal-tracker
senpi-helpers list # daemon visible with recent LAST_TICK
senpi-helpers health jackal-<wallet-suffix> # exit 0 = healthy
senpi-helpers stats jackal-<wallet-suffix> --hours 1 # signals posted + error histogram
```
## Verify the LLM gate is doing work
```bash
# All decisions (LLM reasoning JSON per candidate)
openclaw senpi action decisions jackal_entry
# Only executed entries
openclaw senpi action history jackal_entry
```
A healthy Jackal v2 will show LLM decisionRelated in AI Agents
skill-development
IncludedComprehensive meta-skill for creating, managing, validating, auditing, and distributing Claude Code skills and slash commands (unified in v2.1.3+). Provides skill templates, creation workflows, validation patterns, audit checklists, naming conventions, YAML frontmatter guidance, progressive disclosure examples, and best practices lookup. Use when creating new skills, validating existing skills, auditing skill quality, understanding skill architecture, needing skill templates, learning about YAML frontmatter requirements, progressive disclosure patterns, tool restrictions (allowed-tools), skill composition, skill naming conventions, troubleshooting skill activation issues, creating custom slash commands, configuring command frontmatter, using command arguments ($ARGUMENTS, $1, $2), bash execution in commands, file references in commands, command namespacing, plugin commands, MCP slash commands, Skill tool configuration, or deciding between skills vs slash commands. Delegates to docs-management skill for official documentation.
reprompter
IncludedTransform messy prompts into well-structured, effective prompts โ single or multi-agent. Use when: "reprompt", "reprompt this", "clean up this prompt", "structure my prompt", rough text needing XML tags and best practices, "reprompter teams", "repromptception", "run with quality", "smart run", "smart agents", multi-agent tasks, audits, parallel work, anything going to agent teams. Don't use when: simple Q&A, pure chat, immediate execution-only tasks. See "Don't Use When" section for details. Outputs: Structured XML/Markdown prompt, quality score (before/after), optional team brief + per-agent sub-prompts, agent team output files. Success criteria: Single mode quality score โฅ 7/10; Repromptception per-agent prompt quality score 8+/10; all required sections present, actionable and specific.
adaptive-compaction
IncludedAdaptive add-on policy and recovery layer that decides WHEN to compact, prune, snapshot, or fork -- replacing fixed-percent auto-compaction across Claude Code, Codex, and MCP-capable hosts. Trigger on auto-compact timing or damage: "when should I compact", "is it safe to compact now or start a fresh session", "auto-compact fires too early/mid-task", "switching to an unrelated task but the window still has space", "context rot", "answers get worse the longer the session runs", "the agent forgot the plan or my decisions after it summarized", "add a layer on top that manages context without changing the agent", raising autoCompactWindow to give the policy room, or installing/tuning a cross-tool compaction policy or PreCompact hook -- even when "compaction" is never said but the problem is context-window pressure or post-summarization memory loss. Do NOT use to summarize a conversation, build RAG, write a summarization prompt (decides WHEN not HOW), or answer max-context-length trivia.
agent-skill-creator
IncludedCreate cross-platform agent skills from workflow descriptions. Activates when users ask to create an agent, automate a repetitive workflow, create a custom skill, or need advanced agent creation. Triggers on phrases like create agent for, automate workflow, create skill for, every day I have to, daily I need to, turn process into agent, need to automate, create a cross-platform skill, validate this skill, export this skill, migrate this skill. Supports single skills, multi-agent suites, transcript processing, template-based creation, interactive configuration, cross-platform export, and spec validation.
llm-wiki
IncludedUse when building or maintaining a persistent personal knowledge base (second brain) in Obsidian where an LLM incrementally ingests sources, updates entity/concept pages, maintains cross-references, and keeps a synthesis current. Triggers include "second brain", "Obsidian wiki", "personal knowledge management", "ingest this paper/article/book", "build a research wiki", "compound knowledge", "Memex", or whenever the user wants knowledge to accumulate across sessions instead of being re-derived by RAG on every query.
skill-master
IncludedAgent Skills authoring, evaluation, and optimization. Create, edit, validate, benchmark, and improve skills following the agentskills.io specification. Use when designing SKILL.md files, structuring skill folders (references, scripts, assets), ingesting external documentation into skills, running trigger evals, benchmarking skill quality, optimizing descriptions, or performing blind A/B comparisons. Keywords: agentskills.io, SKILL.md, skill authoring, eval, benchmark, trigger optimization.