# ============================================================================ # PHANTOM STOCKFORGE — environment template # Copy to `.env` and fill in. NEVER commit `.env`. Secrets live ONLY here. # ============================================================================ # ---- Global safety ----------------------------------------------------------- # Master kill switch. When true, NOTHING hits the chain: launches/claims are # simulated and logged only. Flip to false ONLY when you intend real money. STOCKFORGE_DRY_RUN=true # Autonomy switch. true = every real launch AND claim needs a Telegram tap. # false = AUTONOMOUS: launches/claims proceed with no tap # (still bounded by dry-run, daily budget, 1/min rate # limit, and the /pause kill switch). Set false only # once you have verified the pipeline and want the # continuous fee faucet to run hands-off. STOCKFORGE_REQUIRE_APPROVAL=true # Log level: DEBUG | INFO | WARNING | ERROR STOCKFORGE_LOG_LEVEL=INFO # SQLite state file. STOCKFORGE_DB_PATH=./data/stockforge.sqlite # ============================================================================ # AGGRESSIVE CONTINUOUS MODE — quick reference (set these AFTER verification) # Dry-run stays true here on purpose. Flip DRY_RUN + APPROVAL yourself only # after the Human Verification Gate (see README) — never let the agent flip them. # STOCKFORGE_DRY_RUN=false # you flip this # STOCKFORGE_REQUIRE_APPROVAL=false # autonomous (still budget/rate/kill-switch bound) # STOCKFORGE_NEWS_SOURCE=true # real attention drives launches # STOCKFORGE_ELON_SOURCE=true # + Elon-tweet catalysts (needs a provider) # STOCKFORGE_DEFAULT_CHAIN=robinhood # prefer stock-paired (UNVERIFIED, degrades safe) # STOCKFORGE_LAUNCH_MODE=auto # auto=try paired, degrade to standard # BANKR_BACKEND=rest # only rest can request a stock pair # STOCKFORGE_DAILY_LAUNCH_BUDGET=50 # GLOBAL hard ceiling across all wallets # STOCKFORGE_PER_WALLET_DAILY_CAP=50 # each wallet respects Bankr's per-account cap # STOCKFORGE_MIN_ATTENTION_SCORE=60 # lower = more launches (more marginal) # STOCKFORGE_AUTO_CLAIM=true # consolidate fees automatically # STOCKFORGE_WALLETS=[{...}] # optional honest wallet pool (opsec/SPOF) # FORGE_LLM_PROVIDER=bankr # optional: fees pay for compute # Kill switch (/pause) stays active in every mode. Keep Telegram configured. # ============================================================================ # ---- Bankr ------------------------------------------------------------------- # Which backend to launch through: "cli" (uses the `bankr` CLI) or "rest" # (uses https://api.bankr.bot/agent/prompt). Both honor DRY_RUN. BANKR_BACKEND=rest # REST base URL (verified from docs.bankr.bot). Override only if Bankr changes it. BANKR_API_BASE=https://api.bankr.bot # Agent API key (bk_...). Get one at https://bankr.bot/api # Used as the `X-API-Key` header on POST /agent/prompt. BANKR_API_KEY= # Path to the `bankr` binary when BANKR_BACKEND=cli (default: found on PATH). BANKR_CLI_BIN=bankr # Agent wallet private key (0x...). Used ONLY by `bankr fees claim-wallet` # (headless claim). Leave blank to disable wallet-side claiming; the agent then # builds unsigned claim txs via POST /public/doppler/build-claim for you to sign. # If you set this, it is a hot key — fund it minimally and rotate often. BANKR_PRIVATE_KEY= # Creator/beneficiary address that receives the 95% creator fee split. # Used for read-only fee polling (no key required). BANKR_BENEFICIARY_ADDRESS= # ---- Launch policy ----------------------------------------------------------- # Default chain: "base" or "robinhood". Stock-paired launches require robinhood. STOCKFORGE_DEFAULT_CHAIN=base # Dual-mode launching (stock-paired is preferred when it works; standard is a # first-class path so the system never dies if pairing is weak/unavailable): # auto = try stock-paired when it makes sense, degrade cleanly to standard # stock_paired = prefer a stock pair (only real on robinhood + a watchlist stock) # standard = normal pool, never request a stock pair # Operator can force per-launch with `stockforge launch --mode {auto|stock|standard}`. STOCKFORGE_LAUNCH_MODE=auto # Max real launches per calendar day (your own budget, <= Bankr's 50/100 cap). STOCKFORGE_DAILY_LAUNCH_BUDGET=3 # Minimum attention score (0-100) a narrative must reach to be launch-eligible. STOCKFORGE_MIN_ATTENTION_SCORE=65 # Seconds between orchestrator ticks. STOCKFORGE_TICK_SECONDS=60 # Turn vesting off on launches (100% to pool). Default false = keep 15% vesting. STOCKFORGE_DISABLE_VESTING=false # ---- Fee capture / treasury -------------------------------------------------- # Single address ALL creator fees route to — set as the fee recipient at launch # and the destination for claims. Leave blank to use BANKR_BENEFICIARY_ADDRESS. STOCKFORGE_TREASURY_ADDRESS= # Automatically claim accrued fees during sweeps (still respects dry-run + # approval). true = fee faucet collects on its own; false = monitor/report only. STOCKFORGE_AUTO_CLAIM=true # Minimum claimable WETH before a claim fires (skips dust so gas isn't wasted). STOCKFORGE_FEE_CLAIM_MIN_WETH=0.001 # Ticks between fee sweeps (with TICK_SECONDS=60, 6 = roughly every 6 minutes). STOCKFORGE_FEE_SWEEP_EVERY_TICKS=6 # NOTE: autonomous on-chain claiming needs BANKR_PRIVATE_KEY set (hot wallet). # Without it, claims are built as UNSIGNED txs for you to sign — safe, but the # faucet won't self-collect. # ---- Multi-wallet (ONE honest operation, several wallets) -------------------- # Optional pool of wallets for legitimate operational reasons ONLY: key # segregation / opsec, treasury splitting, reduced single-point-of-failure, and # respecting each wallet's OWN Bankr rate limit. These wallets are NOT disguised # as unrelated creators — attribution is tracked + reported openly. # JSON list; each: {"id","fee_recipient","api_key","private_key","club"}. # fee_recipient defaults to the treasury (fees consolidate). Empty = one 'main' # wallet from the treasury (fully backward compatible). # STOCKFORGE_WALLETS=[{"id":"a","fee_recipient":"0x..","api_key":"bk_.."},{"id":"b","fee_recipient":"0x.."}] STOCKFORGE_WALLETS= # Per-wallet daily launch cap (each wallet respects Bankr's 50/100 + 1/min). # STOCKFORGE_DAILY_LAUNCH_BUDGET stays the GLOBAL hard ceiling across all wallets. STOCKFORGE_PER_WALLET_DAILY_CAP=50 # NOTE: spreading launches across wallets does not exempt you from Bankr's ToS / # anti-spam. Bankr's documented path for genuine high volume is a support ticket. # ---- Promotion (operator-gated) ---------------------------------------------- # On launch, compose a promo kit (tweet + one-liner + link) and send it to you # for review. NEVER auto-posts to public social — that stays human-gated. STOCKFORGE_PROMO_ENABLED=true # Optional link base to build a launch link from a token address when the deploy # response has no pool URL (e.g. a DEX explorer base). STOCKFORGE_PROMO_LINK_BASE= # ---- Telegram control plane -------------------------------------------------- # Bot token from @BotFather. TELEGRAM_BOT_TOKEN= # Chat ID that is allowed to command the agent + receives approval prompts. # Only this chat is trusted; commands from anywhere else are ignored. TELEGRAM_CHAT_ID= # ---- Concept forge (LLM) ----------------------------------------------------- # Provider for concept generation: # none = built-in deterministic template forge (no external calls) # openai_compatible = any OpenAI-style chat-completions endpoint (FORGE_LLM_* below) # bankr = the Bankr LLM Gateway (llm.bankr.bot) — CLOSES THE # fees->compute LOOP: the agent's own trading fees pay for # its concept-generation compute. Beta-gated by Bankr. FORGE_LLM_PROVIDER=none FORGE_LLM_BASE_URL=https://openrouter.ai/api/v1 FORGE_LLM_API_KEY= FORGE_LLM_MODEL=anthropic/claude-sonnet-4-6 # Bankr LLM Gateway (used when FORGE_LLM_PROVIDER=bankr). Base URL is verified. # Auth uses BANKR_LLM_KEY if set, else BANKR_API_KEY. LLM credits are USD and # SEPARATE from the trading wallet — top up on a funded account: # bankr llm credits add 25 # bankr llm credits auto --enable --amount 25 --threshold 5 --tokens USDC BANKR_LLM_KEY= BANKR_LLM_BASE=https://llm.bankr.bot/v1 # ---- Signal sources ---------------------------------------------------------- # Comma-separated tickers to watch for narratives. STOCKFORGE_WATCHLIST=NVDA,GME,TSLA,HOOD,SPY,AMD,PLTR,MSTR # Real attention source: financial-news volume via Google News RSS (no API key). # When true, each tick measures how many distinct outlets are covering each # watchlist ticker + how fresh the coverage is, so genuine narratives (not the # baseline heuristic) drive launches. Off by default = no external calls. STOCKFORGE_NEWS_SOURCE=false # Only count articles newer than this many hours as "attention". STOCKFORGE_NEWS_FRESHNESS_HOURS=24 # ---- Elon-tweet source ------------------------------------------------------- # Propose a launch when an Elon tweet resolves a ticker (cashtag or company name) # AND hits an engagement/hype bar. Still fully gated (dry-run + approval). STOCKFORGE_ELON_SOURCE=false # Ingestion: inbox (manual /elon command / webhook), x_api (paid X bearer token), # or grok (xAI live-search via XAI_API_KEY — Grok has native real-time X access). STOCKFORGE_ELON_PROVIDER=inbox STOCKFORGE_ELON_USER_ID=44196397 STOCKFORGE_ELON_MIN_ENGAGEMENT=10000 X_BEARER_TOKEN= # ---- xAI / Grok -------------------------------------------------------------- # Powers the grok tweet provider AND token image generation. Get a key at # https://console.x.ai. Credits are separate from any trading wallet. XAI_API_KEY= XAI_BASE_URL=https://api.x.ai/v1 XAI_MODEL=grok-4 XAI_IMAGE_MODEL=grok-2-image # ---- Launch metadata --------------------------------------------------------- # Generate a token image and inject it into the launch — ONLY for strong/meme # -worthy picks (attention score >= IMAGE_MIN_SCORE), not every token. Needs XAI_API_KEY. STOCKFORGE_IMAGE_GEN=false STOCKFORGE_IMAGE_MIN_SCORE=80 # Optional website injected into every launch (blank = none). STOCKFORGE_DEFAULT_WEBSITE=