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,16 +1,32 @@
|
|
|
1
1
|
# Memory
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Kiki remembers the things you would otherwise re-explain every session: how you like your code reviewed, which project fact you confirmed last week, where a reference lives. It is on by default, everything stays on the machine running Kiki, and every write shows up as one line in the conversation.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
This page covers the scope choices on the **/memory** page, the review inbox that can sit between an agent and a write, and how to turn memory off. For what the agent does inside one session — compression, the message queue, the task board — see [Work that runs long](/en/features/long-work).
|
|
6
|
+
|
|
7
|
+
::: warning Shared memory homes
|
|
8
|
+
A Kiki older than 0.3.2 does not know the **Basis** and **Validity** fields below, and a write from that version can drop them from an entry. If two Kiki installations share one memory home — a desktop app and a CLI on the same `KIKI_HOME`, or a rollback to an earlier build — upgrade each of them to 0.3.2 or later. A field that has already been dropped is not restored for you: an entry that has lost one reads **Not recorded**, and putting it back means recording the basis or the check again from the original instruction or source material.
|
|
9
|
+
:::
|
|
6
10
|
|
|
7
11
|
## What the agent remembers
|
|
8
12
|
|
|
9
|
-
Memory is not a transcript and not a cache. It is the small set of durable facts
|
|
13
|
+
Memory is not a transcript and not a cache. It is the small set of durable facts that would otherwise be lost when a session ends; task progress belongs in the agent's working notes instead. An entry is one subject, held in one place: a short title you can recognize later and the **complete** current content, including the conditions that decide when it applies. The agent replaces content in full rather than appending to it, and keeps correction history and retired values in the change reason, not in the rule itself. The entry body is limited to 1,500 characters and a scope holds 300 active entries at a time; past either, the agent merges into existing entries instead of starting a new one. Replacing an active entry is still allowed at capacity when the final active count does not increase; a proposal is checked again when you approve it.
|
|
14
|
+
|
|
15
|
+
Agents write with `MemoryWrite` and read back with `MemorySearch` and `MemoryRead`. Search matches partial terms, including Chinese phrases without spaces. Native subagents get the two read-only tools by default; `MemoryWrite` stays with the main agent.
|
|
16
|
+
|
|
17
|
+
Search comes in two modes. The default searches for a subject, title or alias and returns a ranked page of 8; `mode: "list"` browses the inventory a page at a time, 20 entries per page, with no query. Both report which scopes and statuses were actually inspected, whether the result set is complete, and whether anything was skipped or unreadable. A cursor continues beyond each scan budget; even an empty preparation page must be continued while `exhausted` is false. Ranking is local to each bounded source chunk, not a global relevance ranking across all remaining entries. A search snippet is at most 200 characters and **omits the conditions** — before relying on an entry, merging it, or replacing it, the agent reads it in full, and a search that finds nothing only means no entry uses those words.
|
|
18
|
+
|
|
19
|
+
In the main agent's `TodoList` notes, `directives` and `decided` can point at an entry by id, like `[m_id]`. At compaction the handoff carries each referenced entry's current title, follows replacements, and marks archived entries as withdrawn.
|
|
20
|
+
|
|
21
|
+
## Where an entry came from, and when to check it
|
|
22
|
+
|
|
23
|
+
An entry can record two things about itself, and both change how you should read it.
|
|
24
|
+
|
|
25
|
+
**Basis** is the content's evidence: `human` (something you asked for or accepted), `observed` (checkable material or an observation), `derived` (Kiki's own inference or a relay of what someone else said), or `unknown`. The detail view spells each one out and shows the note and any source locators behind it. An older entry that has no basis recorded reads **Not recorded** — a gap in the record, not a judgment about the content. Once you have material you can check it against, ask Kiki to record the basis and the check for that entry; the fields are written through the memory tools, not by the editor on the **/memory** page. Kiki will not invent one, and it does not treat a line as yours just because the write happened in your turn.
|
|
10
26
|
|
|
11
|
-
|
|
27
|
+
**Validity** is the check to run before trusting a changing fact. It carries a `check` describing what must be verified, and optionally an `until` timestamp. An entry with a check reads **Before relying on it: Check again**; one past its `until` reads **Past its endpoint** and stays on disk as a historical lead rather than a current premise; one with no recorded validity reads **No check was recorded**. Passing `until` never deletes or archives anything on its own.
|
|
12
28
|
|
|
13
|
-
|
|
29
|
+
Changing an entry's title, type or content on the page keeps its recorded basis and check. When the basis or the check needs to change, ask Kiki to update them at the same time. See [Built-in Tools](/en/reference/tools#memory-tools) for the tool-level contract.
|
|
14
30
|
|
|
15
31
|
## What the page lets you choose
|
|
16
32
|
|
|
@@ -20,40 +36,53 @@ On the `/memory` page you pick which body of memory you are looking at, and the
|
|
|
20
36
|
- **Workspace** — one project's store.
|
|
21
37
|
- **Persona** — one persona's own store, following that persona across profiles and models.
|
|
22
38
|
|
|
23
|
-
Persona
|
|
39
|
+
Persona entries are isolated from each other. By default a persona can also read the shared global and workspace memory; set `memory.shared: []` on the persona card to cut that off. A workspace has its own switch that can follow the global setting, turn on, or turn off — turning it off leaves the saved entries in place, agents just stop reading and writing them there.
|
|
24
40
|
|
|
25
|
-
|
|
41
|
+
A persona can also keep notes scoped to a single workspace, which is how one persona working across several projects keeps project-specific detail of its own.
|
|
42
|
+
|
|
43
|
+
A new entry without an explicit scope goes to the bound persona when there is one, otherwise to the workspace — and choosing a scope never moves an existing entry or widens access to another workspace or persona.
|
|
26
44
|
|
|
27
45
|
### Personas
|
|
28
46
|
|
|
29
|
-
A persona's memory follows the
|
|
47
|
+
A persona's memory follows the persona, not the project, so it survives a change of profile or model. Deleting a persona deletes its memory too; if that cleanup fails, the deletion reports the error and keeps the card so you can retry. See [Personas, Bots, and rooms](/en/customization/personas#memory-and-character-cards).
|
|
30
48
|
|
|
31
49
|
Entries are typed, and the type is what you filter by: **About you**, **Feedback**, **Project**, and **Reference**. An entry is also **pinned** (kept at the top), **active**, **replaced** by a newer entry, or **archived**.
|
|
32
50
|
|
|
51
|
+
### Archived, replaced, and merged
|
|
52
|
+
|
|
53
|
+
Retiring an entry is a state change, not a deletion: the text stays, and **Undo** still reaches it. An agent **replaces** an entry when a rule has genuinely changed, which writes a new entry with its own id and marks the old one **Replaced**, so the history of both remains readable. When the new entry fully covers the old one's content, the agent can retire the old one as **Merged into** the retained entry instead, and the detail view links straight to it; that link is re-checked at the moment the retirement is applied, so a merge cannot silently hide a rule whose replacement has since changed.
|
|
54
|
+
|
|
33
55
|
## The /memory page
|
|
34
56
|
|
|
35
|
-
**/memory** is
|
|
57
|
+
**/memory** is always in the sidebar. With memory off it is the guide for turning it on; with memory on it is where you manage entries — search them, filter by type, show or hide archived ones, and open one to read, edit, pin or delete it.
|
|
36
58
|
|
|
37
|
-
Workspace and Persona are searchable
|
|
59
|
+
Workspace and Persona are searchable pickers, since either list can run to hundreds of entries. Picking one clears the other, and the choice rides a `?workspace=` or `?persona=` parameter, so a link to a particular scope keeps working.
|
|
60
|
+
|
|
61
|
+
The list and Inbox show available entries as they arrive and keep reading automatically until the namespace is covered. If a record cannot be read, the page keeps the readable entries and shows the diagnostic rather than claiming the list is empty. If continuation fails or the source changes, use **Retry** to reload. List previews stay short; opening an entry or **View** in Inbox loads its full content.
|
|
38
62
|
|
|
39
63
|
### Change history and undo
|
|
40
64
|
|
|
41
|
-
Every change to an entry is recorded
|
|
65
|
+
Every change to an entry is recorded. Each history row shows the before and after and offers **Undo** for that one operation, deletes included — which is why the delete confirmation says you can undo it.
|
|
66
|
+
|
|
67
|
+
If the entry changed while you had it open, saving is refused and you are asked to reload first, so your edit cannot overwrite the newer version. Reload and re-apply what you meant to change.
|
|
42
68
|
|
|
43
|
-
|
|
69
|
+
Saving an entry that changes nothing — the same title, content, pin state and recorded attributes — produces no new version and nothing to undo, and the page says **No change**. Re-submitting an edit you already saved is the normal way to land here. Changing only the basis or the check is still a change, and does get its own version.
|
|
44
70
|
|
|
45
71
|
## The review inbox
|
|
46
72
|
|
|
47
73
|
Memory approval has three settings. The default, **auto**, applies a write the agent proposes right away. Set it to **review** and a proposed update or archive waits for you. With `auto` there is nothing pending, so no **Inbox** tab appears at all.
|
|
48
74
|
|
|
49
|
-
While a proposal waits, the original entry keeps its current content and stays in effect. **Keep** applies the proposal — an update replaces the text of the entry it supersedes, an archive archives that entry. **Discard** drops only the proposal and leaves the original untouched.
|
|
75
|
+
While a proposal waits, the original entry keeps its current content and stays in effect. **Keep** applies the proposal — an update replaces the text of the entry it supersedes, an archive archives that entry. **Discard** drops only the proposal and leaves the original untouched. A proposal is not active guidance: it is not used as a premise, and an agent's own write cannot approve it, only you can.
|
|
50
76
|
|
|
51
77
|
## Turning memory off
|
|
52
78
|
|
|
53
|
-
The **/memory** page has a single **Use memory** switch, and the same setting
|
|
79
|
+
The **/memory** page has a single **Use memory** switch, and the same setting lives in the desktop app's settings. Turning it off stops agents from reading or writing memory.
|
|
80
|
+
|
|
81
|
+
The periodic long-term-memory reminders are separate. To stop just those while keeping the new-instruction and pre-compaction checks, set `memory_maintenance = false` in `config.toml` — the memory tools, approval and task notes stay available. See [Continuity reminder settings](/en/configuration/config-files#continuity-reminder-settings).
|
|
54
82
|
|
|
55
83
|
## Next steps
|
|
56
84
|
|
|
57
85
|
- [Personas, Bots, and rooms](/en/customization/personas#memory-and-character-cards) — how persona memory follows a persona
|
|
58
86
|
- [Work that runs long](/en/features/long-work#memory-keeps-the-facts-across-sessions) — the other long-work features
|
|
59
87
|
- [Built-in Tools](/en/reference/tools#memory-tools) — the memory tools in full
|
|
88
|
+
- [Server API](/en/server/rest-api#memory) — the same memory over HTTP
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# Workspaces and sessions
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Every conversation is saved as a session — its message history and metadata — so you can close the terminal or the browser and pick the work up later. The desktop app, the browser UI and the CLI/TUI all read and write the same sessions. This page covers workspaces, resuming and forking, the task board, compression and export.
|
|
4
4
|
|
|
5
5
|
## Session storage
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
Sessions are saved under `$KIKI_HOME/sessions/` (default: `~/.kiki/sessions/`), grouped by working directory. You never need to touch these files to use Kiki; they are here to read when you are debugging or backing up:
|
|
8
8
|
|
|
9
9
|
```text
|
|
10
10
|
~/.kiki/
|
|
@@ -28,27 +28,27 @@ All sessions are saved under `$KIKI_HOME/sessions/` (default: `~/.kiki/sessions/
|
|
|
28
28
|
Do not manually edit files inside the `sessions/` directory — doing so may prevent sessions from being restored correctly.
|
|
29
29
|
:::
|
|
30
30
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
> The two GUI paragraphs above do not apply to CLI users — feel free to skip them.
|
|
31
|
+
In the desktop and browser GUI, the model, effort, workspace, working directory and profile (the agent's configuration file) you pick for a new session can be remembered across navigation and refresh. Turn that on with **Composer → Persist composer drafts** in Settings; turning it off clears what was saved. Drafts in the page you currently have open survive the switch, but the next refresh starts with nothing restored. This is separate from the session files above, which is why the two behave differently.
|
|
34
32
|
|
|
35
33
|
## Task board
|
|
36
34
|
|
|
37
|
-
|
|
35
|
+
The task board lives behind the fixed button at the bottom of the main agent's right panel. Cards hold requirements and the sessions linked to them; an agent's own todo list stays separate and local to that agent.
|
|
38
36
|
|
|
39
|
-
Cards
|
|
37
|
+
Cards load a page at a time, so counts and search results cover what has loaded so far while syncing continues. Changing the workspace scope or closing the board stops further loading. In a card form, card detail, or confirmation, `Tab` stays in the topmost dialog and `Esc` closes only that dialog and returns focus to whatever opened it. A dialog cannot be dismissed while its save or delete is still in flight.
|
|
40
38
|
|
|
41
|
-
Trust the workspace before
|
|
39
|
+
Trust the workspace before you create or edit cards there. Where they are stored is set by `taskBoard.storage`: `auto` reuses a compatible workspace store if it finds one and otherwise uses `sessions/<workspaceId>/.board`; `global` uses the `boards` directory under the Kiki home; `fixed` uses an absolute path, or one relative to the workspace, that you provide. Previewing a path does not create it or give Kiki write access — save the setting first. A directory that exists but cannot hold a board is rejected.
|
|
42
40
|
|
|
43
|
-
Changing the
|
|
41
|
+
Changing the setting does not move existing cards; they keep pointing at the store they were created in. If someone else saved a change first, reload the card and try again — a failed edit keeps your draft. The main agent reads and writes the board with `BoardRead` and `BoardWrite` under the normal tool policy and approval rules; subagents need [explicit permission](../configuration/config-files.md#subagent) for those, keep their own `TodoList`, and Plan mode cannot use `BoardWrite` at all.
|
|
44
42
|
|
|
45
|
-
|
|
43
|
+
After a compaction, the handoff can list up to five cards linked to the session, with ids, titles and statuses. That list needs the board feature and `BoardRead` enabled, and is simply absent if the read fails or takes more than 500 ms. Card status is never updated from todo lists or finished agent runs.
|
|
46
44
|
|
|
47
45
|
## Starting and resuming sessions
|
|
48
46
|
|
|
49
|
-
On the
|
|
47
|
+
On the **New session** page in the desktop app or browser you can pick an existing workspace, type an absolute project directory, or choose **Automatically create a workspace** (the default when nothing is registered yet). With the automatic option, your first send creates a directory under `$KIKI_HOME/workspaces/` (default: `~/.kiki/workspaces/`), registers it, and opens the session there. If you picked a workspace explicitly and it was deleted since, it stays invalid until you choose another one or switch to automatic — Kiki will not quietly open a different workspace. [Data locations](../configuration/data-locations.md#directory-layout) has the layout and what cleanup touches.
|
|
48
|
+
|
|
49
|
+
Opening a saved session reads its history without waking an inactive session's agents, and selecting a subagent reads that subagent's history without the main agent's conversation. The session activates when you send, edit or regenerate a message, answer an approval or question, or steer a prompt. If activation fails, nothing is sent and the history stays readable. Reading a session never stops work already running in it.
|
|
50
50
|
|
|
51
|
-
|
|
51
|
+
The GUI opens with a small window of the latest messages. Scrolling up loads the next earlier page automatically; staying in the conversation does not load its entire history in the background. Visible messages and expanded entries load the details they need. Jumping to an older message or returning to a saved reading position continues loading until that place is found; scrolling yourself cancels the old jump. Older message previews may be fetched again as you scroll to keep the reading cache small. Leaving the conversation cancels its pending reads, not the agent's work. A real read failure keeps the messages already loaded and offers a retry; [Reading timeout](./settings.md#timeouts) controls how long a read may wait.
|
|
52
52
|
|
|
53
53
|
Every time you run `kiki` directly it creates a new session. To resume a previous session, use one of the following:
|
|
54
54
|
|
|
@@ -74,7 +74,7 @@ kiki --session
|
|
|
74
74
|
`--continue` and `--session` are mutually exclusive.
|
|
75
75
|
:::
|
|
76
76
|
|
|
77
|
-
In the GUI, a saved model, profile
|
|
77
|
+
In the GUI, a saved model, profile or effort that is no longer available stays visible with a diagnostic. Pick a valid value before sending — the GUI will not quietly swap in a different model or profile. An error while the list is still loading, or a failed catalog request, does not mean your saved choice is bad.
|
|
78
78
|
|
|
79
79
|
## Switching sessions inside the TUI
|
|
80
80
|
|
|
@@ -87,19 +87,25 @@ You can manage sessions without leaving the terminal. The following slash comman
|
|
|
87
87
|
|
|
88
88
|
## GUI session recovery and activity
|
|
89
89
|
|
|
90
|
-
|
|
90
|
+
A thread created by another thread nests under its creator by default. **Show at top level** in the row's menu lifts it into its own top-level row, and **Show nested** puts it back. This is display only — the creator relationship stays as it is, and the choice survives a refresh or restart in the same browser or desktop space. The same menu also offers **Copy thread link** for a link to that thread, and **Add to conversation** to drop a reference to it into the conversation you currently have open.
|
|
91
|
+
|
|
92
|
+
The sidebar sorts threads by their own update time. A thread shown at top level keeps its own position and time group: activity in it does not move its parent, and activity in the parent does not carry it along. Nested threads still follow their creator's row.
|
|
93
|
+
|
|
94
|
+
If session recovery fails, the GUI keeps whatever history it had already loaded and shows the error, with a request ID when there is one. **Retry now** next to it reruns the recovery.
|
|
91
95
|
|
|
92
|
-
|
|
96
|
+
Editing a queued prompt's text or delivery timing through Kiki keeps its identity on recovery; you do not need to restore the original text or send a duplicate. If a completed turn cannot be saved because storage is temporarily unavailable, Kiki briefly retries saving the same result without running the turn again. A longer outage keeps the turn waiting for persistence; after storage is writable again, submitting the next prompt retries that save before continuing. A pending save is not confirmation that the result is on disk.
|
|
93
97
|
|
|
94
|
-
Resolved questions, approvals, markers
|
|
98
|
+
Resolved questions, approvals, markers and finished background tasks stay in the timeline as compact entries. Finished work can be grouped under **Worked**; expand it to see the individual entries. Expanding a question shows the full question and, for an answered one, the saved answer — dismissed and expired questions show their original choices too. Output from completed tasks stays in task history. File references can be previewed, opened or revealed in their folder; a preview is generated on demand, and the original file is still there to open or download.
|
|
95
99
|
|
|
96
|
-
|
|
100
|
+
Images in sent attachments and in tool results appear as soon as they scroll into view — you do not click to load them. Clicking one opens it full size, and a real failure offers a retry. The viewer keeps its own **Download**; there is no second download link under each image.
|
|
101
|
+
|
|
102
|
+
Markdown previews open rendered. **Source** shows the text, and in the desktop app you can edit it there when a write channel is available. The rendered view handles tables, math, diagrams and images linked relative to the Markdown file. A file above roughly 512 KB starts as its opening portion and keeps loading the rest in the background; it stays read-only at that size, so use **Source** to read it but edit smaller files. If the background read fails, the view says so and offers a retry.
|
|
97
103
|
|
|
98
104
|
## GUI usage statistics
|
|
99
105
|
|
|
100
|
-
|
|
106
|
+
**Usage** opens on today in the browser's local time. A range in the URL overrides that, and a saved all-history view does not replace it. The page keeps its date boundary correct across midnight and when the browser's timezone offset changes.
|
|
101
107
|
|
|
102
|
-
Token usage and estimated cost
|
|
108
|
+
Token usage and estimated cost each carry their own completeness marker. If a provider returned no usage, Kiki shows that as unknown rather than as a real zero, and mixed results show the recorded subtotal with an incomplete-accounting notice. A missing model price affects the cost estimate only, never the recorded token count. **Data reliability** tells these cases apart from an empty range or a failed request.
|
|
103
109
|
|
|
104
110
|
## Context compression
|
|
105
111
|
|
|
@@ -115,19 +121,19 @@ You can pass a hint to tell the model what to prioritize when compressing:
|
|
|
115
121
|
/compact Keep the discussion about database migrations
|
|
116
122
|
```
|
|
117
123
|
|
|
118
|
-
|
|
124
|
+
You can ask for a compaction while the agent is already working. Kiki queues the request and runs it once the current response and the tools it called have finished, without waiting for the rest of the turn. Asking again while a manual compaction is queued or running does nothing — there is only ever one. The line above the context meter says which one you are watching and how far along it is: **Manual compaction queued**, then **running**, then **complete**. A run that cannot compact ends as **failed**. The automatic one from the context limit reads the same way, with *Automatic* in place of *Manual*.
|
|
125
|
+
|
|
126
|
+
The context meter under the composer shows the same numbers, lets you set the compaction point, and carries the renewal strategy: **summarize**, **fresh** (restart from the agent's working notes), or **auto** (the built-in main-agent default: restart when the notes safely cover the work, otherwise summarize). `/autocompact` shows or moves the compaction point from the terminal. Facts that must survive compression belong in [memory](./memory.md), which outlives the session.
|
|
119
127
|
|
|
120
128
|
## Forking a session
|
|
121
129
|
|
|
122
|
-
|
|
130
|
+
`/fork` copies the current session so you can try a different direction without disturbing this one:
|
|
123
131
|
|
|
124
132
|
```sh
|
|
125
133
|
/fork
|
|
126
134
|
```
|
|
127
135
|
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
After forking, the CLI prints a ready-to-run `kiki --resume` command (also copied to the clipboard) so you can enter the fork directly from a new terminal process.
|
|
136
|
+
You stay in the original session; the fork is an independent copy you can switch to whenever you like with `/sessions`. A `/goal` you saved does not come along — set one in the fork if you want goal-driven work there. New forks do not inherit scheduled tasks, whether you copy the full session, fork at a turn boundary, or create a child session. Schedules in the original session and existing copies stay unchanged; create a new task explicitly in the new session if needed. The CLI prints a ready-to-run `kiki --resume` command, also on your clipboard, so you can open the fork from a fresh terminal.
|
|
131
137
|
|
|
132
138
|
## Exporting a session
|
|
133
139
|
|
|
@@ -143,14 +149,14 @@ Omitting `sessionId` exports the most recent session in the current directory (w
|
|
|
143
149
|
kiki export <sessionId> -o ~/Desktop/my-session.zip
|
|
144
150
|
```
|
|
145
151
|
|
|
146
|
-
The export includes
|
|
152
|
+
The export includes everything in the session directory, diagnostic logs included, plus the global log at `~/.kiki/logs/kimi-code.log` (the name is inherited from the project's earlier naming). Add `--no-include-global-log` to leave that one out.
|
|
147
153
|
|
|
148
154
|
You can also export from inside the TUI without leaving the interactive session:
|
|
149
155
|
|
|
150
156
|
- **`/export-debug-zip`**: produces the same debug ZIP as `kiki export`.
|
|
151
157
|
- **`/export-md`** (alias `/export`): exports the conversation as a human-readable Markdown file, suitable for sharing or archiving. Accepts an optional path argument; without one, it writes to `kimi-export-<short-id>-<timestamp>.md` in the current working directory.
|
|
152
158
|
|
|
153
|
-
In the web UI, `/export` downloads the current session as a diagnostic ZIP
|
|
159
|
+
In the web UI, `/export` downloads the current session as a diagnostic ZIP: the persisted session data, diagnostic logs, and a bounded metadata-only `logs/kimi-web.jsonl` record of key browser events. Prompt text, WebSocket payloads and console arguments are not copied into that browser log. This is a different command from the TUI `/export` alias above.
|
|
154
160
|
|
|
155
161
|
::: tip
|
|
156
162
|
Exported files may contain code, command output, and file paths that are sensitive. Review the content before sharing.
|
|
@@ -26,7 +26,7 @@ The Kiki desktop app exposes preferences in the **Settings** dialog and activity
|
|
|
26
26
|
|
|
27
27
|
## Connections
|
|
28
28
|
|
|
29
|
-
**Settings → Models & providers → Connections** (`/settings/ai?tab=providers`) is one list. Every way Kiki reaches a model is a **connection** — an account you sign in to, a hosted API you hold a key for, or a server on this machine — and each
|
|
29
|
+
**Settings → Models & providers → Connections** (`/settings/ai?tab=providers`) is one list. Every way Kiki reaches a model is a **connection** — an account you sign in to, a hosted API you hold a key for, or a server on this machine — and each row says how it is reached, what it carries, and whether it works. How it authenticates is part of the connection, not a separate list to keep in step.
|
|
30
30
|
|
|
31
31
|
**Add connection** is the single way in, and it asks one question — which service, by what means:
|
|
32
32
|
|
|
@@ -36,12 +36,12 @@ The Kiki desktop app exposes preferences in the **Settings** dialog and activity
|
|
|
36
36
|
|
|
37
37
|
An account connection is written by the sign-in, so its row has no protocol, address or key to fill in. Expand it to see which account is behind it, what the vendor says it has left, and the action that changes the sign-in:
|
|
38
38
|
|
|
39
|
-
- **Connected** — the credential works
|
|
39
|
+
- **Connected** — the credential works, and Kiki renews it on its own. **Sign out** ends that sign-in inside Kiki and removes the models it added; at the provider you stay signed in.
|
|
40
40
|
- **Sign-in expired** — the provider no longer accepts it. **Sign in again** replaces it on this same connection; nothing is added to the list.
|
|
41
|
-
- **Sign-in didn't finish** — the flow ended without a credential: you declined it, the code expired, or it failed. One line says which, and the
|
|
41
|
+
- **Sign-in didn't finish** — the flow ended without a credential: you declined it, the code expired, or it failed. One line says which, and the row is left as the server reports it.
|
|
42
42
|
- **Waiting for you** — a sign-in is running, with the code, **Open verification page**, how long it stays valid, and **Cancel sign-in**.
|
|
43
43
|
|
|
44
|
-
A sign-in
|
|
44
|
+
A completed sign-in adds that account's models to the catalog on the server. **Available models** is where you check what you can actually use — a row here reports the connection and its sign-in state.
|
|
45
45
|
|
|
46
46
|
Signing out here affects Kiki only. The provider keeps its own record of your subscription, and signing in again reconnects the same account.
|
|
47
47
|
|
|
@@ -49,52 +49,81 @@ Signing out here affects Kiki only. The provider keeps its own record of your su
|
|
|
49
49
|
|
|
50
50
|
For ChatGPT (Codex) and Grok Build, a connection can use the sign-in their own app already holds on this machine instead of a new one. Kiki reuses it and renews it when it runs out; it does not copy the credential, does not start the other app, and signing in or out here does not change anything there.
|
|
51
51
|
|
|
52
|
-
"This machine" is the machine Kiki's **server** runs on. That is usually the one you are looking at
|
|
52
|
+
"This machine" is the machine Kiki's **server** runs on. That is usually the one you are looking at; when it is not, **Look somewhere else on the server** takes a directory to read from instead.
|
|
53
53
|
|
|
54
|
-
|
|
54
|
+
**Check this machine** reports which account is on the other side and where it is kept — a file, the system keyring, or an encrypted store — and **Use this sign-in** then attaches that exact account. A credential that was replaced in between is refused rather than adopted, and one that is due for renewal is used and renewed.
|
|
55
55
|
|
|
56
|
-
|
|
56
|
+
If the machine cannot be used, the page says why in terms you can act on — no account for that service, signed out, stored somewhere unreadable, or belonging to a different account — and offers nothing to attach.
|
|
57
57
|
|
|
58
58
|
**Stop using it** lets go of the machine's sign-in for this connection. It removes Kiki's reference and the models it provisioned; the sign-in itself is still there, and the other app is unaffected.
|
|
59
59
|
|
|
60
|
+
### Timeouts
|
|
61
|
+
|
|
62
|
+
**Settings → Models & providers → Connections** carries two separate timeouts, and they govern different requests:
|
|
63
|
+
|
|
64
|
+
- **Request timeout** — the default deadline for ordinary requests this interface makes to the Kiki server.
|
|
65
|
+
- **Reading timeout** — how long a history or content read may wait before Kiki gives up on it. The default is `0`, meaning no deadline: a large or slow conversation loads as long as it takes. Set a number of seconds if you would rather a stalled read fail quickly.
|
|
66
|
+
|
|
67
|
+
A reading timeout only bounds waiting; it never limits how much can be read. A changed value applies to the **next** read — it does not interrupt one already running, and it does not reconnect anything. Leave it at `0` unless you specifically want a ceiling. These are GUI settings, not keys in `config.toml`; the server-side memory budgets that govern how much history is kept in memory are separate — see [`transcript_memory`](../configuration/config-files.md#transcript-memory).
|
|
68
|
+
|
|
60
69
|
## About
|
|
61
70
|
|
|
62
|
-
**Settings → About** shows the current version and the update
|
|
71
|
+
**Settings → About** shows the current version and owns the update settings. **Update channel** picks Stable or Beta, and every check — automatic or manual — reads the channel from here. **Check for updates automatically** turns the daily check on or off; with it off, only **Check for updates** checks. The **When an update is found** setting applies: **Notify me** shows a dialog with the version and a short summary and waits for you, while **Download and install** starts the install without that dialog. Either way, Kiki asks before closing spaces that still have running work.
|
|
72
|
+
|
|
73
|
+
The dialog's three choices are saved rather than repeated each time: **Remind me tomorrow** comes back 24 hours later, **Skip this version** silences that version on that channel only, and a newer version still comes either way. Before installing, Kiki re-checks the channel and the version and refuses an offer that has changed underneath you. If a choice cannot be saved, the dialog stays open and asks you to try again. See [Kiki desktop](../getting-started/desktop-app.md#update).
|
|
63
74
|
|
|
64
75
|
## Agents
|
|
65
76
|
|
|
66
|
-
**Settings → Agents**
|
|
77
|
+
**Settings → Agents** picks a workspace and shows its default main profile (the agent's configuration file), the source in effect, and the subagent capabilities. File-backed profiles can be edited at the source shown. **Settings → Agents → Prompt** edits the `[prompt]` prompt-field overrides section in `config.toml`; expand the card first. See [Agents and subagents](../customization/agents.md#capability-visibility) and [Prompt field overrides](../customization/prompt-fields.md).
|
|
78
|
+
|
|
79
|
+
The periodic long-term memory reminders run on their own schedule. To stop just those while keeping the new standing-instruction and pre-compaction checks, set `memory_maintenance = false` in `config.toml`; memory tools, approval and task notes stay available. See [Continuity reminder settings](../configuration/config-files.md#continuity-reminder-settings).
|
|
80
|
+
|
|
81
|
+
## Notifications & messages
|
|
82
|
+
|
|
83
|
+
Under **Settings → Notifications & messages → System notifications**, **Allow system notifications** controls session notifications and pending-input reminders from other spaces on this device. The default-on **Notify when the conversation finishes** switch uses the existing notification path while Kiki is hidden or unfocused. Completion means the assigned work has settled: the main agent has finished, finite background tasks and subagents have settled, and their results and any automatic continuation have been handled. A turn ending alone does not notify. Resident servers, watchers and future schedules do not keep work unfinished; approvals, questions, failures and user stops are not completion notices. In a browser, allow this site to send notifications; if you previously denied permission, restore it in the address bar’s site permissions.
|
|
67
84
|
|
|
68
|
-
|
|
85
|
+
For configured phone or team-chat channels, enable **The conversation finishes** on each channel; it uses the same work-completion decision. **Send notifications** remains their separate master switch; previously disabled masters, connections and channels stay disabled. New configurations default to on with **Skip short work** at `0` seconds, so short replies qualify too. Raising it filters short-work notices for those channels, without changing what completion means. System-notification switches are saved on this device; channel rules are saved by the connected server. Launching or reconnecting does not replay old completion notices.
|
|
69
86
|
|
|
70
87
|
## Search & retrieval
|
|
71
88
|
|
|
72
89
|
**Settings → Search & retrieval → Overview & source** inspects the built-in search and retrieval module — the capability behind the `WebSearch` and `FetchURL` tools — showing which configuration source is in effect and whether the server reuses the local search configuration. The equivalent configuration lives in `config.toml` — see [Configuration files](../configuration/config-files.md#nb-search).
|
|
73
90
|
|
|
91
|
+
The same section's **Advanced & diagnostics** tab carries a **Full-text index** card for searching your own session history. The first index is built in the background, newest sessions first, and the card counts what is done so far. If the index stops for a reason you can fix, that card is where **Restart the indexer** appears; when indexing is off or unavailable by configuration, there is nothing to restart and the reason is stated instead.
|
|
92
|
+
|
|
74
93
|
## Browser control
|
|
75
94
|
|
|
76
|
-
**Settings → Browser control** (`/settings/browser-control`)
|
|
95
|
+
**Settings → Browser control** (`/settings/browser-control`) opens on three named routes. Pick one, set it up, connect it — usually two actions.
|
|
96
|
+
|
|
97
|
+
- **Kimi Browser Extension**: drives the browser you already use, with your own sign-ins. Kiki installs the plugin and the local bridge; the extension is added once from your browser's store, and only you can click through that approval.
|
|
98
|
+
- **Independent browser**: Kiki starts and keeps a browser of its own, with its own sign-ins that never touch your everyday browser. **Set up** downloads and verifies the components it needs; **Connect** then starts it.
|
|
99
|
+
- **Codex / ChatGPT browser extension**: driven by the Codex / ChatGPT desktop app. Kiki neither installs nor controls this one, so the row carries its official instructions and nothing else.
|
|
100
|
+
|
|
101
|
+
Each row states its own status and **what it still needs**, and puts the next action on that same line: **Set up** while a component is missing, the store link while only the approval is left, and **Turn on browser control** while only the switch is. Once everything Kiki can install is in place, the row stops asking you to install and tells you it is ready to connect. The detector's own sentences — which parts are merely reported rather than verified — sit in the **What this server checked** fold, off the first screen.
|
|
102
|
+
|
|
103
|
+
**Turn on browser control** is the same consented action, on this page. When the switch is the only thing missing, that one confirmation installs whatever is still missing — nothing at all when the components are already in place — enables the plugin, and turns browser control on for the server. The confirmation says all three before you accept. Browser control is off by default, so this is the step that switches it on; there is no separate switch to find on another page.
|
|
77
104
|
|
|
78
|
-
|
|
105
|
+
If something outside this page holds browser control off — an environment variable, or a runtime override on that host — no action here can change it. The row says exactly that instead of offering a button, and **See what holds it off** names the override responsible.
|
|
79
106
|
|
|
80
|
-
|
|
81
|
-
- **CDP (Existing or remote browser):** attaches to a browser that already exposes a CDP address and starts nothing new. That address names the machine the browser runs on, which may be a different machine.
|
|
107
|
+
The **Advanced: edit connections, or connect a browser you already run** fold holds what you type rather than pick. A connection has a fixed id, a display name, an enable switch, and one of two styles that point at different targets:
|
|
82
108
|
|
|
83
|
-
|
|
109
|
+
- **Profile (Independent agent browser)**: Kiki starts and manages a browser of its own on the server, with a profile (sign-in state) of its own — your everyday browser cookies are not copied. Optional extras: an installed Chrome or Edge instead of the bundled one, and **Show the browser window** (off by default, so it starts headless).
|
|
110
|
+
- **CDP (Existing or remote browser)**: attaches to a browser that already exposes a CDP address and starts nothing new. That address names the machine the browser runs on, which may be a different machine.
|
|
84
111
|
|
|
85
|
-
|
|
112
|
+
Each connection can be checked, connected and disconnected on its own. A check starts the managed driver and reads its session and tab state; a CDP connection handshakes with the endpoint and lists its targets. Neither opens a page. Saving writes configuration only and ends that connection's current running session first. **Disconnect** releases the connection: a borrowed CDP browser stays, an instance Kiki started is closed. **Default connection** applies to sessions created afterwards; turning a connection off never swaps in another one.
|
|
86
113
|
|
|
87
|
-
|
|
114
|
+
The driver, and any browser Kiki starts, run on the Kiki server — not on the device showing this window; the components live under `<Kiki home>/browser/resources` on the machine that runs them.
|
|
115
|
+
|
|
116
|
+
Agents use these connections through the [browser tools](../reference/tools.md#browser-tools), naming a connection by its id — never by display name. The switch and the connections themselves live under [`[experimental]`](../configuration/config-files.md#experimental) and [`[browser_control]`](../configuration/config-files.md#browser-control) respectively.
|
|
88
117
|
|
|
89
118
|
## Computer control
|
|
90
119
|
|
|
91
120
|
**Settings → Computer control** drives the desktop of the machine running the Kiki server, through a pinned open-source executor. Nothing is installed or configured by default, so the page starts empty.
|
|
92
121
|
|
|
93
|
-
**Install executor** downloads and verifies that
|
|
122
|
+
**Install executor** downloads and verifies that release, then registers a global MCP connection named `kiki-computer` (the driver's path plus `mcp` arguments). **Installed** means the files verified — it does not check that anything can actually be controlled, and it does not touch the desktop. The page names the machine that would be driven: **Kiki server** is the connected server, so over a remote or SSH connection the desktop is that host's own graphical session.
|
|
94
123
|
|
|
95
|
-
The agent drives it with the executor's own tools through the existing MCP mechanism and permissions
|
|
124
|
+
The agent drives it with the executor's own tools, through the existing MCP mechanism and permissions — see [MCP](../server/mcp.md). The pinned Windows executor watches the primary display and cannot pick a different one. On macOS the desktop permission travels in the calling process, so grant it where the driver reports it missing.
|
|
96
125
|
|
|
97
|
-
**Stop control** ends the cua processes this service started
|
|
126
|
+
**Stop control** ends the cua processes this service started and disables an editable connection's configuration. Another client or another Kiki instance may still be driving that desktop.
|
|
98
127
|
|
|
99
128
|
## Composer
|
|
100
129
|
|
|
@@ -108,15 +137,13 @@ Open **Dispatch capabilities** — next to the new-session workspace selector, o
|
|
|
108
137
|
|
|
109
138
|
### Effective prompts
|
|
110
139
|
|
|
111
|
-
In a session, open the header's **⋯ → Effective prompts**. The drawer opens independently of the right rail, including on narrow screens
|
|
140
|
+
In a session, open the header's **⋯ → Effective prompts**. The drawer opens independently of the right rail, including on narrow screens, and shows the current agent identity, profile, model and executor, the prompt channels and their source order, field overrides with the reason for each, file locations, and the cognition-anchor scope.
|
|
112
141
|
|
|
113
|
-
The binding and disk revisions help
|
|
142
|
+
The binding and disk revisions help you spot which source files changed. To actually reload the session's prompt sources, use [Rebuild context](../customization/agents.md#rebuilding-a-session-context) once the session is idle. **Check all branches** is a separate action that inspects the configured common, main-agent and independent-agent prompt files without switching the current identity.
|
|
114
143
|
|
|
115
144
|
### Cockpit
|
|
116
145
|
|
|
117
|
-
On desktop-width screens,
|
|
118
|
-
|
|
119
|
-
Choose **Standard** or **Exit cockpit** to restore the previous preview content, tabs, draft and width. Exiting cockpit leaves the standard right panel open; hiding that panel is a separate action. Opening a file, agent detail or skill preview also exits cockpit and restores the preview workspace. The temporary cockpit width does not replace your saved standard-panel width.
|
|
146
|
+
On desktop-width screens, **Standard / Cockpit** in the right-panel header switches the panel between its normal width and a wide one that takes over the preview space. The conversation and composer stay in the main column either way, and **Standard** or **Exit cockpit** puts the previous preview content, tabs, draft and width back. Opening a file, an agent detail or a skill preview also leaves cockpit.
|
|
120
147
|
|
|
121
148
|
## Usage
|
|
122
149
|
|
|
@@ -126,14 +153,18 @@ Open **Usage** in the sidebar (`/usage`). It has three tabs and opens **History*
|
|
|
126
153
|
- **Live:** running and queued native-request counts across this service. Expand **Request details** for the breakdown by model, provider, and role, and waiting rows with blocking rule IDs and elapsed queue time. If the connection fails, the last counts are marked stale. On the same tab, **Concurrency limits** lets you add or edit rules, choose a model or provider target, and set a shared or per-session cap. The switch pauses a rule without deleting it. Saving applies the rule to new and queued requests without stopping active streams.
|
|
127
154
|
- **External sync:** destinations that receive this server's own usage. Three kinds are available: **vibecafe.ai**, **Kiki webhook**, and **Script**. Only the model, the UTC half-hour, the four token counts, quality and cost go out — never a prompt, answer, title, workspace name or path.
|
|
128
155
|
|
|
156
|
+
A **vibecafe.ai** destination signs in from the page itself: press **Sign in to VibeCafe**, approve it in your browser with the code it shows, and the page reports the result. There is no authorization code to copy, and no address, client id, or key to fill in — the destination is `https://vibecafe.ai`. A custom address, or a key you supply yourself, is the advanced path instead. The sign-in is part of the experimental `usage_export` feature, and the flow has not been exercised against the live service: if it does not complete, the destination stays as the page left it and nothing has been sent.
|
|
157
|
+
|
|
158
|
+
A **Kiki webhook** destination takes your own HTTPS endpoint, with `none`, `bearer`, or `hmac` authentication and optional gzip. A secret is stored either in the system keyring or, if you choose that explicitly, in a private file on the server — the keyring is not silently substituted if it fails, and the file is protected by filesystem permissions rather than encrypted at rest.
|
|
159
|
+
|
|
129
160
|
Existing `/usage?panel=limits` links open Live and focus the concurrency-rule section; there is no separate Limits tab.
|
|
130
161
|
|
|
131
|
-
External sync stays off until the server enables the `usage_export` flag.
|
|
162
|
+
External sync stays off until the server enables the `usage_export` flag. Signing in does not change that: an approved credential is stored, the destination stays **disabled**, and no consent has been given — so the order still holds, choose a destination, preview the exact payload, agree once, then enable. A destination that has not been agreed to sends nothing. Widening the range, changing the endpoint, or changing a credential to a different identity asks again, while shrinking the range or changing the interval does not. Pausing keeps the queue, removing asks whether to discard the queued batches, and asking the service to delete what it already holds is a separate action. See [`kiki usage-export`](../reference/command.md#kiki-usage-export) for the command-side equivalent.
|
|
132
163
|
|
|
133
|
-
A **Script** destination runs your command as your own OS user with your ordinary permissions — it can read files and
|
|
164
|
+
A **Script** destination runs your command as your own OS user with your ordinary permissions — it can read files and reach the network on its own, and this is not a sandbox. Kiki writes only the content-free batch to its stdin and reads a receipt from its output.
|
|
134
165
|
|
|
135
|
-
For a request that
|
|
166
|
+
For a request that looks stuck, open **Live → Request details** before changing a limit. A queued row names the local rule blocking it, and a provider HTTP 429 is diagnosed from the provider's own error — a full local queue, a timeout and a rejection each need a different fix. [`request_governance`](../configuration/config-files.md#request-governance) has the fields, examples and error codes. The rules cover the model requests this service sends itself: when you run a turn on Codex, Claude Code, or Grok Build as the engine, those requests are the engine's own and are not counted here, while an external tool calling back into Kiki for a native request is.
|
|
136
167
|
|
|
137
168
|
## CLI counterpart
|
|
138
169
|
|
|
139
|
-
The TUI
|
|
170
|
+
The TUI has no **Settings** dialog. Terminal-side preferences (theme, editor, and the rest) are configured in `tui.toml` or with the interactive `/config`, `/theme` and `/editor` commands — see [`tui.toml`](../configuration/config-files.md#tui-toml). Agent and runtime settings live in `config.toml`.
|
package/dist/docs/en/index.md
CHANGED
|
@@ -18,17 +18,23 @@ features:
|
|
|
18
18
|
- title: "One workbench, many lines"
|
|
19
19
|
details: The lead session dispatches subagents that each run a model you chose for that role, sends long commands to the background, and hears back when they finish.
|
|
20
20
|
link: ./features/workbench
|
|
21
|
+
- title: "Agent Profiles"
|
|
22
|
+
details: "One Markdown file describes a kind of agent: the model it runs on, how it is instructed, which tools it may call, and what it can dispatch."
|
|
23
|
+
link: ./features/agents
|
|
21
24
|
- title: "Work that runs long"
|
|
22
25
|
details: Goals that carry across turns, a queue for what you type while it is busy, scheduled prompts, a per-workspace task board, and memory that outlives the session.
|
|
23
26
|
link: ./features/long-work
|
|
24
27
|
- title: "Roles you can talk to"
|
|
25
|
-
details: A persona is a
|
|
28
|
+
details: A persona is a long-term identity with its own memory, a fixed daily conversation, and a seat in a room where several of them discuss one topic.
|
|
26
29
|
link: ./features/people
|
|
30
|
+
- title: "Know what it costs"
|
|
31
|
+
details: "The usage page answers three questions: what a date range cost, which concurrency rule is holding a request back, and where the content-free numbers can be sent."
|
|
32
|
+
link: ./features/daily
|
|
27
33
|
- title: "Your data, your machines"
|
|
28
34
|
details: Spaces with their own credentials, directed remote connections, one-way thread bridges, Web access, and in-session SSH.
|
|
29
35
|
link: ./features/spaces
|
|
30
36
|
- title: "Every layer is yours"
|
|
31
|
-
details:
|
|
37
|
+
details: Prompts are overridable down to one tool description, connections and OAuth are one list, permission modes are yours to pick, and hooks run your scripts.
|
|
32
38
|
link: ./features/freedom
|
|
33
39
|
- title: "Bring your history, meet other tools"
|
|
34
40
|
details: Import another tool's conversations and keep working in them, use Kiki inside your editor over ACP, or let Kiki run other agent harnesses as its engines.
|