kiki-agent-lite 0.3.1 → 0.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -10
- package/dist/docs/en/configuration/config-files.md +63 -20
- package/dist/docs/en/configuration/data-locations.md +12 -4
- package/dist/docs/en/configuration/env-vars.md +4 -6
- package/dist/docs/en/configuration/overrides.md +13 -14
- package/dist/docs/en/configuration/providers.md +8 -6
- package/dist/docs/en/customization/agent-profiles.md +33 -38
- package/dist/docs/en/customization/agents.md +129 -107
- package/dist/docs/en/customization/hooks.md +41 -48
- package/dist/docs/en/customization/personas.md +19 -21
- package/dist/docs/en/customization/plugins.md +180 -156
- package/dist/docs/en/customization/prompt-fields.md +10 -6
- package/dist/docs/en/customization/skills.md +11 -13
- package/dist/docs/en/customization/skins.md +23 -27
- package/dist/docs/en/customization/themes.md +15 -15
- package/dist/docs/en/features/agents.md +85 -0
- package/dist/docs/en/features/daily.md +37 -7
- package/dist/docs/en/features/ecosystem.md +3 -1
- package/dist/docs/en/features/extend.md +7 -1
- package/dist/docs/en/features/freedom.md +4 -0
- package/dist/docs/en/features/index.md +6 -5
- package/dist/docs/en/features/long-work.md +23 -5
- package/dist/docs/en/features/look.md +1 -1
- package/dist/docs/en/features/people.md +10 -2
- package/dist/docs/en/features/spaces.md +16 -4
- package/dist/docs/en/features/workbench.md +11 -3
- package/dist/docs/en/getting-started/desktop-app.md +44 -29
- package/dist/docs/en/getting-started/first-launch.md +32 -21
- package/dist/docs/en/getting-started/installation.md +27 -12
- package/dist/docs/en/getting-started/use-cases.md +35 -35
- package/dist/docs/en/guides/goals.md +9 -7
- package/dist/docs/en/guides/interaction.md +26 -26
- package/dist/docs/en/guides/interface.md +18 -14
- package/dist/docs/en/guides/memory.md +43 -14
- package/dist/docs/en/guides/sessions.md +32 -26
- package/dist/docs/en/guides/settings.md +60 -29
- package/dist/docs/en/index.md +8 -2
- package/dist/docs/en/reference/command.md +8 -4
- package/dist/docs/en/reference/keyboard.md +18 -4
- package/dist/docs/en/reference/model-vocabulary.md +6 -8
- package/dist/docs/en/reference/slash-commands.md +4 -4
- package/dist/docs/en/reference/tools.md +92 -15
- package/dist/docs/en/release-notes/changelog.md +1 -9
- package/dist/docs/en/server/acp.md +1 -1
- package/dist/docs/en/server/ide.md +1 -1
- package/dist/docs/en/server/local-server.md +5 -5
- package/dist/docs/en/server/mcp.md +2 -2
- package/dist/docs/en/server/rest-api.md +79 -5
- package/dist/docs/en/server/sdk.md +2 -2
- package/dist/docs/zh/configuration/config-files.md +56 -15
- package/dist/docs/zh/configuration/data-locations.md +12 -4
- package/dist/docs/zh/configuration/env-vars.md +4 -6
- package/dist/docs/zh/configuration/overrides.md +13 -14
- package/dist/docs/zh/configuration/providers.md +7 -5
- package/dist/docs/zh/customization/agent-profiles.md +31 -36
- package/dist/docs/zh/customization/agents.md +120 -98
- package/dist/docs/zh/customization/hooks.md +35 -42
- package/dist/docs/zh/customization/personas.md +16 -18
- package/dist/docs/zh/customization/plugins.md +167 -142
- package/dist/docs/zh/customization/prompt-fields.md +9 -5
- package/dist/docs/zh/customization/skills.md +10 -12
- package/dist/docs/zh/customization/skins.md +19 -23
- package/dist/docs/zh/customization/themes.md +12 -12
- package/dist/docs/zh/features/agents.md +85 -0
- package/dist/docs/zh/features/daily.md +37 -7
- package/dist/docs/zh/features/ecosystem.md +3 -1
- package/dist/docs/zh/features/extend.md +7 -1
- package/dist/docs/zh/features/freedom.md +4 -0
- package/dist/docs/zh/features/index.md +6 -5
- package/dist/docs/zh/features/long-work.md +22 -4
- package/dist/docs/zh/features/look.md +1 -1
- package/dist/docs/zh/features/people.md +10 -2
- package/dist/docs/zh/features/spaces.md +15 -3
- package/dist/docs/zh/features/workbench.md +11 -3
- package/dist/docs/zh/getting-started/desktop-app.md +43 -28
- package/dist/docs/zh/getting-started/first-launch.md +32 -21
- package/dist/docs/zh/getting-started/installation.md +26 -11
- package/dist/docs/zh/getting-started/use-cases.md +35 -37
- package/dist/docs/zh/guides/goals.md +8 -8
- package/dist/docs/zh/guides/interaction.md +25 -25
- package/dist/docs/zh/guides/interface.md +18 -14
- package/dist/docs/zh/guides/memory.md +43 -14
- package/dist/docs/zh/guides/sessions.md +30 -24
- package/dist/docs/zh/guides/settings.md +54 -23
- package/dist/docs/zh/index.md +7 -1
- package/dist/docs/zh/reference/command.md +7 -3
- package/dist/docs/zh/reference/keyboard.md +18 -4
- package/dist/docs/zh/reference/model-vocabulary.md +6 -8
- package/dist/docs/zh/reference/slash-commands.md +3 -3
- package/dist/docs/zh/reference/tools.md +74 -9
- package/dist/docs/zh/release-notes/changelog.md +1 -9
- package/dist/docs/zh/server/acp.md +1 -1
- package/dist/docs/zh/server/ide.md +1 -1
- package/dist/docs/zh/server/local-server.md +5 -5
- package/dist/docs/zh/server/mcp.md +2 -2
- package/dist/docs/zh/server/rest-api.md +69 -1
- package/dist/docs/zh/server/sdk.md +2 -2
- package/dist/main.mjs +12545 -3456
- package/dist/web/assets/AppErrorBoundary-RFIAb-Uf.js +1 -0
- package/dist/web/assets/NavScopeBoundary-DY_ET7A-.js +1 -0
- package/dist/web/assets/{arc-y2SkSoyr.js → arc-CMgTB1m7.js} +1 -1
- package/dist/web/assets/{architectureDiagram-3BPJPVTR-uCwLz53m.js → architectureDiagram-3BPJPVTR-BU79ou2C.js} +1 -1
- package/dist/web/assets/{blockDiagram-GPEHLZMM-BZyWv36G.js → blockDiagram-GPEHLZMM-Bkuldod2.js} +1 -1
- package/dist/web/assets/{c4Diagram-AAUBKEIU-DKGx9i50.js → c4Diagram-AAUBKEIU-C3WMeqyu.js} +1 -1
- package/dist/web/assets/channel-DpDZUJRn.js +1 -0
- package/dist/web/assets/{chunk-2J33WTMH-CSkrhrsp.js → chunk-2J33WTMH-CesyWmwo.js} +1 -1
- package/dist/web/assets/{chunk-4BX2VUAB-CtxMoJ68.js → chunk-4BX2VUAB-C7rghYTf.js} +1 -1
- package/dist/web/assets/{chunk-55IACEB6-Dos3ftEy.js → chunk-55IACEB6-BqRHhwtz.js} +1 -1
- package/dist/web/assets/{chunk-727SXJPM-wbzEYK9z.js → chunk-727SXJPM-BhSqCRBc.js} +1 -1
- package/dist/web/assets/{chunk-AQP2D5EJ-B9GKvCD6.js → chunk-AQP2D5EJ-DdYE2ZVZ.js} +1 -1
- package/dist/web/assets/{chunk-FMBD7UC4-u5Y2P6IX.js → chunk-FMBD7UC4-BCRPUxDF.js} +1 -1
- package/dist/web/assets/{chunk-ND2GUHAM-B8rFKkTV.js → chunk-ND2GUHAM-CuvyDjTR.js} +1 -1
- package/dist/web/assets/{chunk-QZHKN3VN-EQsKtuD-.js → chunk-QZHKN3VN-BU5vAS78.js} +1 -1
- package/dist/web/assets/classDiagram-4FO5ZUOK-Bju1GfNu.js +1 -0
- package/dist/web/assets/classDiagram-v2-Q7XG4LA2-Bju1GfNu.js +1 -0
- package/dist/web/assets/client-C0oH7-8r.js +2 -0
- package/dist/web/assets/connection-BhO2nh7P.js +1 -0
- package/dist/web/assets/{cose-bilkent-S5V4N54A-D6dr5mIW.js → cose-bilkent-S5V4N54A-CXrvsA1a.js} +1 -1
- package/dist/web/assets/{dagre-BM42HDAG-Dnyhc4Hn.js → dagre-BM42HDAG-TaAea3Rt.js} +1 -1
- package/dist/web/assets/{diagram-2AECGRRQ-CYXkWdne.js → diagram-2AECGRRQ-CdEH4jGt.js} +1 -1
- package/dist/web/assets/{diagram-5GNKFQAL-DPwBf5Ag.js → diagram-5GNKFQAL-A0jZ_p-T.js} +1 -1
- package/dist/web/assets/{diagram-KO2AKTUF-DNeLYZ8X.js → diagram-KO2AKTUF-miHWORz3.js} +1 -1
- package/dist/web/assets/{diagram-LMA3HP47-zU8RsQTX.js → diagram-LMA3HP47-BlUIwEIg.js} +1 -1
- package/dist/web/assets/{diagram-OG6HWLK6-Cf9Mm94H.js → diagram-OG6HWLK6-DwDzMhEg.js} +1 -1
- package/dist/web/assets/{erDiagram-TEJ5UH35-Ch4CeiUI.js → erDiagram-TEJ5UH35-BJr5w62i.js} +1 -1
- package/dist/web/assets/export-BlxaZKEe.js +2 -0
- package/dist/web/assets/{flowDiagram-I6XJVG4X-Csn6WqEH.js → flowDiagram-I6XJVG4X-BP7KSFjx.js} +1 -1
- package/dist/web/assets/{ganttDiagram-6RSMTGT7-DsuBgEyu.js → ganttDiagram-6RSMTGT7-BstLBBof.js} +1 -1
- package/dist/web/assets/{gitGraphDiagram-PVQCEYII-CPA7jCxU.js → gitGraphDiagram-PVQCEYII-C57s7nZ-.js} +1 -1
- package/dist/web/assets/highlighted-body-OFNGDK62-BVb-7KsA.js +1 -0
- package/dist/web/assets/index-69qhvTvD.js +1 -0
- package/dist/web/assets/{index-BYUHmd8w.js → index-BDNM6yJI.js} +2 -2
- package/dist/web/assets/{index-BGgZxlEQ.js → index-BJF_gEDs.js} +2 -2
- package/dist/web/assets/index-BOwMP6BP.js +1 -0
- package/dist/web/assets/{index-C69a5Mcz.js → index-BZsyXCqm.js} +1 -1
- package/dist/web/assets/{index-C7EA7a_g.js → index-Bfl4JiNq.js} +2 -2
- package/dist/web/assets/index-BlD3AKX-.js +1 -0
- package/dist/web/assets/{index-CIymCfcP.js → index-BnvW0EvQ.js} +1 -1
- package/dist/web/assets/index-C4rmWyOm.js +1 -0
- package/dist/web/assets/index-CGLcb3HY.js +1 -0
- package/dist/web/assets/{index-kWBxPqIX.js → index-CPvOeQPX.js} +1 -1
- package/dist/web/assets/index-Cjbe0JKM.js +1 -0
- package/dist/web/assets/index-CmYoJWUm.js +1 -0
- package/dist/web/assets/index-CtUFrjKe.js +1 -0
- package/dist/web/assets/index-DDvDRMTK.js +1 -0
- package/dist/web/assets/index-DSpndwAR.css +1 -0
- package/dist/web/assets/index-D_JjTHxi.js +1 -0
- package/dist/web/assets/index-DbuwcnbT.js +1 -0
- package/dist/web/assets/index-DcXyS0nN.js +1 -0
- package/dist/web/assets/index-Dcl9ruKA.js +1 -0
- package/dist/web/assets/index-DgwALPNA.js +121 -0
- package/dist/web/assets/{index-DoN1FTEe.js → index-DkE8hRT1.js} +2 -2
- package/dist/web/assets/index-DsyRBZ4h.js +1 -0
- package/dist/web/assets/{index-29zav3JI.js → index-DuudNhLL.js} +4 -4
- package/dist/web/assets/index-Gc4F0b2f.js +1 -0
- package/dist/web/assets/index-HGqqwKoV.js +13 -0
- package/dist/web/assets/index-KchrJnno.js +3 -0
- package/dist/web/assets/{index-B0KNSyji.js → index-Tmi2BPYU.js} +1 -1
- package/dist/web/assets/index-Ya4GuDs0.js +1 -0
- package/dist/web/assets/index-_aDaKqLB.js +1 -0
- package/dist/web/assets/index-_qwOAotB.js +1 -0
- package/dist/web/assets/index-hnIkczza.js +7 -0
- package/dist/web/assets/{infoDiagram-5YYISTIA-D3Q__m62.js → infoDiagram-5YYISTIA-CifuVY6C.js} +1 -1
- package/dist/web/assets/{ishikawaDiagram-YF4QCWOH-CcvCBuZ5.js → ishikawaDiagram-YF4QCWOH-Cd60vQUi.js} +1 -1
- package/dist/web/assets/{journeyDiagram-JHISSGLW-COZU4LNt.js → journeyDiagram-JHISSGLW-Cb3Xl_wl.js} +1 -1
- package/dist/web/assets/{kanban-definition-UN3LZRKU-BrXjBoAU.js → kanban-definition-UN3LZRKU-Ei6ThuZt.js} +1 -1
- package/dist/web/assets/{linear-BgP1STFi.js → linear-CDZJx-o2.js} +1 -1
- package/dist/web/assets/mermaid-GHXKKRXX-DFxyxD7G.js +331 -0
- package/dist/web/assets/{mindmap-definition-RKZ34NQL-CgjSrE5r.js → mindmap-definition-RKZ34NQL-B0ygxzkx.js} +1 -1
- package/dist/web/assets/navViewState-Ck_HK-TK.js +1 -0
- package/dist/web/assets/{pieDiagram-4H26LBE5-DTfe1sKA.js → pieDiagram-4H26LBE5-B2FdrvDv.js} +1 -1
- package/dist/web/assets/{quadrantDiagram-W4KKPZXB-D95hfh0q.js → quadrantDiagram-W4KKPZXB-CwpOTy3d.js} +1 -1
- package/dist/web/assets/{requirementDiagram-4Y6WPE33-DtSLi7Mh.js → requirementDiagram-4Y6WPE33-ExdZNzLQ.js} +1 -1
- package/dist/web/assets/{sankeyDiagram-5OEKKPKP-gi_dJpcU.js → sankeyDiagram-5OEKKPKP-u0EZKD7D.js} +1 -1
- package/dist/web/assets/{sequenceDiagram-3UESZ5HK-DKQ9a72t.js → sequenceDiagram-3UESZ5HK-BXHMy5DY.js} +1 -1
- package/dist/web/assets/{spaces-B2Ccyh_T.js → spaces-C8n7xQPx.js} +1 -1
- package/dist/web/assets/{stateDiagram-AJRCARHV-Bz7tmSqa.js → stateDiagram-AJRCARHV-DMXx7ell.js} +1 -1
- package/dist/web/assets/stateDiagram-v2-BHNVJYJU-Bydq1_By.js +1 -0
- package/dist/web/assets/theme-BBnHttAf.js +1 -0
- package/dist/web/assets/{timeline-definition-PNZ67QCA-BfMXPwhV.js → timeline-definition-PNZ67QCA-DtqVG_4u.js} +1 -1
- package/dist/web/assets/{vennDiagram-CIIHVFJN-WLxW2KT5.js → vennDiagram-CIIHVFJN-Dom0ex8r.js} +1 -1
- package/dist/web/assets/{wardley-L42UT6IY-DiiqwIdq.js → wardley-L42UT6IY-C-RstmuQ.js} +1 -1
- package/dist/web/assets/{wardleyDiagram-YWT4CUSO-DmCukWuw.js → wardleyDiagram-YWT4CUSO-C8CzNfdf.js} +1 -1
- package/dist/web/assets/{xychartDiagram-2RQKCTM6-Cfq1W2tT.js → xychartDiagram-2RQKCTM6-1AxVTyB6.js} +1 -1
- package/dist/web/index.html +2 -2
- package/native/auth-native/prebuilds/linux-arm64/auth-native.node +0 -0
- package/native/auth-native/prebuilds/linux-x64/auth-native.node +0 -0
- package/native/auth-native/prebuilds/win32-arm64/auth-native.node +0 -0
- package/native/auth-native/prebuilds/win32-x64/auth-native.node +0 -0
- package/package.json +1 -1
- package/dist/web/assets/AppErrorBoundary-DWpgwxFV.js +0 -1
- package/dist/web/assets/NavScopeBoundary-D8Lf1G0U.js +0 -1
- package/dist/web/assets/channel-BGdXootG.js +0 -1
- package/dist/web/assets/classDiagram-4FO5ZUOK-CPcnLy_H.js +0 -1
- package/dist/web/assets/classDiagram-v2-Q7XG4LA2-CPcnLy_H.js +0 -1
- package/dist/web/assets/client-DSIbyfoz.js +0 -2
- package/dist/web/assets/connection-DYZn9oPZ.js +0 -1
- package/dist/web/assets/export-Bq8ZECqX.js +0 -2
- package/dist/web/assets/highlighted-body-OFNGDK62-CDPBxM_E.js +0 -1
- package/dist/web/assets/index-AksnytJj.js +0 -1
- package/dist/web/assets/index-B8xhhYDh.css +0 -1
- package/dist/web/assets/index-BUrlrKap.js +0 -1
- package/dist/web/assets/index-B_5-HLed.js +0 -62
- package/dist/web/assets/index-BfmoxdpP.js +0 -1
- package/dist/web/assets/index-Bo3e-ohM.js +0 -3
- package/dist/web/assets/index-BrYV9gV_.js +0 -1
- package/dist/web/assets/index-C8XUtAvK.js +0 -1
- package/dist/web/assets/index-C9uil5my.js +0 -13
- package/dist/web/assets/index-CKpWHSp9.js +0 -1
- package/dist/web/assets/index-CLKBgQxV.js +0 -1
- package/dist/web/assets/index-CTyyUNWj.js +0 -7
- package/dist/web/assets/index-D7cg9qYZ.js +0 -1
- package/dist/web/assets/index-D7dg8R_q.js +0 -1
- package/dist/web/assets/index-DCSpedV_.js +0 -1
- package/dist/web/assets/index-DLbD0Nx5.js +0 -1
- package/dist/web/assets/index-DaEzbvvu.js +0 -1
- package/dist/web/assets/index-DhbcjMZF.js +0 -1
- package/dist/web/assets/index-Dw2h88mF.js +0 -1
- package/dist/web/assets/index-FcMtfmKv.js +0 -1
- package/dist/web/assets/index-XFq9Kgg0.js +0 -1
- package/dist/web/assets/index-iI2mM43w.js +0 -1
- package/dist/web/assets/index-oXOF7lko.js +0 -1
- package/dist/web/assets/locale-CANfezJ4.js +0 -17
- package/dist/web/assets/mermaid-GHXKKRXX-_JLagMll.js +0 -321
- package/dist/web/assets/navViewState-DS5LnMYc.js +0 -1
- package/dist/web/assets/settings-CcwMWXbp.js +0 -42
- package/dist/web/assets/stateDiagram-v2-BHNVJYJU-D6-wdUbw.js +0 -1
- package/dist/web/assets/theme-DlDhDxeD.js +0 -1
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
# Prompt field overrides
|
|
2
2
|
|
|
3
|
-
Prompt field overrides replace named
|
|
3
|
+
Prompt field overrides replace named pieces of the built-in prompt — system sections, tool descriptions, delegation notices — without forking a profile. A field value replaces; it does not append, prepend or wrap.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
`kiki prompt-fields` is a read-only way to discover and check these fields. The registry, format, precedence and validation rules live in [Configuration files: `prompt`](../configuration/config-files.md#prompt); this page shows how the pieces fit together.
|
|
6
6
|
|
|
7
7
|
## What you can override
|
|
8
8
|
|
|
9
|
-
Useful built-in field ids include `system.language`, `system.reply_style`, `system.coding`, `system.shared`, `tool.web-search.description`, `tool.web-search.guidance`, `delegation.sub.notice
|
|
9
|
+
Useful built-in field ids include `system.language`, `system.reply_style`, `system.coding`, `system.shared`, `tool.web-search.description`, `tool.web-search.guidance`, `delegation.sub.notice` and `delegation.independent.notice`. System fields replace sections of the built-in prompt, except `system.shared`, which is the one shared outer addition and is appended once when non-empty. A tool `description` replaces its static description; a tool `guidance` is appended under the existing `User-configured guidance:` label.
|
|
10
10
|
|
|
11
11
|
## Where overrides live
|
|
12
12
|
|
|
@@ -21,6 +21,10 @@ Every override surface uses the same format — optional `files` (strict TOML fi
|
|
|
21
21
|
|
|
22
22
|
Precedence from low to high follows the table order; a missing key inherits the lower value. The complete format, `${name}` variable substitution rules, and validation failures are documented in [`prompt`](../configuration/config-files.md#prompt).
|
|
23
23
|
|
|
24
|
+
An existing agent keeps its bound prompt fields, custom variables and cognition text when it resumes, even if their source files have changed or been deleted. Edits apply to new bindings; choose [Rebuild context](./agents.md#rebuilding-a-session-context) to adopt them in an existing session. An explicit model change selects the target model's prompt inputs; `new_window` alone does not reload prompt sources. Current tool permissions and hard model constraints still apply.
|
|
25
|
+
|
|
26
|
+
Older records reuse their saved system prompt and recover inline fields from the saved profile where possible. If a record never saved a required shared field, tool override, steering cue or anchor and its original inputs cannot be reconstructed, recovery names the missing inputs. Rebuild the context to use current sources rather than rolling back your installed prompts.
|
|
27
|
+
|
|
24
28
|
## Discover and validate with `kiki prompt-fields`
|
|
25
29
|
|
|
26
30
|
`kiki prompt-fields` is read-only; it does not modify `config.toml`, `SYSTEM.md`, agent profiles, or override files.
|
|
@@ -32,13 +36,13 @@ kiki prompt-fields validate --config ./candidate.toml --home ~/.kiki # validat
|
|
|
32
36
|
kiki prompt-fields explain delegation.sub.notice --agent reviewer --model fast --delegation-position sub
|
|
33
37
|
```
|
|
34
38
|
|
|
35
|
-
`explain` prints a field's `effective`, `shadowed
|
|
39
|
+
`explain` prints a field's `effective`, `shadowed` or `inactive` status, its effective value, and the whole source chain for the context you select with `--agent`, `--model`, `--executor` and `--delegation-position <main|sub|independent>`. `--config <path>` inspects another config file, and `--home <dir>` picks the Kiki home used for `SYSTEM.md`, agent discovery and relative override files.
|
|
36
40
|
|
|
37
|
-
|
|
41
|
+
If your config still carries the old `prompt.shared` and `prompt.tools` keys, move those entries into fields under `[prompt.overrides]` rather than restoring the keys — see [prompt field precedence](../configuration/overrides.md#prompt-field-precedence).
|
|
38
42
|
|
|
39
43
|
## Desktop settings entry point
|
|
40
44
|
|
|
41
|
-
In the desktop
|
|
45
|
+
In the desktop app, **Settings → Agents → Prompt** edits this section — see [Settings pages](../guides/settings.md#agents). The card starts collapsed.
|
|
42
46
|
|
|
43
47
|
## Next steps
|
|
44
48
|
|
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
# Agent Skills
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
Compared to pasting the same instructions into a prompt every time, Skills offer the advantage of keeping content in a file, enabling reuse across projects and teams, allowing instant loading via a slash command, and letting the model invoke them automatically when needed.
|
|
3
|
+
A Skill is a Markdown document with YAML frontmatter that describes a piece of knowledge or a workflow — a project's code style, a PR review process, a commit message format. Keeping it in a file rather than pasting it into every prompt means it can be shared across projects and teams, loaded with a slash command, or picked up by the model automatically when it is relevant.
|
|
6
4
|
|
|
7
5
|
## Custom prompt commands
|
|
8
6
|
|
|
9
|
-
|
|
7
|
+
A command is the same kind of file, loaded only when you explicitly send `/name arguments`. Commands reuse the Skill catalog and parameter expansion, but the model is never offered their descriptions for automatic invocation.
|
|
10
8
|
|
|
11
9
|
Create `.kiki/commands/brainstorm.md` in your project root:
|
|
12
10
|
|
|
@@ -20,13 +18,13 @@ Ask about important missing requirements. Keep this a discussion; do not
|
|
|
20
18
|
create documents or modify files unless I ask you to.
|
|
21
19
|
```
|
|
22
20
|
|
|
23
|
-
In the GUI or terminal, type `/`,
|
|
21
|
+
In the GUI or terminal, type `/`, pick `brainstorm`, add a topic and send `/brainstorm a simpler settings menu`. Picking the entry only fills the draft; sending loads the body once with your arguments and attachments.
|
|
24
22
|
|
|
25
|
-
The
|
|
23
|
+
The frontmatter is optional. Without it, the filename supplies the name and the first non-empty body line becomes the menu description. Optional `name`, `description` and `argument-hint` override those; a name cannot contain whitespace, `/`, `\` or `:`. The [body placeholders](#body-placeholders) work here too, and if the body has no argument placeholder the arguments are appended to it. Values inserted as arguments are not expanded again.
|
|
26
24
|
|
|
27
|
-
|
|
25
|
+
Commands live in `commands/*.md` under the active application data directory (user-wide) and `.kiki/commands/*.md` at the project root. Only direct Markdown children count, and a project command wins over a user command of the same name. The legacy `.kimi-code/commands/` tree is not read. Edits are watched — reopen the GUI slash menu or run `/reload` in the terminal to see them.
|
|
28
26
|
|
|
29
|
-
Built-in shortcuts keep their bare names
|
|
27
|
+
Built-in shortcuts keep their bare names, so `/plan` still controls Plan mode. A Skill that collides with one is shown as `/skill:plan`, and a command that collides with a Skill as `/command:name`; use the name the menu shows. A command is a user prompt, not a system prompt or a script: it grants no permissions, switches no modes, and cannot run anything. Review command files from an unfamiliar repository before sending them.
|
|
30
28
|
|
|
31
29
|
## Creating a Skill
|
|
32
30
|
|
|
@@ -93,7 +91,7 @@ Kiki scans four tiers by scope; more specific scopes take higher priority: **Pro
|
|
|
93
91
|
- `$KIKI_HOME/skills/` (default: `~/.kiki/skills/`)
|
|
94
92
|
- `~/.agents/skills/`
|
|
95
93
|
|
|
96
|
-
The Kiki-specific user Skill directory moves with `KIKI_HOME`, so
|
|
94
|
+
The Kiki-specific user Skill directory moves with `KIKI_HOME`, so a relocated data root gets its own copy; the generic `~/.agents/skills/` stays under the real OS home so other tools can share it.
|
|
97
95
|
|
|
98
96
|
**Project level** (project root = the nearest directory containing `.git`, searching upward from the working directory):
|
|
99
97
|
- `.kiki/skills/`
|
|
@@ -105,18 +103,18 @@ The Kiki-specific user Skill directory moves with `KIKI_HOME`, so isolated data
|
|
|
105
103
|
extra_skill_dirs = ["~/team-skills", ".agents/team-skills"]
|
|
106
104
|
```
|
|
107
105
|
|
|
108
|
-
**Built-in Skills**
|
|
106
|
+
**Built-in Skills** ship with the CLI and have the lowest priority. They cover common setup tasks — configuring MCP servers, customizing the TUI theme, editing config files; [Built-in skill commands](../reference/slash-commands.md#built-in-skill-commands) lists them. Every Skill Kiki ships describes Kiki itself, so the top-level [`builtin_product_skills`](../configuration/config-files.md#top-level-fields) field turns all of them off at once, including `/kiki-ops`. Set it back to `true` to restore them.
|
|
109
107
|
|
|
110
108
|
## Invoking a Skill
|
|
111
109
|
|
|
112
110
|
Users can invoke a Skill manually with a slash command:
|
|
113
111
|
|
|
114
|
-
```
|
|
112
|
+
```text
|
|
115
113
|
/skill:code-style
|
|
116
114
|
/skill:git-commits fix concurrency issue in login endpoint
|
|
117
115
|
```
|
|
118
116
|
|
|
119
|
-
The model can also invoke a Skill
|
|
117
|
+
The model can also invoke a Skill on its own from `description` and `whenToUse`, unless `disableModelInvocation` is `true` or `type` is `flow`. A Skill can invoke another Skill, up to three levels deep.
|
|
120
118
|
|
|
121
119
|
## Complete Example
|
|
122
120
|
|
|
@@ -146,7 +144,7 @@ Please review the PR the user specified: $pr_ref
|
|
|
146
144
|
- Noteworthy positives
|
|
147
145
|
```
|
|
148
146
|
|
|
149
|
-
Save this as `$KIKI_HOME/skills/review-pr/SKILL.md` (
|
|
147
|
+
Save this as `$KIKI_HOME/skills/review-pr/SKILL.md` (`~/.kiki/skills/review-pr/SKILL.md` when `KIKI_HOME` is unset), put the checklist at `references/checklist.md` in the same directory, and start a new session. `/skill:review-pr #1234` then expands `#1234` into `$pr_ref`.
|
|
150
148
|
|
|
151
149
|
## Next steps
|
|
152
150
|
|
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
# GUI Skins
|
|
2
2
|
|
|
3
|
-
A skin
|
|
3
|
+
A skin sets the Kiki GUI's colors, fonts, corner radius and density. Kiki comes with six light–dark skin families, and you can add your own as a JSON file. A skin only sets design tokens — it carries no CSS and no code, so nothing you install can restyle an approval prompt or run anything on your machine.
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
Light and dark stay a separate choice. A skin supplies a light variant, a dark variant, or both; the theme switch above the skin picker still decides which one you see.
|
|
5
|
+
Light and dark remain a separate choice. A skin can supply a light variant, a dark variant, or both; the theme switch above the skin picker decides which one you actually see.
|
|
8
6
|
|
|
9
7
|
## Built-in skins
|
|
10
8
|
|
|
@@ -17,8 +15,6 @@ Light and dark stay a separate choice. A skin supplies a light variant, a dark v
|
|
|
17
15
|
| **Iris × Starveil** | light, dark | Violet-white paper and iris ink; indigo-violet layers and silver-lilac controls at night. |
|
|
18
16
|
| **High contrast × Obsidian** | light, dark | Visible borders and AAA main text; layered charcoal, ice-cyan focus and near-white controls at night. |
|
|
19
17
|
|
|
20
|
-
Inkstone replaces the previous default dark palette within the Paper family. Linen, Graphite, Forest, Claret, Heather, Nocturne, Sand and Slate are retired. Stored built-in selections fall back to Paper in light mode and Inkstone in dark mode, including desktop space preferences. Your light / dark / system choice and accent, font, radius and density overrides stay intact. User skin files with the same names are not retired.
|
|
21
|
-
|
|
22
18
|
## Pick and adjust a skin
|
|
23
19
|
|
|
24
20
|
Settings → Appearance:
|
|
@@ -34,15 +30,15 @@ The first page of the first-run setup (**Language and look**) has the same light
|
|
|
34
30
|
Settings → Appearance → Background puts a picture or a short video behind the window.
|
|
35
31
|
|
|
36
32
|
- **Choose picture or video**: PNG, JPEG, WebP, AVIF, GIF, MP4 or WebM, up to 25 MB for a picture or 100 MB for a video. The file stays on this device (in the browser's storage) and is never uploaded, so it works for a browser tab connected to a remote server too.
|
|
37
|
-
- **Or paste a link**: an `https` link to a picture or video. The server fetches it once,
|
|
33
|
+
- **Or paste a link**: an `https` link to a picture or video. The server fetches it once, under the policy in [Linked pictures](#linked-pictures), and keeps the copy on this device. Nothing is loaded from that link again, so it cannot track you and the background still shows offline.
|
|
38
34
|
- **Show behind**: the whole window, only the conversation, or only the sidebar (tablet width and up).
|
|
39
35
|
- **Fit** (fill, fit, tile, center), **Anchor** (nine points), **Picture strength**, **Blur**, **Brightness** and **Soften** (a wash of the window color over the picture).
|
|
40
36
|
- **Panel opacity** and **Panel blur**: how much the sidebar and the conversation let the picture through.
|
|
41
37
|
- **Separate for light and dark**: off by default. Turn it on to pick a different background for each theme.
|
|
42
38
|
|
|
43
|
-
Text stays readable whatever you pick. Kiki measures the picture and raises **Panel opacity**
|
|
39
|
+
Text stays readable whatever you pick. Kiki measures the picture and raises **Panel opacity** as far as it needs to keep the faintest text at WCAG AA (4.5:1) against the picture's lightest and darkest areas, and the setting tells you when it did that. Menus, dialogs, approval prompts and the composer card always keep a solid background.
|
|
44
40
|
|
|
45
|
-
Video
|
|
41
|
+
Video plays muted and on a loop. It holds on its first frame — or the pack's poster — while the window is hidden or not focused, when reduced motion is on, and when the battery is low and you are unplugged. Kiki warns about videos above 1440p or 40 MB: they cost a lot of memory and you cannot see the difference behind the panels.
|
|
46
42
|
|
|
47
43
|
## The themes folder
|
|
48
44
|
|
|
@@ -56,13 +52,13 @@ Create it if it does not exist. **The filename is the skin id**: `ocean.json` ap
|
|
|
56
52
|
After adding a file, press **Reload skins** in Appearance. No restart needed.
|
|
57
53
|
|
|
58
54
|
::: warning Which machine's folder?
|
|
59
|
-
|
|
55
|
+
The themes folder is read on the machine running the Kiki server, since that is the only filesystem it can see.
|
|
60
56
|
|
|
61
|
-
- **Desktop app** — your own `~/.kiki/themes
|
|
62
|
-
- **Browser connected to a remote server** — the folder belongs to that server, not to the device you are browsing from.
|
|
57
|
+
- **Desktop app** — your own `~/.kiki/themes/`.
|
|
58
|
+
- **Browser connected to a remote server** — the folder belongs to that server, not to the device you are browsing from. Built-in skins work either way, because they ship inside the app.
|
|
63
59
|
:::
|
|
64
60
|
|
|
65
|
-
Kiki
|
|
61
|
+
Kiki does not write skin files into this folder. **Export as skin file** hands you the file and you place it where you want it. Appearance packs are the exception: **Import pack** and **Delete** create and remove pack folders here, and do nothing else.
|
|
66
62
|
|
|
67
63
|
## Write a skin
|
|
68
64
|
|
|
@@ -129,7 +125,7 @@ Every value is `#rgb` or `#rrggbb`.
|
|
|
129
125
|
| `shadowInk` | The color shadows and modal scrims are mixed from |
|
|
130
126
|
|
|
131
127
|
::: tip Keep text readable
|
|
132
|
-
Kiki's
|
|
128
|
+
Kiki's built-in palettes hold WCAG AA (4.5:1) for body, secondary, faint and semantic text against `canvas`, `paper` and `panel`, and for `onAccent` against `accent`. Set `accentInk` for text rather than reusing the button fill `accent`, especially in Paper. A skin below that contrast still loads, and Kiki will not correct it for you, so check your `ink`, `inkSoft` and `inkFaint` against all three surfaces before you ship it.
|
|
133
129
|
:::
|
|
134
130
|
|
|
135
131
|
### Fonts
|
|
@@ -158,13 +154,13 @@ Always end a stack with a CJK-capable family or a generic (`sans-serif`, `serif`
|
|
|
158
154
|
|
|
159
155
|
## What happens on errors
|
|
160
156
|
|
|
161
|
-
|
|
157
|
+
A bad skin never leaves you without an interface. Appearance reports what it did with each file:
|
|
162
158
|
|
|
163
|
-
- **An invalid color or font value**: that one token is dropped and keeps its default; the rest of the skin applies.
|
|
164
|
-
- **An unknown token**: ignored
|
|
165
|
-
- **An unexpected top-level key** (for instance a `css` field): the whole file is rejected, because a skin
|
|
166
|
-
- **Malformed JSON, or a TUI theme file**: skipped
|
|
167
|
-
- **A selected skin file that disappears**: the GUI falls back to the default palette and says the skin is missing, rather than
|
|
159
|
+
- **An invalid color or font value**: that one token is dropped and keeps its default; the rest of the skin applies.
|
|
160
|
+
- **An unknown token**: ignored.
|
|
161
|
+
- **An unexpected top-level key** (for instance a `css` field): the whole file is rejected and listed with the reason, because a skin that carries anything besides tokens is not a skin.
|
|
162
|
+
- **Malformed JSON, or a TUI theme file**: skipped with a reason, and the other files still load.
|
|
163
|
+
- **A selected skin file that disappears**: the GUI falls back to the default palette and says the skin is missing, rather than quietly applying a different one.
|
|
168
164
|
|
|
169
165
|
## Appearance packs
|
|
170
166
|
|
|
@@ -203,22 +199,22 @@ Settings → Appearance → Appearance packs lists installed packs with their pr
|
|
|
203
199
|
- `background.media` names 1–12 files; with more than one, `interval` (seconds) turns them into a carousel. `poster` is the still shown while a video is paused.
|
|
204
200
|
- The background dials are `fit` (`cover` `contain` `tile` `center`), `alignment` (`center` `top` `bottom` `left` `right` `topLeft` `topRight` `bottomLeft` `bottomRight`), `opacity` (0–1), `blur` (0–40), `brightness` (0.4–1.4), `scrim` (0–0.9), `scope` (`window` `main` `sidebar`), `surfaceOpacity` (0.3–1) and `surfaceBlur` (0–32). The names follow Windows Terminal's background settings.
|
|
205
201
|
|
|
206
|
-
`surfaceOpacity`
|
|
202
|
+
`surfaceOpacity` sets how far the sheet washes on each GUI page — and the inspector — let the background through, within the scope you chose. Readability assist keeps the local text wash in the conversation and settings, and frosts the other page sheets and the inspector instead of raising their opacity. Text over a busy picture can still be hard to read at low opacity even with assist on; raise `surfaceOpacity` when you need more separation. Dialogs, popovers and the composer card keep solid fills.
|
|
207
203
|
|
|
208
204
|
The built-in `kiki-appearance` skill walks an agent through making a pack: the format, the contrast rules for each color, media sizes and encoding, packaging, and the usual mistakes.
|
|
209
205
|
|
|
210
206
|
### What a pack can and cannot contain
|
|
211
207
|
|
|
212
|
-
- **Only** the manifest and picture or video files it names: PNG, JPEG, WebP, AVIF, GIF, MP4, WebM. Anything else in the archive
|
|
213
|
-
- Every file's first bytes must match its extension, so a renamed page cannot pass as a picture. Files are served with their true type, `nosniff`, and a sandboxing content policy.
|
|
208
|
+
- **Only** the manifest and picture or video files it names: PNG, JPEG, WebP, AVIF, GIF, MP4, WebM. Anything else in the archive — a script, a stylesheet, SVG, HTML, a font, or a file the manifest does not name — refuses the whole pack.
|
|
209
|
+
- Every file's first bytes must match its extension, so a renamed web page cannot pass as a picture. Files are served with their true type, `nosniff`, and a sandboxing content policy.
|
|
214
210
|
- Limits: 25 MB per picture, 100 MB per video, 100 MB and 64 files per pack. Archive entries are checked against these before anything is decompressed.
|
|
215
|
-
- **No custom CSS.** Tokens already reach every color, face and shape the app exposes
|
|
216
|
-
-
|
|
211
|
+
- **No custom CSS.** Tokens already reach every color, face and shape the app exposes, and a stylesheet could hide approval prompts, draw fake controls, or load tracking URLs.
|
|
212
|
+
- A pack is installed as a unit, so any unknown key fails the whole pack — unlike a skin file, which drops a bad token and keeps the rest. Half-accepting a pack would pair media with colors the author never tested together.
|
|
217
213
|
|
|
218
214
|
### Linked pictures
|
|
219
215
|
|
|
220
|
-
**Or paste a link** fetches through the server
|
|
216
|
+
**Or paste a link** fetches through the server, which allows `https` only, no credentials in the URL, at most three redirects, and the same size limits as an uploaded file. Every redirect hop is resolved and refused unless it points at a public internet address — loopback, private, link-local and carrier-grade NAT ranges are all out. The type is checked from the bytes, not from the response headers.
|
|
221
217
|
|
|
222
218
|
## Distribution
|
|
223
219
|
|
|
224
|
-
|
|
220
|
+
An enabled plugin can ship skins. Anything it declares under `x-kiki.themes` appears in the picker beside your own skin files, marked with the plugin that contributed it. To share a skin of your own, send the `.json` file, bundle it into a plugin, or ship colors with art as an [appearance pack](#appearance-packs).
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
# Custom Themes
|
|
2
2
|
|
|
3
|
-
Kiki can use a built-in color scheme or
|
|
3
|
+
Kiki can use a built-in color scheme or your own JSON theme file. Custom files live in the themes directory and show up in `/theme` next to the built-in choices.
|
|
4
4
|
|
|
5
5
|
::: tip Terminal themes and GUI skins
|
|
6
|
-
This page
|
|
6
|
+
This page covers **terminal (TUI) themes**. The GUI uses its own format called a **skin**, which covers colors, fonts and shape as well — see [GUI Skins](./skins.md).
|
|
7
7
|
|
|
8
|
-
Both live in the **same directory** (`~/.kiki/themes/`) and are told apart by content: a file with `"kind": "kiki-skin"` is a GUI skin, anything else is a TUI theme
|
|
8
|
+
Both live in the **same directory** (`~/.kiki/themes/`) and are told apart by content: a file with `"kind": "kiki-skin"` is a GUI skin, anything else is a TUI theme, and each loader ignores the other's files. A TUI theme does not restyle the GUI, and a skin does not restyle the terminal.
|
|
9
9
|
:::
|
|
10
10
|
|
|
11
11
|
## Built-in color tokens
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
A custom theme can override any token below. The `dark` and `light` columns are the built-in values; `auto` resolves to one of them at startup and falls back to `dark` when terminal background detection is unavailable.
|
|
14
14
|
|
|
15
15
|
| Token | `dark` | `light` | What it controls |
|
|
16
16
|
| --- | --- | --- | --- |
|
|
@@ -34,17 +34,15 @@ Custom themes can override the tokens below. The `dark` and `light` columns show
|
|
|
34
34
|
| `roleUser` | `#FFCB6B` | `#9A4A00` | User message bullet and text, skill-activation name |
|
|
35
35
|
| `shellMode` | `#BD93F9` | `#7C3AED` | Shell mode (`!`) prompt, editor border, and the echoed `$ command` line |
|
|
36
36
|
|
|
37
|
-
##
|
|
37
|
+
## Let the skill write it
|
|
38
38
|
|
|
39
|
-
You do not
|
|
40
|
-
|
|
41
|
-
Example invocations:
|
|
39
|
+
You do not have to write the JSON by hand. Run `/kiki-ops` and describe the theme you want — the skill picks the colors, writes the file under `~/.kiki/themes/`, checks the hex values, and tells you how to apply it.
|
|
42
40
|
|
|
43
41
|
- `/kiki-ops Create a warm dark theme with amber accents.`
|
|
44
42
|
- `/kiki-ops Make a light theme based on Solarized, but keep errors easy to see.`
|
|
45
43
|
- `/kiki-ops Tweak my ember theme so diffs have higher contrast.`
|
|
46
44
|
|
|
47
|
-
|
|
45
|
+
It will usually ask whether you want a light or dark base, what mood or palette you prefer, and whether you have specific colors to include. When you ask it to edit an existing theme, it reads and backs the file up before overwriting.
|
|
48
46
|
|
|
49
47
|
## Create a theme
|
|
50
48
|
|
|
@@ -90,8 +88,8 @@ Use the token names from [Built-in color tokens](#built-in-color-tokens). Any to
|
|
|
90
88
|
|
|
91
89
|
Two ways:
|
|
92
90
|
|
|
93
|
-
1. **The `/theme` command**
|
|
94
|
-
2. **`tui.toml
|
|
91
|
+
1. **The `/theme` command** — opens the picker, where your themes appear as `Custom: <filename>`. The picker re-scans the directory each time it opens, so a file you just added shows up without a restart.
|
|
92
|
+
2. **`tui.toml`** — set `theme` to the theme's name:
|
|
95
93
|
|
|
96
94
|
```toml
|
|
97
95
|
# ~/.kiki/tui.toml
|
|
@@ -100,11 +98,13 @@ Two ways:
|
|
|
100
98
|
|
|
101
99
|
## What happens on errors
|
|
102
100
|
|
|
103
|
-
|
|
101
|
+
A bad value never stops the theme from loading:
|
|
104
102
|
|
|
105
|
-
- **An invalid color value** (not `#` followed by 6 hex digits): that one entry is
|
|
103
|
+
- **An invalid color value** (not `#` followed by 6 hex digits): that one entry is skipped and falls back to the selected base palette; the rest still apply.
|
|
106
104
|
- **An unrecognized token**: ignored, with no effect on other colors.
|
|
107
|
-
- **A missing
|
|
105
|
+
- **A missing theme file or malformed JSON**: falls back to the built-in `dark` palette, not to `auto`.
|
|
106
|
+
|
|
107
|
+
If your changes do not appear at all, check that the filename matches `name` in the file — that mismatch is the usual cause, and it fails silently.
|
|
108
108
|
|
|
109
109
|
## Editing the active theme
|
|
110
110
|
|
|
@@ -114,5 +114,5 @@ If you edit the theme file that is **currently active**, the change is not reloa
|
|
|
114
114
|
- switch to another theme in `/theme` and back.
|
|
115
115
|
|
|
116
116
|
::: warning Note
|
|
117
|
-
|
|
117
|
+
Picking the **same** theme again in `/theme` does not reload it — you get "Theme unchanged". Use `/reload-tui`, or switch to another theme and back.
|
|
118
118
|
:::
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Agent Profiles
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Agent Profiles
|
|
6
|
+
|
|
7
|
+
An **agent** is the thing that actually does the work: it reads files, runs commands, calls tools, and answers. Every agent in Kiki is defined by a **profile** — one Markdown file that says which model and thinking effort it runs on, how it is instructed, which tools it may call, and which agents it can hand work to. Write a profile once and every dispatch of that kind of agent reuses it.
|
|
8
|
+
|
|
9
|
+
This page explains what an agent is, how the main agent and subagents differ, and how to choose and combine profiles. The full field reference lives in [Agents and Sub-Agents](/en/customization/agents) and [Agent profiles: concepts and design](/en/customization/agent-profiles).
|
|
10
|
+
|
|
11
|
+
## The main agent and its subagents
|
|
12
|
+
|
|
13
|
+
You talk to one agent per session: the **main agent**. It receives your messages, plans, calls tools, and produces the replies you see. When a piece of work is worth isolating, the main agent dispatches a **subagent** to handle it — a coding change that needs exploring first, several implementations to review in parallel, a large refactor to plan without loading the main context.
|
|
14
|
+
|
|
15
|
+
A subagent is given a task description and works in its own isolated context. It reports back with its conclusions and a note when it finishes; its full reasoning and tool records are not poured into the main agent's conversation, which is what lets several lines of work run at once without the main context filling with detail. That is context isolation, not a sealed box: you can open any subagent to read its own transcript, and message it yourself from its composer — see [A subagent keeps its own record](/en/features/workbench#a-subagent-keeps-its-own-record).
|
|
16
|
+
|
|
17
|
+
A dispatch tree in which a lead session has spawned several subagents, each with its own model bound\.
|
|
18
|
+
|
|
19
|
+
Each subagent spends model tokens of its own, so handing over a task the main agent could finish in one step is pure extra cost. Whether the remaining work is separable enough to hand off is the main agent's own judgment, and naming a role yourself overrides it.
|
|
20
|
+
|
|
21
|
+
### How a profile becomes a main agent
|
|
22
|
+
|
|
23
|
+
A profile is not a main agent or a subagent by itself. Which one it is depends on how it is bound:
|
|
24
|
+
|
|
25
|
+
- **Selected as the session's main agent** — with `--agent` in the terminal, or from the profile selector when you start a session. This is the agent you talk to.
|
|
26
|
+
- **Dispatched as a subagent** — when the main agent hands it a task. This is the normal case for every other role.
|
|
27
|
+
- **Run independently** — an external host such as an MCP client, an SDK caller, or an external executor invokes the agent on its own. It is not a subagent of this session, so Kiki gives it the standalone handoff notice instead of the subagent one, but the host is still the side that receives its result.
|
|
28
|
+
|
|
29
|
+
The profile picker on the New session page, listing the profiles that can drive a session and the one currently checked\.
|
|
30
|
+
|
|
31
|
+
The `main: true` frontmatter flag marks a profile as a *candidate* for the session's main agent, which is what puts it in the selector. It is not an authorization gate: naming such a profile explicitly in a dispatch still runs it as a subagent, and it never becomes the session's main agent that way. The actual binding is what you select, and the flag only decides what you can select from.
|
|
32
|
+
|
|
33
|
+
The session's main agent runs on the model you pick for the session, which overrides whatever its profile pins. A subagent resolves its own model separately, in order: an explicit `model_alias` on the dispatch, then the pin or model menu of the profile it runs as, then `[subagent].default_model`. A profile left without a pin and no default configured fails the dispatch with `model.not_configured` rather than silently inheriting the caller's model — except for the templates that set `model_alias: inherit` on purpose. So the model you choose in the menu governs the agent you are talking to, and what a profile pins governs every agent dispatched as that role.
|
|
34
|
+
|
|
35
|
+
### One model, shared settings, differences only where you want them
|
|
36
|
+
|
|
37
|
+
When the same model serves both roles, you do not define it twice. A model is defined once — its alias, provider, credentials, context window, and supported efforts — and the roles share the usual operating settings such as default effort, service tier, when the context compresses, and the context budget. The main agent can override just the ones that should differ, and anything it leaves unset is inherited; a subagent simply uses the shared values.
|
|
38
|
+
|
|
39
|
+
So a single model can be set to a high effort for the agent you talk to and the default elsewhere, or compress at a tighter point for the main agent while subagents keep the shared trigger. Everything not named stays shared, and an explicitly chosen model or effort in a session still wins. Prompt fields follow the same split between shared, main, and independent: parameters are inherited field by field, while the old prompt identity blocks still replace as a whole. See [`models` in the config reference](/en/configuration/config-files#models) and [Model menus and hard boundaries](/en/customization/agent-profiles#model-menus-and-hard-boundaries) for the exact rules.
|
|
40
|
+
|
|
41
|
+
## One file describes the role
|
|
42
|
+
|
|
43
|
+
The **frontmatter** carries the configuration — the name, the description the dispatcher reads, the model and thinking effort, the tool allowlist, and which subagents the role may itself dispatch. The **body** is the system prompt the agent starts from. Nothing else is required: a profile is plain text you can read, diff, and keep in version control.
|
|
44
|
+
|
|
45
|
+
Fresh installs ship three roles you can use immediately: the main `agent` that drives sessions, `general`, a general-purpose subagent that can read, write, run commands, and search, and `explore`, a read-only explorer for mapping unfamiliar code.
|
|
46
|
+
|
|
47
|
+
**Settings → Agents** is where they all live. One list, main agents and subagents side by side, each row showing its model, effort, and which child agents it may create — with the file each one comes from when you need to edit it.
|
|
48
|
+
|
|
49
|
+
The Settings \> Agents list, with main agents and subagents grouped and each role's model, effort, and permitted child agents on its row\.
|
|
50
|
+
|
|
51
|
+
## The roles worth writing
|
|
52
|
+
|
|
53
|
+
Two more ship as templates, because most work divides into the same two shapes:
|
|
54
|
+
|
|
55
|
+
- **`implementer`** owns one technical objective end to end — investigate, implement when authorized, verify, and hand off with evidence. It may use `explore` for read-only groundwork but keeps the final engineering judgment.
|
|
56
|
+
- **`reviewer`** judges a decision, a candidate, or a repair independently and read-only, reporting findings without changing the work. Its tools are restricted so it cannot edit or dispatch.
|
|
57
|
+
|
|
58
|
+
Both templates set `model_alias: inherit`, so the role follows whatever model dispatched it unless you pin one. You can add them from first-run setup, the `/kiki-profile` skill, or **Settings → Agents**.
|
|
59
|
+
|
|
60
|
+
Editing one opens its own page. The form covers the fields that matter — the instructions it starts from, the description the dispatcher reads, when to use it, model, effort, engine, whether it can drive a session, and which child agents it may create — with a **Raw file** tab beside it when you would rather read or write the Markdown directly.
|
|
61
|
+
|
|
62
|
+
The agent editor: instructions, description, when to use it, model, effort, engine, the main-agent switch, and the child agents this role may create\.
|
|
63
|
+
|
|
64
|
+
Writing your own pays off when a kind of work recurs and has house rules: a reviewer that must cite file and line, a tester that always runs the suite before reporting, an implementer that must not touch generated files. Starting from a copy of a role that already works, or from a shipped template, beats starting blank.
|
|
65
|
+
|
|
66
|
+
## Deciding which one runs
|
|
67
|
+
|
|
68
|
+
You rarely pick a profile by hand. The main agent dispatches on the `description` and `whenToUse` each profile declares, so those two lines decide the work — write them for the dispatcher, not for yourself. You can still steer: ask for a role by name ("use `explore` to map the files first"). Whether a dispatch stops for your approval depends on the session's [permission mode](/en/guides/interaction#permission-modes) — under `manual` each one is a request you read and accept or reject, while `auto` and `yolo` let routine dispatches proceed.
|
|
69
|
+
|
|
70
|
+
Where a role runs is also yours to fix. Bind the main agent, each subagent, and the reviewer to different models or vendors so a strong model plans while cheaper ones do routine work. Set a hard allowlist when a role must not run an expensive model, and a model menu with `restrict_models_to_menu: true` when the profile already maintains a complete permitted set. See [Providers and models](/en/configuration/providers) and [Model menus and hard boundaries](/en/customization/agent-profiles#model-menus-and-hard-boundaries).
|
|
71
|
+
|
|
72
|
+
Edits reload in about 200 ms and newly dispatched agents pick them up immediately. A session already in flight keeps the profile snapshot it started with, so use **Rebuild context** in that session to apply the change without losing the conversation. See [Profile reloads and live sessions](/en/customization/agents#profile-reloads-and-live-sessions).
|
|
73
|
+
|
|
74
|
+
## A profile is not a persona
|
|
75
|
+
|
|
76
|
+
A profile is execution configuration: tools, permissions, model, effort, and the prompt the role starts from. A [persona](/en/features/people) is identity: who someone is, what they are for, and what they remember across conversations. A persona card names the profile it rides on, and you can rebind that profile without losing the identity.
|
|
77
|
+
|
|
78
|
+
## Next steps
|
|
79
|
+
|
|
80
|
+
- [Agents and Sub-Agents](/en/customization/agents) — the field reference and dispatch contract
|
|
81
|
+
- [Agent profiles: concepts and design](/en/customization/agent-profiles) — where profiles live and when changes take effect
|
|
82
|
+
- [One workbench, many lines](/en/features/workbench) — what the main session does with a dispatched tree
|
|
83
|
+
- [Every layer is yours](/en/features/freedom) — prompt overrides, connections, permission modes, and hooks
|
|
84
|
+
|
|
85
|
+
[Online version with images](https://x-t-e-r.github.io/kiki/en/features/agents.html)
|
|
@@ -4,7 +4,7 @@ title: The daily driver
|
|
|
4
4
|
|
|
5
5
|
# The daily driver
|
|
6
6
|
|
|
7
|
-
The workbench is one window, but the work is not: a turn runs, a subagent finishes, something needs your approval, and the cost adds up. This page is about the parts of that window you look at every day — the timeline that stays readable, annotations you can leave on a message, the tray that collects what needs you, the right rail that follows whichever agent you are focused on, and the usage page that tells you what it cost.
|
|
7
|
+
The workbench is one window, but the work is not: a turn runs, a subagent finishes, something needs your approval, and the cost adds up. This page is about the parts of that window you look at every day — the timeline that stays readable, annotations you can leave on a message, the tray that collects what needs you, the right rail that follows whichever agent you are focused on, and the usage page that tells you what it cost, what is holding a request up, and where those numbers can go.
|
|
8
8
|
|
|
9
9
|
## A timeline that stays readable
|
|
10
10
|
|
|
@@ -12,7 +12,7 @@ A long agent turn is mostly tool calls, thinking, and shell output. The conversa
|
|
|
12
12
|
|
|
13
13
|
Resolved questions, approvals, markers, and completion notices stay inline at their original position as compact one-line entries. Consecutive entries fold into an expandable "Activity history" row, and consecutive identical marker dividers (such as goal updates) show only the latest one with a repeat count, for example "Goal updated ×12", when nothing separates them. Reopening a session shows model changes as dividers naming the previous and new model; changing only thinking effort does not add one.
|
|
14
14
|
|
|
15
|
-
Long tool output loads
|
|
15
|
+
Long tool output loads by itself as you scroll: Kiki keeps reading the next segment in the background and the row under the body shows the progress. If a segment fails, it stops there and offers **Retry**, and where the server keeps an original for that field the same row offers **Download original** to save the field's full content to your machine. See [Interface overview](/en/guides/interface#conversation-view).
|
|
16
16
|
|
|
17
17
|
## Annotations: say something about a message
|
|
18
18
|
|
|
@@ -34,15 +34,45 @@ It shows the agent's head over what it is doing now, "needs you" items as plain
|
|
|
34
34
|
|
|
35
35
|
See [Interface overview](/en/guides/interface#right-rail) and [Session controls](/en/guides/settings#session-controls).
|
|
36
36
|
|
|
37
|
-
## The usage page
|
|
37
|
+
## The usage page answers three different questions
|
|
38
38
|
|
|
39
|
-
**Usage** in the sidebar
|
|
39
|
+
**Usage** in the sidebar is one page with three tabs. **History** answers what a date range cost, **Live** answers why nothing is moving, and **External sync** answers where you want the numbers to go.
|
|
40
40
|
|
|
41
|
-
|
|
41
|
+
### History: what the range cost
|
|
42
42
|
|
|
43
|
-
|
|
43
|
+
**History** opens by default: token usage and estimated cost for a date range, starting at today. The filter bar drives it — range first, then workspace, bucket size, and what the chart is broken down by — and every choice rides the URL, so a view you settled on is a link you can paste. Under the four totals, the trend chart stacks by the breakdown axis, a bucket opens into the sessions and turns behind it, and the tabs below rank sessions by cost so the expensive one is the first row.
|
|
44
44
|
|
|
45
|
-
The usage
|
|
45
|
+
The number it will not give you is a confident wrong one. Token usage and cost carry **separate** completeness indicators: when a provider does not return usage for a call, Kiki marks it unknown rather than recording a real zero, and a figure with unknowns in it is shown as partially unknown instead of a total. **Data reliability** then separates the cases a reader must not confuse — a provider that never reported, accounting that is incomplete, a range with nothing in it, and a request that failed. The cost itself is a local estimate from your own price table; **Model prices** in the header is where an unpriced model gets one, and the page names the models it could not price rather than quietly pricing them at zero.
|
|
46
|
+
|
|
47
|
+
The usage page on its History tab: cost, token, and cache-hit totals for the range, a seven-day trend, and the per-session breakdown below\.
|
|
48
|
+
|
|
49
|
+
### Live: who is running, who is waiting, and which rule is holding them
|
|
50
|
+
|
|
51
|
+
**Live** is the other half of the same page, and it answers the question a spending page raises the moment something feels slow. It counts what this Kiki service is running and what it is holding, and **Request details** breaks those counts down by model, provider, or role.
|
|
52
|
+
|
|
53
|
+
The part that makes it useful is the **Waiting now** list. Each waiting row names the model, how long it has been waiting, and which concurrency rule is holding it back, by rule id. That id is the same one in the **Concurrency limits** editor directly below, so the row tells you which rule to change.
|
|
54
|
+
|
|
55
|
+
A rule picks a target (specific models, specific providers, or everything), a scope (**All sessions** shares one budget across the service; **Each session** gives every session its own), a cap, and what happens past it: **Queue** waits for a slot, **Reject** fails the request immediately. A rule can also carry a wait budget, and a rule targeting only subagents is a switch away. The toggle beside a rule pauses it without deleting it or dropping its wait budget, and saving applies to new and queued requests without killing anything already streaming — which is why raising a cap can release a queue while lowering one can leave running requests briefly above the new limit.
|
|
56
|
+
|
|
57
|
+
Two boundaries worth knowing before you tune this. The cap counts **requests**, not tokens, money, or agents — it is not a spending budget. And it governs model requests this Kiki service sends itself: when you hand a turn to Codex, Claude Code, or Grok Build as the engine, those requests are the engine's own and do not pass through these rules. An external tool that calls back into Kiki to run a native request does count, as Kiki's own.
|
|
58
|
+
|
|
59
|
+
The usage page on its Live tab: running and queued counts by model, a waiting request naming the kimi-cap rule that holds it, and the concurrency rules below with one enabled and one paused\.
|
|
60
|
+
|
|
61
|
+
### External sync: send the numbers somewhere you chose
|
|
62
|
+
|
|
63
|
+
**External sync** sends this server's own usage to a destination you pick, on a schedule you pick. It is the tab for a person who wants their token counts somewhere other than this app: a team warehouse, a personal script, or a hosted service. Three kinds of destination are available:
|
|
64
|
+
|
|
65
|
+
- **Kiki webhook** — your own HTTPS endpoint, receiving a documented JSON batch. Bearer or HMAC authentication, optional gzip, and a secret you can keep in the system keyring or, if you prefer, in a private file on the server; you may narrow the range, exclude workspaces, and keep temporary sessions out.
|
|
66
|
+
- **VibeCafe** — signs in from the page itself with a device code, against the official service. A custom address, or a key you supply yourself, is a separate advanced path. The sign-in is part of the experimental `usage_export` feature: the device-code flow is implemented, but it has not yet been verified end to end against the live service.
|
|
67
|
+
- **Script** — a command you approve. Kiki writes the batch to its stdin and reads a receipt from its output. It runs as your own OS user with your ordinary permissions, so it can read files and reach the network on its own; **this is not a sandbox**, and approval is per command, not per batch.
|
|
68
|
+
|
|
69
|
+
What crosses the wire is deliberately small: the model, a UTC half-hour bucket, four token counts, a quality flag, and a local cost estimate. Prompts, answers, titles, workspace names, and paths are not part of the payload — though the receiving end can still see your address and when you work, and the model name it sees may be an opaque id rather than your local alias. Every destination shows its own state: active, paused, waiting to be sent, refused credential, or a service that already holds a different value. A pause keeps the queue; removing a destination asks separately whether to discard what is still pending.
|
|
70
|
+
|
|
71
|
+
The whole feature is off by default until the server enables the `usage_export` flag, and a saved destination stays **disabled until you preview the exact payload and agree once**. Widening the range, changing the endpoint, or pointing the destination at a different credential asks again; narrowing the range or changing the interval does not.
|
|
72
|
+
|
|
73
|
+
The usage page on its External sync tab: three destinations — a webhook that is active, a VibeCafe connection whose credential was refused with its queue intact, and a script that is paused — each with its endpoint, state, and pending count\.
|
|
74
|
+
|
|
75
|
+
The same destinations can be managed from the terminal with [`kiki usage-export`](/en/reference/command#kiki-usage-export), and every control on this page has a documented field, error code, and limit behind it: see [Usage](/en/guides/settings#usage) for where each control lives and [`request_governance`](/en/configuration/config-files#request-governance) for the rules' full field reference.
|
|
46
76
|
|
|
47
77
|
## Next steps
|
|
48
78
|
|
|
@@ -36,7 +36,9 @@ See [Using Kiki in IDEs](/en/server/ide), [`kiki acp`](/en/server/acp), and [`ki
|
|
|
36
36
|
|
|
37
37
|
The direction reverses: another agent harness runs *your* subagent. An agent profile can carry an `executor` and run on Claude Code, Codex, Cursor, Gemini CLI, Kimi CLI, OpenCode, or Grok Build over ACP or the Codex app-server. Settings → External engines checks whether each one is installed and shows the setup steps that remain.
|
|
38
38
|
|
|
39
|
-
|
|
39
|
+
The external engines list, with each engine's install state, what Kiki can set on it, and any check details that remain\.
|
|
40
|
+
|
|
41
|
+
A seat is a fixed place external tools call into; an external executor is a place Kiki dispatches out to. When the external harness is the main agent instead, `allow_kiki_subagents: true` lets it dispatch Kiki subagents back, and `kiki_context` can expose Kiki's own native context — memory, board, cron, threads, history, hooks — to it over the same bridge, with child completions queued back to the main agent. The profile's tool policy, dispatch policy, model constraints, and notification policy still apply across that bridge.
|
|
40
42
|
|
|
41
43
|
See [External main-agent delegation](/en/customization/agents#external-main-agent-delegation) and [Kiki context in external main agents](/en/customization/agents#kiki-context-in-external-main-agents).
|
|
42
44
|
|
|
@@ -10,7 +10,7 @@ Beyond the model, the prompt, and the tools an agent already has, Kiki has four
|
|
|
10
10
|
|
|
11
11
|
A plugin is the packaging unit. One plugin can contribute skills, agents, MCP servers, hooks, commands, tools, and sandboxed panels, and you can browse, install, and configure plugins on the **Capabilities** page. Claude Code plugins with a `.claude-plugin/plugin.json` manifest install too, and you can point Kiki at your own marketplace JSON.
|
|
12
12
|
|
|
13
|
-
The official marketplace is maintained by Kimi and currently has three plugins: **Kimi Datasource** (query market data, macro indicators, company registrations, academic literature, and laws in natural language), **Kimi Browser Extension** (let AI drive your own browser), and **Kimi Computer Use** (let AI operate your desktop apps). Two more capabilities are separate plugins, not part of that trio: **Kiki
|
|
13
|
+
The official marketplace is maintained by Kimi and currently has three plugins: **Kimi Datasource** (query market data, macro indicators, company registrations, academic literature, and laws in natural language), **Kimi Browser Extension** (let AI drive your own browser), and **Kimi Computer Use** (let AI operate your desktop apps). Two more capabilities are separate plugins, not part of that trio: **Kiki Extract**, which converts a local PDF, Office, HTML, or text file into Markdown that `Read` and `Grep` can use, and **Kiki Notion**, a configuration and workflow for Notion's hosted MCP service. Extracting a file is a reading step — it makes an existing document searchable, and it neither creates nor edits Office documents. Installing a plugin never runs its hooks by itself — they fire only when their matching event occurs while the plugin is enabled. See [Plugins](/en/customization/plugins).
|
|
14
14
|
|
|
15
15
|
Media generation is a separate, experimental capability: a media plugin contributes one or more *sources* for images, video, or speech, which you configure under **Capabilities → Plugins → Media sources**. Generation is **off by default** and has to be turned on explicitly; it is a capability to enable on purpose, not a default.
|
|
16
16
|
|
|
@@ -30,8 +30,14 @@ MCP tools reach the agent exactly like built-in tools, with the same approval mo
|
|
|
30
30
|
|
|
31
31
|
`WebSearch` and `FetchURL` are backed by an inspectable search and retrieval module. **Settings → Search & retrieval → Overview & source** shows which configuration source is in effect and whether the server reuses your local search configuration; `/mcp`-style status and the readiness of each named lane are visible there too. Search runs on named lanes you can inspect — some, like GitHub repository search, work without a key, and multiple keys for one provider rotate across calls. A fetch runs a chain with visible fallbacks, so you can see which extractor produced the text. The equivalent configuration lives in `config.toml` under `nb_search`. See [Search and retrieval](/en/guides/settings#search-retrieval) and [Config files: `nb_search`](/en/configuration/config-files#nb-search).
|
|
32
32
|
|
|
33
|
+
The search lanes tab: the default lane, the pinned ones, and every other lane with where its results and credentials come from\.
|
|
34
|
+
|
|
35
|
+
The fetch chain tab, with the pipelines a web address is read through in order and what each one falls back to\.
|
|
36
|
+
|
|
33
37
|
## Next steps
|
|
34
38
|
|
|
35
39
|
- [Plugins](/en/customization/plugins) — the full plugin reference
|
|
36
40
|
- [Agent Skills](/en/customization/skills) — writing a skill
|
|
37
41
|
- [Model Context Protocol](/en/server/mcp) — connecting MCP servers
|
|
42
|
+
|
|
43
|
+
[Online version with images](https://x-t-e-r.github.io/kiki/en/features/extend.html)
|
|
@@ -36,12 +36,16 @@ Prompt field overrides, down to one tools description, beside a live preview of
|
|
|
36
36
|
|
|
37
37
|
Account connections use **OAuth**. The device flow shows you a code, an **Open verification page** link, how long it stays valid, and **Cancel sign-in**, and the row's status is a word meant for a person: **Connected** (Kiki renews it on its own), **Sign-in expired** (the provider no longer accepts it), **Sign-in didn't finish** (you declined it, the code expired, or it failed), or **Waiting for you**. Signing out ends that sign-in in Kiki and removes the models it provisioned; it does not sign you out at the provider.
|
|
38
38
|
|
|
39
|
+
A device sign-in in progress: the code to enter on the verification page, how long it stays valid, and the cancel action\.
|
|
40
|
+
|
|
39
41
|
**Reusing a sign-in this machine already has** is one way to get an OAuth credential, not a rival to it. For ChatGPT (Codex) and Grok Build, a connection can use the sign-in their own app already holds on this machine. Kiki reuses it and renews it; it does not copy the credential, does not start the other app, and signing in or out here does not change anything there. The order is deliberate: **Check this machine** first reports which account is on the other side and where it is kept, and only then is **Use this sign-in** offered — carrying the account it just showed you, so a credential replaced in between is refused rather than adopted silently. When the machine cannot be used, the page says why in terms you can act on.
|
|
40
42
|
|
|
41
43
|
A sign-in that completes adds that account's models to the catalog. **Available models** is the authority on what you can actually use right now. See [Connections](/en/guides/settings#connections).
|
|
42
44
|
|
|
43
45
|
The connections list: each connection is one row, and its authentication is part of that row\.
|
|
44
46
|
|
|
47
|
+
Reusing a sign-in this machine already holds: what was found and where it is kept, with the action that adopts it\.
|
|
48
|
+
|
|
45
49
|
## Permission modes: how often it asks
|
|
46
50
|
|
|
47
51
|
`/permission` switches among Manual, Auto, Approve for me, and YOLO. In the default Auto mode, routine tool calls run without asking, but sensitive-file and external-link access still request approval. Manual asks before shell commands and workspace-external writes, while trusted-workspace `Write` / `Edit` calls run without per-file approval. YOLO skips sensitive-file prompts unless a rule explicitly denies them. An explicit deny always wins, and the agent can still ask you questions in any mode.
|