Skip to main content

youparle

Local tooling for a YouParle language learning vault.

A student learns a language with an LLM agent that lives in a folder on their machine. This package is what that agent calls for everything it is not allowed to do by itself: publishing lessons and cards, rendering exercises, fetching media and what sources answer, showing the student a picture or a sound. There is no server and no account. No data leaves the machine, unless the student chooses a voice or a transcription that works over the network: the agent says so when it offers one.

The package also makes that folder. youparle init copies a template that ships inside the package, src/youparle/vault_template/: the agent's instructions and the Obsidian settings with the Spaced Repetition plugin. After that the folder belongs to the student. The one part the package rewrites is the youparle block at the top of AGENTS.md, which holds the agent's instructions; the student writes their own below it. The package recognises a vault by its contents alone: AGENTS.md and agent/ at the root.

Installing

The student's agent installs youparle. The student opens an empty folder in their harness and pastes the prompt in INSTALL.md. An agent that cannot run commands on the student's computer, such as a chat on the web, stops there and says where to go instead. Otherwise the agent installs uv the way its system needs, then youparle with uv tool install, and runs youparle init in that folder. It asks the student to install Obsidian and open the folder in it, runs youparle check, sets a hook that runs youparle guide when a session starts if the harness has hooks, and asks them to restart the harness. No administrator rights are needed.

By hand, from the course folder:

uv tool install --managed-python --python 3.13 youparle
uv tool update-shell
youparle init

init also takes a path. The folder must be empty, or must not exist yet. Hidden files a harness, Obsidian or the system made there are allowed, but not .git. Run init again in a vault, and it creates only what is missing and rewrites the youparle block in AGENTS.md. Any other folder is refused: for init, a vault is a folder whose AGENTS.md holds that block.

Then, from the course folder:

youparle check

To update, ask the agent. It follows youparle skill update: it stops the server, runs uv tool upgrade youparle, then youparle init to rewrite the block, then youparle check.

Once a day, youparle guide looks in the background for a newer release on PyPI. At the start of a later session, the agent tells the student in one sentence that an update is available, and goes on with the course.

Installing youparle installs no voice and no way to transcribe sounds. The agent offers them when it meets the student, with the voice and transcription skills: the Microsoft voice, a service or a program of the student's own, or none. It writes the scripts itself, in agent/scripts/, and youparle runs none of them. See docs/scripts.md.

Commands

Command What it does
youparle init [path] Make a vault from the template, or create what a vault is missing and rewrite the youparle block in AGENTS.md. Overwrites nothing else.
youparle guide Print what to do at the start of a session, the skills, the tools, the rules that hold everywhere, who the student is, how they want to be taught, and the scripts the agent kept.
youparle tmp clear Empty agent/tmp/, folders included. Run at the start of a session.
youparle journal add <line>… Add lines at the end of today's journal, agent/journal/YYYY-MM-DD.md. A line about practice is checked: its competences, and its exercise.
youparle skill <name> Print the steps for one task: exercise, exercise-page, minimal-pairs, shadowing, lesson, card, feedback, onboarding, obsidian, resources, resource-search, session-start, remember, update, voice, transcription, scripts.
youparle check Diagnose the installation: folder, memory files, Obsidian plugins.
youparle server start|stop|status Explicit control over the local server. The normal lifecycle is automatic.
youparle exercise new <source.json> Validate an exercise and write it into agent/exercises/.
youparle build-exercise <id> Render an exercise and open it in the browser.
youparle lesson publish <draft.md> [--title …] Publish a draft into lessons/.
youparle cards <proposal.json> Open the page where the student edits the proposed cards; each one validated is written into cards/.
youparle fetch <url>… [--name …] [--header …] Download pictures, sounds, or files to read (JSON, JSON Lines, HTML, XML, text) into agent/tmp/, several at once. An address is typed as it reads, in any script. A header a source requires is sent with --header.
youparle json <file>… [--path …] Print the outline of JSON or JSON Lines files in the vault, or what each path leads to in them. A path that finds nothing says what is there instead.
youparle html <file>… [--select …] [--from …] Print the outline of HTML pages in the vault, or the text of what each selector matches in them, a table a row a line. --from reads the HTML that a JSON file holds. A selector that matches nothing says what is there instead.
youparle open <path> Open a note of the vault in Obsidian.

Every command but init resolves its vault from the current directory, and every command takes --json. A refusal says what was refused and what to do instead, on stderr, with a non-zero exit code.

youparle guide and youparle skill are what the agent is told, and they ship with the code, so they cannot describe a version that is not installed. youparle <command> --help has the options.

Documentation

docs/ explains why the package is built the way it is, and which rules a change must not break. Start at docs/README.md.

Developing

uv sync --group dev
uv run pytest
uv run ruff check . && uv run ruff format --check .

Everything in this repository is in English — names, comments, tests and the messages the CLI prints. The system is agnostic about the language being taught, and French is only one course among others.

A running server holds the code it was started with, so run youparle server stop after changing anything it serves.

What a new vault holds is the folder src/youparle/vault_template/. See docs/vault.md before changing it.

Licence

MIT. See LICENSE.

The vault template includes the Obsidian plugin Spaced Repetition by Stephen Mwangi, under the MIT licence. Its main.js bundles other libraries, all MIT except minimatch, which is under the Blue Oak Model License 1.0.0. The plugin's folder, src/youparle/vault_template/.obsidian/plugins/obsidian-spaced-repetition/, holds its LICENSE and a THIRD-PARTY-NOTICES.txt with the licence of each bundled library, so both reach every vault.

Metadata

Release files for youparle 0.1.4

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for youparle 0.1.4
File Size Uploaded Provenance
youparle-0.1.4.tar.gz 889.1 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for youparle 0.1.4
File Interpreter ABI Platform
youparle-0.1.4-py3-none-any.whl Python 3 none any Details

Total release size: 1.7 MB

Release files / youparle-0.1.4.tar.gz

Download URL youparle-0.1.4.tar.gz
Size 889.1 kB
Tags Source
SHA-256 checksum
How to use checksums
67e06d4ec561c192b2b03393c189c09bf1df74bdcb55fa196caaf9cd5baa2a7c
BLAKE2b-256 checksum
How to use checksums
d5e57e493a40d673fcf710d184384ad06d21a665d9746d7af6b70a6c3d29f775
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.14 {"installer":{"name":"uv","version":"0.11.14","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"13","id":"trixie","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / youparle-0.1.4-py3-none-any.whl

Download URL youparle-0.1.4-py3-none-any.whl
Size 818.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f4e6efc1611335b6214b899c11716b0ea6150a368192f369986cb996db86d2ef
BLAKE2b-256 checksum
How to use checksums
81961f7a83cb7b0f7a56182b3ac9fc8f012768344af7ea255fe25dae2cced35c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.14 {"installer":{"name":"uv","version":"0.11.14","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"13","id":"trixie","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Security for youparle 0.1.4

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.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page