Skip to content

[new-plugin] otto-kol-follow v0.1.1#406

Open
Vb6Z wants to merge 4 commits intookx:mainfrom
useOttoAI:submit/otto-kol-follow
Open

[new-plugin] otto-kol-follow v0.1.1#406
Vb6Z wants to merge 4 commits intookx:mainfrom
useOttoAI:submit/otto-kol-follow

Conversation

@Vb6Z
Copy link
Copy Markdown

@Vb6Z Vb6Z commented Apr 30, 2026

Plugin: otto-kol-follow v0.1.1

Resubmitting after Google Form submission (https://forms.gle/gFCef1Y4qCv49L2z7). Original PR (#368) was bulk-closed in the procedural sweep on 2026-04-28; this is the v0.1.1 follow-up.

What this Plugin does

Otto KOL Follow mirrors aggregated sentiment from the top 50 crypto KOLs on X into a Hyperliquid perp. Trades only when the cohort hits statistically meaningful consensus (sample size + confidence + direction gates).

Required files

  • .claude-plugin/plugin.json
  • plugin.yaml ✓ (with dependent_plugin / risk_level: advanced / supported_venues per FOR-DEVELOPERS.md "Submitting Strategy Plugins")
  • SKILL.md ✓ (Overview / Pre-flight Checks / Commands / Error Handling / Security Notices)
  • SUMMARY.md ✓ (English Overview / Prerequisites / Quick Start)
  • LICENSE ✓ (MIT)
  • scripts/bot.py + scripts/config.py — optional autonomous poller; SKILL.md reactive flow is primary

Advanced-tier compliance

  • ✅ Dry-run default (DRY_RUN = True in config.py)
  • ✅ Stop-loss mechanism (SL_PCT = 0.02)
  • ✅ Maximum amount limits (MAX_SIZE_USD, MAX_POSITION_PCT_EQUITY)
  • ✅ Risk disclaimer in SKILL.md and config.py
  • --strategy-id otto-kol-follow on every write op (autonomous bot.py and reactive SKILL.md flows)

Stress test

All 3 Otto strategy plugins exercised end-to-end against the live Otto signal feed at https://signals.useotto.xyz with real hyperliquid-plugin order and polymarket-plugin list-markets previews. Decision-logic harness lives at services/otto-skills/stress_test.py in the source monorepo. Production telemetry runner shipped at services/otto-skills-stress/ (Phase 1: dry-run logging; Phase 2: live trading gated behind STRESS_LIVE_MODE env var).

Threshold tunes (v0.1.1)

Calibrated against observed live data 2026-04-30:

  • MIN_KOL_COUNT: 40 → 25 (real distinct-author counts: 30–40)
  • MIN_CONFIDENCE_KOL: 0.70 → 0.50 (sentiment_score ≥75 OR ≤25 = real consensus)
  • MIN_SCORE: 0.65 → 0.50 (token-alpha confidence range observed)
  • MAX_SIGNAL_AGE_SEC: 900 / 600 → 4500 (covers full hourly producer cadence)
  • MIN_EDGE_PCT (mispricing only): 0.08 → 0.05

Happy to address any review feedback. Ping us at @useOttoAI on X or via the email on the Google Form.

Vb6Z and others added 3 commits April 30, 2026 13:17
…d tunes

Resubmitting after Google Form submission for the OKX Plugin Store
Developer Challenge S1.

Adds strategy-plugin metadata fields per FOR-DEVELOPERS.md "Submitting
Strategy Plugins" section:
- dependent_plugin: declares which trading plugin this strategy calls
- risk_level: advanced (autonomous strategy with money movement)
- supported_venues: informational

Threshold tunes calibrated against live signal feed at signals.useotto.xyz:
- MIN_KOL_COUNT 40 → 25 (matches real distinct-author counts)
- MIN_CONFIDENCE_KOL 0.70 → 0.50 (sentiment_score ≥75 or ≤25)
- MIN_SCORE 0.65 → 0.50 (token-alpha confidence range observed)
- MAX_SIGNAL_AGE_SEC 900/600 → 4500 (covers hourly producer cadence)

Versions bumped to 0.1.1 across plugin.yaml + plugin.json + SKILL.md
frontmatter (E020 lint requires triple consistency).
Hardening from internal stress-testing infrastructure:
- Per-coin cooldown (default 6h, KOL is slower-moving than trending) prevents
  repeated fires on the same asset
- Tightened sizing semantics: size_usd is now unambiguously notional
  (margin = notional / leverage, enforced via --leverage)
- COOLDOWN_HOURS now exposed in config.py for users who want to tune

Same architecture (top-50 KOL Twitter sentiment → consensus perp). No breaking
changes to the SKILL.md interface or bot.py CLI.
@Vb6Z
Copy link
Copy Markdown
Author

Vb6Z commented Apr 30, 2026

Thanks for the review window. We've pushed a v0.1.2 hardening update across the three Otto Skills based on findings from our internal stress-testing infrastructure (24h dry-run telemetry against live signals on Railway).

Key changes — all backward-compatible, no breaking interface changes:

  • Per-coin cooldown (4h on alpha-sniper, 6h on kol-follow) prevents repeated fires on the same asset within a short window
  • Signal freshness gate added to alpha-sniper (kol-follow already had one) — stale producer feeds no longer fire trades
  • Tightened sizing semanticssize_usd is now unambiguously the position notional, with margin = notional / leverage. Comment + code are consistent
  • Polymarket failure modes categorized (geoblock / auth / plugin-missing / timeout) instead of generic "unreachable"
  • Cleaner abort taxonomy in our telemetry pipeline so signal-quality issues vs execution issues are easy to distinguish

Same SKILL.md interface. Same strategy modes (trending / kol-follow / funding-fade / mispricing). Just safer defaults and clearer telemetry.

Happy to walk through any specific change if helpful.

Internal review surfaced more opportunities for safety hardening; shipping
v0.1.3 within hours of v0.1.2. All v0.1.2 backward-compatible.

Key changes (consumer-facing):
- TP/SL bracket call no longer passes --strategy-id (attribution stays
  on the parent order via the order command)
- Loud warning log when bracket fails — 'position is OPEN without TP/SL,
  manual intervention required'
- SKILL.md size formula clarified: size_tokens = size_usd / mark_px
  (size_usd is the position notional, --leverage controls margin)

No interface changes. Same SKILL.md protocol, same CLI commands, same
strategy modes.
@Vb6Z Vb6Z force-pushed the submit/otto-kol-follow branch from 5237b9a to e7dba14 Compare April 30, 2026 23:12
@Vb6Z
Copy link
Copy Markdown
Author

Vb6Z commented Apr 30, 2026

v0.1.3 hardening update — second pass after additional internal review surfaced more opportunities for safety improvements. All v0.1.2 backward-compatible, no interface changes.

Consumer-facing changes:

  • TP/SL bracket no longer passes --strategy-id (leaderboard attribution lives on the parent order; tpsl is per-position)
  • Loud warning log when bracket fails — position is OPEN without TP/SL, manual intervention required so operators see it immediately in their stdout
  • SKILL.md size formula clarified: size_tokens = size_usd / mark_pxsize_usd is the position notional; --leverage controls margin posted (margin = notional / leverage). Previous wording could be misread.

Internal stress-runner changes (not user-facing):

  • Plugin response parsing now uses LAST JSON block (the authoritative success/failure record) rather than first (which is always a preview echo in --confirm mode)
  • Bracket response positively validated — empty {} and unknown shapes now fail-closed
  • Mark-price fail-hard: refuses to send a trade if mark unavailable (no more raw size_usd fallback)

Same SKILL.md protocol, same CLI commands, same strategy modes. Just safer defaults and clearer telemetry.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant