bilingual-content-sync-agent
English | 中文
Solo Founder OS agent #4 — keep
en.jsonandzh.json(or any locale pair) in sync. Diffs, translates missing keys via Claude, queues them in a markdown HITL review file, applies approved edits back to your locale JSON. Never auto-writes without human approval.
Built by Alex Ji for VibeXForge's 925 EN/ZH i18n strings. Born from this thought:
Every feature ships English first. ZH catches up days or weeks later. Tracking which keys are stale is manual labor I do at 1 AM. Same for the next 11 makers I know.
What it does
en.json + zh.json
↓
diff (find keys present in EN, missing/empty/echo'd in ZH)
↓
translate via Claude Sonnet (vibex-tone glossary baked in)
↓
queue/pending/<timestamp>-review.md
↓
founder edits in Obsidian, moves to queue/approved/
↓
apply → writes back to zh.json (preserves nesting + key order)
CLI
# Coverage report
bilingual-sync stats --en locales/en.json --zh locales/zh.json
# Show what's missing (no LLM call)
bilingual-sync diff --en locales/en.json --zh locales/zh.json
# Translate + write review file (LLM call)
bilingual-sync draft \
--en locales/en.json \
--zh locales/zh.json \
--glossary glossary.json \
--tone "indie SaaS, gamified, neon-pixel, peer-to-peer"
# After human review → move file to queue/approved/, then:
bilingual-sync apply --en locales/en.json --zh locales/zh.json
Glossary file
Glossary keys force consistent translation of brand terms. Without it, Claude picks reasonable defaults but those drift across runs.
{
"Forge": "锻造",
"Dojo": "道场",
"Vibe": "氛围",
"Login": "登录",
"Sign up": "注册"
}
What gets flagged as "missing"
A key is missing in ZH when ANY of:
- key absent from
zh.json - ZH value is empty string
- ZH value byte-equals the EN value (a common copy-paste mistake — easy to miss without tooling)
Design choices
- HITL is non-negotiable. UI strings are seen by every user every session. One bad translation that ships globally is worse than five days of catch-up. The agent never writes to
zh.jsonwithout an explicit approve-and-apply step. - Sonnet by default, not Haiku. Cold UI translations are exactly the task where naïve Haiku output gets too literal ("Login" → "登入" instead of "登录"). Sonnet's nuance is worth the 3× cost for 925 strings (~$0.50 total).
- Batched calls. 50 keys per call is the token-budget sweet spot. Full vibex catalog = ~20 calls = ~$0.50.
- Preserves placeholders + HTML. The system prompt explicitly forbids translating
{name},<span>, ICU patterns. If Claude breaks this it gets flagged in the review file. - Built on solo-founder-os. AnthropicClient handles graceful degrade + auto-logs token usage to
~/.bilingual-content-sync-agent/usage.jsonl(cost-audit-agent picks it up monthly).
Roadmap
- v0.1 — diff/draft/apply/stats CLI · HITL queue · Sonnet drafting · 43 tests · graceful degrade
- v0.2 — Multi-language support (EN→ES, EN→JA, etc.) — same code path, different glossaries
- v0.3 — Watch mode: re-run on commit, post-flagging stale keys to GitHub PR
- v0.4 — In-context preview: show the React component a key appears in
- v0.5 — Reverse sync: detect ZH-only orphan keys (features that got removed but ZH was forgotten)
MCP server (Claude Desktop / Cursor / Zed)
Translate missing i18n keys inline from your AI assistant.
pip install 'bilingual-content-sync-agent[mcp]'
{
"mcpServers": {
"bilingual-sync": {
"command": "bilingual-sync-mcp",
"env": { "ANTHROPIC_API_KEY": "..." }
}
}
}
Tools: diff_locales(en, zh) · translate_missing(en, zh, ...) · apply_approved(en, zh)
License
MIT.
🧩 Part of the Solo Founder OS stack
A growing collection of MIT-licensed agents that share solo-founder-os as their base — cron, eval, reflexion, AnthropicClient, HITL queue, notifiers. Each agent is independently useful; together they cover the full one-person company workflow.
🌐 The whole stack is live in production at vibexforge.com.
| Agent | What it does |
|---|---|
| solo-founder-os | The shared base lib (cron · eval · reflexion · skill library · DGM-lite). Every other agent depends on it. |
| build-quality-agent | Pre-push Claude diff reviewer + local build runner — catches CI-killing changes before they ship. |
| customer-discovery-agent | Reddit pain-point scraper + Claude clustering for product validation. |
| funnel-analytics-agent | Daily founder brief + real-time PH-day alerts across 9 sources. |
| orallexa-marketing-agent | AI marketing agent — submit project once, get platform-native posts for X / Reddit / HN / Dev.to / 小红书 + 7 more. Powers vibexforge.com. |
| vc-outreach-agent | Cold email drafter — investors (vc mode) or paying customers (customer mode, merged from customer-outreach in v0.9.0). HITL queue + SMTP sender. |
| cost-audit-agent | Monthly bill audit across 6 providers (Vercel / Anthropic / OpenPanel / HyperDX / Supabase / GitHub Actions) with dollar-tagged waste findings. |
| customer-support-agent | Triage user messages → auto-draft replies → HITL queue. Closes the L5 customer-support layer. |
| payments-agent | Overdue-invoice reminder drafter. Stripe-shaped types + MockProvider fallback + hard money-safety prompt rules. |
Each agent's own row is omitted from its README. Install whichever solve real problems for you — pip install <agent-name>.
Metadata
Release files for bilingual-content-sync-agent 0.4.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| bilingual_content_sync_agent-0.4.0.tar.gz | 23.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| bilingual_content_sync_agent-0.4.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 45.7 kB
Release files / bilingual_content_sync_agent-0.4.0.tar.gz
| Download URL | bilingual_content_sync_agent-0.4.0.tar.gz |
|---|---|
| Size | 23.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
4ccb73b48f410b96e8965fec2866134afd17f8186335a989a771181d0f85e7d8
|
|
BLAKE2b-256 checksum How to use checksums |
ad2cca8cffda5d43c78add183fc233b0d4ea9f7cadc46c2eee75d6fa41228051
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
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 Jun 6, 2026.
Transparency logRelease files / bilingual_content_sync_agent-0.4.0-py3-none-any.whl
| Download URL | bilingual_content_sync_agent-0.4.0-py3-none-any.whl |
|---|---|
| Size | 22.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
1dbf671a466a2bb56d069f5bf14fb80878bf1ea0f6185c1542b3c3a1edfe5120
|
|
BLAKE2b-256 checksum How to use checksums |
be1872c4f30885b8501527a7dad16edd830d5c786b504e767c9f66735bad4560
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
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 Jun 6, 2026.
Transparency log