get-fsa-training-done
One agent skill, and the CLI behind it, for getting FSA training done: designing a programme, writing its teaching material, and designing and grading its assessments. It installs into Claude Code and the Codex CLI.
The landing page shows
how it works, in real files; its source is in docs/.
The skill has three features, each with its own CLI namespace:
| Namespace | What it does | Docs |
|---|---|---|
program |
design a training programme and export its workbooks | README |
material |
write lecture notes, handbooks, lab guides and worksheets | README |
assessment |
design and grade quizzes, assignments, exams and capstones | README |
They divide one job. A programme's session plan names, in its
Training Materials column, the file that serves each session — so program
declares that a slot exists and what it weighs, material writes the lecture
note or lab guide, and assessment writes the quiz, brief or exam. No feature
authors another's artifact, and each checks its own half of that manifest.
The skill is built from tasks — one step each, such as writing a rubric, rendering a brief, or merging a retake — composed into workflows. Ask for a whole job and the agent follows the workflow; ask for one step and it runs that task on its own.
The skill is stateless. It assumes nothing about the directory layout it was installed into and never scans a project on a hunch — it asks for its inputs first, echoes back the resolved paths, and waits for a go-ahead.
Install
pip install get-fsa-training-done
This gives you the gftd command, which every example below uses; it is also
installed under its full name, get-fsa-training-done.
It needs Python 3.12+.
Then install the skill into your agent:
gftd install --platform all
| Command | Effect |
|---|---|
gftd install --platform claude --scope user |
~/.claude/skills/get-fsa-training-done |
gftd install --platform claude --scope project |
./.claude/skills/get-fsa-training-done |
gftd install --platform codex --scope user |
~/.codex/skills/get-fsa-training-done |
gftd install --platform codex --scope project |
./.codex/skills/get-fsa-training-done |
gftd update |
upgrade in place, preserving files you edited |
gftd uninstall --platform all |
remove exactly what was installed |
gftd status |
what is installed where, and whether it drifted |
gftd doctor |
check this machine for the skill's prerequisites |
Add --dry-run to any of install, update, or uninstall to see the exact
file-by-file plan without touching anything.
Dependencies
Installing the package pulls nothing: dependencies = [] is deliberate, so the
lifecycle commands run on a bare interpreter. The libraries the worker commands
need live in the managed virtualenv instead — declared once in
src/get_fsa_training_done/lifecycle/envmgr/requirements/core.txt:
| Library | Used by |
|---|---|
xhtml2pdf |
assessment render, for the brief PDF |
py7zr |
assessment grade preprocess, for .7z submissions |
gftd install builds that environment, so the first install
needs a network and everything after it does not — which is the property that
matters on an exam machine.
Two external tools are optional, and doctor reports each without failing for
its absence:
- A
.rarextractor (unar,7zorbsdtar)..raris proprietary and has no pure-Python reader; every other archive format is read in-process. - Docker, for
assessment sandbox: running a seed script, a JUnit suite or a pytest run that is not ours — an exam's supplied files, or a submission — in a disposable container with no network.
Rendering embeds its own fonts (see
core/fonts/), so a
Vietnamese brief comes out identical on every machine.
Layout
src/get_fsa_training_done/
cli.py skill.py the CLI, and the one skill it installs
lifecycle/ install, update, uninstall, status, doctor, env
features/ program, material, assessment (+ common)
payload/get-fsa-training-done/
SKILL.md the router: workflows and tasks per feature
references/<feature>/ overview, tasks/, workflows/, generated references
references/common/ writing style, Vietnamese conventions, shared tasks
Development
pip install -e .
pytest
ruff check . && ruff format --check .
python scripts/sync_version.py --check
for generator in scripts/*/gen_*.py; do python "$generator" --check; done
src/get_fsa_training_done/__about__.py holds the canonical version;
sync_version.py propagates it to the payload's VERSION.
Licence
MIT
Metadata
Release files for get-fsa-training-done 1.0.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| get_fsa_training_done-1.0.1.tar.gz | 1.2 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| get_fsa_training_done-1.0.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 2.5 MB
Release files / get_fsa_training_done-1.0.1.tar.gz
| Download URL | get_fsa_training_done-1.0.1.tar.gz |
|---|---|
| Size | 1.2 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
56c6ac297f3bb49e1ffed3ff634ad0e0136f5019e157633ec144995ca5a1fc07
|
|
BLAKE2b-256 checksum How to use checksums |
1cadcbe01ff355d2c7ec6ceb1c0241c7608a0ef92df67ed4adf7bb51096d3cc5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 7, 2026.
Transparency logRelease files / get_fsa_training_done-1.0.1-py3-none-any.whl
| Download URL | get_fsa_training_done-1.0.1-py3-none-any.whl |
|---|---|
| Size | 1.2 MB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
445733eec36d06dd0d467523b5f3e48037f015124683275a9dacd7f3f31ed461
|
|
BLAKE2b-256 checksum How to use checksums |
0b1994b230308b2ee622bf48deff0ddbc77e2e830bb1e29a06630b9d32cadb1b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 7, 2026.
Transparency log