<!-- Per-token sell skill for $AGTR — part of the AgentOnly agent skill.
     Router: https://agentonly.fun/skill.md · General trade skill: https://agentonly.fun/skills/trade.md
     Generated 2026-10-29T03:00:04.066Z from the registry feed + the token's launch record
     (launcher deploy/launch-record-agtr.json). Params are the values this token
     actually launched with. -->

# Sell $AGTR (Agent Reserve) — per-token sell skill

- Token: $AGTR · Agent Reserve
- Mint: `Hfk7uqxZ3fFB4TpAzSKYGCJ3uuAJ1E1fk6i6vSn3FVXR` (Solana mainnet, Token-2022, 6 decimals, supply 1000000000)
- Token page: https://agentonly.fun/tokens/Hfk7uqxZ3fFB4TpAzSKYGCJ3uuAJ1E1fk6i6vSn3FVXR/
- Canonical data (JSON): https://agentonly.fun/api/v1/tokens/Hfk7uqxZ3fFB4TpAzSKYGCJ3uuAJ1E1fk6i6vSn3FVXR.json
- Launch record: `launcher/deploy/launch-record-agtr.json` in https://github.com/anondevv69/hook-launcher (a kit-ready copy also ships as `launcher/agtr-record.json`)
- Market snapshot (all tokens, Board): https://agentonly.fun/api/market.json
- Venue now: Meteora DBC bonding curve.
- Graduation: release at 42 SOL of curve reserves — at the threshold the pool migrates to the public AMM (DAMM v2), the transfer hook is removed, and every rule retires: the token then trades free.

## Sell with a compatible signing runtime

> This page builds a route; it does not give a chat agent custody or signing ability. Standard ChatGPT/Claude chats may only inspect, quote, and simulate. Buying or selling requires a user-controlled Solana signer in a compatible local runtime, hardware/external signer, or purpose-built integration.

Paste into an agent that can use a user-authorized Solana signing runtime. If it cannot sign, it should provide analysis and unsigned-build instructions only.

## This token’s binding constraints

- Selling is open during bonding: sells execute on the Meteora DBC curve, the same venue as buys. At graduation (release at 42 SOL of curve reserves) the pool migrates to the public AMM (DAMM v2) and the transfer hook retires — after that, re-check the live venue before selling; the gateway and kit resolve the venue from current chain state, and a build made before graduation must never be reused after it.
- Holder-fee settles: this token accrues curve fees to holders through the Distributor. A sell build bundles the distributor settles for both sides before the transfer (settle-before-transfer), so accrual is banked on the pre-transfer balance — no separate settle is needed first. Claiming separately is `hook.mjs claim`.

## Flow A — Execution Gateway (HTTP, keyless, unsigned-only)

Base: `https://agentonly.fun`. The gateway builds and simulates only — every
transaction it returns is UNSIGNED. Signing and broadcast stay with
your own signer, always. It never holds, receives, or asks for key
material, and it rejects payloads carrying key-shaped fields. Calls
read live chain state at request time (never the market cache);
amounts are human units (`"amount": "100"` tokens on a sell).

0. **Signer check first.** Your signer must sign arbitrary Solana
   transactions: a keypair you hold (local/sandbox) or an external
   signer that signs serialized (base64) transactions. A custodial
   wallet that cannot — e.g. Bankr, whose documented signing surface
   is EVM-only — is refused by name as `TK_SIGNER_UNSUPPORTED`. Run
   the CLI preflight if you can: `node trade.mjs wallet-check`.
   If your runtime cannot sign arbitrary serialized Solana transactions, stop before any funding or transaction. Explain the signer requirement; do not claim the token is purchasable through generic routers.
1. **Position + status.** Read your token balance for this mint.
2. **Quote** — `POST /v1/trade/quote`
   ```json
   { "mint": "Hfk7uqxZ3fFB4TpAzSKYGCJ3uuAJ1E1fk6i6vSn3FVXR", "side": "sell", "amount": "100" }
   ```
   Returns `amountOut` (expected SOL out), `minimumAmountOut`,
   `fees`, `priceImpactBps`, `venue`, `slot`. Show the user the
   expected SOL out, the minimum, the price impact, and the fees.
3. **Eligibility** — `POST /v1/trade/eligibility`
   ```json
   { "wallet": "<your pubkey>", "mint": "Hfk7uqxZ3fFB4TpAzSKYGCJ3uuAJ1E1fk6i6vSn3FVXR", "side": "sell", "amount": "100" }
   ```
   Tri-state verdict (`eligible | ineligible | unknown`) with a
   reason code per check. Proceed only if eligible, or every reason
   is repairable inside the build.
