Counterparty Channel Discipline
affaan-m/ECC
Per-channel strict prompts, mention gating, silent observation, and a communication autonomy policy for agents that sit in shared channels with external counterparties.
Screen a client, counterparty, payer or corporate against the sanctions lists published by the designating authorities themselves — the UK Sanctions List (FCDO), OFSI, the UN Security Council, the…
$ npx skills add lawve-ai/awesome-legal-skills --skill sanctions-screening -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install lawve-ai/awesome-legal-skills sanctions-screening --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/lawve-ai/awesome-legal-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/sanctions-screening-matei-clej .claude/skills/sanctions-screening && 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 "sanctions-screening" agent skill from https://github.com/lawve-ai/awesome-legal-skills/tree/main/skills/sanctions-screening-matei-clej into .claude/skills/sanctions-screening/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "sanctions-screening", 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/lawve-ai/awesome-legal-skills/tree/main/skills/sanctions-screening-matei-clejType 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 lawve-ai/awesome-legal-skills --skill sanctions-screening -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install lawve-ai/awesome-legal-skills sanctions-screening --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/lawve-ai/awesome-legal-skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/sanctions-screening-matei-clej .agents/skills/sanctions-screening && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "sanctions-screening" agent skill from https://github.com/lawve-ai/awesome-legal-skills/tree/main/skills/sanctions-screening-matei-clej into .agents/skills/sanctions-screening/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "sanctions-screening", 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 lawve-ai/awesome-legal-skills --skill sanctions-screening -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install lawve-ai/awesome-legal-skills sanctions-screening --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/lawve-ai/awesome-legal-skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/sanctions-screening-matei-clej .cursor/skills/sanctions-screening && 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 "sanctions-screening" agent skill from https://github.com/lawve-ai/awesome-legal-skills/tree/main/skills/sanctions-screening-matei-clej into .cursor/skills/sanctions-screening/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "sanctions-screening", 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/lawve-ai/awesome-legal-skills.git --path skills/sanctions-screening-matei-clej--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 lawve-ai/awesome-legal-skills --skill sanctions-screening -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install lawve-ai/awesome-legal-skills sanctions-screening --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/lawve-ai/awesome-legal-skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/sanctions-screening-matei-clej .gemini/skills/sanctions-screening && 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 "sanctions-screening" agent skill from https://github.com/lawve-ai/awesome-legal-skills/tree/main/skills/sanctions-screening-matei-clej into .gemini/skills/sanctions-screening/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "sanctions-screening", 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 lawve-ai/awesome-legal-skills sanctions-screeningInstalls 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 lawve-ai/awesome-legal-skills --skill sanctions-screening -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/lawve-ai/awesome-legal-skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/sanctions-screening-matei-clej .github/skills/sanctions-screening && 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 "sanctions-screening" agent skill from https://github.com/lawve-ai/awesome-legal-skills/tree/main/skills/sanctions-screening-matei-clej into .github/skills/sanctions-screening/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "sanctions-screening", 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 lawve-ai/awesome-legal-skills --skill sanctions-screening -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install lawve-ai/awesome-legal-skills sanctions-screening --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/lawve-ai/awesome-legal-skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/sanctions-screening-matei-clej .opencode/skills/sanctions-screening && 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 "sanctions-screening" agent skill from https://github.com/lawve-ai/awesome-legal-skills/tree/main/skills/sanctions-screening-matei-clej into .opencode/skills/sanctions-screening/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "sanctions-screening", 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.
sanctions-screeningScreen a client, counterparty, payer or corporate against the sanctions lists published by the designating authorities themselves — the UK Sanctions List (FCDO), OFSI, the UN Security Council, the…
Sanctions Screening is an agent skill from lawve-ai/awesome-legal-skills. Screen a client, counterparty, payer or corporate against the sanctions lists published by the designating authorities themselves — the UK Sanctions List (FCDO), OFSI, the UN Security Council, the EU consolidated list and OFAC's SDN and non-SDN lists. Use when onboarding, before taking a payment, before completing a transaction, or whenever a name must be checked against sanctions. Produces candidates and provenance, never a clearance: the record names every list searched with its publication date and count…
Its SKILL.md is about 3.3k tokens, which your agent loads only when the skill is triggered. The skill folder holds 16 other files (for example `README.md`, `TESTING.md` and `matching.py`).
The repository describes itself as: A curated list of awesome Agent Skills for automating legal work. The licence is MIT.
7 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 045f738. 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.
Ships script files (Python), which the agent can run.
Shell commands in SKILL.md call:
python3From 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.
Sanctions Screening loads about 3.3k tokens when it runs. Until then it costs about 240 tokens; SKILL.md has 1,668 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 lawve-ai/awesome-legal-skills at commit 045f738, republished under its MIT licence (© lawve-ai). 1,668 words, ~3,278 tokens.
.claude/skills/sanctions-screening/SKILL.md (or your agent's skills folder). This skill also uses 14 other files; get the full folder from GitHub.Three Python files, standard library only. No install step, no API key, no account, and no third-party screening vendor in the path — so there is no per-search cost and no reason to leave anybody unscreened.
The tool produces candidates and provenance. It never clears anybody. The comparison of a candidate against what is actually known of the subject, the decision that follows, and the record of that decision belong to the fee earner.
python3 screen.py refresh # fetch + parse the default six lists (~30s)
python3 screen.py status # freshness, designation counts, failures
python3 screen.py sources # the registry, coverage and licences
python3 screen.py check "Ivan Petrov" --dob 1975-03-02 --nationality Russia
python3 screen.py check "Acme Trading LLC" --type entity --threshold 80
python3 screen.py check "Ramzan Kadyrov" --dob 05/10/1976 \
--client MATTER-2026-0099 --matter "immigration advice" \
--report ./screening/kadyrov-2026-09-01.md
python3 screen.py batch subjects.csv --report-dir ./screening/ # name,dob,nationality,type,client,matterExit codes: 0 complete search and nothing found, 2 candidates, 3 the search
cannot be relied on, 4 the request was refused.
Switches: --source uk-sanctions-list,ofsi (restrict, or reach the non-default
lists), --threshold (default 88 — see below), --include-delisted, --max-age-hours
(default 24), --strict, --json, --verbose.
The default threshold is set from measurement. Recall is identical at every cut-off from 85 to 92 (99.7%) while false positives fall from 20% to 2%, and no true match scored between 85 and 92. Lower it to 82 to catch a query as thin as an initial plus one name, at a 40% false-positive rate; raise it to 92 for a first pass over a large book of clients.
Requires Python 3.11 or later (3.9 parses but is not tested). Nothing else. The cache lives in
~/.claude/sanctions-data (override with SANCTIONS_DATA) and is about 100 MB
for the eight government lists; a run holds roughly 230 MB in memory while
scanning.
Every route out of this tool — text, JSON, a written record, a batch summary, an exit code — is rendered from one Outcome object, and an Outcome knows whether the search was complete. There is no path that reports "nothing found" without also carrying whether anything was actually searched.
A search is complete only if the request was valid and every list asked for was read in full, matched the digest recorded when it was fetched, and is current. Anything else is incomplete, and an incomplete search never exits 0.
| Exit | Meaning |
|---|---|
| 0 | Complete search, no candidate at or above the threshold |
| 2 | Candidates to consider |
| 3 | The search cannot be relied on — a list was missing, damaged, altered, short, stale or never fetched |
| 4 | The request itself was refused — an unusable option, a name with nothing searchable in it, a CSV with no name column |
The cache is bound to its metadata by digest and parser version, so a list that
has been altered, truncated or parsed by a different version of this code is
refused rather than searched. Upgrading the tool therefore requires a
refresh — that is the gate working, not a fault.
| id | List | Authority | Default |
|---|---|---|---|
uk-sanctions-list | UK Sanctions List | FCDO | ✓ |
ofsi | Consolidated List of Financial Sanctions Targets | HM Treasury / OFSI | ✓ |
un | Security Council Consolidated List | United Nations | ✓ |
eu | Consolidated financial sanctions list | European Commission | ✓ |
ofac-sdn | Specially Designated Nationals | US Treasury / OFAC | ✓ |
ofac-cons | Consolidated non-SDN (SSI, FSE, NS-PLC, CAPTA) | US Treasury / OFAC | ✓ |
canada | SEMA / JVCFOA consolidated list | Global Affairs Canada | |
swiss | SECO sanctions list | Swiss Confederation | |
opensanctions-sanctions | ~90 sources, deduplicated | OpenSanctions (aggregator) | |
opensanctions-peps | Politically exposed persons | OpenSanctions (aggregator) |
The UK Sanctions List and the OFSI list are not the same thing and neither subsumes the other: the FCDO list is the legal list and carries every measure imposed (travel ban, arms, trade, transport, director disqualification), while the OFSI list carries the financial-sanctions targets and the asset-freeze detail. Both are searched by default.
The OpenSanctions datasets are CC BY-NC 4.0. Screening fee-earning client
work is commercial use. Those two sources refuse to refresh until
SANCTIONS_OPENSANCTIONS_LICENCE is set — set it to noncommercial for
genuinely non-commercial work, or to your commercial licence reference once one
is held. They are also the only PEP source here.
Per-source detail, quirks and failure modes: reference/sources.md.
Verified against the in-force text on legislation.gov.uk on 02.09.2026. This is a UK-facing tool; practitioners elsewhere should read the equivalents.
The prohibitions reach the work, whoever the client is. UK regimes are made under the Sanctions and Anti-Money Laundering Act 2018 s.1, and s.21(1) sets their reach: prohibitions may be imposed in relation to conduct in the United Kingdom or its territorial sea by any person, and to conduct elsewhere only where it is by a United Kingdom person — s.21(2)-(3): a UK national (a British citizen, British overseas territories citizen, British National (Overseas) or British Overseas citizen, a British subject under the British Nationality Act 1981, or a British protected person), or a body incorporated or constituted under the law of any part of the UK. Read the two limbs separately. Limb (a) catches everything done in this jurisdiction whoever does it, so it reaches work carried out here regardless of counsel's nationality. Limb (b) reaches conduct abroad only if the actor is a United Kingdom person: practising here does not by itself make a foreign national one, though a UK-incorporated entity is one whatever the nationality of those behind it. Dealing with a designated person's funds, or making funds or economic resources available to or for the benefit of one, is prohibited by the regime regulations themselves. There is no client-type threshold and no de minimis, so this catches a fee taken from a third-party payer as readily as a corporate retainer.
Much litigation practice sits outside the MLR customer due diligence duty. An "independent legal professional" is defined in reg 12(1) of the Money Laundering Regulations 2017 (SI 2017/692) by reference to participation in financial or real property transactions — buying and selling property or business entities, managing client money or assets, opening or managing accounts, organising company contributions, and creating or managing trusts and companies. The test is what the retainer involves, not what the practice area is called: ordinary criminal, extradition and immigration advocacy will not usually engage that limb, but a matter that turns on any of those transactions does, whatever it is filed under. Where it is engaged, reg 33(1)(d) and reg 35 make PEP status an enhanced due diligence trigger (a trigger, never a prohibition), and reg 40(2)(a) with reg 40(3) require the CDD material to be kept for five years — running from the end of the business relationship for a relationship (reg 40(3)(b)), but from completion of the transaction for an occasional transaction (reg 40(3)(a)), which is the limb a one-off retainer falls into. Reg 40(4) caps relationship records at ten years, and reg 40(5) requires the personal data to be deleted once the period expires unless another duty or a legal-proceedings ground keeps it. Retention is a duty in both directions: keeping a screening record indefinitely is its own breach.
The reporting duty is wider than the CDD duty, and does reach a legal practice. Under the Russia (Sanctions) (EU Exit) Regulations 2019 (SI 2019/855), reg 71(1)(d)(ii) makes a firm or sole practitioner providing "legal or notarial services" by way of business a relevant firm — with no transaction limb — and reg 70(1) requires a relevant firm to inform the Treasury as soon as practicable where it knows or has reasonable cause to suspect that a person is a designated person or has breached a prohibition, and the knowledge or suspicion came to it in the course of its business. Verified for the Russia regime; other regimes follow the same drafting, but the regime in play must be checked rather than assumed.
Ownership and control are not screened by any name search. Under reg 7 of SI 2019/855 a non-individual is owned or controlled by a designated person where that person holds, directly or indirectly, more than 50% of the shares or voting rights, or the right to appoint or remove a majority of the board — or, on the second limb, where it is reasonable to expect that they could achieve the result that the company's affairs are conducted in accordance with their wishes. An unlisted company can therefore be caught by a listed shareholder. That has to be worked out from the ownership structure; no list holds it.
Screening is entirely local. refresh contacts the eight publishing authorities
listed above and nothing else; check and batch open no socket at all, which
is asserted by a test that replaces the socket layer with something that raises.
The name of a client is never sent anywhere. Screening records are written only
where you point them.
python3 tests/test_screen.py # 130 matching, dates, the gate, parser output
python3 tests/integrity.py # 186 field mapping, refresh, tampering, licence gate
python3 tests/adversarial.py # 374 hostile input, cache damage, injection, privacy
python3 tests/release_gate.py # every published name retrieves its designation — run before a tag
python3 tests/benchmark.py # recall and precision against the lists
python3 tests/prefilter_safety.py # measures whether the speed filter costs recall
python3 tests/threshold_sweep.py # where the default threshold belongs© lawve-ai, 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 14 other files in skills/sanctions-screening-matei-clej of lawve-ai/awesome-legal-skills.
Open the folder on GitHubat commit 045f738
Sanctions Screening 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 |
|---|---|---|---|---|---|---|
| Sanctions Screening this skilllawve-ai/awesome-legal-skills | 847 | — | ~3.3k | Automated safety check: Pass | MIT | |
| Counterparty Channel Disciplineaffaan-m/ECC | 277k | — | ~2.3k | Automated safety check: Pass | MIT | |
| Screen Adverse Mediasickn33/agentic-awesome-skills | 47k | 1 repos | ~1.1k | Automated safety check: Pass | Apache-2.0 | |
| Bio Crispr Screens Screen QcFreedomIntelligence/OpenClaw-Medical-Skills | 3.1k | — | ~2.1k | Automated safety check: Pass | None | |
| Screen Recordinggithub/awesome-copilot | 40k | — | ~2k | Automated safety check: Pass | MIT | |
| macOS Screen Recordersickn33/agentic-awesome-skills | 47k | 1 repos | ~727 | Automated safety check: Pass | MIT |
affaan-m/ECC
Per-channel strict prompts, mention gating, silent observation, and a communication autonomy policy for agents that sit in shared channels with external counterparties.
sickn33/agentic-awesome-skills
Screen a person or organisation for adverse media coverage, PEP status, and sanctions exposure — corroboration-gated, returns "review" never "guilty".
FreedomIntelligence/OpenClaw-Medical-Skills
Quality control for pooled CRISPR screens. An agent skill from FreedomIntelligence/OpenClaw-Medical-Skills.
github/awesome-copilot
Create annotated animated GIF demos and screen recordings for pull requests and documentation.
sickn33/agentic-awesome-skills
macOS screen recorder that captures the main display PLUS system audio via ScreenCaptureKit — no BlackHole/loopback driver, no sudo, just the standard Screen Recording permission.
calesthio/OpenMontage
Synthetic terminal-style screen recording guidance for Remotion TerminalScene.
lawve-ai/awesome-legal-skills
U.S. An agent skill from lawve-ai/awesome-legal-skills.
lawve-ai/awesome-legal-skills
Practitioner skill for advising on EU Regulation 2023/2854 (Data Act).
lawve-ai/awesome-legal-skills
Calendar litigation and arbitration deadlines from a scheduling order.
lawve-ai/awesome-legal-skills
Read, search, and download emails and attachments from Microsoft Outlook via OAuth2.
lawve-ai/awesome-legal-skills
Turn an interpretive-ambiguity audit of a legal text — contract, statute, regulation, or judicial opinion — into a polished deliverable.
lawve-ai/awesome-legal-skills
Audits a website for compliance with Azerbaijan's Law on Personal Data No.
Screen a client, counterparty, payer or corporate against the sanctions lists published by the designating authorities themselves — the UK Sanctions List (FCDO), OFSI, the UN Security Council, the…. Sanctions Screening is an agent skill from lawve-ai/awesome-legal-skills. Screen a client, counterparty, payer or corporate against the sanctions lists published by the designating authorities themselves — the UK Sanctions List (FCDO), OFSI, the UN Security Council, the EU consolidated list and OFAC's SDN and non-SDN lists.
Sanctions Screening fits situations like: before taking a payment; before completing a transaction; whenever a name must be checked against sanctions.
Run `npx skills add lawve-ai/awesome-legal-skills --skill sanctions-screening -a claude-code`. Or copy the skill folder (skills/sanctions-screening-matei-clej in lawve-ai/awesome-legal-skills) into .claude/skills/sanctions-screening in your project. Claude Code loads it when a task matches its description.
Run `npx skills add lawve-ai/awesome-legal-skills --skill sanctions-screening -a codex`. Or copy the skill folder (skills/sanctions-screening-matei-clej in lawve-ai/awesome-legal-skills) into .agents/skills/sanctions-screening 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 lawve-ai/awesome-legal-skills --skill sanctions-screening -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/sanctions-screening, .gemini/skills/sanctions-screening, .github/skills/sanctions-screening and .opencode/skills/sanctions-screening in your project.
Going by SKILL.md and its folder, Sanctions Screening needs Python for the scripts in its folder and the command-line tools its instructions call (python3). Our summary lists: Python 3.
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.
Sanctions Screening is published under the MIT licence (from the LICENSE file in the skill folder). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.3k tokens (SKILL.md is roughly 13k 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 Sanctions Screening: Counterparty Channel Discipline (affaan-m/ECC, 277k stars), Screen Adverse Media (sickn33/agentic-awesome-skills, 47k stars), Bio Crispr Screens Screen Qc (FreedomIntelligence/OpenClaw-Medical-Skills, 3.1k stars) and Screen Recording (github/awesome-copilot, 40k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
lawve-ai (a GitHub organization) maintains it in lawve-ai/awesome-legal-skills, which has 847 GitHub stars. The repository holds 154 skills in this directory. The repository was last updated on October 2, 2026.
Source: lawve-ai/awesome-legal-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.