npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@daoleno/wooo

v0.1.0

Published

Self-hosted crypto trading agent with Telegram and CLI

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=hyperliquid now) + OKX Swap (EVM DEX aggregation).
  • Local-first state (~/.wooo) with SQLite + encrypted wallets.
  • One local AGENTS.md for runtime instructions and one MEMORY.md for 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.md
  • dev-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/wooo

Configure your local runtime directory:

  1. Copy .env.example to ~/.wooo/.env.
  2. Set at least WOOO_MODEL_PROVIDER, WOOO_MODEL, and the matching provider credentials.
  3. If you want Telegram mode, also set BOT_TOKEN.

Run the interactive local chat session:

wooo
wooo agent --continue
wooo --version
wooo-cli --help

Start Telegram bot directly:

wooo start

Or start through the startup protocol (preferred for services and Docker):

wooo boot

Defaults:

  • 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_SCRIPT is set, Wooo runs that script first.
  • Otherwise, if ~/.wooo/startup.sh exists, 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 start

Local 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 (supports verifyOnly=true), system_skill_scaffold

Default policy:

  • CLI sessions: full
  • Telegram sessions: off
  • Telegram read-only / full only activate for owner IDs listed in WOOO_TELEGRAM_OWNER_IDS, and only in private chats

Use cases:

  • self-upgrade with system_self_update or git 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 | full
  • WOOO_SYSTEM_TOOLS_TELEGRAM_MODE = off | read-only | full
  • WOOO_SYSTEM_TOOLS_CWD to override the working directory used by Pi tools
  • WOOO_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 as openrouter, anthropic, openai, google, groq, xai
  • WOOO_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_ID
  • EVM_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; PORT is 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 boot in the deployed environment after secrets and volumes are configured.

Development

bun install
bun run type-check
bun run build
bun test

CI Quality Gates

GitHub Actions runs:

  • bun run ci:check
  • bun run test:e2e-core
  • npm 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.yml publishes semver tags such as v0.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