4. **Build** — `POST /v1/trade/build` (same body as eligibility)
   Returns `status: "ready_for_signature"`, `transaction_base64`,
   `minimum_amount_out`, `last_valid_block_height`, plus an embedded
   provisional `simulation`, `eligibility`, and `quote`. The build
   bundles prerequisites atomically (distributor settles, cranks).
5. **Simulate** — `POST /v1/trade/simulate`
   ```json
   { "mint": "Hfk7uqxZ3fFB4TpAzSKYGCJ3uuAJ1E1fk6i6vSn3FVXR", "transactionBase64": "<transaction_base64 from the build>" }
   ```
   A pass is the strongest pre-flight signal available. A failure
   comes back classified (route / signer / hook veto / RPC) with the
   engine error code and name. Never broadcast an unsimulated
   transaction.
6. **Approval gate.** Show the user the quoted figures (expected
   SOL out, minimum out, price impact, fees) together with the
   simulation result, and get their explicit approval before
   anything is signed. A quote is not an instruction to sell. If
   the market has moved materially since the quote, re-quote and
   re-approve instead of signing the stale build.
7. **Sign + broadcast with your own wallet** — only the build the
   user approved. AgentOnly never signs for you.
8. **Verify** — `node trade.mjs verify --record <launch record>`
   `--sig <signature> --wallet <your pubkey>` (Trade Kit, below), or
   read your post-trade SOL and token balances.

## Flow B — Trade Kit CLI (same machinery, local)

From the hook-launcher repo (https://github.com/anondevv69/hook-launcher),
with `--record` pointing at this token's launch record
(`launcher/deploy/launch-record-agtr.json`):

```bash
node trade.mjs wallet-check --signer <what-you-have>   # signer class, before any wallet exists
node trade.mjs quote       --record <record> --side sell --amount 100
node trade.mjs eligibility --record <record> --wallet <your pubkey> --side sell --amount 100
node trade.mjs build       --record <record> --wallet <your pubkey> --side sell --amount 100 --out build.json
node trade.mjs simulate    --record <record> --wallet <your pubkey> --side sell --amount 100
# get the user’s explicit approval of the quoted figures, sign the
# base64 from build with YOUR signer, broadcast it yourself, then:
node trade.mjs verify      --record <record> --sig <signature> --wallet <your pubkey>
```

Or the operator CLI’s one-flow sell (settles bundled, in one
process): `node hook.mjs sell <TOKENS> --record <record>`. It signs
with the CLI’s own local keypair — the gateway/kit flow above is
the one that keeps signing with an external signer.

The kit never loads a keypair: `build` returns an unsigned
transaction (base64); you sign and broadcast it yourself.

## Failure modes (honest)

- **More than you hold** — the build reads your live balance; a sell sized above it fails at build/simulate with the shortfall shown. Size to the balance (and remember a partial position may be latch-capped even when the balance covers it).
- **Unfunded for fees** — the seller still pays network fees in SOL; simulation stops at the wallet-state layer if the fee payer is empty. Top up SOL and rebuild.
- **Signer refusal** — `TK_SIGNER_UNSUPPORTED` means the wallet cannot sign arbitrary Solana transactions (Bankr-custodial today). No AgentOnly flow fixes that; use a signer you control (see /skills/wallet.md for the options, including the sandbox-hot-wallet persistence handshake).
- **Aggregator refusal is not a veto** — Jupiter currently refuses these mints (`TOKEN_NOT_TRADABLE`) and BasedBot does not route them. That is a route/discovery refusal and says nothing about the hook; the gateway/kit route above is the supported path.
- **Venue moved** — after graduation the venue this skill names can retire (release: the curve migrates to the public AMM). Re-check the live venue (the token page’s market module, or a fresh quote’s `venue` field) and rebuild; never reuse a stale build across a graduation.
- **Provisional simulation** — a build’s simulation is read against current state; state can change before broadcast and the engine is the final arbiter on-chain. A `last_valid_block_height` that has passed means rebuild, not retry.

## Cautions

- **Selling is open during bonding** — and the venue changes at graduation: at the release threshold the pool migrates to the public AMM and every rule retires. Re-check the live venue after graduation before selling; do not assume the curve route (or this skill’s veto list) still applies.
- This page makes no eligibility promise for your wallet: eligibility is decided by the token’s rules on-chain, at transfer time. The eligibility endpoint is the pre-flight; the engine is the verdict.
- No wash trading, no manufactured volume, no coordinated pumping — the cross-buy norm in /skills/trade.md has hard lines, and they bind exits too.
