sessionSpendCapSol / perTradeSol — hard spend caps
Args supported by every loop
dryRun: true — vet/quote runs, buyToken / sellToken are skipped and sig: null is returned. Spend cap still ticks so a dry-run terminates the same way a live one would. Use it to validate filters before going live.
sessionId: "<stable-string>" — persists seen / mirrored / spent / exited to ctx.memory (in-process Map fallback). Reusing the same id resumes a prior session — preventing a crash mid-loop from re-spending up to the cap.
signal: AbortSignal — every poll, sleep, inner-loop, and outer-loop checks signal.aborted. Stop is responsive (≤ ~1 RPC call) regardless of pollMs.
onProgress(evt) — called on every state change with { type, mint?, sig?, spent?, reason? }. Drive a live UI off it.
The result data.reason indicates why the loop exited: 'aborted' | 'duration' | 'cap' | 'all-exited'.
1---2name: pump-fun-compose3description: pump-fun-compose4---5# pump-fun-compose67Agent-level loops that compose `pump-fun` (read) and `pump-fun-trade` (sign).89| Tool | Loop |10|---|---|11| `researchAndBuy` | search → vet (curve, holders, creator) → quote → buy |12| `autoSnipe` | poll new tokens → vet → buy until session cap |13| `copyTrade` | watch a wallet's recent buys → mirror with size scaling |14| `rugExitWatch` | watch held mints → sell on concentration or dev-sell triggers |1516## Filters (manifest.config)1718- `minHoldersForBuy` — reject thin books19- `maxTopHolderPct` — reject whale-controlled supplies20- `rejectIfCreatorRugCount` — reject repeat ruggers21- `exitOnConcentrationPct` / `exitOnDevSellPct` — exit triggers22- `sessionSpendCapSol` / `perTradeSol` — hard spend caps2324## Args supported by every loop2526- `dryRun: true` — vet/quote runs, `buyToken` / `sellToken` are skipped and `sig: null` is returned. Spend cap still ticks so a dry-run terminates the same way a live one would. Use it to validate filters before going live.27- `sessionId: "<stable-string>"` — persists `seen` / `mirrored` / `spent` / `exited` to `ctx.memory` (in-process `Map` fallback). Reusing the same id resumes a prior session — preventing a crash mid-loop from re-spending up to the cap.28- `signal: AbortSignal` — every poll, sleep, inner-loop, and outer-loop checks `signal.aborted`. Stop is responsive (≤ ~1 RPC call) regardless of `pollMs`.29- `onProgress(evt)` — called on every state change with `{ type, mint?, sig?, spent?, reason? }`. Drive a live UI off it.3031The result `data.reason` indicates why the loop exited: `'aborted' | 'duration' | 'cap' | 'all-exited'`.3233## Wiring3435The host runtime injects:3637- `ctx.skills.invoke('skill.tool', args)` — sibling-skill calls38- `ctx.wallet` — used by the trade skill (this one never touches keys directly)39- `ctx.memory.note` — every action is auditable4041## Composition example4243```js44await ctx.skills.invoke('pump-fun-compose.autoSnipe', { durationSec: 600 });45// then babysit positions46await ctx.skills.invoke('pump-fun-compose.rugExitWatch', {47 mints: heldMints,48 durationSec: 3600,49});50```
Run npx skillmds@latest add nirholas/pump-fun-compose in your terminal (requires Node.js), paste this page's agent-chat prompt into Claude, Cursor, or any MCP-connected agent, or download the SKILL.md file and copy it into your agent's skills directory.
pump-fun-compose It is listed under Coding & Dev Tools on SkillMD.
This skill has not completed SkillMD's automated safety review yet. SkillMD never runs a skill's scripts for you; review the SKILL.md before installing.
This skill is tagged as working with Claude Code, Claude.ai, OpenAI Codex. SKILL.md is an open format, so most agents that read a skills directory can load it too.
Yes. Installing skills from SkillMD is free, and the skill stays under its author's original license.
nirholas (@nirholas) published this skill. Their other Agent Skills are listed on their SkillMD profile.