{"id":51569433,"url":"https://github.com/artttj/bilingo-insights","last_synced_at":"2026-07-10T18:30:28.031Z","repository":{"id":362710042,"uuid":"1260405487","full_name":"artttj/bilingo-insights","owner":"artttj","description":"Multilingual explanatory insights for Claude Code. One box per language you choose.","archived":false,"fork":false,"pushed_at":"2026-06-05T14:22:02.000Z","size":1702,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-06-05T16:08:51.392Z","etag":null,"topics":["anthropic","claude-code","claude-code-plugin","developer-tools","i18n","llm"],"latest_commit_sha":null,"homepage":null,"language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/artttj.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-05T13:09:47.000Z","updated_at":"2026-06-05T14:22:07.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/artttj/bilingo-insights","commit_stats":null,"previous_names":["artttj/bilingo-insights"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/artttj/bilingo-insights","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/artttj%2Fbilingo-insights","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/artttj%2Fbilingo-insights/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/artttj%2Fbilingo-insights/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/artttj%2Fbilingo-insights/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/artttj","download_url":"https://codeload.github.com/artttj/bilingo-insights/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/artttj%2Fbilingo-insights/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35339931,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-10T02:00:06.465Z","response_time":60,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["anthropic","claude-code","claude-code-plugin","developer-tools","i18n","llm"],"created_at":"2026-07-10T18:30:27.202Z","updated_at":"2026-07-10T18:30:28.018Z","avatar_url":"https://github.com/artttj.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 💬 bilingo-insights\n\n[![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg?style=for-the-badge)](LICENSE) ![Version](https://img.shields.io/badge/version-2.0.0-success?style=for-the-badge) ![Claude Code](https://img.shields.io/badge/Claude%20Code-D97757?style=for-the-badge\u0026logo=anthropic\u0026logoColor=white)\n\n\u003c!-- ![bilingo-insights](assets/banner.png) --\u003e\n\nMultilingual explanatory insights for Claude Code. Each insight shows up once per\nlanguage you pick, stacked. By default you get English then German.\n\n## Quick start\n\n```\n/plugin marketplace add artttj/bilingo-insights\n/plugin install bilingo-insights@bilingo-insights\n```\n\nRestart Claude Code. That's it. Insights now come in English and German.\n\nWant a different language? Set one variable:\n\n```\nexport INSIGHTS_LANG=de        # German only\nexport INSIGHTS_LANG=en,fr     # English, then French\nexport INSIGHTS_LANG=en,de,fr  # English, German, French\n```\n\nThe rest of this page is detail you only need if you want it.\n\n## What it looks like\n\nSay an insight about floating-point math comes up while Claude works on your\ntask. With the default `en,de`, it arrives as two stacked boxes, the same points\nin each language:\n\n```\n★ Insight ──────────────────────────────────────────────────\n- 0.1 + 0.2 isn't 0.3 in most languages. You get 0.30000000000000004,\n  because floats store decimal fractions as binary approximations.\n- So comparing two floats with == is a trap. Check that the difference is\n  smaller than a tiny epsilon instead.\n- It also means order matters when you add many small floats. Sum them in a\n  different order and the total can come out slightly different.\n──────────────────────────────────────────────────────────────\n★ Einblick ─────────────────────────────────────────────────\n- 0.1 + 0.2 ist in den meisten Sprachen nicht 0.3. Du bekommst\n  0.30000000000000004, weil Floats Dezimalbrüche als binäre Näherung speichern.\n- Zwei Floats mit == zu vergleichen ist deshalb eine Falle. Prüfe stattdessen,\n  ob die Differenz kleiner als ein winziges Epsilon ist.\n- Auch die Reihenfolge zählt, wenn du viele kleine Floats addierst. In anderer\n  Reihenfolge kommt ein leicht anderes Ergebnis heraus.\n──────────────────────────────────────────────────────────────\n```\n\nWant German only? Set `INSIGHTS_LANG=de` and you get just the `★ Einblick` box,\nsame points, no English in the way. Want a third language? `en,de,fr` stacks an\n`★ Aperçu` box under the German one.\n\n## Why you might want it\n\n- Learn a language while you code. Point it at one you are learning. You already\n  read code for hours, so now every insight comes with its translation and you\n  pick up real technical vocabulary in context.\n- Your Claude Code is in English but you think in another language. Set\n  `INSIGHTS_LANG` to your language alone and the point lands in your head faster,\n  with no English box you don't need.\n- Read insights in your mother tongue while keeping the English. Use `en,xx` and\n  the idea sits right next to the English the rest of the field uses.\n\n## How it works\n\nA SessionStart hook adds an instruction to the session that asks Claude to write\neach insight in the languages you listed, in order. The first language is the\ncanonical insight, the rest are translations of it. Nothing runs against your\ncode, and there is no translation service. Claude writes every language itself.\nIt's the same mechanism as the official explanatory-output-style plugin, just\nwith a multilingual instruction.\n\n## Choose the languages\n\n`INSIGHTS_LANG` is a comma-separated list of language codes or names. Order\nmatters. The first one is the canonical box. The default is `en,de`.\n\nSet it in your shell profile, or in Claude Code `settings.json`, which works the\nsame across shells:\n\n```json\n{\n  \"env\": {\n    \"INSIGHTS_LANG\": \"en,de,fr\"\n  }\n}\n```\n\nA few ways to set it:\n\n- `de` for German only, no English box.\n- `en,de` for English then German. This is the default.\n- `en,de,fr` for three boxes: English, German, then French.\n- `fr,en` to put French first as the canonical box and English second.\n\nCodes like `de`, `fr`, `es`, `it`, `pt`, `nl`, `pl`, `ru`, `uk`, `zh`, `ja`,\n`ko`, `tr`, `ar` map to their language names. Anything else passes straight\nthrough, so `INSIGHTS_LANG=Swedish` also works. Repeats are dropped, so `en,en`\ngives one box.\n\n## A note on cost\n\nEach language adds another copy of the insight, and translated text often runs\nlonger than English (German especially). Two languages roughly doubles the\nlength, three roughly triples it. If token use matters to you, keep the list\nshort or use the single-language explanatory plugin instead.\n\n## License\n\nMIT. See [LICENSE](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fartttj%2Fbilingo-insights","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fartttj%2Fbilingo-insights","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fartttj%2Fbilingo-insights/lists"}