Social Media Intelligence
HKUDS/Vibe-Trading
Social media intelligence: financial signal extraction from Twitter/X, Telegram, Discord, and Reddit for sentiment-driven trading strategies.
List OKX Agentic Wallet exclusive trading competitions, register users for contests, track participation and leaderboard rankings, and claim won rewards.
$ npx skills add internet-court/internet-court-skill --skill okx-growth-competition -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install internet-court/internet-court-skill okx-growth-competition --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/internet-court/internet-court-skill.git skills-src && mkdir -p .claude/skills && cp -r skills-src/vendored/okx/okx-growth-competition .claude/skills/okx-growth-competition && 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 "okx-growth-competition" agent skill from https://github.com/internet-court/internet-court-skill/tree/main/vendored/okx/okx-growth-competition into .claude/skills/okx-growth-competition/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "okx-growth-competition", 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/internet-court/internet-court-skill/tree/main/vendored/okx/okx-growth-competitionType 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 internet-court/internet-court-skill --skill okx-growth-competition -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install internet-court/internet-court-skill okx-growth-competition --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/internet-court/internet-court-skill.git skills-src && mkdir -p .agents/skills && cp -r skills-src/vendored/okx/okx-growth-competition .agents/skills/okx-growth-competition && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "okx-growth-competition" agent skill from https://github.com/internet-court/internet-court-skill/tree/main/vendored/okx/okx-growth-competition into .agents/skills/okx-growth-competition/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "okx-growth-competition", 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 internet-court/internet-court-skill --skill okx-growth-competition -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install internet-court/internet-court-skill okx-growth-competition --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/internet-court/internet-court-skill.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/vendored/okx/okx-growth-competition .cursor/skills/okx-growth-competition && 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 "okx-growth-competition" agent skill from https://github.com/internet-court/internet-court-skill/tree/main/vendored/okx/okx-growth-competition into .cursor/skills/okx-growth-competition/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "okx-growth-competition", 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/internet-court/internet-court-skill.git --path vendored/okx/okx-growth-competition--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 internet-court/internet-court-skill --skill okx-growth-competition -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install internet-court/internet-court-skill okx-growth-competition --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/internet-court/internet-court-skill.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/vendored/okx/okx-growth-competition .gemini/skills/okx-growth-competition && 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 "okx-growth-competition" agent skill from https://github.com/internet-court/internet-court-skill/tree/main/vendored/okx/okx-growth-competition into .gemini/skills/okx-growth-competition/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "okx-growth-competition", 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 internet-court/internet-court-skill okx-growth-competitionInstalls 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 internet-court/internet-court-skill --skill okx-growth-competition -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/internet-court/internet-court-skill.git skills-src && mkdir -p .github/skills && cp -r skills-src/vendored/okx/okx-growth-competition .github/skills/okx-growth-competition && 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 "okx-growth-competition" agent skill from https://github.com/internet-court/internet-court-skill/tree/main/vendored/okx/okx-growth-competition into .github/skills/okx-growth-competition/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "okx-growth-competition", 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 internet-court/internet-court-skill --skill okx-growth-competition -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install internet-court/internet-court-skill okx-growth-competition --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/internet-court/internet-court-skill.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/vendored/okx/okx-growth-competition .opencode/skills/okx-growth-competition && 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 "okx-growth-competition" agent skill from https://github.com/internet-court/internet-court-skill/tree/main/vendored/okx/okx-growth-competition into .opencode/skills/okx-growth-competition/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "okx-growth-competition", 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.
okx-growth-competitionList OKX Agentic Wallet exclusive trading competitions, register users for contests, track participation and leaderboard rankings, and claim won rewards.
Okx Growth Competition is an agent skill from internet-court/internet-court-skill. List OKX Agentic Wallet exclusive trading competitions, register users for contests, track participation and leaderboard rankings, and claim won rewards. Use when users want to list available trading competitions or trading cups, view competition rules / prize pool / total prizes, register or sign up or enroll or join a contest, check the leaderboard (who is winning) or their own rank (am I in the prize zone, what is my place), ask did I win or query participation / claim status, claim won rewards or prizes from…
Its SKILL.md is about 3k tokens, which your agent loads only when the skill is triggered. The skill folder holds 7 other files, including reference files (for example `references/claim.md`, `references/cli-reference.md` and `references/details.md`).
It sits in Business, Finance & HR, covering Trading and backtesting and Messaging and chat bots. It works with OKX, WeChat, Telegram and X (Twitter). The repository describes itself as: The trust layer for agent-to-agent commerce — natural-language mandates, ERC-7710 delegated permissions, x402 payments, escrow, and dispute resolution as one open, catch-all… The licence is MIT.
4 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit fa89195. 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.
No scripts in the folder and no shell commands in SKILL.md.
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From 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.
Okx Growth Competition loads about 3k tokens when it runs, and up to ~14k if it reads all its reference files. Until then it costs about 176 tokens; SKILL.md has 1,393 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 internet-court/internet-court-skill at commit fa89195, republished under its MIT licence (© internet-court). 1,393 words, ~3,039 tokens.
.claude/skills/okx-growth-competition/SKILL.md (or your agent's skills folder). This skill also uses 6 other files; get the full folder from GitHub.Agentic Wallet exclusive trading competitions. Full lifecycle split across focused references:
references/participation.mdreferences/details.mdreferences/rank.mdreferences/claim.mdreferences/cli-reference.mdThis SKILL.md holds the global rules (facts, identity invariants, routing, output rules, time formatting, status codes, error handling) that ALL references depend on. Always read this file first; then jump into the matching reference for the user's intent.
Treat the following as factual ground truth when the user asks about how a competition works. The two chain-related fields play distinct, non-overlapping roles — never conflate them:
chainId — single id. The claim / reward chain ONLY (rewards are paid on this chain; its contract address lives here). It is NOT a trading chain unless it also appears in participateChainIds.participateChainIds — array of ids returned by both list and detail endpoints. The trading chain set. Trades on any chain in this list count toward the same competition standing.Trading-chain set = participateChainIds. Claim chain = chainId. These are two separate concepts; the display rules below NEVER union them.
1 → Ethereum, 196 → X Layer, 501 → Solana.participateChainIds.myRankInfo.userTotal = 0 means the user has not yet hit the qualifying threshold or the backend metric pipeline has not picked up their trades yet — it does NOT mean the user's chain is unsupported.competition_rank takes a single optional wallet. Omit it for self-rank — the tool sends your accountId (covers every chain in participateChainIds in one call; no chain pick). Pass an explicit address ONLY when querying someone else's rank; the address chain family (EVM 0x... else Solana) must match the activity's primary chain or the tool rejects the call (no silent wrong-chain queries).The query identity for competition_rank and competition_user_status is mutually exclusive: backend accepts EITHER accountId (self) OR walletAddress (cross-user) — never both. The answer to "which identity did you use?" is deterministic from the call shape.
| Call shape | Identity sent |
|---|---|
competition_user_status (any) | accountId — covers every chain in participateChainIds in one call |
competition_rank without wallet | accountId |
competition_rank with wallet=<addr> | walletAddress — tool validates addr's chain family (EVM 0x... else Solana) matches activity's chainId; mismatch → rejected |
competition_claim (pre-check) | accountId |
For multi-activity competition_user_status (no activity_name), the same accountId is reused across all activities — backend joins by accountId.
Before producing ANY user-facing message about a competition, you MUST first locate the matching section in the right reference file below and follow its fixed template structure. Do NOT improvise the format. Do NOT shorten the templates. Do NOT drop sections or merge them. Templates are product-mandated copy (Participation / Skill Quality wording, disclaimer) and must not be paraphrased.
The template structure is fixed; the language follows the user — see the ## Output Language rule below. When the user writes Chinese, translate the template strings to natural Chinese. When the user writes English, use English as written. Placeholders (including chain display names from {supportedChains}) stay as-is.
Quick router (user intent → reference file + section):
| User intent | Reference file | Section |
|---|---|---|
| "list competitions / show available competitions" | references/participation.md | Step 1 — Discover |
| "show details / show rules / show prize pool" | references/details.md | Step 2 — View Details |
| "register / join" | references/participation.md | Step 3 — Join |
| "trade for me" | references/participation.md | Step 4 — Trade (delegates to okx-agentic-wallet) |
| "leaderboard / full board / who is winning" | references/rank.md | Check leaderboard (full board) |
| "my rank / what's my ranking / am I in the prize zone" | references/rank.md | Check user's own rank (across ALL leaderboards) |
| "show registered wallet" | references/participation.md | Query Registered Wallet |
| "export wallet" | references/participation.md | Wallet Export Guard |
| "check my status / did I win" | references/claim.md | Check Participation Status |
| "claim reward / claim my prize" | references/claim.md | Step 6 — Claim Reward |
Top-tier winner contact follow-up (needContact: true after claim) | references/claim.md | Contact collection (top-tier winners only) |
If the user's intent does not clearly map to one of the above, ask which they meant before responding — do not invent a freeform format.
Read
../okx-agentic-wallet/_shared/preflight.md. If missing, read_shared/preflight.md.
Cross-skill routing on common errors:
not logged in → walk the user through the okx-agentic-wallet login flow (run onchainos wallet login), then retry the original action.--status filter / status / joinStatus / rewardStatus) and error code messages (11002 / 11003 / 11008 / 1860402 / address limit reached / Sui-chain / region-blocked / not eligible): see references/cli-reference.md.All MCP tools mirror the CLI; MCP variants accept activity_name (server-resolves the id) and auto-resolve accountId / wallet addresses from the active session. Full flag tables and return shapes: references/cli-reference.md.
| # | Command | Auth | Description |
|---|---|---|---|
| 1 | onchainos competition list [--status 0|1|2] [--page-size N] [--page-num N] | None | List competitions (default status=0, active only) |
| 2 | onchainos competition detail --activity-id <id> | None | Rules, prize pool, chain, timeline |
| 3 | onchainos competition rank --activity-id <id> [--wallet <addr>] --sort-type <type> [--limit N] | None | Leaderboard + user rank. See references/rank.md for self/cross-user semantics and sort-type discovery. |
| 4 | onchainos competition user-status [--activity-id <id>] | Wallet login | Participation & reward status (omit --activity-id for all activities) |
| 5 | onchainos competition join --activity-id <id> --evm-wallet <addr> --sol-wallet <addr> --chain-index <chain_id> | Wallet login | Register the active account for the competition |
| 6 | onchainos competition claim --activity-id <id> --evm-wallet <addr> --sol-wallet <addr> | Wallet login | Atomic claim — signs + broadcasts inside the call. See references/claim.md. |
| 7 | onchainos competition submit-contact --activity-id <id> --contact-type <Telegram|WeChat|Email|Twitter> --contact-value <text> | Wallet login | Record contact for a top-tier winner; only after a claim with needContact: true. See references/claim.md. |
--status (request filter): 0=active, 1=ended, 2=all
activityStatus (response field): 3=active, 4=ended — different from the request filter
Internal-only IDs vs user-facing display. Internal numeric IDs (
activityId,chainIndex,accountId) are returned in tool responses on purpose — they are needed to chain calls between tools (e.g. aftercompetition_join, you may need to callcompetition_detailwith the activity id to fill the success template). Keep them in the data layer; never render them in user-visible messages.
Never include any internal id in a message produced for the user — under ANY circumstance, in ANY format. Identify activities to the user EXCLUSIVELY by activityName (or shortName if name is unavailable).
Forbidden user-visible patterns (do NOT produce output like this):
Agentic Trading Contest (#107)#106 (agenticwallettest1)competition 107, an ID column, a labeled Activity ID row) — same rule, regardless of label, shape, or language.Correct user-visible pattern:
Agentic Trading ContestchainName (e.g. Agentic Trading Contest (Solana)), never the ID.Behind the scenes (allowed and expected):
activityId from a competition_user_status / competition_join response and passing it to competition_detail to fetch the data needed by a fixed template.When the user asks to act on a specific activity (e.g. "claim Agentic Trading Contest"), the MCP tools competition_claim / competition_join accept activity_name and resolve the id server-side, so you can also use names directly without doing your own lookup.
Render every fixed template in the user's conversation language. The template structure (sections, ordering, numbered items, table column count, placeholder positions, the {supportedChains} placeholder, and the [Disclaimer: ...] block) is fixed and must NOT change. Only the natural-language text inside is translated to the user's language naturally.
Placeholders are never translated. {supportedChains}, {chainName}, {rewardUnit}, {txHash}, {accountName}, etc. are filled with API values verbatim — do not localize them. Chain display names (e.g. Solana, X Layer, Base) come from the canonical id → name mapping and stay as-is in every language.
Final check before sending — covers the reference-file MUSTs that are easy to skip after a long response. (Rules already covered in earlier sections — internal IDs, participateChainIds, *Formatted, language/template fidelity — are not repeated here; verify them by following the rules at their home sections.)
[Disclaimer: Digital asset trading involves risk. ...] line is present on its own line at the end. (→ participation.md → Successful registration)claim.md → Fixed failure-suggestion block)competition_claim → the pre-claim preview line (You are about to claim {rewardAmount} {rewardUnit} on {chainName}. Reply "confirm" to proceed.) was rendered and the user replied with an explicit confirmation. (→ claim.md → Pre-claim preview)© internet-court, 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 6 other files (references) in vendored/okx/okx-growth-competition of internet-court/internet-court-skill.
Open the folder on GitHubat commit fa89195
We found 4 copies of this SKILL.md (exact, near-identical or edited) in other folders, from 2 other GitHub owners. This page covers the copy in internet-court/internet-court-skill, which our catalogue first saw on October 7, 2026.
Okx Growth Competition 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 |
|---|---|---|---|---|---|---|
| Okx Growth Competition this skillinternet-court/internet-court-skill | 6.6k | 2 repos | ~3k | Automated safety check: Pass | MIT | |
| Social Media IntelligenceHKUDS/Vibe-Trading | 35k | — | ~10k | Automated safety check: Notes | MIT | |
| Signalsalsk1992/CloddsBot | 3k | — | ~720 | Automated safety check: Pass | MIT | |
| Media WritershareAI-lab/lab-skills | 315 | — | ~870 | Automated safety check: Pass | Apache-2.0 | |
| Claude To Imop7418/Claude-to-IM-skill | 2.9k | — | ~3.4k | Automated safety check: Notes | MIT | |
| Tradingview MCPatilaahmettaner/tradingview-mcp | 5k | — | ~1.3k | Automated safety check: Pass | MIT |
HKUDS/Vibe-Trading
Social media intelligence: financial signal extraction from Twitter/X, Telegram, Discord, and Reddit for sentiment-driven trading strategies.
alsk1992/CloddsBot
Signal trading - RSS, Twitter, Telegram triggers to trades. An agent skill from alsk1992/CloddsBot.
shareAI-lab/lab-skills
Create platform-native content that resonates with each community's culture.
op7418/Claude-to-IM-skill
Bridge THIS Claude Code or Codex session to Telegram, Discord, Feishu/Lark, QQ, or WeChat so the user can chat with Claude from their phone.
atilaahmettaner/tradingview-mcp
AI Trading Intelligence — live prices, 30+ technical indicators, backtesting (6 strategies), walk-forward overfitting detection, trade logs, equity curves, licensed news sentiment (Marketaux), and…
mcncarl/yichen-skills
Create, inspect, repair, and polish a second WeChat app on macOS by copying WeChat, changing the bundle identifier, ad-hoc re-signing, preparing it for the user to open manually, setting Chinese…
internet-court/internet-court-skill
Uploads one Kleros-related file per paid request to IPFS through the Kleros x402 gateway for 0.01 USDC on Base, returning a CID that Kleros contracts can reference.
internet-court/internet-court-skill
Guides building on the 0G Compute Network, a decentralized GPU marketplace for AI inference and fine-tuning, with SDK patterns and CLI commands.
internet-court/internet-court-skill
Creates, trades and settles permissionless prediction markets on Solana with any SPL token as collateral, including social-media and custom-oracle markets.
internet-court/internet-court-skill
Connects an agent to the BNB Chain MCP server to read blocks and contracts, move tokens and NFTs, register ERC-8004 agents and use Greenfield storage.
internet-court/internet-court-skill
Specifies how a GenLayer Intelligent Contract decision about an agent's performance becomes an ERC-7710 revocation or policy change, through a relayer or bridge and an EVM controller.
internet-court/internet-court-skill
Specifies how a GenLayer Intelligent Contract should supervise an AI agent, with review rubrics, evidence schemas and continue, warn, constrain or revoke decisions.
Works with
List OKX Agentic Wallet exclusive trading competitions, register users for contests, track participation and leaderboard rankings, and claim won rewards. Okx Growth Competition is an agent skill from internet-court/internet-court-skill. List OKX Agentic Wallet exclusive trading competitions, register users for contests, track participation and leaderboard rankings, and claim won rewards.
Okx Growth Competition fits situations like: users want to list available trading competitions; view competition rules / prize pool / total prizes; check the leaderboard (who is winning); their own rank (am I in the prize zone.
Run `npx skills add internet-court/internet-court-skill --skill okx-growth-competition -a claude-code`. Or copy the skill folder (vendored/okx/okx-growth-competition in internet-court/internet-court-skill) into .claude/skills/okx-growth-competition in your project. Claude Code loads it when a task matches its description.
Run `npx skills add internet-court/internet-court-skill --skill okx-growth-competition -a codex`. Or copy the skill folder (vendored/okx/okx-growth-competition in internet-court/internet-court-skill) into .agents/skills/okx-growth-competition 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 internet-court/internet-court-skill --skill okx-growth-competition -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/okx-growth-competition, .gemini/skills/okx-growth-competition, .github/skills/okx-growth-competition and .opencode/skills/okx-growth-competition in your project.
SKILL.md names no scripts, command-line tools or credentials: Okx Growth Competition is instructions for the agent only.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. 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.
Okx Growth Competition is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
About 3k tokens (SKILL.md is roughly 12k 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 11k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Okx Growth Competition: Social Media Intelligence (HKUDS/Vibe-Trading, 35k stars), Signals (alsk1992/CloddsBot, 3k stars), Media Writer (shareAI-lab/lab-skills, 315 stars) and Claude To Im (op7418/Claude-to-IM-skill, 2.9k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
internet-court (a GitHub organization) maintains it in internet-court/internet-court-skill, which has 6,551 GitHub stars. The repository holds 80 skills in this directory. The repository was last updated on August 19, 2026.
Source: internet-court/internet-court-skill on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.