Local-first Claude Code language tutor
Project description
lingo-loop
Learn languages inside your AI coding assistant — local-first, no telemetry.
(Demo recording pending — see docs/internal/launch-checklist.md.)
Why
- Local-first. Your profile, vocabulary, and progress live in plain files on your machine.
- No telemetry. Nothing is sent anywhere except the LLM API call your host already makes.
- Works inside your IDE. Practice reading, writing, and vocabulary without leaving Claude Code, Codex, Hermes, or OpenClaw.
Features
- Reading practice with adaptive vocabulary surfacing.
- Short writing prompts with corrections from your assistant.
- Spaced-repetition vocabulary loop, scheduled across sessions.
- Lesson and transcript flows tailored to your native and target languages.
- Progress tracking you can inspect with a single command.
- Editable YAML profile — language pair, level, and preferences in one place.
- Works across four AI coding hosts with the same CLI underneath.
Quick start (Claude Code)
Install with
uv(or clone and runuv pip install -e ".[dev]"for a dev setup — see CONTRIBUTING.md).
# 1. Install the CLI
uv tool install lingo-loop==0.1.2
# 2. Detect AI hosts and install plugin wiring for the ones you use
tutor doctor --json
tutor init
# 3. Write your learner profile (native + target language)
tutor setup write --json '{"profile":{"native_language":"en","target_language":"uk"},"preferences":{}}'
# 4. Inside Claude, run /reload-plugins, then ask: "start a reading session"
tutor init detects Claude, Codex, Hermes, and OpenClaw and shows a keyboard
menu: arrow keys move, Space toggles providers, and Enter continues/applies.
Rerun any time to repair drift — it never touches your learner profile, history,
or secrets.
Non-interactive form: tutor init --provider claude --yes (also --dry-run,
--json).
If 0.1.2 has not propagated yet, use the source-tag fallback:
uv tool install "git+https://github.com/artemVeduta/lingo-loop@v0.1.1"
Full Claude install doc: docs/install/claude.md
Other hosts
- Codex —
docs/install/codex.md - Hermes —
docs/install/hermes.md - OpenClaw —
docs/install/openclaw.md
How it works
┌──────────────┐ ┌────────────────┐ ┌─────────────────┐
│ AI Host │──────▶│ Tutor skill │──────▶│ tutor CLI │
│ (Claude/ │ │ (markdown + │ │ (Python) │
│ Codex/...) │ │ prompts) │ │ │
└──────────────┘ └────────────────┘ └─────────────────┘
│
┌───────────────┼────────────────┐
▼ ▼ ▼
┌──────────┐ ┌──────────────┐ ┌─────────┐
│ profile │ │ learning │ │ data/ │
│ YAML │ │ SQLite │ │ defaults│
└──────────┘ └──────────────┘ └─────────┘
All state local. No network calls except the host's own LLM API.
Privacy
Your learner profile and preferences live in editable YAML files. Transactional learning state (vocabulary intervals, session history, progress) stays in a local SQLite database under your user data directory. There is no telemetry, no account, no cloud sync, and no remote storage. The only network traffic is the LLM API call your AI host already makes on your behalf.
Roadmap
Tracked publicly on GitHub:
- Milestones — versioned scope.
- Projects — in-flight work.
- Discussions — propose ideas before they become issues.
Contributing
Pull requests welcome. See CONTRIBUTING.md for dev setup, branch naming, commit conventions, and the DCO sign-off policy.
License
MIT © 2026 Artem Veduta
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file lingo_loop-0.1.3.tar.gz.
File metadata
- Download URL: lingo_loop-0.1.3.tar.gz
- Upload date:
- Size: 85.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a55f4c96f1a234edee5b51ca7ad6f9fea10755c976c0c653a03161c68016c758
|
|
| MD5 |
abf346af88834ebcdfd4b92f804dbb45
|
|
| BLAKE2b-256 |
03378baf90adf8a179d7a0acf092b784e039b6deff94a447664747c4105f14b4
|
Provenance
The following attestation bundles were made for lingo_loop-0.1.3.tar.gz:
Publisher:
workflow.yml on artemVeduta/lingo-loop
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
lingo_loop-0.1.3.tar.gz -
Subject digest:
a55f4c96f1a234edee5b51ca7ad6f9fea10755c976c0c653a03161c68016c758 - Sigstore transparency entry: 1676893269
- Sigstore integration time:
-
Permalink:
artemVeduta/lingo-loop@022a90f6a781fe7056b1851aeb7febcf2a2d6814 -
Branch / Tag:
refs/tags/v0.1.3 - Owner: https://github.com/artemVeduta
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
workflow.yml@022a90f6a781fe7056b1851aeb7febcf2a2d6814 -
Trigger Event:
push
-
Statement type:
File details
Details for the file lingo_loop-0.1.3-py3-none-any.whl.
File metadata
- Download URL: lingo_loop-0.1.3-py3-none-any.whl
- Upload date:
- Size: 100.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5795a62e127458bf855e66a19d2573210b8fbed785ad3eb8aae7213fc639459f
|
|
| MD5 |
c04e45e1507db89f671e3f3c7a48102b
|
|
| BLAKE2b-256 |
eda224746f7c2abd6cbded9528f1b76eef2dd802042208a89d8fad45da56aa9d
|
Provenance
The following attestation bundles were made for lingo_loop-0.1.3-py3-none-any.whl:
Publisher:
workflow.yml on artemVeduta/lingo-loop
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
lingo_loop-0.1.3-py3-none-any.whl -
Subject digest:
5795a62e127458bf855e66a19d2573210b8fbed785ad3eb8aae7213fc639459f - Sigstore transparency entry: 1676893306
- Sigstore integration time:
-
Permalink:
artemVeduta/lingo-loop@022a90f6a781fe7056b1851aeb7febcf2a2d6814 -
Branch / Tag:
refs/tags/v0.1.3 - Owner: https://github.com/artemVeduta
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
workflow.yml@022a90f6a781fe7056b1851aeb7febcf2a2d6814 -
Trigger Event:
push
-
Statement type: