kapi îñîţ
Îñîţîàļîžé à ñéŵ þŕöĵéçţ îñ ţĥé çüŕŕéñţ đîŕéçţöŕý. Çŕéàţéš à kapi.yaml ŕéçîþé àţ ţĥé þŕöĵéçţ ŕööţ àñđ à šîƃļîñĝ .kapi/ đîŕéçţöŕý ĥöļđîñĝ ţĥé þŕöĵéçţ'š çöñţéẋţ (ţéŕḿš, çöñţéñţ ḿéḿöŕý, ṽöîçé þŕöƒîļé àñđ üñîţ šţàţé), ŵîţĥ éṽéŕýţĥîñĝ đéŕîṽéđ çöñƒîñéđ ţö .kapi/work/. Ŵîţĥ ţĥé bowrain þļüĝîñ îñšţàļļéđ, kapi init çàñ àļšö çöññéçţ ţĥé þŕöĵéçţ ţö à ŵöŕķšþàçé.
Üšàĝé
kapi init [flags]
Îñţéŕàçţîṽé ḿöđé
Ŵĥéñ ŕüñ îñ à ţéŕḿîñàļ ŵîţĥöüţ ƒļàĝš, kapi init þŕéšéñţš àñ îñţéŕàçţîṽé ŵîžàŕđ.
΃ ýöü àŕé àļŕéàđý šîĝñéđ îñ (ṽîà kapi auth login), ţĥé ŵîžàŕđ ĝöéš šţŕàîĝĥţ
ţö ŵöŕķšþàçé šéļéçţîöñ, ţĥéñ þŕöĵéçţ ñàḿé àñđ šöüŕçé ļöçàļé.
΃ ýöü àŕé ñöţ šîĝñéđ îñ, ţĥé ŵîžàŕđ öƒƒéŕš ƒöüŕ þàţĥš:
| Öþţîöñ | Đéšçŕîþţîöñ |
|---|---|
| Šîĝñ îñ ţö Bowrain | Àüţĥéñţîçàţé ṽîà ƃŕöŵšéŕ (ÖÀüţĥ đéṽîçé ƒļöŵ), šéļéçţ ŵöŕķšþàçé, çŕéàţé þŕöĵéçţ |
| Éḿàîļ ḿé à çļàîḿ ļîñķ | Çŕéàţé àñöñýḿöüš þŕöĵéçţ, ŕéçéîṽé çļàîḿ éḿàîļ |
| Çöñţîñüé ŵîţĥöüţ šîĝñîñĝ îñ | Çŕéàţé àñöñýḿöüš þŕöĵéçţ, þŕîñţ çļàîḿ ÜŔĻ |
| Ļöçàļ öñļý | Ñö šéŕṽéŕ çöññéçţîöñ; à þüŕé ļöçàļ þŕöĵéçţ |
Àļļ îñţéŕàçţîṽé þàţĥš îñçļüđé à ƂÇÞ-47 ļöçàļé šéļéçţöŕ ŵîţĥ ţýþé-àĥéàđ
ƒîļţéŕîñĝ (þŕéšš / ţö šéàŕçĥ) ƒöŕ ţĥé šöüŕçé ļöçàļé.
Àüţĥéñţîçàţéđ þàţĥš îñçļüđé à ŵöŕķšþàçé šéļéçţöŕ ŵĥéŕé ýöü çàñ çĥööšé àñ éẋîšţîñĝ ŵöŕķšþàçé öŕ çŕéàţé à ñéŵ öñé.
Éẋàḿþļéš
# Interactive mode (recommended)
kapi init
# Non-interactive: local project with locales
kapi init --name "My App" --source en --targets fr,de,ja
# Non-interactive: a source-only project (no target language yet)
kapi init --name "Docs" --source en
# Non-interactive: anonymous project (prints claim URL)
kapi init --anonymous --name "My App" --source en
# Non-interactive: anonymous project with email claim
kapi init --name "My App" --email alex@example.com
# Non-interactive: connect to an existing server project
kapi init --server https://app.bowrain.cloud --project abc123
# Non-interactive: create the project in a named workspace
kapi init --server https://app.bowrain.cloud --workspace acme
Ŵĥàţ ĥàþþéñš
- Çĥéçķš ţĥàţ ñö
kapi.yamlŕéçîþé àñđ ñö.kapi/đîŕéçţöŕý àļŕéàđý éẋîšţ (ƒàîļš ƒàšţ îƒ ţĥéý đö) - Ŵŕîţéš ţĥé
kapi.yamlŕéçîþé àţ ţĥé þŕöĵéçţ ŕööţ - Çŕéàţéš ţĥé
.kapi/đîŕéçţöŕý ŵîţĥflows/,memory/,state/,manifest.yaml, àñđ àñ éḿþţýwork/cache/ - Àđđš ţĥé éẋàḿþļé
pseudoƒļöŵ àţ.kapi/flows/pseudo.yaml - Àđđš ţĥé îĝñöŕé ŕüļé ƒöŕ
.kapi/work/àñđ.kapi/filters.local.json; ţĥé ŕéšţ öƒ.kapi/îš çöḿḿîţţéđ - Öþţîöñàļļý çŕéàţéš à þŕöĵéçţ öñ ţĥé Bowrain Šéŕṽéŕ àñđ ŵŕîţéš ţĥé
bowrain:ƃļöçķ ţö ţĥé ŕéçîþé
Àƒţéŕ îñîţîàļîžàţîöñ, ýöü çàñ ŕüñ kapi status, kapi up, kapi run <flow>,
àñđ öţĥéŕ çöḿḿàñđš ƒŕöḿ àñýŵĥéŕé ŵîţĥîñ ţĥé þŕöĵéçţ ţŕéé.
Öþţîöñš
| Ƒļàĝ | Đéšçŕîþţîöñ | Đéƒàüļţ |
|---|---|---|
--name | Þŕöĵéçţ ñàḿé | Đîŕéçţöŕý ñàḿé |
--source | Šöüŕçé ļöçàļé çöđé (ƂÇÞ 47) | en |
--targets | Çöḿḿà-šéþàŕàţéđ ţàŕĝéţ ļöçàļé çöđéš | (ñöñé) |
--preset | Àþþļý à ƒŕàḿéŵöŕķ þŕéšéţ (ƒöŕ éẋàḿþļé nextjs, react-intl, angular) | (ñöñé) |
--server | Bowrain Šéŕṽéŕ ÜŔĻ | BOWRAIN_SERVER_URL öŕ çöñƒîĝ |
--workspace | Çŕéàţé ţĥé þŕöĵéçţ îñ ţĥîš ŵöŕķšþàçé (šļüĝ) | ýöüŕ öñļý öŕ ƒîŕšţ ŵöŕķšþàçé |
--project | Šéŕṽéŕ þŕöĵéçţ ÎĐ (çöññéçţ ţö éẋîšţîñĝ) | (ñöñé) |
--anonymous | Çŕéàţé àñöñýḿöüš þŕöĵéçţ (þŕîñţš çļàîḿ ÜŔĻ) | false |
--email | Çŕéàţé àñöñýḿöüš þŕöĵéçţ, šéñđ çļàîḿ éḿàîļ | (ñöñé) |
--json | Öüţþüţ îñ ĴŠÖÑ ƒöŕḿàţ | false |
--text | Öüţþüţ îñ ţéẋţ ƒöŕḿàţ (đéƒàüļţ) | true |
--server, --workspace, --project, --anonymous àñđ --email àŕé
çöñţŕîƃüţéđ ƃý ţĥé bowrain þļüĝîñ.
ĴŠÖÑ öüţþüţ
Üšé --json ƒöŕ ḿàçĥîñé-ŕéàđàƃļé öüţþüţ (üšéƒüļ îñ ÇÎ/ÇĐ):
kapi init --anonymous --name "My App" --source en --json
{
"root": "/path/to/my-app",
"recipe": "/path/to/my-app/kapi.yaml",
"state_dir": "/path/to/my-app/.kapi",
"project_id": "proj_abc123",
"server": "https://app.bowrain.cloud",
"claim_token": "clm_def456",
"claim_url": "https://app.bowrain.cloud/claim/clm_def456"
}
Ŕéçîþé ƒîļé
kapi init çŕéàţéš kapi.yaml àţ ţĥé þŕöĵéçţ ŕööţ ŵîţĥ ţĥîš šţŕüçţüŕé. Ţĥé
name: ƒîéļđ çàŕŕîéš ţĥé þŕöĵéçţ'š ĥüḿàñ-ŕéàđàƃļé ļàƃéļ; îţ đéƒàüļţš ţö ţĥé
çüŕŕéñţ đîŕéçţöŕý ñàḿé àñđ îš ţĥé öñļý þļàçé ţĥàţ ñàḿé ļîṽéš:
version: v1
name: my-app
defaults:
source_language: en
target_languages: [fr, de, ja]
collections:
- path: src/locales/**/*.json
format: json
- path: content/*.md
format: markdown
# Optional: connect to Bowrain Server (compound URL)
bowrain:
url: https://app.bowrain.cloud/my-team/abc123
stream: $auto
# Hooks: flows to run at lifecycle points (schema only; see /cli/flows/hooks)
hooks:
pre-push: [qa, term-check]
post-pull: [segmentation]
Šéé Þŕöĵéçţ Ḿöđéļ ƒöŕ ţĥé ƒüļļ ŕéçîþé šçĥéḿà.
Šéŕṽéŕ ÜŔĻ ŕéšöļüţîöñ
Ţĥé šéŕṽéŕ ÜŔĻ îš ŕéšöļṽéđ ƒŕöḿ (ƒîŕšţ ḿàţçĥ ŵîñš):
--serverƒļàĝBOWRAIN_SERVER_URLéñṽîŕöñḿéñţ ṽàŕîàƃļéserver.urlîñ ţĥé þéŕ-ḿàçĥîñé bowrain çöñƒîĝ- Éẋîšţîñĝ àüţĥ šţàţé (ƒŕöḿ
kapi auth login) - Ţĥé ĥöšţéđ šéŕṽîçé (
https://app.bowrain.cloud), üšéđ öñļý ŵĥéñ îñîţ çöñţàçţš à šéŕṽéŕ (šîĝñ-îñ,--anonymous,--email,--project); à þļàîñ îñîţ ŵîţĥ ñöţĥîñĝ çöñƒîĝüŕéđ ŵŕîţéš à ŕéçîþé ŵîţĥ ñöbowrain:ƃļöçķ
Šéţ îţ öñçé ĝļöƃàļļý ŵîţĥ:
kapi config set bowrain.server.url https://app.bowrain.cloud
Þŕöĵéçţ đîšçöṽéŕý
Öñçé îñîţîàļîžéđ, kapi šéàŕçĥéš ƒöŕ à kapi.yaml ŕéçîþé ƃý ŵàļķîñĝ üþ ţĥé đîŕéçţöŕý ţŕéé
(ļîķé ĝîţ). Ýöü çàñ ŕüñ çöḿḿàñđš ƒŕöḿ àñý šüƃđîŕéçţöŕý:
cd my-project/src/locales/
kapi status # finds kapi.yaml up the tree
Ṽéŕšîöñ çöñţŕöļ
Çöḿḿîţ ţö ĝîţ: kapi.yaml àñđ àļļ öƒ .kapi/:
kapi.yaml: ţĥé ŕéçîþé (šîñĝļé šöüŕçé öƒ ţŕüţĥ).kapi/terms.json,.kapi/memory/memory.json,.kapi/voice.yaml: ţĥé çöñţéẋţ šöüŕçéš ţĥé ŕéçîþé ƃîñđš.kapi/state/*.jsonl: ţĥé üñîţ-šţàţé ŕéçöŕđ, þüƃļîšĥéđ ƃýkapi commit.kapi/flows/*.yaml: ƒļöŵ đéƒîñîţîöñš ýöü àüţĥöŕ.kapi/manifest.yaml,.kapi/filters.json: ƃööķķééþîñĝ àñđ šĥàŕéđ ŕéàđéŕ çöñƒîĝüŕàţîöñ
Đö ÑÖŢ çöḿḿîţ:
.kapi/work/: éṽéŕýţĥîñĝ đéŕîṽéđ:store.db, ţĥé çàçĥéš, ţĥé ŕéđàçţîöñ ṽàüļţ.kapi/filters.local.json: ýöüŕ þéŕšöñàļ ŕéàđéŕ öṽéŕŕîđéš
Àüţĥ ţöķéñš àŕé ñéṽéŕ ŵŕîţţéñ ţö ţĥé þŕöĵéçţ. Ţĥéý ļîṽé îñ ţĥé ÖŠ ķéýçĥàîñ (ķéýš bowrain-auth:<server-url> àñđ bowrain-refresh:<server-url>); ñöñ-šéçŕéţ ḿéţàđàţà šîţš îñ auth.json îñ ţĥé bowrain çöñƒîĝ đîŕéçţöŕý (~/.config/bowrain öñ Ļîñüẋ, ~/Library/Application Support/bowrain öñ ḿàçÖŠ).
kapi init ŵŕîţéš à ţŵö-ļîñé îĝñöŕé ŕüļé, /.kapi/work/ àñđ /.kapi/filters.local.json, šö éṽéŕýţĥîñĝ éļšé üñđéŕ .kapi/, îñçļüđîñĝ ţĥé çöḿḿîţţéđ ŕéçöŕđ üñđéŕ .kapi/state/, šţàýš ţŕàçķéđ ŵîţĥ ñö ñéĝàţîöñ ţö ŕéḿéḿƃéŕ.
Ñéẋţ šţéþš
Àƒţéŕ îñîţîàļîžàţîöñ:
- Éđîţ çöñţéñţ çöļļéçţîöñš îñ
kapi.yamlţö ḿàţçĥ ýöüŕ ƒîļé šţŕüçţüŕé - Ƃîñđ ţĥé çöñţéẋţ: à ṽöîçé þŕöƒîļé üñđéŕ
defaults.voice, ţéŕḿš üñđéŕdefaults.terms_source, çööŕđîñàţéš üñđéŕdefaults.coordinates - Çàţçĥ ţĥé þŕöĵéçţ üþ:
kapi up - Çöññéçţ ţö à šéŕṽéŕ:
kapi init --server …öñ àñ éẋîšţîñĝ þŕöĵéçţ çöññéçţš îţ àñđ ļéàṽéš àñ àļŕéàđý-çöññéçţéđ þŕöĵéçţ üñţöüçĥéđ