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
--liveflag 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
- •Add explicit