Meme Executor - Solana Trade Execution Layer
Solana-focused execution skill that turns high‑level trade plans into concrete orders.
Current Status: Phase 1 (Safe Mode)
Component Status Risk Level
execute-trade.ts
DRY RUN only None
auto-trader.ts
DRY RUN only None
jupiter-client.ts
Quote-only None
wallet-manager.ts
Read-only None
position-tracker.ts
Local tracking None
No real transactions are sent in Phase 1.
When to Use
-
You already have a TradePlan from other agents/skills:
-
meme-trader (signals + sizing)
-
flow-tracker (liquidity + position sizing)
-
degen-savant (narrative / conviction)
-
contract-surgeon (rug/safety cleared)
-
You want to:
-
Simulate trades and log PnL without sending real transactions
-
Eventually route real orders via a configured Solana wallet + DEX router
Core Responsibilities
-
Parse a structured trade plan (token, side, size %, target size, SL/TP, slippage).
-
Apply simple risk checks (max position %, max concurrent positions hooks).
-
DRY‑RUN by default – log what would be traded and why.
-
Provide clear TODO hooks for wiring:
-
Jupiter swap routing
-
Wallet private key / signer configuration
-
Trade log storage (JSONL or database)
TradePlan Interface
The executor expects a JSON payload matching this shape:
export interface TradePlan { tokenAddress: string; symbol?: string; chain: 'solana'; side: 'buy' | 'sell'; // either percentage of portfolio or absolute amount in SOL sizing: { mode: 'percent' | 'absolute'; value: number; // e.g. 2 = 2% or 0.5 = 0.5 SOL }; riskMode: 'degen' | 'moderate' | 'conservative'; entryLimitPrice?: number; // optional, for limit-style behavior maxSlippageBps: number; // e.g. 1000 = 10% stopLossPrice?: number; takeProfit1?: number; takeProfit2?: number; notes?: string; // free-form rationale from upstream agents dryRun?: boolean; // default true; set false only once wired to real wallet }
Usage (Simulation First)
From the repo root, a typical simulated execution call will look like:
npx tsx .claude/skills/meme-executor/scripts/execute-trade.ts
--plan-file /path/to/trade-plan.json
Where trade-plan.json contains a single TradePlan object.
Output Formats
-
Simulation Log (default) – human-friendly summary:
-
What would be bought/sold
-
Position size and notional exposure
-
SL/TP levels and implied RR
-
Any risk rule violations
-
JSON Log (--json) – machine-friendly output for chaining into other tools.
New Phase 1 Components
Jupiter Client (Quote-Only)
Get swap quotes without executing:
Get a quote for swapping SOL to a token
npx tsx .claude/skills/meme-executor/scripts/jupiter-client.ts
--quote --input SOL --output <TOKEN_MINT> --amount 0.1
JSON output
npx tsx .claude/skills/meme-executor/scripts/jupiter-client.ts
--quote --input SOL --output BONK --amount 0.5 --json
Wallet Manager (Read-Only)
Check wallet balances without signing:
Check balance of any wallet
npx tsx .claude/skills/meme-executor/scripts/wallet-manager.ts
--balance --address <WALLET_ADDRESS>
Use devnet
npx tsx .claude/skills/meme-executor/scripts/wallet-manager.ts
--balance --address <WALLET_ADDRESS> --devnet
Position Tracker
Track open positions locally:
Add a position (after buy)
npx tsx .claude/skills/meme-executor/scripts/position-tracker.ts
--add --token <MINT> --symbol MEME --entry-price 0.001 --amount 1000
--sl 0.0007 --tp 0.002
List positions
npx tsx .claude/skills/meme-executor/scripts/position-tracker.ts --list
Check stop-loss/take-profit triggers
npx tsx .claude/skills/meme-executor/scripts/position-tracker.ts
--check --prices '{"<MINT>": 0.0015}'
Close a position
npx tsx .claude/skills/meme-executor/scripts/position-tracker.ts
--close --token <MINT> --exit-price 0.002
Phase Roadmap
Phase Components Risk
1 (Current) Quote, balance, tracking None
2 Devnet swap execution Low (fake SOL)
3 Mainnet paper trading None (simulated)
4 Mainnet live (small size) High
Data Quality Validation Layer
<data_validation> Pre-Execution Data Requirements: All trades (even simulated) require validated data to ensure backtesting fidelity.
interface ExecutionDataQuality { price_quality: { score: number; // Min 90 for execution sources_count: number; // Min 2 max_deviation: number; // Max 5% between sources freshness_ms: number; // Max 30000 (30s) }; liquidity_check: { available: number; // Must support trade size slippage_estimate: number; depth_ratio: number; // Our size / available liquidity }; risk_clearance: { rug_score: number; // From meme-trader position_approved: boolean; // From risk-portfolio-manager kill_switch_status: 'active' | 'paused' | 'halted'; }; }
interface ValidationResult { approved: boolean; quality_score: number; warnings: string[]; blockers: string[]; }
Validation Pipeline:
Trade Plan → Price Validation → Liquidity Check → Risk Clearance → Execute/Reject ↓ ↓ ↓ Min 2 sources Size < 5% pool No kill switch Max 5% deviation Slippage < limit Position approved Max 30s stale Depth sufficient Rug score < 7
Validation Output (included in dry-run):
DATA VALIDATION REPORT ═════════════════════════════════════
PRICE DATA: PASSED (94/100) ├─ Sources: 3/3 (dexscreener, birdeye, jupiter) ├─ Prices: $0.00042 | $0.000418 | $0.000421 ├─ Deviation: 0.48% (< 5% threshold) ├─ Freshness: 8 seconds ago └─ Status: VALID
LIQUIDITY CHECK: PASSED ├─ Available Liquidity: $127,000 ├─ Trade Size: $500 (0.39% of pool) ├─ Estimated Slippage: 0.8% ├─ Depth Ratio: HEALTHY └─ Status: SUFFICIENT
RISK CLEARANCE: PASSED ├─ Rug Score: 4/10 (acceptable) ├─ Position Sizing: APPROVED (2.3% of portfolio) ├─ Kill Switch: ACTIVE ├─ Daily Loss Buffer: $1,260 remaining └─ Status: CLEARED
OVERALL: APPROVED FOR EXECUTION Quality Score: 92/100 Warnings: None Blockers: None
Rejection Scenarios:
Condition Action Message
Price quality < 90 REJECT "Insufficient price data quality"
Single source only WARN "Low confidence - single source"
Price deviation > 5% REJECT "Price disagreement - investigate"
Stale data > 60s REJECT "Data too old for execution"
Size > 5% of pool WARN "High slippage expected"
Rug score > 7 REJECT "Token failed safety check"
Kill switch halted REJECT "Trading halted - risk limit"
</data_validation>
Real-Time Data Integration
<real_time_data> Data Sources for Execution:
const executionDataSources = { price: { primary: 'jupiter', // Most accurate for Solana swaps fallback: ['dexscreener', 'birdeye'], refresh_interval: 5000, // 5 seconds max_age: 30000, // 30 seconds }, liquidity: { primary: 'jupiter', // Direct pool data fallback: ['raydium-api', 'dexscreener'], refresh_interval: 10000, }, execution: { rpc: 'helius', backup_rpc: 'triton', commitment: 'confirmed', }, };
Pre-Execution Price Fetch:
Fetch validated price before execution
npx tsx .claude/skills/meme-executor/scripts/pre-execution-check.ts
--token <MINT>
--size 500
--validate-liquidity
--output json
</real_time_data>
Safety & TODOs
-
This skill MUST remain DRY‑RUN ONLY until:
-
A secure wallet management pattern is agreed
-
Jupiter / router integration is properly tested on devnet
-
Data validation pipeline is production-tested
-
When enabling live trading:
-
Add explicit --live flag and environment guardrails
-
Require confirmation in higher‑level orchestration agents
-
Implement daily loss limits via risk-portfolio-manager
-
Add kill switch command integration
-
Require minimum data quality score of 90/100
-
Log all executions for audit and backtesting validation