@daoleno/wooo
v0.1.0
Published
Self-hosted crypto trading agent with Telegram and CLI
Maintainers
Readme
Wooo
Wooo is a self-hosted, skills-first crypto operator.
- One agent flow across Telegram and CLI.
- Research, decision, execution, monitoring, and review in one place.
- Exchange perps via CCXT (
venue=hyperliquidnow) + OKX Swap (EVM DEX aggregation). - Local-first state (
~/.wooo) with SQLite + encrypted wallets. - One local
AGENTS.mdfor runtime instructions and oneMEMORY.mdfor soft operator preferences.
Why Wooo
Wooo is not trying to be a general-purpose agent OS.
It exists for a more specific job: helping a crypto user operate a real portfolio with local wallet trust, explicit risk controls, and end-to-end action traceability.
- Portfolio-aware: reason from wallets, positions, exposures, and venue context
- Risk-native: preview, confirm, guardrails, and explainable execution boundaries
- Skills-first: encode repeatable trading workflows instead of only exposing APIs
- Auditable: trace every meaningful action from signal to execution to review
Core loop:
Research -> Decide -> Preview -> Confirm -> Execute -> Monitor -> Review -> Adapt
Read more:
dev-docs/product-positioning-north-star.mddev-docs/killer-skills-implementation-plan.md
Core Product Shape
See dev-docs/product-positioning-north-star.md for the product thesis, differentiation, and north-star scope.
- Skills-first runtime: every capability is a tool with a stable contract and
SKILL.md. - Self-hosted by default: config/data/logs stay on your machine.
- Trading safety: trade/export/delete flows require
confirm=true. - Execution robustness: idempotency (
clientRequestId) + action audit logs (traceId). - Channel parity: Telegram and CLI use the same agent toolchain.
- Built-in system tools: local CLI sessions can inspect files, edit code, and run shell commands with the embedded toolset.
5-Minute Quick Start
Install:
npm install -g @daoleno/woooConfigure your local runtime directory:
- Copy .env.example to
~/.wooo/.env. - Set at least
WOOO_MODEL_PROVIDER,WOOO_MODEL, and the matching provider credentials. - If you want Telegram mode, also set
BOT_TOKEN.
Run the interactive local chat session:
wooo
wooo agent --continue
wooo --version
wooo-cli --helpStart Telegram bot directly:
wooo startOr start through the startup protocol (preferred for services and Docker):
wooo bootDefaults:
WOOO_HOME:~/.wooo- Config file:
~/.wooo/.env - SQLite DB:
~/.wooo/data/wooo.db - Local auth:
~/.wooo/auth.json - Local custom models:
~/.wooo/models.json - Local runtime settings:
~/.wooo/settings.json - Local agent sessions:
~/.wooo/sessions - User skill overrides:
~/.wooo/skills - Runtime instructions:
~/.wooo/AGENTS.md - Soft memory file:
~/.wooo/MEMORY.md
Wooo ships its app-specific prompt from resources/runtime/APPEND_SYSTEM.md and bundles wooo-cli as a first-party dependency. The wooo-cli command and its default SKILL.md come from the installed wooo-cli package, while runtime overrides still belong under ~/.wooo, not a repo-local .pi/ directory.
wooo with no arguments enters the interactive local chat session by default.
Startup Protocol
wooo boot gives Wooo a small, deterministic startup contract:
- If
WOOO_STARTUP_SCRIPTis set, Wooo runs that script first. - Otherwise, if
~/.wooo/startup.shexists, Wooo runs that script. - Otherwise, Wooo falls back to
wooo start.
This keeps the default behavior simple while giving self-hosted operators one override point for systemd, Docker, or custom background flows. Relative WOOO_STARTUP_SCRIPT values resolve from WOOO_HOME.
Example ~/.wooo/startup.sh:
#!/usr/bin/env bash
set -euo pipefail
exec wooo startLocal Instructions + Memory
Wooo keeps three different layers of local context on purpose:
~/.wooo/AGENTS.md: durable runtime instructions, workflow rules, approval style, and self-hosted maintenance notes~/.wooo/MEMORY.md: soft operator preferences, favorites, tone, and collaboration notes~/.wooo/data/wooo.db: hard state for wallets, balances, positions, risk settings, portfolio snapshots, and action logs
Use AGENTS.md for rules. Use MEMORY.md for preferences. Use SQLite-backed skills for facts the agent must not hallucinate.
The agent loads AGENTS.md first and MEMORY.md second when building its runtime prompt.
wooo, wooo agent, and wooo start use the same local runtime directory, and the agent runtime will create ~/.wooo/AGENTS.md and ~/.wooo/MEMORY.md automatically if they do not exist.
System Tools
Wooo exposes built-in local system tools as first-class Wooo tools:
- Read-only:
read,grep,find,ls - Full host tools:
bash,edit,write - Wooo-aware maintenance tools:
system_self_update(supportsverifyOnly=true),system_skill_scaffold
Default policy:
- CLI sessions:
full - Telegram sessions:
off - Telegram
read-only/fullonly activate for owner IDs listed inWOOO_TELEGRAM_OWNER_IDS, and only in private chats
Use cases:
- self-upgrade with
system_self_updateorgit pull+bun install - verify a local checkout with
system_self_update+verifyOnly=true - scaffold a new first-class local skill with
system_skill_scaffold - local debugging with log inspection and file reads
- code and config edits when you deliberately want the agent to maintain itself
Modes are controlled with:
WOOO_SYSTEM_TOOLS_MODE=off|read-only|fullWOOO_SYSTEM_TOOLS_TELEGRAM_MODE=off|read-only|fullWOOO_SYSTEM_TOOLS_CWDto override the working directory used by Pi toolsWOOO_TELEGRAM_OWNER_IDS= comma-separated Telegram user IDs allowed to use Telegram system tools
By default, the launcher points Pi system tools at the installed Wooo app directory so the agent can inspect or maintain its own repo.
Real Interaction Example
CLI and Telegram follow the same conversation style.
User: Find ETH sentiment and latest ETF news, then give me a trade plan.
Agent: I will check InfoFi sentiment and crypto news first.
Agent: [tools] search_tokens, get_token_vibe, crypto_news_search
Agent: ETH sentiment is mildly bullish, and ETF headlines are net-positive.
Not financial advice. If you want action, I can preview a Hyperliquid long.
User: Preview a $500 ETH long at 3x, max slippage 1.2%.
Agent: [tools] exchange_trade_preview (venue=hyperliquid)
Agent: Preview ready. Estimated size/slippage/margin attached.
Re-run with confirm=true to execute.
User: Execute with confirm=true.
Agent: [tools] exchange_place_market_order (venue=hyperliquid)
Agent: Order submitted. traceId=... (saved in action logs)Built-in Skill Packs
- Wallet: generate/import/list/export/delete local wallets (private keys encrypted at rest)
- Exchange (CCXT): market snapshots, candles, positions, preview, order, close, close-all, leverage
- Portfolio: overview, positions, exposure, historical snapshots, reconcile + background drift checks
- Profile: persistent risk profile, watchlist, preferred chains/venues, briefing preferences
- Journal: recent activity + trace lookup for reviewable action history
- Daily Briefing: portfolio-aware daily brief built from book, watchlist, news, and recent activity
- OKX Swap: quote -> prepare -> execute for EVM swaps
- DeFiLlama: protocol context, market leaders, optional pro tools
- Crypto News: multi-source keyword search
- InfoFi: token search, sentiment, social feed, candles
- Polymarket: market search, snapshots, orderbooks, portfolio
- System: local read/search/edit/shell workflows plus bounded self-update, verify-only validation, and local skill scaffolding
Skill docs: skills/*/SKILL.md
Skill implementations: src/skills/*
Safety + Reliability
- Wallet private keys are encrypted with AES-256-GCM + scrypt-derived key.
- Sensitive actions require explicit
confirm=true. - Idempotent execution for fund-moving operations (
clientRequestId). - Action logs persist tool outcome, code, and latency for auditability.
- Structured profile memory and action-log journal stay local in SQLite.
- Logger redacts common secret fields.
Configuration
Recommended: create ~/.wooo/.env from .env.example before first use.
Wooo uses explicit model selection:
WOOO_MODEL_PROVIDER: provider ID such asopenrouter,anthropic,openai,google,groq,xaiWOOO_MODEL: model ID on that provider, or a custom model from~/.wooo/models.json
Mode-specific required keys:
- Telegram mode:
BOT_TOKEN - Local/agent model selection:
WOOO_MODEL_PROVIDER+WOOO_MODEL - Provider auth for the selected model source
MASTER_KEY_PASSWORD(>=32 chars)MASTER_KEY_SALT(>=16 chars)
Optional keys:
- Common provider auth:
OPENROUTER_API_KEY,ANTHROPIC_API_KEY,OPENAI_API_KEY,GROQ_API_KEY,GEMINI_API_KEY,XAI_API_KEY,MISTRAL_API_KEY,CEREBRAS_API_KEY - Advanced provider auth/state:
~/.wooo/auth.json - Custom providers and local model definitions:
~/.wooo/models.json HYPERLIQUID_NETWORK(testnet/mainnet)OKX_API_KEY,OKX_API_SECRET,OKX_API_PASSPHRASE,OKX_PROJECT_IDEVM_RPC_URLS(1=https://...;42161=https://...)PORTFOLIO_SYNC_ENABLED,PORTFOLIO_SYNC_INTERVAL_MS,PORTFOLIO_RECONCILE_WARN_THRESHOLD_PCT(background portfolio reconcile loop)LEGACY_ALERT_MONITOR_ENABLED,LEGACY_TASKS_ENABLED,LEGACY_KLINE_UPDATER_ENABLED,LEGACY_AUTO_TRADING_RESUME_ENABLED(legacy loops, disabled by default)WEB_PORT(landing page port;PORTis also accepted as compatibility alias)- Paths:
WOOO_HOME,WOOO_ENV,WOOO_MIGRATIONS_DIR,WOOO_STARTUP_SCRIPT,WOOO_SYSTEM_TOOLS_CWD - Pi system tool policy:
WOOO_SYSTEM_TOOLS_MODE,WOOO_SYSTEM_TOOLS_TELEGRAM_MODE,WOOO_TELEGRAM_OWNER_IDS - Guardrails:
TRADE_MAX_LEVERAGE,TRADE_MAX_NOTIONAL_USD,TRADE_MAX_SLIPPAGE_PCT,OKX_SWAP_MAX_SLIPPAGE_PCT - Advanced pacing:
HYPERLIQUID_RATE_CAPACITY,HYPERLIQUID_REFILL_PER_SECOND,HYPERLIQUID_SYMBOL_COOLDOWN_MS
Deployment (Dokploy / Docker)
Use Dockerfile mode if possible (README-DOCKER.md).
Best practices:
- Keep secrets in runtime env, not build args.
- Mount persistent volume to
WOOO_HOME. - Run
wooo bootin the deployed environment after secrets and volumes are configured.
Development
bun install
bun run type-check
bun run build
bun testCI Quality Gates
GitHub Actions runs:
bun run ci:checkbun run test:e2e-corenpm run package:check
Release
Wooo follows the same release shape as wooo-cli:
- CI runs on pull requests, pushes to
main, and manual dispatch. .github/workflows/publish.ymlpublishes semver tags such asv0.1.0.- The first npm publish for a new package name is a one-time bootstrap, then later releases can be tag-driven.
Disclaimer
Not financial advice. Crypto trading is risky. Use at your own risk.
License
MIT
