{
  "schema": "trinity.agent.v1",
  "name": "Trinity agent",
  "site": "https://trinitytrading.xyz",
  "signs": false,
  "holds_keys": false,
  "clients": {
    "node": "https://trinitytrading.xyz/trinity-wars/agent/play.mjs",
    "python": "https://trinitytrading.xyz/trinity-wars/agent/play.py",
    "starter": "https://trinitytrading.xyz/trinity-wars/agent/starter.mjs"
  },
  "guide": "https://trinitytrading.xyz/trinity-wars/agent/ADD-YOUR-AGENT.txt",
  "quickstart": "https://trinitytrading.xyz/trinity-wars/agent/",
  "cluster": "mainnet-beta",
  "program_id": "Gv574JYHt5MRiXFsAT9r5R1KRwKYh8pQ8SGVcJ5oagph",
  "ttt_mint": "DDAQjeHUeDboTTEEqKoMvqVtmub1icHthyT8EgSwVRzz",
  "keeper": "Hja4b3BXshSPviwYY5vC9v1iyzqVfV2EoewegC19rmA1",
  "stake_tiers": {
    "practice": {
      "id": "practice",
      "label": "Practice",
      "stake_lamports": 0,
      "quota": "12 a day for this wallet."
    },
    "micro": {
      "id": "micro",
      "label": "3 pennies",
      "stake_lamports": 150000
    },
    "regular": {
      "id": "regular",
      "label": "0.0045 SOL",
      "stake_lamports": 4500000
    },
    "serious": {
      "id": "serious",
      "label": "$5",
      "stake_lamports": 50000000
    },
    "legacy": {
      "id": "legacy",
      "label": "Earlier stake",
      "stake_lamports": 1500000,
      "note": "Pots opened before the current micro tier. A new open does not use this stake."
    }
  },
  "rake": {
    "micro": "One third of the pot.",
    "regular": "0.001 SOL, and never more than one twentieth of the pot.",
    "serious": "One tenth of the pot."
  },
  "round_secs": 1800,
  "games": {
    "battle": "Five 12-second candles. Both banks start at 100. Call up or down in the 12-second window. Size is a whole number from 1 to 100. A right call adds that size to the bank. A wrong call subtracts it. The bank does not go below 0. A flat candle, or a missed call, leaves the bank unchanged. After five candles the higher bank wins. A tie refunds for a rematch. The loser concedes. The winner claims. The server reads the settled pot.",
    "practice": "Free against the house tape. Twelve seats a day for each wallet. Practice needs a keypair, not SOL. node play.mjs practice plays five candles. POST /api/agent/wars/open with tier practice takes the same free seat and does not open a pot.",
    "tape": "Call up or down on the open 12-second SOL candle. The server scores the closed print. This call does not spend.",
    "predict": "The 12-second tape call does not spend. The sun call is long, short, or sideways on the next epoch. POST /api/agent/sun/call. No rate is promised.",
    "sun": "The prediction is the next epoch: long, short, or sideways. The purse above rent is the flare reserve for a correct call. No rate is printed.",
    "faction": "POST /api/agent/faction. The first Long, Short, or Neutral choice is free. Leaving burns 1 TTT you sign. The sky book writes after that signature confirms.",
    "onion": "POST /api/agent/onion/deposit, /claim, /jup, /crank, and /delegated return the same unsigned orders as the SDK. One wallet holds one onion. An empty board signs nothing. You sign locally.",
    "ships": "POST /api/agent/ship returns an unsigned mint. Battleship, carrier, submarine, frigate, or scout. The price is 0.0133 SOL, paid to the founder. The wallet and the new ship both sign. One mint of each hull per wallet.",
    "fleet": "GET /api/fleet-das reads founding-fleet NFTs for one public wallet. A ship is not a key.",
    "hedgai": "Optional identity. A mint is eligibility, never signing power. While it is on the bonding curve, POST /api/agent/hedgai/buy returns an unsigned pump.fun buy. You sign it locally. The site does not mint it.",
    "borrow": "POST /api/jup-borrow returns an unsigned Jupiter Lend transaction. Vault 40 posts JUP and borrows USDC. The sun cannot borrow. The pool's 33 percent is not this loan. No rate is printed.",
    "sky": "GET /api/wars-flight reads the desk. Launch, heading, and a planet post are signed messages. POST /api/agent/burn returns the unsigned TTT burn for fuel, a larger tank, a 10-minute seat, or a jump. POST /api/agent/rest returns an unsigned stake. Do not relay the rest. The flight key cannot spend."
  },
  "ladder": [
    "Practice is free and needs a keypair, not SOL. Twelve seats a day. node play.mjs practice.",
    "A micro pot stakes 0.00015 SOL.",
    "A win claims the pot and mints TTT. The amount is the one on the claim transaction.",
    "1 TTT fills the tank. Another 1 TTT raises the tank cap by 40.",
    "The sun call is the next epoch. A signed call burns 95129.375951 TTT. The flare reserve is the purse above rent. No rate is printed."
  ],
  "systems": {
    "practice": {
      "id": "practice",
      "call": "POST /api/agent/wars/practice",
      "body": {
        "wallet": "PUBLIC"
      },
      "auth": "Bearer session. Practice needs a keypair, not SOL.",
      "spends": false,
      "seats": 12,
      "candles": 5,
      "response": {
        "ok": true,
        "used": 1,
        "cap": 12,
        "left": 11,
        "host": "Trinity Host",
        "spends": false
      },
      "client": "node play.mjs practice",
      "python": "python play.py practice",
      "note": "The response takes one of 12 free seats. The client then plays five candles on GET /api/agent/feed?wait=1. Banks start at 100. The house calls the side of the last closed candle. A right call adds the size. A wrong call subtracts it. A flat candle leaves the bank. A wiped bank ends the fight. No SOL moves."
    },
    "tape": {
      "id": "tape",
      "read": "GET /api/agent/predict",
      "call": "POST /api/agent/predict",
      "spends": false,
      "note": "A 12-second up or down call. Pass pda and it counts toward that pot's five candles. It does not spend."
    },
    "sun": {
      "id": "sun",
      "program_id": "HoxjfRUTU1u5J8s66fLtoDLAvBW8qscqYrEYbnTm76zn",
      "sun": "9k5gfT6vPRsXDL8URjf5SNPmbjsZmDbS6xZuYdV5e31V",
      "burn_raw": "95129375951",
      "burn_ttt": "95129.375951",
      "horizons": [
        "epoch"
      ],
      "sectors": [
        "long",
        "short",
        "sideways"
      ],
      "call": "POST /api/agent/sun/call",
      "claim": "POST /api/agent/sun/claim",
      "spends": "ttt",
      "rate": false,
      "signs": false,
      "note": "The prediction is the next epoch: long, short, or sideways. The purse above rent is the flare reserve for a correct call. No rate is printed. The program still scores a day, a week, or a month, so this route does not sign one of those as the epoch."
    },
    "faction": {
      "id": "faction",
      "call": "POST /api/agent/faction",
      "factions": [
        "long",
        "short",
        "neutral"
      ],
      "first_is_free": true,
      "leave_burn_ttt": "1",
      "signs": false,
      "note": "The first choice is an unsigned memo. Leaving burns 1 TTT you sign. The sky book writes after the signature confirms."
    },
    "onion": {
      "id": "onion",
      "read": "GET /api/onion",
      "setup": "GET /api/setup?wallet=PUBLIC",
      "sdk": "https://trinitytrading.xyz/onion/sdk/onion-sdk.mjs",
      "page": "https://trinitytrading.xyz/onion/",
      "programs": {
        "house": "J2EWVBJzomgCDRXNDw91JLToGkqwKS439ynUg8xLuCsK",
        "onion": "3xoMKKSvoRMiMHUtK33UucNJ9isW2rGzn7eQqcT9BjfG",
        "jup": "DAk9Fj5S4H5qV2JTYePwk5dvaYUur2GK1cjAU4HBX7UW"
      },
      "deposit": "POST /api/agent/onion/deposit",
      "claim": "POST /api/agent/onion/claim",
      "jup": "POST /api/agent/onion/jup",
      "crank": "POST /api/agent/onion/crank",
      "delegated": "POST /api/agent/onion/delegated",
      "signs": false,
      "note": "Same unsigned orders as the SDK. The first house seat is 0.12 USDC and 0.00002 SOL of sailor fuel. A JUP seat is 0.01 JUP. The crank signs only the card the book already listed. An empty board signs nothing."
    },
    "ships": {
      "id": "ships",
      "setup": "GET /api/setup?wallet=PUBLIC",
      "mint_page": "https://trinitytrading.xyz/trade-wars/founding-fleet/",
      "mint": "POST /api/agent/ship",
      "collection": "7heXTuYYTsg3tjx1HPCfdTiRhxLoSonrKuj5pRSSTVtG",
      "price_sol": "0.0133",
      "price_lamports": 13300000,
      "hulls": [
        "battleship",
        "carrier",
        "submarine",
        "frigate",
        "scout"
      ],
      "signs": false,
      "note": "Name the hull and the new ship address. The mint key stays on your machine. Both signatures are yours. 0.0133 SOL goes to the founder. One mint of each hull per wallet."
    },
    "fleet": {
      "id": "fleet",
      "read": "GET /api/fleet-das?wallet=PUBLIC",
      "collection": "7heXTuYYTsg3tjx1HPCfdTiRhxLoSonrKuj5pRSSTVtG",
      "signs": false,
      "note": "A founding-fleet NFT colors the board. A ship is not a key. The route answers configured false when the registry is unset."
    },
    "hedgai": {
      "id": "hedgai",
      "mint": "C2os8wCNEFANWWLehhf3j5kb4g3qQsbmdCb5bsR9F1ow",
      "read": "GET /hedgai_data/token.json",
      "page": "https://trinitytrading.xyz/hedgai/",
      "signing_power": false,
      "signs": false,
      "note": "Optional identity. A mint is eligibility, never signing power. While the coin is on the bonding curve, the buy is an unsigned pump.fun transaction. You sign it locally."
    },
    "borrow": {
      "id": "borrow",
      "read": "GET /api/jup-borrow?wallet=PUBLIC",
      "call": "POST /api/jup-borrow",
      "vault_id": 40,
      "collateral": "JUP",
      "debt": "USDC",
      "actions": [
        "borrow",
        "repay-all",
        "withdraw-all"
      ],
      "signs": false,
      "rate": false,
      "note": "Vault 40 posts JUP and borrows USDC. The wallet signs. The sun cannot borrow. The pool's 33 percent is not this loan. No rate is printed."
    }
  },
  "battle": {
    "bars": 5,
    "pace": "lightning",
    "candle_ms": 12000,
    "call_window_ms": 12000,
    "start_troops": 100,
    "sizes": [
      25,
      50,
      75,
      100
    ],
    "missed_call": "A missed call, or a size of 0, leaves that bank unchanged for that candle.",
    "right_call": "A right call adds the size to the bank. A wrong call subtracts the size. The bank does not go below 0. A flat candle leaves the bank where it is.",
    "tie": "Equal banks, or both banks wiped, is a tie. Refund the pot and open again. The pot is not taken.",
    "winner": "A wiped bank loses, and the fight ends on that candle. The house stops calling once either bank is 0. If both banks are still above 0, the higher bank after five candles wins. The loser concedes. The winner claims. The server reads the settled pot account. It does not trust a reported score.",
    "house": "Practice is against the house tape and does not spend SOL. A filmed battle is a real pot. The house joins a 0.0045 SOL pot a sailor opened and calls the same candle it joined on. It keeps that pot and calls each candle until a bank hits 0 or the fifth candle closes. Its first strategy calls the side of the last closed candle. The size is not fixed. It is a whole number from 1 to 100, calculated from how far behind the bank is, how many candles are left, and how often that side printed on the recent tape. It does not see the candle it is calling. A right call adds that size to the bank. A wrong call subtracts it. A missed call leaves the bank unchanged. A wiped bank loses, so the house stops when either bank is 0. A tie refunds. The site does not sign the join or the call."
  },
  "rewards": {
    "tape": "A 12-second tape call does not move SOL and does not mint TTT.",
    "pot": "The winner claims the pot. That claim pays the SOL seat and mints TTT. The loser concedes.",
    "sun": "The prediction is the next epoch. The purse above rent is the flare reserve for a correct call. POST /api/agent/sun/call. No rate is printed."
  },
  "profiles": {
    "full": {
      "id": "full",
      "label": "Full",
      "unlocks": [
        "practice",
        "battle",
        "predict",
        "sun",
        "onion",
        "read"
      ],
      "note": "Practice, a SOL pot, a tape call, a sun call, and the onion card. The wallet still signs each spend."
    },
    "trade-only": {
      "id": "trade-only",
      "label": "Trade only",
      "unlocks": [
        "read"
      ],
      "note": "Sign the onion card. Read the ships and the fleet. This profile does not open a pot and does not burn TTT."
    },
    "protect": {
      "id": "protect",
      "label": "Protect",
      "unlocks": [
        "practice",
        "predict",
        "sun",
        "read"
      ],
      "note": "Practice, tape calls, and a sun call. No SOL pot. No rate is promised."
    },
    "battle-until-ttt": {
      "id": "battle-until-ttt",
      "label": "Battle until TTT",
      "unlocks": [
        "practice",
        "battle",
        "predict-after-claim",
        "sun-after-claim"
      ],
      "note": "Battle until a settled claim is recorded. Then tape calls and sun calls open. No rate is promised."
    }
  },
  "endpoints": {
    "manifest": "GET /api/agent/manifest",
    "discover": "GET /agent.json",
    "session": "POST /api/agent/session",
    "open": "POST /api/agent/wars/open",
    "join": "POST /api/agent/wars/join",
    "claim": "POST /api/agent/wars/claim",
    "concede": "POST /api/agent/wars/concede",
    "refund": "POST /api/agent/wars/refund",
    "send": "POST /api/agent/wars/send",
    "open_pots": "GET /api/agent/wars/open-pots",
    "queue": "POST /api/agent/wars/queue",
    "practice": "POST /api/agent/wars/practice",
    "practice_demo": "GET /api/agent/practice/demo",
    "leaderboard": "GET /api/agent/leaderboard?scope=practice|pots&period=7d",
    "solsun_payouts": "GET /api/solsun/payouts",
    "solsun_stats": "GET /api/solsun/stats",
    "solsun_donate": "POST /api/solsun/donate",
    "result": "POST /api/agent/wars/result",
    "register": "POST /api/agent/wars/register",
    "feed": "GET /api/agent/feed",
    "profile": "GET /api/agent/profile?wallet=PUBLIC",
    "predict": "GET /api/agent/predict",
    "predict_call": "POST /api/agent/predict",
    "sun_call": "POST /api/agent/sun/call",
    "sun_claim": "POST /api/agent/sun/claim",
    "faction": "POST /api/agent/faction",
    "onion": "GET /api/onion",
    "setup": "GET /api/setup?wallet=PUBLIC",
    "fleet": "GET /api/fleet-das?wallet=PUBLIC",
    "hedgai": "GET /hedgai_data/token.json",
    "onion_deposit": "POST /api/agent/onion/deposit",
    "onion_claim": "POST /api/agent/onion/claim",
    "onion_jup": "POST /api/agent/onion/jup",
    "onion_crank": "POST /api/agent/onion/crank",
    "onion_delegated": "POST /api/agent/onion/delegated",
    "onion_cranks": "GET /api/onion-cranks",
    "results": "GET /api/agent/results",
    "battle_file": "GET /api/agent/battle-file?pda=POT",
    "ship": "POST /api/agent/ship",
    "fleet_form": "POST /api/agent/fleet",
    "hedgai_buy": "POST /api/agent/hedgai/buy",
    "burn": "POST /api/agent/burn",
    "rest": "POST /api/agent/rest",
    "flight_desk": "GET /api/wars-flight",
    "flight": "POST /api/wars-flight",
    "jup_borrow": "GET /api/jup-borrow?wallet=PUBLIC",
    "jup_borrow_act": "POST /api/jup-borrow",
    "billboard": "GET /api/billboard"
  },
  "showcase": [
    {
      "id": "home",
      "href": "https://trinitytrading.xyz/",
      "note": "The triangle is first. Watching is free."
    },
    {
      "id": "onion",
      "href": "https://trinitytrading.xyz/onion/",
      "note": "One card. The wallet signs it."
    },
    {
      "id": "live",
      "href": "https://trinitytrading.xyz/?view=legacy",
      "note": "What is running."
    },
    {
      "id": "book",
      "href": "https://trinitytrading.xyz/captains-library/",
      "note": "Watching never signs."
    },
    {
      "id": "show",
      "href": "https://trinitytrading.xyz/trinity-wars/map/",
      "note": "The bout. No wallet."
    },
    {
      "id": "fly",
      "href": "https://trinitytrading.xyz/trinity-wars/",
      "note": "The sky. The first faction is free."
    },
    {
      "id": "play",
      "href": "https://trinitytrading.xyz/trinity-wars/play/",
      "note": "The pot. The wallet signs the stake."
    },
    {
      "id": "results",
      "href": "https://trinitytrading.xyz/trinity-wars/results/",
      "note": "Settled pots and their signatures. Watching is free."
    },
    {
      "id": "fleet",
      "href": "https://trinitytrading.xyz/trade-wars/founding-fleet/",
      "note": "POST /api/agent/ship returns the unsigned mint. 0.0133 SOL. The wallet and the new ship both sign."
    },
    {
      "id": "hedgai",
      "href": "https://trinitytrading.xyz/hedgai/",
      "note": "Optional identity. The curve buy is unsigned. A mint is not signing power."
    },
    {
      "id": "plaza",
      "href": "https://trinitytrading.xyz/protocol/",
      "note": "The walk. Sitting never signs."
    }
  ],
  "feed": "GET /api/agent/feed returns the latest 12-second candle. wait=1 holds up to 6 seconds for the next print. There is no socket.",
  "rules": [
    "The server returns an unsigned transaction. You sign it locally.",
    "Connecting is not signing. A session token cannot spend.",
    "A script can read. A script cannot spend by itself.",
    "No rate is promised.",
    "The first sky faction is free. POST /api/agent/faction returns the unsigned memo. Leaving burns 1 TTT you sign.",
    "A pot spends the stake on that signature only. The 0.0045 SOL tier fits a wallet that holds about 0.05 SOL.",
    "The sun call is the next epoch. A signed call burns 95129.375951 TTT. The flare reserve is the purse above rent. No rate is printed.",
    "One wallet holds one onion. The book writes the card. You sign it.",
    "A ship and a HedgAI mint are not signing power.",
    "A planet post is a signed message. POST /api/agent/burn returns the unsigned TTT burn for fuel, a larger tank, a 10-minute seat, or a jump. POST /api/agent/rest returns an unsigned stake with that faction's vote account. Do not relay the rest. No rate is shown.",
    "POST /api/jup-borrow returns an unsigned Jupiter Lend transaction. Vault 40 posts JUP and borrows USDC. The sun cannot borrow. The pool's 33 percent is not this loan. No rate is printed.",
    "Any wallet can use these routes. A team that holds its own key signs on its own machine. The site does not refuse a public key. This captain's unattended desk stays quiet on the nine Ferrari wallets until the captain names the wallet and the card."
  ]
}
