Code Change Verification
openai/openai-agents-python
Run the required final formatting, lint, type, and test checks after eligible SDK changes pass review.
Converts AdvPL and TLPP source files from UTF-8 to Windows-1252 in place after code generation, because the Protheus compiler accepts only CP1252 files.
$ npx skills add totvs/engpro-advpl-tlpp-skills --skill utf8-to-cp1252-conversion -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install totvs/engpro-advpl-tlpp-skills utf8-to-cp1252-conversion --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/totvs/engpro-advpl-tlpp-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/advpl-tlpp/utf8-to-cp1252-conversion .claude/skills/utf8-to-cp1252-conversion && 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 "utf8-to-cp1252-conversion" agent skill from https://github.com/totvs/engpro-advpl-tlpp-skills/tree/main/skills/advpl-tlpp/utf8-to-cp1252-conversion into .claude/skills/utf8-to-cp1252-conversion/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "utf8-to-cp1252-conversion", 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/totvs/engpro-advpl-tlpp-skills/tree/main/skills/advpl-tlpp/utf8-to-cp1252-conversionType 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 totvs/engpro-advpl-tlpp-skills --skill utf8-to-cp1252-conversion -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install totvs/engpro-advpl-tlpp-skills utf8-to-cp1252-conversion --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/totvs/engpro-advpl-tlpp-skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/advpl-tlpp/utf8-to-cp1252-conversion .agents/skills/utf8-to-cp1252-conversion && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "utf8-to-cp1252-conversion" agent skill from https://github.com/totvs/engpro-advpl-tlpp-skills/tree/main/skills/advpl-tlpp/utf8-to-cp1252-conversion into .agents/skills/utf8-to-cp1252-conversion/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "utf8-to-cp1252-conversion", 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 totvs/engpro-advpl-tlpp-skills --skill utf8-to-cp1252-conversion -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install totvs/engpro-advpl-tlpp-skills utf8-to-cp1252-conversion --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/totvs/engpro-advpl-tlpp-skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/advpl-tlpp/utf8-to-cp1252-conversion .cursor/skills/utf8-to-cp1252-conversion && 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 "utf8-to-cp1252-conversion" agent skill from https://github.com/totvs/engpro-advpl-tlpp-skills/tree/main/skills/advpl-tlpp/utf8-to-cp1252-conversion into .cursor/skills/utf8-to-cp1252-conversion/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "utf8-to-cp1252-conversion", 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/totvs/engpro-advpl-tlpp-skills.git --path skills/advpl-tlpp/utf8-to-cp1252-conversion--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 totvs/engpro-advpl-tlpp-skills --skill utf8-to-cp1252-conversion -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install totvs/engpro-advpl-tlpp-skills utf8-to-cp1252-conversion --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/totvs/engpro-advpl-tlpp-skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/advpl-tlpp/utf8-to-cp1252-conversion .gemini/skills/utf8-to-cp1252-conversion && 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 "utf8-to-cp1252-conversion" agent skill from https://github.com/totvs/engpro-advpl-tlpp-skills/tree/main/skills/advpl-tlpp/utf8-to-cp1252-conversion into .gemini/skills/utf8-to-cp1252-conversion/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "utf8-to-cp1252-conversion", 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 totvs/engpro-advpl-tlpp-skills utf8-to-cp1252-conversionInstalls 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 totvs/engpro-advpl-tlpp-skills --skill utf8-to-cp1252-conversion -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/totvs/engpro-advpl-tlpp-skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/advpl-tlpp/utf8-to-cp1252-conversion .github/skills/utf8-to-cp1252-conversion && 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 "utf8-to-cp1252-conversion" agent skill from https://github.com/totvs/engpro-advpl-tlpp-skills/tree/main/skills/advpl-tlpp/utf8-to-cp1252-conversion into .github/skills/utf8-to-cp1252-conversion/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "utf8-to-cp1252-conversion", 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 totvs/engpro-advpl-tlpp-skills --skill utf8-to-cp1252-conversion -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install totvs/engpro-advpl-tlpp-skills utf8-to-cp1252-conversion --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/totvs/engpro-advpl-tlpp-skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/advpl-tlpp/utf8-to-cp1252-conversion .opencode/skills/utf8-to-cp1252-conversion && 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 "utf8-to-cp1252-conversion" agent skill from https://github.com/totvs/engpro-advpl-tlpp-skills/tree/main/skills/advpl-tlpp/utf8-to-cp1252-conversion into .opencode/skills/utf8-to-cp1252-conversion/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "utf8-to-cp1252-conversion", 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.
utf8-to-cp1252-conversionConverts AdvPL and TLPP source files from UTF-8 to Windows-1252 in place after code generation, because the Protheus compiler accepts only CP1252 files.
AI agents and modern editors write UTF-8, which causes compile errors and garbled characters when the Protheus compiler reads the files. The skill supplies two native scripts with no extra dependencies: a Bash script using `iconv` for Linux and macOS, and a Windows batch script, both with byte-order-mark detection and batch processing. It applies after any skill that creates or changes `.prw`, `.prg`, `.tlpp` or `.prx` files, including generators, migration and refactoring skills.
The agent rules are strict. It must always use the scripts and never convert by hand with Python or Node, and conversion happens in place so filename and extension stay the same. It must not create `.cp1252` files, backups or copies, or rename anything. Afterward it verifies the result with `file --mime-encoding` on Linux or macOS, expecting iso-8859-1 or unknown-8bit rather than utf-8, so that only the converted original remains.
7 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 3908e4e. 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 2 files in scripts/ (Batch and Shell), which the agent can run.
Shell commands in SKILL.md call:
bashFrom the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
tdn.totvs.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.
AdvPL UTF-8 to CP1252 Converter loads about 2.6k tokens when it runs. Until then it costs about 127 tokens; SKILL.md has 982 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); the scripts in this folder are not scanned.
The full file from totvs/engpro-advpl-tlpp-skills at commit 3908e4e, republished under its MIT licence (© totvs). 982 words, ~2,578 tokens.
.claude/skills/utf8-to-cp1252-conversion/SKILL.md (or your agent's skills folder). This skill also uses 2 other files; get the full folder from GitHub.These rules are MANDATORY. Any violation causes compilation failures and file corruption.
.tlpp file stays .tlpp, a .prw stays .prw..cp1252 extension — There is no such convention. Files keep their original extension (.prw, .prg, .tlpp, .prx, .ch, .th)..bak, .orig, .utf8, .old, or any other copy. Only the converted file must exist.file --mime-encoding <file> (Linux/macOS) to confirm the result is iso-8859-1 or unknown-8bit, NOT utf-8.Convert AdvPL and TLPP source files from UTF-8 encoding to Windows-1252 (CP1252). The Protheus compiler (AdvPL, AdvPL ASP, 4GL, and 4GLP) only supports files encoded in CP1252 (Windows code page 1252). AI agents and modern editors create files in UTF-8 by default, which causes compilation errors and corrupted characters (mojibake) when compiled by TDS/AppServer.
This skill provides two native scripts (zero external dependencies) that safely convert file encoding with BOM detection and batch processing support:
iconv → Linux and macOS (both pre-installed)Source: TDN Documentation — "Os compiladores Protheus (AdvPL, AdvPL Asp, 4GL e 4GLP) suportam apenas os arquivos com código de página CP1252." (Informações sobre a gravação de arquivos-fontes)
Use this skill when:
.prw, .prg, .tlpp, or .prx files (e.g., mvc-generator, tlpp-rest-endpoint-generator, entry-point-designer)advpl-to-tlpp-migrationrefactor, refactor-method-complexity-reduceDo NOT use when:
The TOTVS Protheus platform was designed around the Windows-1252 code page:
EncodeUTF8() and DecodeUTF8() explicitly expect CP1252 as the source/target encoding| Character | UTF-8 Bytes | CP1252 Byte | Issue |
|---|---|---|---|
é | 0xC3 0xA9 | 0xE9 | 2 bytes vs 1 byte |
ç | 0xC3 0xA7 | 0xE7 | Compiler reads wrong byte sequence |
ã | 0xC3 0xA3 | 0xE3 | String length mismatch at runtime |
ü | 0xC3 0xBC | 0xFC | Breaks Len(), SubStr(), etc. |
This skill includes two native scripts — use the one matching your operating system:
| OS | Script | Runtime | Dependencies |
|---|---|---|---|
| Linux / macOS | scripts/convert-encoding.sh | Bash + iconv | None (pre-installed) |
| Windows | scripts/convert-encoding.bat | CMD + PowerShell inline | None (pre-installed) |
Note: The
.batscript uses PowerShell inline via-Command(not.ps1files), so it works regardless of the PowerShell execution policy. It runs from CMD, double-click, or any terminal.
iconv (pre-installed on all distributions).bat scriptbash scripts/convert-encoding.sh path/to/source.tlppbash scripts/convert-encoding.sh file1.prw file2.prg file3.tlppbash scripts/convert-encoding.sh -r path/to/src/bash scripts/convert-encoding.sh --dry-run -r path/to/src/scripts\convert-encoding.bat path\to\source.tlppscripts\convert-encoding.bat file1.prw file2.prg file3.tlppscripts\convert-encoding.bat /r path\to\src\scripts\convert-encoding.bat /dryrun /r path\to\src\convert-encoding.sh)| Option | Description |
|---|---|
<files/dirs> | One or more file paths or directories to convert |
-r, --recursive | Recursively process directories for source files |
--dry-run | Only report which files would be converted, without modifying them |
-e, --extensions | Space-separated extensions to process (default: prw prg tlpp prx ch th) |
convert-encoding.bat)| Parameter | Description |
|---|---|
<files/dirs> | One or more file paths or directories to convert (positional) |
/r, --recursive | Recursively process directories for source files |
/dryrun, --dry-run | Only report which files would be converted, without modifying them |
iconv on Linux/macOS, CMD+PowerShell inline on WindowsAfter any code generation or migration skill creates AdvPL/TLPP source files, the encoding conversion must be performed as a final step. The workflow is:
1. Agent generates/modifies .prw/.prg/.tlpp/.prx files (UTF-8 — default encoding from AI)
2. Agent runs the conversion script on the generated files (IN-PLACE, same filename)
3. Agent verifies encoding with: file --mime-encoding <file>
4. RESULT: Only the original file exists, now encoded in CP1252 — NO extra filesFORBIDDEN: Creating new files with
.cp1252extension, creating backup copies, renaming files, or leaving any temporary artifacts. The script converts the file in-place — the same file, same name, same extension, different encoding.
# Linux/macOS:
bash skills/advpl-tlpp/utf8-to-cp1252-conversion/scripts/convert-encoding.sh \
src/MyModule.prw
# Windows (CMD):
scripts\convert-encoding.bat src\MyModule.prw# Linux/macOS:
bash skills/advpl-tlpp/utf8-to-cp1252-conversion/scripts/convert-encoding.sh -r migrated/
# Windows (CMD):
scripts\convert-encoding.bat /r migrated\After converting files, verify the encoding is correct:
file command (Linux/macOS)file --mime-encoding source.tlpp
# Expected: iso-8859-1 or unknown-8bit (CP1252 is a superset of ISO-8859-1)
# NOT expected: utf-8powershell -NoProfile -Command "$bytes=[IO.File]::ReadAllBytes('source.tlpp'); $u=[Text.UTF8Encoding]::new($false,$true); try{$u.GetString($bytes); Write-Host 'WARNING: File is still UTF-8'}catch{Write-Host 'OK: File is not UTF-8 (likely CP1252)'}"? after conversionSome Unicode characters don't have CP1252 equivalents (e.g., emoji, CJK characters). The script replaces them with ? and prints a warning. Review the source for non-Latin characters.
The script detects files that are already in CP1252 and skips them with an informational message. No action needed.
UTF-8 BOM (0xEF 0xBB 0xBF) is automatically stripped during conversion. The script logs this detection.
| Rule | Severity | Description |
|---|---|---|
| CA0000 | MAJOR | Compilation error — invalid syntax, wrong charset (must be Windows-1252), invalid block closure |
Files encoded in UTF-8 will trigger CA0000 when multi-byte characters are interpreted as invalid syntax by the CP1252-expecting compiler.
© totvs, 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 2 other files (scripts) in skills/advpl-tlpp/utf8-to-cp1252-conversion of totvs/engpro-advpl-tlpp-skills.
Open the folder on GitHubat commit 3908e4e
AdvPL UTF-8 to CP1252 Converter 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 |
|---|---|---|---|---|---|---|
| AdvPL UTF-8 to CP1252 Converter this skilltotvs/engpro-advpl-tlpp-skills | 143 | — | ~2.6k | Automated safety check: Pass | MIT | |
| Code Change Verificationopenai/openai-agents-python | 30k | — | ~1.4k | Automated safety check: Pass | MIT | |
| Gridbash Panesjasonsuhari/gridbash | 134 | — | ~1.5k | Automated safety check: Pass | MIT | |
| Cm Checkkingxiaozhe/cm-workflow | 104 | — | ~1.3k | Automated safety check: Pass | MIT | |
| Oh My PoshJanDeDobbeleer/oh-my-posh | 24k | — | ~319 | Automated safety check: Pass | MIT | |
| Tapd Iteration InitTencentBlueKing/bk-bcs | 840 | — | ~1.3k | Automated safety check: Pass | Custom licence |
openai/openai-agents-python
Run the required final formatting, lint, type, and test checks after eligible SDK changes pass review.
jasonsuhari/gridbash
Coordinate with sibling agent panes from inside a GridBash grid — list panes and their roles, read what a pane is currently doing, prompt one pane or every other pane, and rename pane titles so the…
kingxiaozhe/cm-workflow
用户说“检查工作流是否安装正确”“为什么找不到 cm 命令”时使用。默认查询 npm 稳定版,有新版自动升级已管理的 CM 安装,再检查插件、核心 Skills、兼容包装与模板引用;不测试或修改业务代码。
JanDeDobbeleer/oh-my-posh
Install, configure, or troubleshoot Oh My Posh/ohmyposh: shell init, themes, segments, Nerd Font icons, and prompt setup on PowerShell, zsh, bash, or fish.
TencentBlueKing/bk-bcs
迭代执行流水线启动器。分三个阶段执行:信息检查(验证 git 环境、获取迭代信息、 解析迭代分支)→ 恢复检测(已有状态文件时判定恢复策略)→ 新流程初始化(创建分支、 迭代目录和 iteration-state.json)。
aiskillstore/marketplace
Operating system and shell scripting troubleshooting workflow for Linux, macOS, and Windows.
totvs/engpro-advpl-tlpp-skills
Compiles AdvPL and TLPP sources from VS Code with the TOTVS Developer Studio extension, handling server setup, connection and compile result reporting.
totvs/engpro-advpl-tlpp-skills
Plans and builds Protheus AdvPL/TLPP features through Specify, Design, Tasks and Execute phases whose depth scales with the size of the change.
totvs/engpro-advpl-tlpp-skills
Reviews AdvPL and TLPP source against SonarQube rules, ProtheusDOC requirements, security, performance and Protheus conventions, and reports findings by severity.
totvs/engpro-advpl-tlpp-skills
Queries the TOTVS Protheus ERP data dictionary for tables, fields, indexes, parameters, triggers and lookups, including impact checks during refactoring.
totvs/engpro-advpl-tlpp-skills
Generates Protheus MVC screens in ADVPL/TLPP, with ModelDef, ViewDef, MenuDef and Browse functions for single-entity and master-detail layouts.
totvs/engpro-advpl-tlpp-skills
Build optimized and safe SQL queries for Protheus tables. An agent skill from totvs/engpro-advpl-tlpp-skills.
Categories
Converts AdvPL and TLPP source files from UTF-8 to Windows-1252 in place after code generation, because the Protheus compiler accepts only CP1252 files. AI agents and modern editors write UTF-8, which causes compile errors and garbled characters when the Protheus compiler reads the files. The skill supplies two native scripts with no extra dependencies: a Bash script using `iconv` for Linux and macOS, and a Windows batch script, both with byte-order-mark detection and batch processing.
AdvPL UTF-8 to CP1252 Converter fits situations like: right after an agent generates or edits a .prw or .tlpp file; fixing garbled accented characters when Protheus compiles a source file; converting a batch of AdvPL files to Windows-1252 before compilation.
Run `npx skills add totvs/engpro-advpl-tlpp-skills --skill utf8-to-cp1252-conversion -a claude-code`. Or copy the skill folder (skills/advpl-tlpp/utf8-to-cp1252-conversion in totvs/engpro-advpl-tlpp-skills) into .claude/skills/utf8-to-cp1252-conversion in your project. Claude Code loads it when a task matches its description.
Run `npx skills add totvs/engpro-advpl-tlpp-skills --skill utf8-to-cp1252-conversion -a codex`. Or copy the skill folder (skills/advpl-tlpp/utf8-to-cp1252-conversion in totvs/engpro-advpl-tlpp-skills) into .agents/skills/utf8-to-cp1252-conversion 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 totvs/engpro-advpl-tlpp-skills --skill utf8-to-cp1252-conversion -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/utf8-to-cp1252-conversion, .gemini/skills/utf8-to-cp1252-conversion, .github/skills/utf8-to-cp1252-conversion and .opencode/skills/utf8-to-cp1252-conversion in your project.
Going by SKILL.md and its folder, AdvPL UTF-8 to CP1252 Converter needs Windows cmd and a shell for the scripts in its folder and the command-line tools its instructions call (bash). Our summary lists: Bash with `iconv` on Linux or macOS, or PowerShell on Windows.
SKILL.md names 1 domain. As links in the text: tdn.totvs.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. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
AdvPL UTF-8 to CP1252 Converter is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.6k tokens (SKILL.md is roughly 10k 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 AdvPL UTF-8 to CP1252 Converter: Code Change Verification (openai/openai-agents-python, 30k stars), Gridbash Panes (jasonsuhari/gridbash, 134 stars), Cm Check (kingxiaozhe/cm-workflow, 104 stars) and Oh My Posh (JanDeDobbeleer/oh-my-posh, 24k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
totvs (a GitHub organization) maintains it in totvs/engpro-advpl-tlpp-skills, which has 143 GitHub stars. The repository holds 19 skills in this directory. The repository was last updated on October 5, 2026.
Source: totvs/engpro-advpl-tlpp-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.