with one click
tools
// Repository-wide tooling including init wrapper, pack/publish utilities, and all helper scripts. Links to tools-special and tools-templates for subfolder details.
// Repository-wide tooling including init wrapper, pack/publish utilities, and all helper scripts. Links to tools-special and tools-templates for subfolder details.
Content conventions, examples, and tooling for course notes under special/academia.
Ingest Wikipedia HTML, normalize links/media, and archive to knowledge base.
Regenerate programmatically-generated content blocks in knowledge base notes using pytextgen.
Help the user add spaced-repetition flashcards (cloze deletions or Q/A pairs) to existing Markdown notes across the repository. The skill encapsulates the multi‑step process the user follows in their finance lecture notes (e.g. FINA 3103) and elsewhere: read the prose, identify key terms, dates, formulas and logical assertions, and wrap them using flashcard markup (`{@{ }@}`, `::@::`, `:@:`). There are three supported forms: - **Cloze** (`{@{ }@}`) hides arbitrary text inside paragraphs. - **Two-sided QA** (`::@::`) on a single line, yielding two cards. - **One-sided QA** (`:@:`) on a single line, yielding a single card. For the QA formats remember the line-only rule; if visual separation is needed insert `<br/>`/`<p>` instead of newline characters. Representative examples later in this document illustrate all three types. Use existing flashcard files as style guides and adapt the output based on user feedback. The skill also suggests regeneration commands once flashcards are inserted.
Archive online content into archives/ with automatic index.md updates via pyarchivist tool.
| name | tools |
| description | Repository-wide tooling including init wrapper, pack/publish utilities, and all helper scripts. Links to tools-special and tools-templates for subfolder details. |
Continuous improvement: see
continuous_improvement.mdin this folder for notes on tool behaviour, past feedback, and update procedures.
Use this skill when working with repository-wide tools, understanding tool architecture, or coordinating workflows across multiple tool categories.
The scripts/ directory contains all helper scripts and utilities:
init.py: Async wrapper for pytextgen with mtime/inode caching
.md files (excludes .git, .obsidian, tools)(mtime, inode, text) to skip unchanged files\n before pytextgen processing-C, --no-code-cache, --init-flashcards)uv run -m init generate, uv run -m init clearconvert_wiki.py: Wikipedia HTML → Markdown converter
%20 encoding)archives/Wikimedia Commons/convert_wiki.filename_rename_map.jsonc for filename renamesuv run -m convert_wikipack.py: PageRank-ordered zip bundling
uv run -m pack -o pack.zip -n 25 --damping-factor 0.5 --page-rank-iterations 100 <paths>publish.py: Private → public history mirroring via git filter-repo
private/.git temporarilygit filter-repo with property Private-commit filtering.gituv run -m publish --paths-file <file> (with literal:<path> lines)scripts/special/: Academic LMS converters and course management (see tools-special skill)
scripts/templates/: Note scaffolding and pytextgen templates (see tools-templates skill)
new_wiki_page.pypytextgen generate *.md templatesuv run -m templates.new_wiki_page (tools-templates)uv run -m convert_wiki (convert_wiki.py)uv run -m init generate.
Build workflows will handle it.uv run -m scripts.special.convert_canvas_submission (tools-special)special/academia/<Institution>/index.mduv run -m init generate) is not required.uv run -m pack -o bundle.zip -n 50 <paths> (pack.py)uv run -m publish --paths-file paths.txt (publish.py)archives/*/index.md updated%20 encodingUse pyproject.toml as the canonical source of Python dependencies:
[project].dependencies: shared runtime dependencies[dependency-groups].dev: developer and test tooling[dependency-groups].scripts: the full union of packages referenced by
inline # /// script metadata, even when a package also appears in
[project].dependenciesFor inline # /// script metadata, keep keys alphabetized
(dependencies, requires-python, timestamp) and set
requires-python = ">=3.13.0".
Install/update dependencies with bun install or uv sync.
publish.pyThe repository occasionally contains small helper scripts used internally by the
AI agent (for example, .github/scripts/validate-skills.py). These are
not meant to be installed as CI tools, exposed to users, or added to
package.json or the primary runtime dependency groups.
.github/scripts/ directory and are not executed in production workflows.self/stash/**: Parent-repo scratch scripts rather than a git submoduleprivate/**: Private content submodule(mtime, inode) for all .md files(mtime, inode)\n before passing to pytextgen-C / --no-cached to rebuild cacheCache location: In-memory (not persisted to disk)
__pycache__/--no-code-cache to bypassrm -rf __pycache__/ if staleprivate/.git to temporary directorygit filter-repo --path-rename based on --paths-filePrivate-commit property.gitCritical: Core tools have established interfaces; preserve:
If changes are needed, ask user for permission first.
uv run -m init generate -C is rarely needed and agents should not perform it.private/ content is properly filtered before publish.py--dry-run or preview modes when availableconvert_wiki runs)pack.py for large graphs--exclude-extension in pack.py to skip large assetspytextgen, pyarchivist), ask user for permission-C / --no-cached if init.py skips changed filespyproject.toml dependencies are synced via bun install or uv syncgit submodule update --remote%20 encoding for spaces in linksWhen editing Python helper scripts in scripts/:
uv run -m init generate/clear, uv run -m pack, uv run -m publish, and other tool entrypointsanyio.Path and anyio.Semaphore, but prefer importing helpers from Asyncer (e.g. from asyncer import create_task_group, soonify, asyncify) for better typing and editor support. The init wrapper has been refactored accordingly and includes its own thin _gather.private/** is a git submodule; ask user before editing.\n; do not bypass its exclusion list (.git, .obsidian, scripts)# /// script metadata: (1) ensure the file begins with #!/usr/bin/env python shebang on line 1, (2) update the metadata together with [dependency-groups].scripts, (3) keep metadata keys alphabetized, and (4) retain requires-python = ">=3.13.0".