Digital Oracle
komako-workshop/digital-oracle
Answer prediction questions using market trading data, not opinions.
Detect suspected manipulation on prediction markets over the past 3 days by cross-referencing price/volume/comment anomalies with multilingual local-press coverage
$ npx skills add aeonfun/aeon --skill pm-manipulation -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install aeonfun/aeon pm-manipulation --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/aeonfun/aeon.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/pm-manipulation .claude/skills/pm-manipulation && 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 "pm-manipulation" agent skill from https://github.com/aeonfun/aeon/tree/main/skills/pm-manipulation into .claude/skills/pm-manipulation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pm-manipulation", 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/aeonfun/aeon/tree/main/skills/pm-manipulationType 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 aeonfun/aeon --skill pm-manipulation -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install aeonfun/aeon pm-manipulation --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/aeonfun/aeon.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/pm-manipulation .agents/skills/pm-manipulation && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "pm-manipulation" agent skill from https://github.com/aeonfun/aeon/tree/main/skills/pm-manipulation into .agents/skills/pm-manipulation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pm-manipulation", 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 aeonfun/aeon --skill pm-manipulation -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install aeonfun/aeon pm-manipulation --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/aeonfun/aeon.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/pm-manipulation .cursor/skills/pm-manipulation && 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 "pm-manipulation" agent skill from https://github.com/aeonfun/aeon/tree/main/skills/pm-manipulation into .cursor/skills/pm-manipulation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pm-manipulation", 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/aeonfun/aeon.git --path skills/pm-manipulation--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 aeonfun/aeon --skill pm-manipulation -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install aeonfun/aeon pm-manipulation --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/aeonfun/aeon.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/pm-manipulation .gemini/skills/pm-manipulation && 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 "pm-manipulation" agent skill from https://github.com/aeonfun/aeon/tree/main/skills/pm-manipulation into .gemini/skills/pm-manipulation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pm-manipulation", 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 aeonfun/aeon pm-manipulationInstalls 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 aeonfun/aeon --skill pm-manipulation -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/aeonfun/aeon.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/pm-manipulation .github/skills/pm-manipulation && 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 "pm-manipulation" agent skill from https://github.com/aeonfun/aeon/tree/main/skills/pm-manipulation into .github/skills/pm-manipulation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pm-manipulation", 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 aeonfun/aeon --skill pm-manipulation -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install aeonfun/aeon pm-manipulation --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/aeonfun/aeon.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/pm-manipulation .opencode/skills/pm-manipulation && 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 "pm-manipulation" agent skill from https://github.com/aeonfun/aeon/tree/main/skills/pm-manipulation into .opencode/skills/pm-manipulation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pm-manipulation", 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.
pm-manipulationDetect suspected manipulation on prediction markets over the past 3 days by cross-referencing price/volume/comment anomalies with multilingual local-press coverage
Pm Manipulation is an agent skill from aeonfun/aeon. Detect suspected manipulation on prediction markets over the past 3 days by cross-referencing price/volume/comment anomalies with multilingual local-press coverage
Its SKILL.md is about 3.6k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Business, Finance & HR. It works with Polymarket. The repository describes itself as: The most autonomous AI agent framework: runs unattended on GitHub Actions, self-healing skills, drives Claude Code, Grok, Codex & more. No approval loops. Configure once, forget… The licence is MIT.
9 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit c0cb7c4. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
curlFrom 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:
gamma-api.polymarket.comclob.polymarket.comdata-api.polymarket.comFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Pm Manipulation loads about 3.6k tokens when it runs. Until then it costs about 45 tokens; SKILL.md has 1,379 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 aeonfun/aeon at commit c0cb7c4, republished under its MIT licence (© aeonfun). 1,379 words, ~3,552 tokens.
.claude/skills/pm-manipulation/SKILL.md (or your agent's skills folder).Read memory/MEMORY.md for context.
Read the last 3 days of memory/logs/ to avoid re-flagging markets you already covered, and to compare current readings against prior ones.
If soul/SOUL.md and soul/STYLE.md are populated, match the operator's voice in the notification and write-up. If empty or absent, use a clear, direct, neutral tone. The methodology itself is the same either way.
English-language coverage of any prediction market is dense for US politics, sparse for everything else. Election-, geopolitics-, and conflict-related markets are most often pushed by actors closer to the home country than to the English-speaking financial press. By the time a coordinated narrative lands in mainstream financial outlets, the trade is over. Local-language press, regional outlets, and country-specific Telegram / X channels move first — sometimes by 24–72h.
This skill looks at the past 3 days of activity on a configurable prediction-market platform and asks: where does the price action diverge from organic English-press coverage, and does a multilingual sweep reveal a narrative push that explains it?
Read memory/topics/prediction-markets.md if it exists for an optional ## Platform line naming the target API root. Defaults to Polymarket's public Gamma + CLOB APIs (gamma-api.polymarket.com, clob.polymarket.com, data-api.polymarket.com). The candidate selection, scoring rubric, and multilingual sweep are platform-agnostic; only the endpoints differ.
The keyword filter and locale table below are starting points — the operator can edit memory/topics/prediction-markets.md to add ## Keywords and ## Locales sections that override the defaults.
curl works — there is no network sandbox. For every curl call, if it fails or returns empty, use WebFetch as a fallback for a flaky public GET. The Polymarket APIs above are public (no auth). For news searches, prefer WebSearch with locale-specific queries — a built-in Claude tool that needs no curl.
Pull the most-active markets across the categories most prone to manipulation: politics, geopolitics, conflict, elections (national and regional), regulatory rulings, and resolution-disputed markets.
# Top markets by 24h volume — repeat for last 3 days using volume24hr / volume1wk fields
curl -s "https://gamma-api.polymarket.com/markets?closed=false&order=volume24hr&ascending=false&limit=30"
# Also fetch by 7d volume to catch slower-burn manipulation
curl -s "https://gamma-api.polymarket.com/markets?closed=false&order=volume1wk&ascending=false&limit=30"From the union of those two lists, pick 6–10 candidates that meet at least one of:
memory/topics/prediction-markets.md): russia, iran, israel, china, taiwan, ukraine, venezuela, argentina, mexico, brazil, india, pakistan, nigeria, france, germany, italy, spain, eu-, nato, cartel, coup, nuclear, assassination, ceasefire, election, vote, referendum, oracle, dispute, umipSkip anything sports, weather, or pure crypto-price (BTC > $X by Y) — those have different manipulation signatures and aren't this skill's job.
For each candidate market, get the YES-token (clobTokenIds[0]) and pull 3-day price history at hourly fidelity:
curl -s "https://clob.polymarket.com/prices-history?market=$TOKEN_ID&interval=1w&fidelity=60"Compute, from the past 72h window only:
concentrated-move.volume-spike.reversal — common when a manipulator unwinds.Also pull the trades feed if available (some markets only) for whale concentration:
curl -s "https://data-api.polymarket.com/trades?market=$TOKEN_ID&limit=500"Compute whale share — % of 3d volume from the top-3 wallet addresses. If > 40%, flag whale-concentrated.
If the trades endpoint doesn't return per-market data, skip whale-share for that candidate — note it in the report rather than failing.
For each candidate, fetch comments from the past 3 days:
# Get the event id first (comments live on Event, not Market)
curl -s "https://gamma-api.polymarket.com/events?slug=$EVENT_SLUG&limit=1"
# Top comments by reactions
curl -s "https://gamma-api.polymarket.com/comments?parent_entity_type=Event&parent_entity_id=$EVENT_ID&limit=50&order=reactionCount&ascending=false"
# Most recent
curl -s "https://gamma-api.polymarket.com/comments?parent_entity_type=Event&parent_entity_id=$EVENT_ID&limit=50&order=createdAt&ascending=false"Filter to comments from the last 72h (createdAt within window). Then look for:
user\d{4,}, common spam-bot signature) within a 6h window. Flag bot-burst.narrative-push.pm-manipulation runs). Flag cross-market-spam.Apply a reactionCount > 1 pre-filter before counting "real" reactions, but do count low-reaction comments toward bot-burst and narrative-concentration signals — that's exactly where the spam shows up.
For each candidate that hit any anomaly flag in steps 2 or 3, run a localized press sweep targeting the country/region most relevant to the question. The goal is to find coverage that explains (or doesn't explain) the price action, in the language of the place where the news would actually break first.
Pick 2–3 languages per market based on the topic. Suggested locale targets:
| Topic / region | Languages | Press domains (use as site: filters) |
|---|---|---|
| Russia / Ukraine | ru, uk | site:rbc.ru, site:tass.com, site:meduza.io, site:pravda.com.ua, site:kyivindependent.com |
| Iran / Middle East | ar, fa, he | site:aljazeera.net, site:alarabiya.net, site:irna.ir, site:ynet.co.il, site:haaretz.co.il |
| China / Taiwan / HK | zh-cn, zh-tw | site:scmp.com, site:caixin.com, site:ltn.com.tw, site:cna.com.tw, site:rfa.org |
| Latin America | es, pt | site:elpais.com, site:eltiempo.com, site:clarin.com, site:folha.uol.com.br, site:estadao.com.br, site:eluniversal.com.mx |
| Europe | fr, de, it, es | site:lemonde.fr, site:lefigaro.fr, site:spiegel.de, site:zeit.de, site:repubblica.it, site:elmundo.es |
| India / Pakistan | hi, ur, en-IN | site:thehindu.com, site:timesofindia.indiatimes.com, site:dawn.com, site:tribune.com.pk |
| Africa | en-ZA, fr, ar | site:dailymaverick.co.za, site:premiumtimesng.com, site:nation.africa, site:jeuneafrique.com |
For each market × language pair:
WebSearch: <market keywords in target language> <site filters from table> [past 7 days]Translate keywords into the target language before searching. If you're not confident in a translation, ask via WebFetch a translation tool URL or skip that language with a note.
Also check non-press signals where coverage tends to break first:
t.me/<channel>-style queries, plus general queries like "<topic in language>" telegram)"<topic in language>" twitter.comsite:reddit.com/r/<country>)For each candidate market record:
Sum the flags. Each is worth 1 point:
concentrated-move (>70% of 3d move in 6h)volume-spike (peak/median > 8x)whale-concentrated (top-3 wallets > 40% volume)bot-burst OR narrative-push OR cross-market-spam (any one of these — comments only count once)reversal (>5pp price reversal within 72h)Classify:
memory/issues/ with severity medium, category unknown, detected_by pm-manipulation.Be honest about uncertainty. "Suspicious" is not "proof". The skill's value is putting a watchlist in front of a human, not adjudicating fraud.
Build the body in a temp file (multi-line content; never argv-pipe long strings):
TEMP=$(mktemp -t pm-manipulation.XXXXXX.md)
cat > "$TEMP" <<'MSG'
PM Manipulation Watch — ${today} (past 3d)
scanned: N markets · flagged: M · suspicious: K · high-conf: J
--- SUSPICIOUS / HIGH-CONFIDENCE ---
1. "[market question]" — score X/5
slug: <event-slug>
3d: $opens → $closes ($change pp), peak vol $X
flags: <comma-separated flag names>
local press: <one-line summary of what foreign-language coverage said and when>
asymmetry: <english-silent | english-contradicts | english-confirms | n/a>
take: <one-sentence opinion — coordinated push? insider? unclear?>
2. ...
--- WATCH (score 2) ---
- "[question]" — <one-line note>
--- CLEAN (scanned but no flags) ---
N markets, no anomalies above threshold.
read it: output/articles/pm-manipulation-${today}.md
MSGKeep the notification under 3500 chars. If it exceeds, drop the CLEAN section and the WATCH bullets first; never truncate the SUSPICIOUS section mid-entry.
Write the unabridged report to output/articles/pm-manipulation-${today}.md:
# PM Manipulation Watch — ${today}
**Window:** past 3 days · **Scanned:** N markets · **Suspicious (≥3):** K · **High-confidence (≥4):** J
## Methodology
3-day price/volume/comment scan + multilingual press sweep. Each candidate scored 0–5 across 6 anomaly classes. See `skills/pm-manipulation/SKILL.md` for the full scoring rubric.
## Suspicious Markets
### 1. [Market question] — score X/5
- **Slug:** <event-slug>
- **3d action:** $open → $close (change pp), peak hour vol $X, whale share Y%
- **Flags triggered:** <list>
- **Comments:** <coordinated patterns observed>
- **Local press:**
- <language>: <outlet> — <one-line summary, date, link>
- <language>: <outlet> — ...
- **English press:** <outlet — date — link, or "silent">
- **Asymmetry:** <english-silent | english-contradicts | english-confirms | n/a>
- **Take:** <2–3 sentences>
[repeat per suspicious market]
## Watchlist (score 2)
- ...
## Clean
[brief table: market, 3d change, why scanned]Cite every source with a URL. No untranslated quotes longer than ~10 words — render the original AND a short English gloss.
./notify -f "$TEMP"If status is high-confidence (≥4), prepend [URGENT] to the notification subject so it surfaces in chat.
Append to memory/logs/${today}.md:
### pm-manipulation
- **Scanned:** N markets (past 3d)
- **Suspicious (≥3):** K
- **High-confidence (≥4):** J
- **Top flag:** "[market]" — score X/5
- **Languages searched:** <list>
- **Issues filed:** [ISS-NNN list or "none"]
- **Notification sent:** yes / no
- PM_MANIPULATION_OKmonitor-polymarket. The signal lives in coverage gaps between languages.pm-manipulation logs and the situation hasn't escalated, mention it as "ongoing" rather than re-running the full write-up.© aeonfun, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in skills/pm-manipulation of aeonfun/aeon.
Open the folder on GitHubat commit c0cb7c4
Pm Manipulation 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 |
|---|---|---|---|---|---|---|
| Pm Manipulation this skillaeonfun/aeon | 767 | — | ~3.6k | Automated safety check: Pass | MIT | |
| Digital Oraclekomako-workshop/digital-oracle | 870 | — | ~5.9k | Automated safety check: Pass | MIT | |
| Fintoolsecond-state/fintool | 316 | 1 repos | ~5.9k | Automated safety check: Pass | None | |
| Polyclawchainstacklabs/polyclaw | 360 | 1 repos | ~2k | Automated safety check: Pass | Apache-2.0 | |
| Polymarket TradingBlockRunAI/ClawRouter | 6.6k | — | ~1.4k | Automated safety check: Pass | MIT | |
| Dr Manhattanguzus/dr-manhattan | 204 | — | ~2k | Automated safety check: Pass | Apache-2.0 |
komako-workshop/digital-oracle
Answer prediction questions using market trading data, not opinions.
second-state/fintool
Financial trading CLIs — spot and perp trading on Hyperliquid, Binance, Coinbase, OKX.
chainstacklabs/polyclaw
Trade on Polymarket via split + CLOB execution. An agent skill from chainstacklabs/polyclaw.
BlockRunAI/ClawRouter
A skill your agent uses when the user wants to actually PLACE, manage, or redeem bets on Polymarket (not just read odds — that's the blockrunpredexon data tools).
guzus/dr-manhattan
Trade prediction markets (Polymarket, Kalshi, Opinion, Limitless, Predict.fun) using a unified CCXT-style API.
livetennisapi/livetennisapi-mcp
Build observe-only Polymarket and Kalshi tennis market tooling on the polymarket-tennis Python package (MIT) plus the Live Tennis API free tier.
aeonfun/aeon
Browses open tasks on the TaskMarket agent-worker market and, with explicit operator approval, creates tasks, tracks submissions and submits finished work.
aeonfun/aeon
Sets up and manages an Aeon agent instance that runs skills on a schedule through GitHub Actions: starting, rescheduling, debugging, editing skills and mining chat history.
aeonfun/aeon
Reads a Base Account's address, portfolio and transaction history through the Base MCP server, and stays strictly read-only in unattended Aeon runs, reporting only changes.
aeonfun/aeon
Audits every page of a site each day from its sitemap, scores on-page and technical SEO, checks duplicates across pages and reports what changed since the last run.
aeonfun/aeon
5 concrete real-life actions, leverage-scored against open loops with specificity and anti-fluff gates
aeonfun/aeon
Static linter for an Aeon instance's configuration that catches silent failures such as unquoted schedules, duplicate keys, unconfigured skills and broken MCP references.
Works with
Categories
Detect suspected manipulation on prediction markets over the past 3 days by cross-referencing price/volume/comment anomalies with multilingual local-press coverage. Pm Manipulation is an agent skill from aeonfun/aeon.
Pm Manipulation fits situations like: business, Finance & HR work in your project.
Run `npx skills add aeonfun/aeon --skill pm-manipulation -a claude-code`. Or copy the skill folder (skills/pm-manipulation in aeonfun/aeon) into .claude/skills/pm-manipulation in your project. Claude Code loads it when a task matches its description.
Run `npx skills add aeonfun/aeon --skill pm-manipulation -a codex`. Or copy the skill folder (skills/pm-manipulation in aeonfun/aeon) into .agents/skills/pm-manipulation 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 aeonfun/aeon --skill pm-manipulation -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/pm-manipulation, .gemini/skills/pm-manipulation, .github/skills/pm-manipulation and .opencode/skills/pm-manipulation in your project.
Going by SKILL.md and its folder, Pm Manipulation needs the command-line tools its instructions call (curl).
SKILL.md names 3 domains. In commands or code: gamma-api.polymarket.com, clob.polymarket.com and data-api.polymarket.com; the agent is likely to contact these when it follows the instructions. 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.
Pm Manipulation is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.6k tokens (SKILL.md is roughly 14k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Pm Manipulation: Digital Oracle (komako-workshop/digital-oracle, 870 stars), Fintool (second-state/fintool, 316 stars), Polyclaw (chainstacklabs/polyclaw, 360 stars) and Polymarket Trading (BlockRunAI/ClawRouter, 6.6k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
aeonfun (a GitHub organization) maintains it in aeonfun/aeon, which has 767 GitHub stars. The repository holds 82 skills in this directory. The repository was last updated on October 8, 2026.
Source: aeonfun/aeon on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.