Stop Words
thedaviddias/Front-End-Checklist
A skill your agent uses when applies primarily when creating new content pages.
Bet on sports with one word (or maybe, a few words). An agent skill from LeoYeAI/openclaw-master-skills.
$ npx skills add LeoYeAI/openclaw-master-skills --skill ospex-one -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install LeoYeAI/openclaw-master-skills ospex-one --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/LeoYeAI/openclaw-master-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/ospex-one .claude/skills/ospex-one && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "ospex-one" agent skill from https://github.com/LeoYeAI/openclaw-master-skills/tree/main/skills/ospex-one into .claude/skills/ospex-one/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ospex-one", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/LeoYeAI/openclaw-master-skills/tree/main/skills/ospex-oneType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add LeoYeAI/openclaw-master-skills --skill ospex-one -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install LeoYeAI/openclaw-master-skills ospex-one --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/LeoYeAI/openclaw-master-skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/ospex-one .agents/skills/ospex-one && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "ospex-one" agent skill from https://github.com/LeoYeAI/openclaw-master-skills/tree/main/skills/ospex-one into .agents/skills/ospex-one/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ospex-one", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add LeoYeAI/openclaw-master-skills --skill ospex-one -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install LeoYeAI/openclaw-master-skills ospex-one --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/LeoYeAI/openclaw-master-skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/ospex-one .cursor/skills/ospex-one && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "ospex-one" agent skill from https://github.com/LeoYeAI/openclaw-master-skills/tree/main/skills/ospex-one into .cursor/skills/ospex-one/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ospex-one", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/LeoYeAI/openclaw-master-skills.git --path skills/ospex-one--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add LeoYeAI/openclaw-master-skills --skill ospex-one -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install LeoYeAI/openclaw-master-skills ospex-one --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/LeoYeAI/openclaw-master-skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/ospex-one .gemini/skills/ospex-one && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "ospex-one" agent skill from https://github.com/LeoYeAI/openclaw-master-skills/tree/main/skills/ospex-one into .gemini/skills/ospex-one/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ospex-one", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install LeoYeAI/openclaw-master-skills ospex-oneInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add LeoYeAI/openclaw-master-skills --skill ospex-one -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/LeoYeAI/openclaw-master-skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/ospex-one .github/skills/ospex-one && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "ospex-one" agent skill from https://github.com/LeoYeAI/openclaw-master-skills/tree/main/skills/ospex-one into .github/skills/ospex-one/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ospex-one", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add LeoYeAI/openclaw-master-skills --skill ospex-one -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install LeoYeAI/openclaw-master-skills ospex-one --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/LeoYeAI/openclaw-master-skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/ospex-one .opencode/skills/ospex-one && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "ospex-one" agent skill from https://github.com/LeoYeAI/openclaw-master-skills/tree/main/skills/ospex-one into .opencode/skills/ospex-one/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ospex-one", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
ospex-oneBet on sports with one word (or maybe, a few words). An agent skill from LeoYeAI/openclaw-master-skills.
Ospex One is an agent skill from LeoYeAI/openclaw-master-skills. Bet on sports with one word (or maybe, a few words). Say a team name, city, or abbreviation. 'Edmonton', 'Duke', 'Celtics', 'Lakers'. NBA, NHL, NCAAB.
Its SKILL.md is about 5k tokens, which your agent loads only when the skill is triggered. The skill folder holds 5 other files, including reference files (for example `PROMPT.md`, `_meta.json` and `references/api-reference.md`). Compatibility notes: Requires Node and ethers.js v6. Required env: OSPEXWALLETPRIVATEKEY (wallet private key; high-sensitivity — do not log or expose), OSPEXWALLETADDRESS…
The repository describes itself as: 🧠 Curated collection of 1209+ best OpenClaw skills — weekly updated by MyClaw.ai. The licence is MIT.
5 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit e5199b5. It shows what the files ask for, not the result of running them.
Pre-approves these tools, so the agent can use them without asking each time:
bashexecFrom allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md (its code samples are javascript and json).
From the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
api.ospex.orgospex.orgAlso links to:
github.comFrom URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
OSPEX_WALLET_PRIVATE_KEYFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Requires Node and ethers.js v6. Required env: OSPEX_WALLET_PRIVATE_KEY (wallet private key; high-sensitivity — do not log or expose), OSPEX_WALLET_ADDRESS, OSPEX_RPC_URL (Polygon RPC). Use a dedicated low-fund betting wallet; do not use your primary wallet.
From compatibility in the SKILL.md frontmatter.
Ospex One loads about 5k tokens when it runs, and up to ~17k if it reads all its reference files. Until then it costs about 40 tokens; SKILL.md has 2,182 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from LeoYeAI/openclaw-master-skills at commit e5199b5, republished under its MIT licence (© LeoYeAI). 2,182 words, ~5,042 tokens.
.claude/skills/ospex-one/SKILL.md (or your agent's skills folder). This skill also uses 4 other files; get the full folder from GitHub.One word in, one transaction hash out. This skill emphasizes execution over discussion and is low-risk by design.
Invocation: This skill is invocation-only: the agent will not use it unless you explicitly ask or reference a team name in context. That avoids accidental bets.
Trust & safety: This skill executes real transactions on Polygon mainnet using your configured wallet. Positions are capped at 3 USDC. Unmatched position amounts can be withdrawn at any time. The agent verifies all transaction parameters against hardcoded contract addresses and expected method names before signing — if anything is unexpected, it halts and reports rather than proceeding. OSPEX_WALLET_PRIVATE_KEY is high-sensitivity: the agent must never log, echo, or expose it. Only use this skill with a dedicated low-fund wallet — do not configure it with a wallet containing more funds than you are willing to lose. Full risk assessment: https://github.com/ospex-org/ospex-contracts-v2/blob/main/docs/RISKS.md
Input expectations: This skill is designed for single-word input — a team name, city, or abbreviation. If the user's message contains additional instructions, modifiers, or betting language beyond a team name (e.g., "lay the points", "take the under", "bet $5", "Celtics -6.5"), act on it if the intent is unambiguous — otherwise, ask the user to clarify before proceeding.
| Parameter | Default |
|---|---|
| Market | moneyline (override with spread/total via input like "Lakers -6.5" or "over 220.5") |
| Amount | 3 USDC (maximum per transaction) |
| Side | the named team |
| Odds multiplier | 1.05 |
| Odds | market odds × odds multiplier |
Do not send progress updates during Steps 1–3. Execute the entire flow silently and only message the user when one of these occurs:
If any API call returns an unexpected error, stop and report it. Do not silently retry or work around failures.
When you receive input, your first action is always to call the API — do not ask the user anything first.
Detect market type from input:
For spread and total markets: This skill uses the current market line from odds-history. If the user specifies a line that differs from the current market (e.g., user says "+1.5" but market is at -3.5), inform the user of the current line and ask if they want to proceed at that line instead. Do not attempt to create a position at a non-market line.
GET /markets.homeTeam and awayTeam fields. Note: All API responses use a { data: ..., formatted: "..." } envelope. The formatted field is a display convenience — never use it for branching decisions. Always use the data object. When searching for teams, look inside the data array, not the top-level response.contestId, matchTime, and whether the team is home or away. Check the speculations array for an existing speculationId matching the detected market type. If one exists, note the speculationId. For spread speculations, note awayLine (away team's perspective, e.g. -3.5) and homeLine (home team's perspective, e.g. 3.5) — use whichever matches the user's team. For total speculations, note the line field. These are the actual on-chain lines for the bet. If no speculationId exists for the detected market type, respond: "No {marketType} market available for {team} right now." and stop.Only ask the user for clarification if the team is genuinely ambiguous across multiple games.
First, determine the odds to request. Call GET /analytics/odds-history/{contestId} to get current market odds. Select the odds for the detected market type:
current.moneyline.awayOdds or current.moneyline.homeOdds depending on which team the user picked.current.spread.awayOdds or current.spread.homeOdds.current.total.overOdds or current.total.underOdds.Apply the odds multiplier from the Defaults section and floor to 2 decimal places: Math.floor(marketOdds * oddsMultiplier * 100) / 100. This is your minimum acceptable odds.
Note: Higher decimal odds = higher payout for the bettor. A quote at 2.00 is better than 1.85.
If the odds-history endpoint returns no data for the relevant market type, use 1.91 as a reasonable default for spread/total (standard -110 line). For moneyline, ask the user — don't guess, since moneyline odds vary widely depending on the matchup.
Line reporting: For spread markets, use awayLine or homeLine from the speculation (noted in Step 1) depending on the user's team — not the line from odds-history. For total markets, use line from the speculation. Odds-history is for odds values only — ignore its line field for spread/total direction. The speculation's line fields are the actual on-chain lines the user is betting on. Use these in all user-facing messages including the Step 4 result.
Line validation: The quote API requires lines in .5 increments (e.g., -10.5, +3.5, 195.5). If the line from odds-history is a whole number or does not end in .5, stop and tell the user: "Spread/total line unavailable for this market right now." Do not attempt to convert it.
Request a quote from Michelle using the speculationId from Step 1:
POST /instant-match/{speculationId}/quote?stream=false
{
"side": "home", "away", "over", or "under" (see side mapping below),
"amountUSDC": {amount parameter, from Defaults section},
"odds": {calculated odds},
"oddsFormat": "decimal",
"wallet": "{OSPEX_WALLET_ADDRESS}"
}This returns: quoteId, approved, approvedOddsDecimal, approvedOddsAmerican, expiresAt. If Michelle counters, the response also includes a counterOffer object. The quote expires at expiresAt. Steps 3-4 must complete before this time.
Save the txParams object from the response — you will need it in Step 3. This contains all pre-computed on-chain transaction parameters. Do not compute these values yourself.
approved is false → tell the user "Michelle (market maker agent) declined — {reason}" and stop.approvedOddsDecimal is greater than or equal to your requested odds → Michelle is offering the same or better. Keep moving, no confirmation needed.approvedOddsDecimal is less than your requested odds → Michelle is offering worse odds. Stop and confirm with the user before proceeding. Show them the counter-offer, let the user know that they must respond before the counter expires, and ask if they want to accept. If the user accepts, call:POST /instant-match/{quoteId}/accept-counter
Body: { "wallet": "{OSPEX_WALLET_ADDRESS}" }This returns an updated txParams object. Use the txParams from this response (it reflects the accepted counter-offer terms).
For side: For moneyline and spread: if the user's team is the homeTeam → "home". If awayTeam → "away". For total: if the user said "over" → "over". If "under" → "under".
Write and execute a single Node.js script (ethers.js v6) that does everything below in sequence. Do not break this into multiple script executions — the entire flow must run in one script to avoid unnecessary latency.
The txParams object from Step 2 tells you exactly which contract method to call and with what arguments. Use it directly.
Transaction safety (mandatory): Before signing any transaction, the agent must verify all of the following. If any check fails, STOP — do not sign or broadcast. Report the mismatch to the user.
0xF717aa8fe4BEDcA345B027D065DA0E1a31465B1A). Never derive a contract address from the API response.txParams.method must equal the expected function for the operation (createUnmatchedPair for position creation, adjustUnmatchedPair for withdrawal, claimPosition for claiming).Wallet construction. Never log, echo, interpolate into URLs, or pass to any external service.// Verify before signing
if (txParams.method !== "createUnmatchedPair") {
throw new Error(`Unexpected txParams.method: ${txParams.method}`);
}This check applies to all on-chain operations in this skill, including withdraw and claim in Step 5.
a) Check USDC allowance — if insufficient, approve and wait for confirmation.
b) Create the position using txParams:
Call positionModule.createUnmatchedPair(), passing the values from txParams.args directly. Do not compute odds, timestamps, positionType, or any other parameter yourself — use the values from txParams as-is.
const tx = await positionModule.createUnmatchedPair(
txParams.args.speculationId,
txParams.args.odds,
txParams.args.unmatchedExpiry,
txParams.args.positionType,
txParams.args.amount,
txParams.args.contributionAmount
);Contributions: txParams.args.contributionAmount defaults to "0". Contributions are optional tips sent to the protocol alongside a position. If the user explicitly asks to tip or contribute (e.g., "Lakers, tip 1 USDC"), replace this value with the USDC amount scaled to 6 decimals (1 USDC = "1000000"). Never add a contribution unless the user specifically requests it.
Wait for the transaction to be mined: const receipt = await tx.wait();
Critical — no retries after a successful transaction: Once tx.wait() confirms, the position exists on-chain and funds have moved. If any subsequent step fails (positionId lookup, match call, etc.), DO NOT re-run the script. Report the tx hash to the user and stop. To complete the interrupted flow, manually call GET /positions/by-tx/{txHash} and then POST /instant-match/{quoteId}/match as separate steps.
c) Get the positionId from the API:
Do not parse the transaction receipt yourself. Call the server-side endpoint which does this deterministically:
const posRes = await fetch(`https://api.ospex.org/v1/positions/by-tx/${receipt.hash}`);
const posData = await posRes.json();
const positionId = posData.data.positions[0].positionId;d) Call the match endpoint:
await new Promise(r => setTimeout(r, 5000)); // wait for Firebase indexing
for (let attempt = 1; attempt <= 5; attempt++) {
const res = await fetch(`https://api.ospex.org/v1/instant-match/${quoteId}/match`, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ positionId })
});
const data = await res.json();
if (res.ok) { console.log(JSON.stringify({ matchTxHash: data.txHash, positionId })); break; }
if (data.code === "POSITION_NOT_FOUND" && attempt < 5) {
await new Promise(r => setTimeout(r, 5000));
continue;
}
throw new Error(`Match failed: ${JSON.stringify(data)}`);
}The protocol indexer can take 5-25 seconds, especially on cold starts. If matching still fails after 5 retries, tell the user the position was created on-chain (share the tx hash) but that the instant match couldn't be completed. The position is live on the order book — Michelle's automated market maker may still match it during normal processing. If it remains unmatched, the user can withdraw their funds at any time.
Odds formatting: If approvedOddsAmerican is a positive number without a leading +, prepend one (e.g., 110 → +110). Negative odds already include the -.
If matchedAmountUSDC or potentialPayoutUSDC is absent from the match response, use the quoted amount and compute payout as amount × approvedOddsDecimal.
Done. {Team} {marketType abbreviation: ML/spread line/total line} at {americanOdds} ({decimalOdds}x), {matchedAmountUSDC} USDC matched, potential payout {potentialPayoutUSDC} USDC.
https://ospex.org/p/{positionId}These operations should only be triggered when the user explicitly requests them (e.g., "status", "withdraw", "claim").
When the user asks "status", "how am I doing", or similar:
GET /positions/{OSPEX_WALLET_ADDRESS}/statusformatted text from the response directly — it is already optimized for chat.claimable array is non-empty, follow up with: "You have {N} position(s) ready to claim (~{total} USDC). Want me to claim them?"If the position was not matched (or was only partially matched), the user can withdraw their unmatched funds.
Precondition: The speculation must still be open (not yet settled). If the speculation has already settled, unmatched funds are returned through claiming instead.
GET /positions/{OSPEX_WALLET_ADDRESS}/withdraw-paramspositions array. Each entry includes a description (e.g., "Lakers ML — Unmatched, 3.00 USDC") and a txParams object.positionModule.adjustUnmatchedPair() using the values from txParams.args directly. Do not compute any arguments yourself. Verify txParams.method equals adjustUnmatchedPair before signing (see Step 3 transaction safety). Wait for the transaction to be mined.const tx = await positionModule.adjustUnmatchedPair(
txParams.args.speculationId,
txParams.args.oddsPairId,
txParams.args.newUnmatchedExpiry,
txParams.args.positionType,
txParams.args.amount,
txParams.args.contributionAmount
);
const receipt = await tx.wait();GET /positions/withdraw-result/{txHash} to get the confirmed amount returned.Report: Withdrawn. {amountReturned} USDC returned. Tx: {txHash}
After the game ends and the speculation is settled (scored), the user can claim their payout. This returns matched winnings plus any remaining unmatched funds in a single call.
Precondition: The speculation must be settled. Positions can only be claimed once.
GET /positions/{OSPEX_WALLET_ADDRESS}/claim-paramspositions array. Each entry includes a description (e.g., "Celtics ML — Won") and a txParams object.positionModule.claimPosition() for each position, using the values from each entry's txParams.args directly. Do not compute any arguments yourself. Verify txParams.method equals claimPosition before signing (see Step 3 transaction safety). Wait for each transaction to be mined.for (const entry of positions) {
const tx = await positionModule.claimPosition(
entry.txParams.args.speculationId,
entry.txParams.args.oddsPairId,
entry.txParams.args.positionType
);
const receipt = await tx.wait();
}GET /positions/claim-result/{txHash} to get the confirmed payout amount.Report: Claimed {payout} USDC. Tx: {txHash}
| Situation | Function | When available |
|---|---|---|
| Position unmatched, game hasn't started | adjustUnmatchedPair (negative amount) | While speculation is open |
| Game ended, user won and/or has unmatched remainder | claimPosition | After speculation is settled |
Base URL: https://api.ospex.org/v1 — no auth, rate limit 100 req/60s/IP.
| Endpoint | Use |
|---|---|
GET /markets?sport={nba|nhl|ncaab} | Find games, contestIds, speculationIds. Spread speculations include awayLine and homeLine instead of line. |
GET /positions/{address}/status | Active, claimable, and withdrawable positions |
GET /positions/by-tx/{txHash} | Get positionId from a transaction hash (server-side event parsing) |
GET /positions/{address}/claim-params | Pre-computed txParams for all claimable positions |
GET /positions/{address}/withdraw-params | Pre-computed txParams for all withdrawable positions |
GET /positions/claim-result/{txHash} | Parse claim receipt, return payout amount |
GET /positions/withdraw-result/{txHash} | Parse withdraw receipt, return amount returned |
GET /analytics/odds-history/{contestId} | Current market odds + opening lines + line movement |
POST /instant-match/{quoteId}/accept-counter | Accept Michelle's counter-offer (required before match) |
POST /instant-match/{speculationId}/quote?stream=false | Request a quote from Michelle |
POST /instant-match/{quoteId}/match | Match a created position against an approved quote |
Network: Polygon (chain ID 137).
| Contract | Address |
|---|---|
| USDC | 0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359 (6 decimals) |
| PositionModule | 0xF717aa8fe4BEDcA345B027D065DA0E1a31465B1A |
For the complete API (including endpoints not used by this skill), see {baseDir}/references/api-reference.md. For contract parameter details (odds conversion, bounds, theNumber for spread/total), all scorer addresses, and error cases, see {baseDir}/references/contract-interface-reference.md.
Minimal ABI (ethers.js v6 human-readable):
[
"function approve(address spender, uint256 amount) returns (bool)",
"function allowance(address owner, address spender) view returns (uint256)",
"function createUnmatchedPair(uint256 speculationId, uint64 odds, uint32 unmatchedExpiry, uint8 positionType, uint256 amount, uint256 contributionAmount)",
"function adjustUnmatchedPair(uint256 speculationId, uint128 oddsPairId, uint32 newUnmatchedExpiry, uint8 positionType, int256 amount, uint256 contributionAmount)",
"function claimPosition(uint256 speculationId, uint128 oddsPairId, uint8 positionType)",
"event PositionCreated(uint256 indexed speculationId, address indexed user, uint128 oddsPairId, uint32 unmatchedExpiry, uint8 positionType, uint256 amount, uint64 upperOdds, uint64 lowerOdds)",
"event PositionClaimed(uint256 indexed speculationId, address indexed user, uint128 oddsPairId, uint8 positionType, uint256 payout)"
]© LeoYeAI, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 4 other files (references) in skills/ospex-one of LeoYeAI/openclaw-master-skills.
Open the folder on GitHubat commit e5199b5
Ospex One next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Ospex One this skillLeoYeAI/openclaw-master-skills | 2.2k | — | ~5k | Automated safety check: Pass | MIT | |
| Stop Wordsthedaviddias/Front-End-Checklist | 74k | — | ~521 | Automated safety check: Pass | MIT | |
| Word Countthedaviddias/Front-End-Checklist | 74k | — | ~577 | Automated safety check: Pass | MIT | |
| Word to Markdown Convertergithub/awesome-copilot | 40k | — | ~1.6k | Automated safety check: Pass | MIT | |
| Ljg Wordlijigang/ljg-skills | 7.5k | — | ~199 | Automated safety check: Pass | MIT | |
| Word AnalysisOpenSenseNova/SenseNova-Skills | 5.7k | — | ~2.2k | Automated safety check: Pass | MIT |
thedaviddias/Front-End-Checklist
A skill your agent uses when applies primarily when creating new content pages.
thedaviddias/Front-End-Checklist
A skill your agent uses when applies to key landing pages, blog posts, product pages, and any page targeting competitive queries.
github/awesome-copilot
Converts Word .docx files to Markdown with a bundled script before analysis, extracting embedded images and handling whole folders alongside the PDF and Excel converters.
lijigang/ljg-skills
Deep-dive English word mastery tool. An agent skill from lijigang/ljg-skills.
OpenSenseNova/SenseNova-Skills
Word (.docx/.doc) 文档全量解析。覆盖:正文/段落文本提取、表格数据提取、高亮/颜色格式读取、多文件汇总对比、嵌入图片转 caption。
brycewang-stanford/Awesome-Journal-Skills
A skill your agent uses when targeting 《体育与科学》(Sports & Science, Jiangsu) — a CSSCI sport-science journal distinctive for reflective, interdisciplinary, theory-forward and methodologically…
LeoYeAI/openclaw-master-skills
Manages pipelines on a DevOps quality and efficiency platform through its OpenAPI: list workspaces and templates, create, update, run and cancel pipelines, and read run records.
LeoYeAI/openclaw-master-skills
Patches OpenClaw's Feishu extension so an edited document triggers an isolated agent session that reads the doc and replies inline, turning it into a live chat space.
LeoYeAI/openclaw-master-skills
Multi-context memory management system for OpenClaw agents with group-isolated storage, global shared memory, workspace organization, and group-specific skills isolation.
LeoYeAI/openclaw-master-skills
Runs a brand's AI-search visibility work end to end: diagnosing how AI platforms represent it, repositioning it, producing AI-optimized content and monitoring ongoing mentions.
LeoYeAI/openclaw-master-skills
Installs and authenticates the gws CLI, then automates Gmail, Drive, Sheets, Calendar, Docs, Chat and Tasks with ready-made recipes, persona bundles and security audits.
LeoYeAI/openclaw-master-skills
Runs four advisor roles, a fitness coach, nutritionist, data analyst and TCM practitioner, to build a health profile and track workouts, diet and wellness over time.
Bet on sports with one word (or maybe, a few words). An agent skill from LeoYeAI/openclaw-master-skills. Ospex One is an agent skill from LeoYeAI/openclaw-master-skills. Bet on sports with one word (or maybe, a few words).
Run `npx skills add LeoYeAI/openclaw-master-skills --skill ospex-one -a claude-code`. Or copy the skill folder (skills/ospex-one in LeoYeAI/openclaw-master-skills) into .claude/skills/ospex-one in your project. Claude Code loads it when a task matches its description.
Run `npx skills add LeoYeAI/openclaw-master-skills --skill ospex-one -a codex`. Or copy the skill folder (skills/ospex-one in LeoYeAI/openclaw-master-skills) into .agents/skills/ospex-one in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add LeoYeAI/openclaw-master-skills --skill ospex-one -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/ospex-one, .gemini/skills/ospex-one, .github/skills/ospex-one and .opencode/skills/ospex-one in your project.
Going by SKILL.md and its folder, Ospex One needs credentials named OSPEX_WALLET_PRIVATE_KEY. Our summary lists: Node.js; A credential in OSPEX_WALLET_PRIVATE_KEY. Its frontmatter pre-approves these tools: bash, exec. Compatibility (from SKILL.md): Requires Node and ethers.js v6. Required env: OSPEX_WALLET_PRIVATE_KEY (wallet private key; high-sensitivity — do not log or expose), OSPEX_WALLET_ADDRESS, OSPEX_RPC_URL (Polygon RPC). Use a dedicated low-fund betting wallet; do not use your primary wallet..
SKILL.md names 3 domains. In commands or code: api.ospex.org and ospex.org; the agent is likely to contact these when it follows the instructions. As links in the text: github.com. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Ospex One is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 5k tokens (SKILL.md is roughly 20k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 12k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Ospex One: Stop Words (thedaviddias/Front-End-Checklist, 74k stars), Word Count (thedaviddias/Front-End-Checklist, 74k stars), Word to Markdown Converter (github/awesome-copilot, 40k stars) and Ljg Word (lijigang/ljg-skills, 7.5k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
LeoYeAI (a GitHub user) maintains it in LeoYeAI/openclaw-master-skills, which has 2,161 GitHub stars. The repository holds 1,235 skills in this directory. The repository was last updated on July 20, 2026.
Source: LeoYeAI/openclaw-master-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.