AIRGAP Docs

User Guide

Table of contents

Everything an operator needs to take AIRGAP from a fresh sign-in to live signals.


Getting started

AIRGAP is a wallet-native app. There are no email signups. Connect your wallet on the landing page, sign the SIWE message, and you're in. Subscription state lives onchain — paid in USDC on Base via x402, no card on file. The standard tier is 20 USDC/month; holders pay 17 USDC/month with a small token-holding requirement (see Subscription tiers below). All access checks run server-side on every request — your client cannot grant itself access.

The first signals you see in the app feed are house signals — curated alpha produced by AIRGAP's own agents, available to qualified token holders. Your own agents are private to your account, configured by you, scoped to data sources you authorize. Treat them as different surfaces:

  • House signals are passive. You subscribe; they appear.
  • Your own agents are active. You configure them; they hunt for what you specifically want.

Both render in the same feed and route through the same alert channels. The difference is provenance.

Configuring your first agent

The agent picker (/agency → Create Agent) presents the available types — X Monitor, Farcaster Intel, Launch Scanner, Wallet Watcher, Account Stalker, Contract Monitor, Discord Monitor, Telegram Monitor, and Custom. Pick the one whose data source matches the question you're trying to answer. Two common starting points:

Wallet Watcher. Track smart-money wallets for specific behaviors. Key fields:

  • wallets — the list. Each entry has an address, a label you'll recognize, and a tier (alpha, watch, noise) that biases ranking.
  • alertOn — which behaviors to fire on: newTokenBuy, largeBuy, largeEthTransfer, newContract, lpAdd, lpRemove. Toggle individually.
  • minTxValueEth — floor below which transactions are ignored. Stops dust from waking you up.
  • focusPrompt — one or two sentences telling the LLM what you actually care about. The closer this is to the question you'd ask a junior analyst, the better the signal quality.

Launch Scanner. New token launches across the supported launchpads, pre-trust-scored. Key fields:

  • launchpads — Clanker, Zora, Flaunch, Virtuals, etc. Pick the venues you watch.
  • minLiquidityEth — minimum initial liquidity, in ETH. Below this, signals are suppressed.
  • minTrustScore — 0–100. The trust score factors deployer history, liquidity, social presence, and risk flags.
  • blacklistDeployers — addresses you never want to hear about again.
  • focusPrompt — same idea: state your thesis. "Tokens with a real Twitter and >2 ETH liquidity from deployers with a clean record."

After saving, the agent goes through idle → running and starts polling at the intensity you picked: light (every 30 min), standard (every 10 min), aggressive (every 2 min). Aggressive is paid-tier only.

Signal delivery

Signals always land in the in-app feed. Alert channels are additive — turn them on per agent or globally in Settings.

  • Discord webhook. Settings → Alerts → Connect Discord. The OAuth flow uses Discord's webhook.incoming scope: you pick a server and channel inside Discord's UI, Discord returns a webhook URL, AIRGAP stores it and signs deliveries. No bot install, no permissions to manage. You can also paste a webhook URL manually if you already have one.
  • Telegram (optional). Connect a Telegram account from Settings to receive alerts as DMs. Useful if Discord isn't where you live.
  • In-app feed. /signals. Realtime via Supabase. Read/dismiss state syncs.
  • Quiet hours. Settings → Alerts. Set a start/end time and a timezone. During quiet hours, push channels are suppressed; the in-app feed still updates so you can catch up later.

Each agent also has a min_confidence threshold (0–1). Anything the LLM rates below that is dropped before it reaches a channel.

Memory and learning

Each agent has a memory_enabled toggle. Turn it on and the agent retains a vector-indexed memory of past signals — correct calls, false positives, wallet patterns, your dismissals, outcome lessons — and uses it to bias future analysis. The flow:

  • Every signal a memory-enabled agent emits gets tracked. A background job polls the referenced token's market cap at 1h, 4h, 24h, 7d, 30d.
  • When an outcome is known (the call worked, the call didn't, the token died), it gets condensed into a memory entry the agent can retrieve next time it sees a similar pattern.
  • The result: agents drift toward your taste. The wallets you keep dismissing get downweighted. The patterns that actually paid get amplified.

Memory is per-agent. Disable it if you want a clean, deterministic agent that only obeys its current config.

Subscription tiers

Three paths. All paid in USDC on Base via x402.

  • Standard — 20 USDC/month. No token required. Unlimited agents, all intensities (light/standard/aggressive), Discord + Telegram + in-app delivery, full REST + SSE API access, unlimited signal history, share cards.
  • Holder Pro — 17 USDC/month. Same features as Standard, discounted because you hold the AIRGAP token at the holder threshold. Stack the discount with the access the token already gives you.
  • Holder Free — $0. Hold tokens at the higher house-signal threshold and you get free access to a rate-limited tier: up to 2 agents, light intensity only, in-app alerts only, 100 signal history, no API access. Designed so committed holders are never priced out.

Access is recomputed live on every gated request — change subscription state or your balance and the next request reflects it.

Troubleshooting

Agent stuck in error status. Open the agent. The error message is surfaced in the UI with a code. Common ones:

  • TELEGRAM_AUTH_EXPIRED — re-link Telegram from Settings.
  • X_API_INVALID_KEY / X_API_RATE_LIMIT — check your X API credentials in the agent config; rate limits clear on their own.
  • LLM_API_ERROR — your provider key (Settings → AI Keys) is missing, expired, or rate-limited. Rotate it.
  • ALCHEMY_WEBHOOK_ERROR — onchain webhook went stale. Pause and resume the agent.
  • UNKNOWN — check the worker logs (admins) or contact support.

After fixing the underlying issue, hit Resume on the agent. It will re-run the access check and, if cleared, return to running.

No signals firing. Walk the chain backwards:

  1. Is the agent running? Check status.
  2. Is the polling interval long enough that you'd expect a hit? Aggressive checks every 2 min; light every 30.
  3. Is your min_confidence threshold too high? Drop it temporarily and watch what comes through.
  4. Are matched events actually clearing your config filters (min liquidity, min tx value, keyword excludes)?
  5. Check the agent's last_run timestamp — if it's stale, the worker isn't picking it up.

OAuth flow stuck. Discord and X OAuth both round-trip through a signed state JWT. If the callback hangs:

  • Make sure you didn't open the OAuth URL in an incognito window without your AIRGAP session.
  • Cookies blocked? The state cookie is required.
  • Try again from Settings — the JWT expires in 10 minutes, so a stale tab won't work.

Discord webhook not delivering. Re-test from Settings → Alerts → "Test webhook" — that button POSTs a known-good payload to the stored URL. If the test fails, the webhook was deleted on the Discord side; reconnect. If the test succeeds but live signals don't arrive, check the agent's alert channels (Discord toggle on) and quiet hours.