forge-openclaw-plugin 0.3.13 → 0.3.15

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.
Files changed (144) hide show
  1. package/README.md +2 -2
  2. package/dist/assets/{action-bar-BFjWjRIM.js → action-bar-B9MYlps2.js} +1 -1
  3. package/dist/assets/{activity-page-D-6yBWuZ.js → activity-page-DbzbChcE.js} +1 -1
  4. package/dist/assets/{ai-surface-workspace-BEfo9bRO.js → ai-surface-workspace-CF0257Hs.js} +1 -1
  5. package/dist/assets/{atlas-panel-BfMyJXxQ.js → atlas-panel-CO3RYAKn.js} +1 -1
  6. package/dist/assets/{calendar-page-D4tQNJ2V.js → calendar-page-BuuHKEHC.js} +1 -1
  7. package/dist/assets/{calendar-rules-C-6O_uGU.js → calendar-rules-DKftgNx5.js} +1 -1
  8. package/dist/assets/{calendar-week-toolbar-_NzeKsYx.js → calendar-week-toolbar-ChIpkT-G.js} +1 -1
  9. package/dist/assets/{companion-sync-lab-page-D1Oqsf6M.js → companion-sync-lab-page-BZRX4Btw.js} +1 -1
  10. package/dist/assets/{daily-metrics-dashboard-DtE3pVOl.js → daily-metrics-dashboard-CXDsaAQd.js} +1 -1
  11. package/dist/assets/{define-workbench-box-D-32C8nM.js → define-workbench-box-CpG0Zb1L.js} +1 -1
  12. package/dist/assets/{entity-link-multiselect-DcCvkesQ.js → entity-link-multiselect-Dl4rZqdg.js} +1 -1
  13. package/dist/assets/{entity-note-count-link-Cjsk5oT2.js → entity-note-count-link-Bs1aKYyD.js} +1 -1
  14. package/dist/assets/{entity-notes-surface-DQQPLjxd.js → entity-notes-surface-B56XSw7M.js} +1 -1
  15. package/dist/assets/{execution-board-agWQbN-y.js → execution-board-D66C_ikW.js} +1 -1
  16. package/dist/assets/{faceted-token-search-DldM3-ru.js → faceted-token-search-Dg2rjknH.js} +1 -1
  17. package/dist/assets/{flagship-signal-deck-BlLYW9Kz.js → flagship-signal-deck-C6KVPhmM.js} +1 -1
  18. package/dist/assets/{floating-action-menu-D9-psbha.js → floating-action-menu-DAFAEBcA.js} +1 -1
  19. package/dist/assets/{generic-node-view-CcepUVhP.js → generic-node-view-C6DK5hJ6.js} +1 -1
  20. package/dist/assets/{goal-detail-page-DP1n5-Hk.js → goal-detail-page-CC4VXud6.js} +1 -1
  21. package/dist/assets/{goal-dialog-Oxx8WqbZ.js → goal-dialog-15hD8EBp.js} +1 -1
  22. package/dist/assets/{goals-page-CUt1a4Y2.js → goals-page-CQ2lJMzI.js} +1 -1
  23. package/dist/assets/{habits-page-5REbWAlo.js → habits-page-a7KVPaQp.js} +1 -1
  24. package/dist/assets/{health-boxes-sHNML3tm.js → health-boxes-DqgvIYoL.js} +1 -1
  25. package/dist/assets/index-ClJbJhca.css +1 -0
  26. package/dist/assets/index-FpGANF9S.js +2 -0
  27. package/dist/assets/{inline-note-fields-Bql_KfR9.js → inline-note-fields-COgzxr_7.js} +1 -1
  28. package/dist/assets/{insight-flow-dialog-CN-CMSB7.js → insight-flow-dialog-Dmb6NSGp.js} +1 -1
  29. package/dist/assets/{insights-page-B1u6ONtQ.js → insights-page-OnqR4cYI.js} +1 -1
  30. package/dist/assets/{kanban-boxes-DB1kuUlY.js → kanban-boxes-BWUzntCV.js} +1 -1
  31. package/dist/assets/{kanban-page-BBW9_vMu.js → kanban-page-BI16Gzp_.js} +1 -1
  32. package/dist/assets/{knowledge-graph-page-CoJaydZb.js → knowledge-graph-page-DxEBaEke.js} +1 -1
  33. package/dist/assets/{life-force-page-DBYbA1GF.js → life-force-page-CDEXEQai.js} +1 -1
  34. package/dist/assets/{life-force-workspace-BiD9xOEt.js → life-force-workspace-C7UOnJEf.js} +1 -1
  35. package/dist/assets/{metric-tile-CuP9DOYm.js → metric-tile-boeHB1R1.js} +1 -1
  36. package/dist/assets/{movement-boxes-DZg_qPPg.js → movement-boxes-BUSqaTL2.js} +1 -1
  37. package/dist/assets/{movement-page-CmwsQGR_.js → movement-page-DcbO0497.js} +1 -1
  38. package/dist/assets/note-markdown-DXXI3W3V.js +3 -0
  39. package/dist/assets/{note-tags-input-C_x5WdK5.js → note-tags-input-CYh3TVW2.js} +1 -1
  40. package/dist/assets/{notes-boxes-BEFlp9yd.js → notes-boxes-CMJXX2K0.js} +1 -1
  41. package/dist/assets/{notes-page-B6Vl-GPf.js → notes-page-DvHMcQey.js} +1 -1
  42. package/dist/assets/{open-in-graph-button-C-bJekoH.js → open-in-graph-button-4UYrp1XP.js} +1 -1
  43. package/dist/assets/{orbit-map-DHeTM15g.js → orbit-map-BwK7sDaC.js} +1 -1
  44. package/dist/assets/{overview-page-BRWje1F9.js → overview-page-Z5vaUTm3.js} +1 -1
  45. package/dist/assets/{page-hero-8bITsx_x.js → page-hero-DvrM83_C.js} +1 -1
  46. package/dist/assets/{pill-cluster-XQjm-wPc.js → pill-cluster-DYI3Ibj8.js} +1 -1
  47. package/dist/assets/{preference-entity-handoff-button-DwYF_5i3.js → preference-entity-handoff-button-C2ATjvws.js} +1 -1
  48. package/dist/assets/{preferences-page-C7DBPpNb.js → preferences-page-BAexXHye.js} +1 -1
  49. package/dist/assets/{project-collections-mtxanSMf.js → project-collections-B9nr-Ts-.js} +1 -1
  50. package/dist/assets/{project-detail-page-BT87Goqc.js → project-detail-page-B9PqyPu9.js} +1 -1
  51. package/dist/assets/{project-dialog-DnZe757y.js → project-dialog-CBA-D65n.js} +1 -1
  52. package/dist/assets/{project-management-hierarchy-page-B3R2lNFI.js → project-management-hierarchy-page-DXK14jn0.js} +1 -1
  53. package/dist/assets/{project-management-section-nav-DyBWxHbe.js → project-management-section-nav-DJ3QKCtr.js} +1 -1
  54. package/dist/assets/{projects-boxes-CxZj3P29.js → projects-boxes-iBu_PRqe.js} +1 -1
  55. package/dist/assets/{projects-page-Bec11c0x.js → projects-page-CdAk-ByT.js} +1 -1
  56. package/dist/assets/{psyche-behaviors-page-DWRpYvl1.js → psyche-behaviors-page-CbhhTfU2.js} +1 -1
  57. package/dist/assets/{psyche-flashcards-page-CX4rcsXZ.js → psyche-flashcards-page-DQaw_vUQ.js} +1 -1
  58. package/dist/assets/{psyche-goal-map-page-Y6b3lCvV.js → psyche-goal-map-page-C-ZTVOEP.js} +1 -1
  59. package/dist/assets/{psyche-graph-CQuCWKIp.js → psyche-graph-DYzeClxn.js} +1 -1
  60. package/dist/assets/{psyche-metrics-page-DadDJOnm.js → psyche-metrics-page-C9hKn10A.js} +1 -1
  61. package/dist/assets/{psyche-mode-guide-page-B1nz0uCg.js → psyche-mode-guide-page-CR8e984W.js} +1 -1
  62. package/dist/assets/{psyche-modes-page-i3uSuhKA.js → psyche-modes-page-lQdpAcY3.js} +1 -1
  63. package/dist/assets/{psyche-page-Y_s-BE2m.js → psyche-page-CTdIDkw9.js} +1 -1
  64. package/dist/assets/{psyche-patterns-page-DaaOLIlN.js → psyche-patterns-page-Drgm-f7I.js} +1 -1
  65. package/dist/assets/{psyche-questionnaire-builder-page-CuF7rXOv.js → psyche-questionnaire-builder-page-gRwdGXde.js} +1 -1
  66. package/dist/assets/{psyche-questionnaire-detail-page-BfFEMkRY.js → psyche-questionnaire-detail-page-CIP9b2UI.js} +1 -1
  67. package/dist/assets/{psyche-questionnaire-run-detail-page-BoQTvd7Q.js → psyche-questionnaire-run-detail-page-SYndwtF3.js} +1 -1
  68. package/dist/assets/{psyche-questionnaire-run-page-C0qKiNZN.js → psyche-questionnaire-run-page-CXiJyd5i.js} +1 -1
  69. package/dist/assets/{psyche-questionnaires-page-B6hfD448.js → psyche-questionnaires-page-CFPKwA3O.js} +1 -1
  70. package/dist/assets/{psyche-report-detail-page-BlFL8moM.js → psyche-report-detail-page-dU30a2WE.js} +1 -1
  71. package/dist/assets/{psyche-reports-page-DAAcYENp.js → psyche-reports-page-Cn0EBndy.js} +1 -1
  72. package/dist/assets/{psyche-schemas-beliefs-page-CsxKSrKM.js → psyche-schemas-beliefs-page-Bab4xSWv.js} +1 -1
  73. package/dist/assets/{psyche-screen-time-page-n4b0e58x.js → psyche-screen-time-page-lIe6GQxJ.js} +1 -1
  74. package/dist/assets/{psyche-self-observation-page-BaxEQ2-3.js → psyche-self-observation-page-BTE3KfIl.js} +1 -1
  75. package/dist/assets/{psyche-values-page-DTv5NMSU.js → psyche-values-page-DclBZ9xw.js} +1 -1
  76. package/dist/assets/question-flow-dialog-Ded2E85L.js +2 -0
  77. package/dist/assets/{report-chain-fields-D132-EMh.js → report-chain-fields-DY640iqL.js} +1 -1
  78. package/dist/assets/{rewards-page-C533lVP-.js → rewards-page-FxUXB76B.js} +1 -1
  79. package/dist/assets/{scheduling-rules-editor-CDpontGp.js → scheduling-rules-editor-jakFfxqF.js} +1 -1
  80. package/dist/assets/{schema-badge-B3DiMnjB.js → schema-badge-30B5syHA.js} +1 -1
  81. package/dist/assets/{schemas-CH1_ngUX.js → schemas-Db29G8NU.js} +1 -1
  82. package/dist/assets/{select-menu-BOF-k4Ln.js → select-menu-BF2zI3RW.js} +1 -1
  83. package/dist/assets/{settings-agents-page-B5OQtlZX.js → settings-agents-page-Bh-Bv6FQ.js} +1 -1
  84. package/dist/assets/{settings-bin-page-D_bk3Kcu.js → settings-bin-page-DT8JJero.js} +1 -1
  85. package/dist/assets/{settings-calendar-page-PuSj9_kM.js → settings-calendar-page-BA4_Qqiu.js} +3 -3
  86. package/dist/assets/{settings-data-page-EwFMaeq6.js → settings-data-page-K4kpmQJY.js} +1 -1
  87. package/dist/assets/{settings-logs-page-BKkse0DX.js → settings-logs-page-DkuNPAZo.js} +1 -1
  88. package/dist/assets/{settings-mobile-page-BrIVmdeB.js → settings-mobile-page-4pCNwD91.js} +1 -1
  89. package/dist/assets/{settings-models-page-Mg84D_0K.js → settings-models-page-CZHG3t7W.js} +1 -1
  90. package/dist/assets/{settings-page-D-kul92f.js → settings-page-B_Be0vOY.js} +1 -1
  91. package/dist/assets/{settings-rewards-page-waNyCcX_.js → settings-rewards-page-C6nFTWJu.js} +1 -1
  92. package/dist/assets/{settings-section-nav-BmJWnrYk.js → settings-section-nav-Lo-VKCfZ.js} +1 -1
  93. package/dist/assets/{settings-users-page-DBgC6y56.js → settings-users-page-CVzNp4-m.js} +1 -1
  94. package/dist/assets/{settings-wiki-page-CM0te9dI.js → settings-wiki-page-DXM--7BB.js} +1 -1
  95. package/dist/assets/sleep-page-DvPdZMKx.js +1 -0
  96. package/dist/assets/{sports-page-eg5Rfc_E.js → sports-page-DjuZlOur.js} +1 -1
  97. package/dist/assets/{strategies-page-D4AqvFNW.js → strategies-page-PE1IlatS.js} +1 -1
  98. package/dist/assets/{strategy-detail-page-BlYVkXaW.js → strategy-detail-page-C4KiEGCI.js} +1 -1
  99. package/dist/assets/{strategy-dialog-FO9Oa0dB.js → strategy-dialog-Cwf7Y3P5.js} +1 -1
  100. package/dist/assets/surface-ubuOfukq.js +1 -0
  101. package/dist/assets/{task-detail-page-Dy-aRyY6.js → task-detail-page-B3SMFZQ3.js} +1 -1
  102. package/dist/assets/{task-dialog-DrA9pba7.js → task-dialog-CI_Fy_FW.js} +1 -1
  103. package/dist/assets/{timebox-planning-dialog-C_gnfxFx.js → timebox-planning-dialog-BtFuVoA1.js} +1 -1
  104. package/dist/assets/{today-boxes-BFOws_iC.js → today-boxes-CYuxSkZf.js} +1 -1
  105. package/dist/assets/{today-page-BoPj6a6q.js → today-page-CHGpLEZ3.js} +1 -1
  106. package/dist/assets/{training-load-page-DGU40Zfl.js → training-load-page-GZJF-Yy5.js} +1 -1
  107. package/dist/assets/{user-badge-CZWtYeMw.js → user-badge-ByhC6bMU.js} +1 -1
  108. package/dist/assets/{utility-widgets-B3wWGxQc.js → utility-widgets-ilORjDmg.js} +1 -1
  109. package/dist/assets/{vitals-page-BXRZEP_8.js → vitals-page-mdEqIm_9.js} +1 -1
  110. package/dist/assets/{weekly-review-page-D5cebA5x.js → weekly-review-page-C8W-yg5r.js} +1 -1
  111. package/dist/assets/weight-loss-page-BApTknCn.js +5 -0
  112. package/dist/assets/{wiki-article-markdown-CvaCjg_t.js → wiki-article-markdown-DBccllQg.js} +1 -1
  113. package/dist/assets/{wiki-editor-page-Dco79SLY.js → wiki-editor-page-BfRfH1O3.js} +2 -2
  114. package/dist/assets/{wiki-ingest-history-page-uvKRkRDF.js → wiki-ingest-history-page-C-6H3MU6.js} +1 -1
  115. package/dist/assets/{wiki-ingest-modal-BW6AJPea.js → wiki-ingest-modal-DnlhByD_.js} +1 -1
  116. package/dist/assets/{wiki-page-BIL5zMqv.js → wiki-page-DPZ55e3x.js} +1 -1
  117. package/dist/assets/{workbench-flow-page-Dx_nq8R_.js → workbench-flow-page-_-NKIx5R.js} +1 -1
  118. package/dist/assets/{workbench-page-BJnt_Zzf.js → workbench-page-NIAzggwX.js} +1 -1
  119. package/dist/assets/{workout-detail-page-CKgqyB-y.js → workout-detail-page-3fxr6HL4.js} +1 -1
  120. package/dist/index.html +6 -6
  121. package/dist/openclaw/index.d.ts +2 -7
  122. package/dist/server/server/src/app.js +16 -7
  123. package/dist/server/server/src/health-weight-loss.js +321 -14
  124. package/dist/server/server/src/managers/platform/openai-responses-provider.js +2 -2
  125. package/dist/server/server/src/openapi.js +30 -3
  126. package/dist/server/server/src/repositories/ai-connectors.js +1 -1
  127. package/openclaw.plugin.json +1 -1
  128. package/package.json +6 -4
  129. package/server/index.js +6 -1
  130. package/skills/forge-openclaw/SKILL.md +76 -8
  131. package/skills/forge-openclaw/entity_conversation_playbooks.md +167 -5
  132. package/skills/forge-openclaw/psyche_entity_playbooks.md +84 -0
  133. package/dist/assets/favicon-B6oXI6k4.ico +0 -0
  134. package/dist/assets/favicon-Bai4rhyS.png +0 -0
  135. package/dist/assets/favicon-ERg17ZCd.svg +0 -3
  136. package/dist/assets/index-CQ5r7ZUz.js +0 -2
  137. package/dist/assets/index-FxgNSuZX.css +0 -1
  138. package/dist/assets/note-markdown-B82ncnFt.js +0 -3
  139. package/dist/assets/question-flow-dialog-CskCt5NZ.js +0 -2
  140. package/dist/assets/sleep-page-C_krRE59.js +0 -1
  141. package/dist/assets/surface-MVeeZGKB.js +0 -1
  142. package/dist/assets/weight-loss-page-BuUdFh9z.js +0 -5
  143. package/skills/forge-openclaw/SKILL.md.bak-20260415 +0 -552
  144. package/skills/forge-openclaw/entity_conversation_playbooks.md.bak-20260415 +0 -1303
@@ -1,552 +0,0 @@
1
- ---
2
- name: forge-openclaw
3
- description: use when the user wants to save, search, update, review, start, stop, reward, explain, compare, or run Forge records, or when the conversation is clearly about a Forge entity such as a goal, project, strategy, task, habit, note, calendar_event, work_block_template, task_timebox, task_run, insight, preference item, preference context, preference catalog, questionnaire instrument, questionnaire run, self observation, psyche_value, behavior_pattern, behavior, belief_entry, mode_profile, mode_guide_session, trigger_report, event_type, emotion_definition, sleep_session, or workout_session. identify the exact Forge object, keep the main conversation natural, guide psyche intake with active listening before storing it, and for psyche issues that need understanding first usually begin with one exploratory question before any formulation or save suggestion.
4
- ---
5
-
6
- Forge is the user's structured system for planning work, doing work, reflecting on patterns, and keeping a truthful record of what is happening. Use it when the user is clearly working inside that system, or when they are describing something that naturally belongs there and would benefit from being stored, updated, reviewed, or acted on in Forge. Keep the conversation natural first. Do not turn every message into intake. When a real Forge entity is clearly present, name the exact entity type plainly, help with the substance of the conversation, and then offer Forge once, lightly, if storing it would genuinely help.
7
-
8
- Forge has four major surfaces. The planning side covers goals, projects, strategies, tasks, habits, notes, calendar events, recurring work blocks, task timeboxes, live work sessions, and agent-authored insights. The Health side covers sleep sessions, sports and workout sessions, companion pairing, and habit-generated workout records that should still stay linked to the broader Forge graph. The Preferences side covers contextual taste modeling, pairwise comparisons, direct signals, editable concept libraries, and preference items that can come from Forge entities or seeded concept domains such as food, activities, places, countries, fashion, people, media, and tools. The Psyche side covers values, patterns, behaviors, beliefs, modes, guided mode sessions, trigger reports, event types, and reusable emotion definitions. Forge also has a file-first Wiki memory layer with explicit spaces, local markdown pages, backlinks, optional embeddings, and structured links back to Forge entities. Forge is also multi-user: every entity can belong to a typed `human` or `bot` user through `userId`, and read routes can scope to one or many users with `userId` or repeated `userIds`. The current access posture is configurable through a directional user graph, but the live default is still permissive: Forge can list users directly, every relationship edge starts open, and a user can read or affect another user's linked records when the route explicitly asks for them. Use `forge_get_user_directory` when owner identity or cross-user access matters. Strategies can also be locked into a contract with `isLocked`; once locked, do not mutate the graph or target structure unless the user explicitly wants the strategy unlocked first. The model should use the real entity names, not vague substitutes. Say `project`, not “initiative”. Say `behavior_pattern`, not “theme”. Say `trigger_report`, not “incident note”.
9
- Habits are a first-class recurring entity in the planning side.
10
- NEGATIVE HABIT CHECK-IN RULE: for a `negative` habit, the correct aligned/resisted outcome is `missed`. `missed` means the bad habit was resisted, the user stayed aligned, and the habit should award its XP bonus.
11
-
12
- Preferences rule:
13
-
14
- - When the user wants to understand or refine taste, ranking, recommendation fit, or “what Forge thinks I like”, treat that as the Preferences surface rather than a normal planning intake.
15
- - The default Preferences UX starts from what Forge already knows and then offers one prominent `Start the game` action.
16
- - The comparison flow is visual and modal. Prefer opening the Forge UI when the user wants to play comparisons directly.
17
- - For Forge-native domains, Forge can seed items from existing entities automatically.
18
- - For broader domains such as food or activities, Forge can use seeded concept libraries that the user can later edit.
19
-
20
- Wiki rule:
21
-
22
- - Treat the Wiki as the canonical long-form memory surface, not as a loose note dump.
23
- - Use the wiki tools when the user wants file-first reference pages, backlink-aware recall, ingest from a URL or local file, or wiki maintenance work such as unresolved-link cleanup.
24
- - `forge_ingest_wiki_source` now queues the ingest as background work; use the Forge UI handoff when the user wants to review or keep only selected wiki/entity candidates after the ingest finishes.
25
- - Keep evidence notes and wiki pages conceptually distinct: evidence notes are linked operating records, while wiki pages are the curated memory vault.
26
-
27
- Wiki navigation and search rule:
28
-
29
- - The wiki has a stable top-level structure. The home page is `index`, and the default high-level branches are `people`, `projects`, `concepts`, `sources`, and `chronicle`.
30
- - `people` is for durable person pages and relationship context. `projects` is for ongoing initiatives and bounded workstreams. `concepts` is for reusable ideas, methods, and frameworks. `sources` is for raw materials and imports. `chronicle` is for timeline-style logs and ongoing narrative.
31
- - Treat `wiki` pages as canonical synthesis and `evidence` notes as supporting records. If the user wants the durable summary, search the wiki pages first. If they want raw supporting context or operational detail, evidence notes may be the better target.
32
- - When the user wants a person, search the full name first, then obvious aliases, nicknames, or paired context such as collaborator names or city. Person pages often sit under the `people` branch but the reliable method is still search-first.
33
- - When the user wants a conversation or chat, search the conversation name, the participant names, and any distinctive nickname used in the thread. Group-chat imports often become a durable synthesis page with a normalized title rather than the raw file name.
34
- - When the user wants a concept, search the exact phrase first, then close variants, abbreviations, and adjacent terms. Concept pages often live under `concepts`, but search is still better than assuming the parent branch.
35
- - When the user wants one exact page and already knows the title or slug, search that exact title or slug first, then open the best wiki page result instead of broad browsing.
36
- - Use `forge_search_wiki` as the default wiki recall tool. It is the main route for people, conversations, concepts, and exact page lookup.
37
- - Use `forge_list_wiki_pages` when the user wants to browse structure, inspect a branch, or understand how pages are organized rather than search by phrase.
38
- - Use `forge_get_wiki_page` after search yields a likely hit, or when the user already identified the page to open.
39
- - Use `forge_get_wiki_settings` or `forge_get_wiki_health` when the task is about wiki maintenance, indexing, unresolved links, ingest setup, or vault integrity rather than content recall.
40
-
41
- Health rule:
42
-
43
- - Sleep and sports records are first-class health surfaces, not generic notes or tasks.
44
- - Use `forge_get_sleep_overview` and `forge_get_sports_overview` for review and trend reading.
45
- - Use the shared batch entity tools for ordinary `sleep_session` and `workout_session` create, update, delete, and search work. Do not force agents into a large one-route-per-entity mental model when the batch routes already cover the record cleanly.
46
- - Use `forge_update_sleep_session` and `forge_update_workout_session` only when the job is reflective enrichment on one existing health record after review, such as attaching notes, tags, mood, meaning, or Forge links.
47
- - Habit-generated workouts and imported HealthKit workouts belong to the same workout record model, so do not invent a separate storage path for sport sessions.
48
-
49
- Write to Forge only with clear user consent. If the user is just thinking aloud, helping first is usually better than writing immediately. After helping, you may offer one short Forge prompt if the match is strong. If the user agrees, ask only for the missing fields and only one to three focused questions at a time. Do not offer Forge again after a decline unless the user reopens it.
50
-
51
- Entity conversation rule:
52
-
53
- - For all entity creation or update flows, first use [`entity_conversation_playbooks.md`](./entity_conversation_playbooks.md) to decide the next best question.
54
- - Ask only for what is missing or unclear. Do not walk through every schema field.
55
- - Let each question have one job. Know what you are trying to clarify before you ask it.
56
- - Before you ask, decide the exact missing thing you need and how that answer will help you name, place, or save the record.
57
- - Prefer a progression of:
58
- concrete example or intent -> working name -> purpose or meaning -> placement in Forge -> operational details -> linked context.
59
- - Use those same playbooks for action-heavy non-Psyche flows such as `work_adjustment`, `preference_judgment`, `preference_signal`, and specialized `movement`, `life_force`, or `workbench` requests so the conversation starts from what the user is trying to understand, change, add, update, link, or run before you choose the route.
60
- - When the operation is not already explicit, identify the job first:
61
- add, update, review, compare, navigate, link, or run. Skip that meta question
62
- when the action is already obvious from the user's wording.
63
- - For emotionally meaningful non-Psyche records such as goals, habits, and notes, reflect the meaning before you ask for structure.
64
- - When the user is vague, ask for one small concrete example, stake, or desired outcome before you ask them to name the record.
65
- - When the user is clear, say what the record seems to be becoming and ask only for the last missing detail.
66
- - When the user wants to review, compare, inspect, or navigate an existing Forge
67
- record, ask what they are trying to understand first and prefer the read path before
68
- you reopen create or update intake.
69
- - When updating an entity, start with what is changing, what should stay true, and what prompted the update now.
70
- - When enough is clear, briefly summarize what you heard in the user's own language before asking for the last missing structural detail.
71
- - The quick intake prompts later in this file are fallback checkpoints, not a script to read aloud.
72
-
73
- Forge data location rule:
74
-
75
- - by default, Forge stores data under the active runtime root at `forge.sqlite`
76
- - on a normal OpenClaw install, this usually means `~/.openclaw/extensions/forge-openclaw-plugin/forge.sqlite`
77
- - on a linked repo-local install, this usually means `<repo>/openclaw-plugin/forge.sqlite`
78
- - if the user wants the data somewhere else for persistence, backup, or manual control, tell them to set `plugins.entries["forge-openclaw-plugin"].config.dataRoot` and restart the OpenClaw gateway
79
- - if the user asks where the data is stored or how to move it, explain the current default plainly and show the exact config field
80
-
81
- Psyche interview rule:
82
-
83
- - For `psyche_value`, `behavior_pattern`, `behavior`, `belief_entry`, `mode_profile`, `mode_guide_session`, and `trigger_report`, do not jump straight to raw field collection.
84
- - First use the active-listening playbooks in [`psyche_entity_playbooks.md`](./psyche_entity_playbooks.md).
85
- - Ask permission before going deeper, ask one or two focused questions at a time, reflect back what you heard, and summarize before moving on.
86
- - Start from a recent concrete example before naming an abstract pattern, belief, or mode.
87
- - Sound professionally warm and therapist-like: grounded, accurate, reflective, and intentional, not clinical, vague, or lecture-like.
88
- - After the first real answer, choose one follow-up lane at a time: situation, sequence, meaning, protection, cost, longing/value, or tentative name.
89
- - For Psyche updates, start with what feels newly true, newly visible, or newly inaccurate, then ask what should stay true before changing the formulation.
90
- - If the user says they want help understanding a Psyche issue before saving it, ask one orienting question first instead of jumping straight into a full interpretation, diagnosis-like label, save suggestion, replacement belief, or suggested title.
91
- - In that first exploratory turn, keep the reflection to one or two short sentences, avoid numbered lists or schema dumps, and wait for the user's answer before offering a fuller formulation.
92
- - In that first exploratory turn, stay in plain prose, end with one question, and do not mention Forge fields or save formatting yet unless the user interrupts to save immediately.
93
- - In that first exploratory turn, keep the whole reply short, usually under 90 words, and anchor it in one concrete-example question rather than a conceptual lecture.
94
- - In that first exploratory turn, ask only one question, do not search Forge or mention whether a matching entity exists, and avoid openings like "This sounds like" or "What you're describing is".
95
- - In that first exploratory turn, prefer exactly two sentences: one brief empathic reflection and one concrete question. Avoid colons because they tend to trigger list-like answers.
96
- - Follow the preferred opening-question patterns in [`psyche_entity_playbooks.md`](./psyche_entity_playbooks.md) when they fit the entity the user is exploring.
97
- - When the conversation reveals an adjacent entity such as a linked belief, mode, value, pattern, or note, name that gently and ask whether the user wants to map it too.
98
- - If nuance matters, preserve it in a linked Markdown `note` instead of forcing every detail into normalized fields.
99
- - If the user shows imminent risk of self-harm, suicide, violence, inability to stay safe, or severe disorientation, stop normal intake and prioritize urgent human support or emergency help instead.
100
-
101
- Use these exact entity meanings when deciding what the user is describing.
102
-
103
- `goal` is a meaningful long-horizon direction or outcome. Use it for “be a great father”, “create meaningfully”, or “build a beautiful family”, not for one-off action items.
104
-
105
- `project` is a bounded workstream under a goal. Use it for “launch Forge plugin”, “plan summer move”, or “repair relationship with X”. Project lifecycle is status-driven: `active` means in play, `paused` means suspended, and `completed` means finished. Setting a project to `completed` auto-completes linked unfinished tasks through Forge's normal task-completion path.
106
-
107
- `task` is a concrete action item or deliverable. Use it for “draft the plugin README”, “call the landlord”, or “book therapy session”.
108
-
109
- `task_run` is one truthful live work session on a task. It is not the same thing as task status.
110
-
111
- `note` is a first-class Markdown entity that can link to one or many other entities. Use it for work summaries, context, progress logs, handoff explanations, wiki-style reference pages, or reflective detail that should stay searchable and attached to the right records. Notes also support note-owned `tags` for memory-system labels such as `Working memory`, `Short-term memory`, `Episodic memory`, `Semantic memory`, and `Procedural memory`, plus custom tags. Notes may be durable or ephemeral: if `destroyAt` is set, Forge will delete the note automatically after that time.
112
-
113
- `sleep_session` is a first-class health record for one night. It can hold recovery metrics, stage breakdown, annotations, and links back to goals, projects, tasks, habits, notes, and Psyche records.
114
-
115
- `workout_session` is a first-class sports record. It can come from HealthKit import or from a completed habit, and it can carry subjective effort, mood, meaning, tags, and links back into Forge.
116
-
117
- `insight` is an agent-authored observation, recommendation, or warning grounded in Forge data. It does not replace a requested goal, project, task, pattern, belief, or trigger report.
118
-
119
- `calendar_event` is a canonical Forge event record. It lives in Forge first and can later project to a writable provider calendar.
120
-
121
- `work_block_template` is a recurring work-availability template such as Main Activity, Secondary Activity, Third Activity, Rest, Holiday, or Custom.
122
-
123
- `task_timebox` is a planned or live calendar slot attached to a task. It is scheduling structure, not proof that work actually started.
124
-
125
- `psyche_value` is a direction the user wants to live toward, such as honesty, courage, steadiness, compassion, or creativity.
126
-
127
- `behavior_pattern` is a recurring loop across situations. Think in terms of cue, emotion, thought, action, short-term payoff, long-term cost, and preferred replacement response.
128
-
129
- `behavior` is one recurring action tendency or move, such as withdrawing, appeasing, attacking, numbing out, or taking a regulating walk.
130
-
131
- `belief_entry` is one explicit belief sentence the user carries, such as “If I disappoint people, they will leave me.”
132
-
133
- `mode_profile` is one recurring state, voice, or inner role, such as inner critic, abandoned child, detached protector, overcontroller, or healthy adult.
134
-
135
- `mode_guide_session` is a guided exploration record used to understand what mode may be active right now. It is a structured worksheet, not the final durable profile unless the user wants it that way.
136
-
137
- `trigger_report` is one specific emotionally meaningful episode described as what happened, what was felt, what was thought, what was done, what happened next, and what would help next time.
138
-
139
- `event_type` is a reusable category for trigger reports, such as rejection, criticism, conflict, uncertainty, or abandonment cue.
140
-
141
- `emotion_definition` is a reusable emotion entry, such as fear, shame, anger, grief, relief, or disgust.
142
-
143
- Use this intake map when the user agrees to save or update something.
144
-
145
- `goal`
146
- Use for a meaningful direction over time.
147
- Minimum field: `title`
148
- Usually useful: `description`, `horizon`, `status`
149
- Ask:
150
-
151
- 1. What should this goal be called?
152
- 2. Why does it matter to you?
153
- 3. Is this a quarter, year, or lifetime horizon?
154
-
155
- `project`
156
- Use for a bounded workstream under a goal.
157
- Minimum field: `title`
158
- Usually useful: `goalId`, `description`, `status`
159
- Ask:
160
-
161
- 1. What should this project be called?
162
- 2. Which goal does it support?
163
- 3. What outcome should it produce?
164
-
165
- `task`
166
- Use for one concrete action or deliverable.
167
- Minimum field: `title`
168
- Usually useful: `projectId`, `goalId`, `priority`, `dueDate`, `status`, `owner`
169
- Ask:
170
-
171
- 1. What is the task in one concrete sentence?
172
- 2. Should it live under an existing goal or project?
173
- 3. Does it need a due date, priority, or owner?
174
-
175
- `habit`
176
- Use for a recurring commitment or recurring slip with explicit cadence and XP consequences.
177
- Minimum field: `title`
178
- Usually useful: `polarity`, `frequency`
179
- CRITICAL NEGATIVE-HABIT CHECK-IN RULE:
180
-
181
- - For a `negative` habit, the correct check-in outcome is `missed`.
182
- - On a `negative` habit, `missed` means the habit was resisted, the user stayed aligned, and the habit earns its XP bonus.
183
- - Do not treat `missed` on a `negative` habit as failure. In this case, `missed` is the successful outcome.
184
- Ask:
185
-
186
- 1. What is the recurring behavior in one concrete sentence?
187
- 2. Is doing it good (`positive`) or a slip (`negative`)?
188
- 3. What cadence should it follow?
189
-
190
- `task_run`
191
- Use for live work happening now.
192
- Required fields to start: `taskId`, `actor`
193
- Ask only what is needed to start the run, such as the task, the actor, and whether the run is planned or unlimited.
194
-
195
- `psyche_value`
196
- Use for a value or committed direction.
197
- Minimum field: `title`
198
- Usually useful: `description`, `valuedDirection`, `whyItMatters`, links to goals, projects, or tasks
199
- Ask:
200
-
201
- 1. What feels deeply important here, and what would you call that value or direction?
202
- 2. If you were living it a little more this week, what would someone actually see?
203
- 3. Why does it matter now, and what one action would move toward it?
204
-
205
- `behavior_pattern`
206
- Use for a recurring loop across situations.
207
- Minimum field: `title`
208
- Usually useful: `description`, `targetBehavior`, `cueContexts`, `shortTermPayoff`, `longTermCost`, `preferredResponse`
209
- Ask:
210
-
211
- 1. Can we slow this down using one recent example first?
212
- 2. What usually sets the loop off, and what tends to happen in thoughts, feelings, body, and actions next?
213
- 3. What does it do for you immediately, what does it cost later, and what belief, mode, or value seems bound up in it?
214
-
215
- `behavior`
216
- Use for one recurring move or action tendency.
217
- Minimum fields: `kind`, `title`
218
- Usually useful: `commonCues`, `urgeStory`, `shortTermPayoff`, `longTermCost`, `replacementMove`, `repairPlan`
219
- Ask:
220
-
221
- 1. What does this behavior actually look like in plain language?
222
- 2. What cues or urges usually pull you toward it, and what does it do for you in the moment?
223
- 3. Is it an `away`, `committed`, or `recovery` behavior, and what move would you want available instead?
224
-
225
- `belief_entry`
226
- Use for one explicit belief sentence.
227
- Minimum fields: `statement`, `beliefType`
228
- Usually useful: `confidence`, `evidenceFor`, `evidenceAgainst`, `flexibleAlternative`, `originNote`
229
- Ask:
230
-
231
- 1. If we turn that reaction into one sentence, what does the belief sound like in your own words?
232
- 2. Is it `absolute` or `conditional`, and how true does it feel from 0 to 100?
233
- 3. What seems to support it, what weakens it, where did you learn it, and what would be a more flexible alternative?
234
-
235
- `mode_profile`
236
- Use for a recurring part-state or inner role.
237
- Minimum fields: `family`, `title`
238
- Usually useful: `fear`, `burden`, `protectiveJob`, `originContext`, links to patterns, behaviors, and values
239
- Ask:
240
-
241
- 1. When this part shows up, what is it like from the inside and what should it be called?
242
- 2. What kind of mode is this: `coping`, `child`, `critic_parent`, `healthy_adult`, or `happy_child`?
243
- 3. What does it fear, carry, or try to protect, and when did you first need it?
244
-
245
- `mode_guide_session`
246
- Use for guided exploration before or alongside a durable mode profile.
247
- Minimum fields: `summary`, `answers`
248
- Ask:
249
-
250
- 1. What just happened that brought this part online right now?
251
- 2. If it had a voice, what would it say, fear, or need?
252
- 3. Would it help if we suggested one or two candidate mode labels, with reasons, before deciding whether to store a durable profile?
253
-
254
- `trigger_report`
255
- Use for one specific emotionally important episode.
256
- Minimum field: `title`
257
- Usually useful: `eventSituation`, `occurredAt`, `emotions`, `thoughts`, `behaviors`, `consequences`, `nextMoves`, links to values, beliefs, patterns, modes, goals, projects, or tasks
258
- Ask:
259
-
260
- 1. What happened, as concretely as you can say it?
261
- 2. What emotions were present, how intense were they, and what thoughts or meanings showed up?
262
- 3. What did you do next, what did that do short term and long term, and what pattern, belief, or mode seems most active here?
263
-
264
- `event_type`
265
- Use for a reusable trigger category.
266
- Minimum field: `label`
267
- Usually useful: `description`
268
- Ask:
269
-
270
- 1. What kind of repeated moment or incident do you want future reports to name the same way?
271
- 2. What would count as inside this category, and what should stay outside it?
272
- 3. If the meaning is clear but the wording is not, would you like me to suggest a concise label?
273
-
274
- `emotion_definition`
275
- Use for a reusable emotion vocabulary entry.
276
- Minimum field: `label`
277
- Usually useful: `description`, `category`
278
- Ask:
279
-
280
- 1. When this feeling is present, what tells you it is this feeling and not a nearby one?
281
- 2. What would you want a later trigger report to mean when it uses this label?
282
- 3. If the felt meaning is clear but the wording is not, would you like me to suggest a concise label or broader category?
283
-
284
- Use these rules when choosing tools.
285
-
286
- Read first with `forge_get_operator_overview`, `forge_get_operator_context`, or `forge_get_current_work` unless the user is clearly asking for one exact known record or one exact write.
287
-
288
- Before creating or updating an ambiguous stored entity, use `forge_search_entities` to check for duplicates.
289
-
290
- Use the batch entity tools for stored records:
291
- `forge_search_entities`, `forge_create_entities`, `forge_update_entities`, `forge_delete_entities`, `forge_restore_entities`
292
-
293
- These tools operate on:
294
- `goal`, `project`, `strategy`, `task`, `habit`, `tag`, `note`, `insight`, `calendar_event`, `work_block_template`, `task_timebox`, `psyche_value`, `behavior_pattern`, `behavior`, `belief_entry`, `mode_profile`, `mode_guide_session`, `trigger_report`, `event_type`, `emotion_definition`, `preference_catalog`, `preference_catalog_item`, `preference_context`, `preference_item`, `questionnaire_instrument`, `sleep_session`, `workout_session`
295
-
296
- Use the wiki tools for file-first memory work:
297
- `forge_get_wiki_settings`, `forge_list_wiki_pages`, `forge_get_wiki_page`, `forge_search_wiki`, `forge_upsert_wiki_page`, `forge_get_wiki_health`, `forge_sync_wiki_vault`, `forge_reindex_wiki_embeddings`, `forge_ingest_wiki_source`
298
-
299
- Use the health tools for review and reflective enrichment, not as the default CRUD architecture:
300
- `forge_get_sleep_overview`, `forge_get_sports_overview`, `forge_update_sleep_session`, `forge_update_workout_session`
301
-
302
- Use the dedicated domain routes for specialized surfaces that are not simple batch entities:
303
-
304
- - Movement lives under `/api/v1/movement/*`. Treat it as a dedicated timeline of `stays` and `trips`, not as generic batch CRUD. A `stay` means the user remained in the same place for a span of time. A `trip` means the user traveled between places. Use the movement routes when the user wants to understand time in place, travel behavior, specific stays or trips, known places, or selected-span aggregates such as "how long was I at home in the past 2 weeks?" or "when did I travel last month?".
305
- - In the live onboarding catalog, Movement, Life Force, and Workbench should appear as `specialized_domain_surface`. If the classification and route family disagree, trust the specialized route family and fix the contract mismatch instead of inventing a batch CRUD path.
306
- - Movement user actions are: query movement behavior, add a place or manual stay/trip overlay, update an existing stay/trip/place, or link a specific movement item to another Forge entity. Keep the explanation user-facing: where they stayed, when they traveled, what changed, and what this movement should be linked to.
307
- - Movement read lanes map cleanly to the dedicated routes:
308
- `/api/v1/movement/day`, `/api/v1/movement/month`, `/api/v1/movement/all-time`,
309
- `/api/v1/movement/timeline`, `/api/v1/movement/places`,
310
- `/api/v1/movement/selection`, and `/api/v1/movement/trips/:id`.
311
- - When the user is filling a missing-data gap, the default write path is a user-defined overlay box, not a raw stay or trip patch. Use `POST /api/v1/movement/user-boxes/preflight` if you need to confirm overlap or snap to the nearest missing interval, then `POST /api/v1/movement/user-boxes` with `kind: "stay"` or `kind: "trip"`.
312
- - When the user is repairing already-saved movement data, use the repair routes that match the saved object:
313
- `PATCH /api/v1/movement/user-boxes/:id`,
314
- `POST /api/v1/movement/automatic-boxes/:id/invalidate`,
315
- `PATCH /api/v1/movement/stays/:id`,
316
- `PATCH /api/v1/movement/trips/:id`, or
317
- `PATCH /api/v1/movement/trips/:id/points/:pointId`.
318
- - Use `PATCH /api/v1/movement/stays/:id` or `PATCH /api/v1/movement/trips/:id` only when the user is editing an existing recorded stay or recorded trip. Do not use those routes to fill a missing span.
319
- - If the user says something as explicit as "that missing block was me staying home", do not reopen broad intake. Confirm the interval or place only if it is still ambiguous, then create the overlay and read the timeline back.
320
- - Life Force lives under `/api/v1/life-force*`. Use `GET /api/v1/life-force` for the current energy overview, `PATCH /api/v1/life-force/profile` for durable profile changes, `PUT /api/v1/life-force/templates/:weekday` for weekday curve edits, and `POST /api/v1/life-force/fatigue-signals` for real-time tired or recovered signals.
321
- - Workbench lives under `/api/v1/workbench/*`. Use those dedicated routes for flow catalog reads, flow CRUD, runs, published outputs, node results, and latest-node-output reads instead of trying to force Workbench through the batch entity routes.
322
- - Workbench lane hints:
323
- use `/api/v1/workbench/flows` for flow catalog and CRUD,
324
- `/api/v1/workbench/flows/:id/run` or `/api/v1/workbench/run` for execution,
325
- `/api/v1/workbench/flows/:id/output` for published outputs, and the run/node routes
326
- under `/api/v1/workbench/flows/:id` for run history and node-level inspection.
327
- - If you are unsure which specialized route family applies, check `forge_get_agent_onboarding` and use its `entityRouteModel.specializedDomainSurfaces` section before guessing.
328
-
329
- Use live work tools for `task_run`:
330
- `forge_log_work`, `forge_start_task_run`, `forge_heartbeat_task_run`, `forge_focus_task_run`, `forge_complete_task_run`, `forge_release_task_run`
331
-
332
- Use `forge_adjust_work_minutes` for `work_adjustment` when the user wants a truthful signed minute correction on an existing task or project rather than a fake live run or a retroactive new task.
333
-
334
- Use the dedicated Preferences action tools for `preference_judgment` and `preference_signal`:
335
- `forge_submit_preferences_judgment`, `forge_submit_preferences_signal`, `forge_update_preferences_score`
336
-
337
- Use `forge_post_insight` for `insight`.
338
- Use the calendar tools for provider sync and planning:
339
- `forge_get_calendar_overview`, `forge_connect_calendar_provider`, `forge_sync_calendar_connection`, `forge_create_work_block_template`, `forge_recommend_task_timeboxes`, `forge_create_task_timebox`
340
-
341
- Do not say you lack a creation path when these tools cover the request. Do not open the Forge UI or a browser for normal creation or updates that the tools already support. Use `forge_get_ui_entrypoint` only when visual review, Kanban movement, graph exploration, or complex multi-record editing would genuinely be easier there.
342
-
343
- Use these exact payload expectations.
344
-
345
- `forge_search_entities` expects a top-level `searches` array.
346
-
347
- `forge_create_entities`, `forge_update_entities`, `forge_delete_entities`, and `forge_restore_entities` expect a top-level `operations` array.
348
-
349
- For create operations, each item must include `entityType` and `data`.
350
-
351
- Calendar entity CRUD uses these same batch tools:
352
-
353
- - create a native event with `forge_create_entities` and `entityType: "calendar_event"`
354
- - update or move an event with `forge_update_entities` and `entityType: "calendar_event"`
355
- - delete an event with `forge_delete_entities` and `entityType: "calendar_event"`
356
- - create, update, or delete recurring work blocks with `entityType: "work_block_template"`
357
- - create or update planned task slots with `entityType: "task_timebox"`
358
-
359
- Forge still runs the downstream calendar behavior after these generic mutations. For `calendar_event`, that includes provider projection sync on create or update and remote projection deletion on delete.
360
- Calendar date/time rule: when the user gives a local time such as “1pm”, interpret it in the user's timezone, not UTC. Set the payload `timezone` to the user's real timezone and serialize `startAt`, `endAt`, `startsAt`, and `endsAt` so they represent that local wall-clock time correctly. Do not silently treat unspecified local times as `UTC+0`.
361
- Calendar sync default: unless the user explicitly asks for Forge-only storage, do not set `preferredCalendarId` to `null`. Omit `preferredCalendarId` on event creation so Forge can use the default writable connected calendar automatically. Use `preferredCalendarId: null` only when the user clearly wants the event to stay Forge-only.
362
-
363
- When creating `goal`, `project`, or `task`, the create payload may also include `notes: [{ contentMarkdown, author?, tags?, destroyAt?, links? }]`. Forge will create real linked `note` entities automatically and attach them to the new parent record.
364
-
365
- To create a standalone note directly, use `forge_create_entities` with `entityType: "note"` and `data: { contentMarkdown, author?, tags?, destroyAt?, links }`. `links` should point at one or more real Forge entities so the note remains connected and searchable across the graph. Use `tags` for built-in memory-system labels or custom note labels. Use `destroyAt` only when the note should be ephemeral scratch memory that self-destructs later.
366
-
367
- For update operations, each item must include `entityType`, `id`, and `patch`.
368
-
369
- For project lifecycle changes, prefer generic updates:
370
-
371
- - suspend a project with `forge_update_entities` and `patch: { status: "paused" }`
372
- - finish a project with `forge_update_entities` and `patch: { status: "completed" }`
373
- - restart a project with `forge_update_entities` and `patch: { status: "active" }`
374
- - set project calendar defaults with `forge_update_entities` and `patch: { schedulingRules: ... }`
375
- - set task-specific scheduling with `forge_update_entities` and `patch: { schedulingRules: ..., plannedDurationSeconds: ... }`
376
-
377
- For delete operations, each item must include `entityType` and `id`. Delete is soft by default unless the user explicitly wants hard delete.
378
-
379
- For project deletion and recovery, prefer the generic delete and restore tools:
380
-
381
- - soft delete with `forge_delete_entities`
382
- - hard delete only when the user is explicitly asking for permanent removal, using `mode: "hard"`
383
- - restore with `forge_restore_entities`
384
-
385
- For restore operations, each item must include `entityType` and `id`.
386
-
387
- Batch tools do not create or control `task_run`.
388
-
389
- Use the exact route-facing field names. Do not invent friendlier aliases. If a field name is unclear, use `forge_get_agent_onboarding` as the schema source of truth.
390
-
391
- Use these live work rules.
392
-
393
- A `task_run` is the truthful way to represent live work. Do not pretend that changing task status is the same as starting or stopping a work session.
394
-
395
- Use `forge_start_task_run` to begin live work. Required fields: `taskId`, `actor`. If `timerMode` is `planned`, include `plannedDurationSeconds`. If `timerMode` is `unlimited`, omit `plannedDurationSeconds` or set it to null. If calendar rules currently block the task and the user still wants to proceed, include `overrideReason`.
396
-
397
- Use `forge_heartbeat_task_run` to keep an active run alive.
398
-
399
- Use `forge_focus_task_run` when one active run should become the current visible run.
400
-
401
- Use `forge_complete_task_run` to finish live work. When the user or agent wants to preserve what was done, include `closeoutNote` so Forge creates a real linked `note` instead of losing that explanation inside ephemeral run metadata. `closeoutNote` supports the same note fields as normal note creation, including `tags` and `destroyAt`.
402
-
403
- Use `forge_release_task_run` to stop live work without completing the task. `closeoutNote` is also available there for handoff or pause context, including note tags or an ephemeral destroy time when that handoff note should self-delete later.
404
-
405
- Use `forge_log_work` only for retroactive work that already happened. If the user explains the work in a way that should be preserved, include `closeoutNote`.
406
-
407
- Use the calendar tools when the request is about planning or availability rather than entity storage:
408
-
409
- - `forge_get_calendar_overview` to inspect mirrored events, work blocks, provider connections, and existing timeboxes
410
- - `forge_connect_calendar_provider` only when the operator explicitly wants a new Google, Apple, Exchange Online, or custom CalDAV connection and the discovery choices are already known
411
- - `forge_sync_calendar_connection` after a provider connection is created or when the calendar needs a fresh pull/push cycle
412
- - `forge_create_work_block_template` as a convenience helper for Main Activity, Secondary Activity, Third Activity, Rest, Holiday, or Custom recurring blocks
413
- - `forge_recommend_task_timeboxes` to find future slots that satisfy current rules when the user wants suggestions or when the agent needs help narrowing options
414
- - `forge_create_task_timebox` as the main direct route for manual timeboxing once the slot is known; use it after reasoning from the live calendar overview or after accepting a suggested slot
415
-
416
- Timebox planning rules for agents:
417
-
418
- - prefer manual timeboxing when the agent already has enough calendar context to choose the slot itself
419
- - use `forge_get_calendar_overview` first when the current day or week matters; reason over mirrored events, work blocks, existing timeboxes, and availability before placing the block
420
- - use `forge_create_task_timebox` directly for the manual path with explicit `startsAt` and `endsAt`
421
- - use `forge_recommend_task_timeboxes` only for the assisted path, then confirm one returned slot with `forge_create_task_timebox`
422
- - when manually timeboxing, keep the title specific and task-shaped, not generic
423
- - if the block needs a special Action Point profile, pass `activityPresetKey` and/or `customSustainRateApPerHour`
424
- - if the user wants a note about why this slot exists, pass `overrideReason`
425
-
426
- Use the health tools when the request is about sleep or sports review:
427
-
428
- - `forge_get_sleep_overview` to inspect recent nights, averages, regularity, stage breakdown, and linked reflective context
429
- - `forge_get_sports_overview` to inspect training volume, workout types, effort trends, habit-generated sessions, and linked context
430
- - `forge_update_sleep_session` to add sleep-quality notes, tags, or links back to Forge entities after review
431
- - `forge_update_workout_session` to add subjective effort, mood, meaning, tags, or links on one workout after review
432
- - remember that the UI route is `/sports` while the backend overview route is `/api/v1/health/fitness`
433
-
434
- Use these exact health batch payload shapes when the user is creating or editing the stored records themselves:
435
-
436
- - create a manual sleep session:
437
- `{"operations":[{"entityType":"sleep_session","data":{"startedAt":"2026-04-10T22:45:00.000Z","endedAt":"2026-04-11T06:45:00.000Z","qualitySummary":"Slept cleanly after a light evening.","links":[{"entityType":"habit","entityId":"habit_sleep_hygiene","relationshipType":"supports"}]}}]}`
438
- - update a sleep session through batch CRUD:
439
- `{"operations":[{"entityType":"sleep_session","id":"sleep_123","patch":{"notes":"Woke once around 03:00 but settled quickly.","tags":["travel","recovered"]}}]}`
440
- - create a manual workout session:
441
- `{"operations":[{"entityType":"workout_session","data":{"workoutType":"walk","startedAt":"2026-04-11T10:00:00.000Z","endedAt":"2026-04-11T10:45:00.000Z","subjectiveEffort":6,"meaningText":"Reset after a long planning block.","links":[{"entityType":"task","entityId":"task_123","relationshipType":"supports"}]}}]}`
442
- - update a workout session through batch CRUD:
443
- `{"operations":[{"entityType":"workout_session","id":"workout_123","patch":{"moodAfter":"clear","tags":["zone2"]}}]}`
444
-
445
- Work-block payload guidance:
446
-
447
- - `kind` must be one of `main_activity`, `secondary_activity`, `third_activity`, `rest`, `holiday`, or `custom`
448
- - `weekDays` uses Sunday=`0` through Saturday=`6`
449
- - `startMinute` and `endMinute` are minutes from midnight in the selected `timezone`
450
- - `startsOn` and `endsOn` are optional `YYYY-MM-DD` bounds on the recurring template
451
- - if `endsOn` is omitted or null, the block repeats indefinitely
452
- - holidays should usually use `kind: "holiday"`, `weekDays: [0,1,2,3,4,5,6]`, `startMinute: 0`, and `endMinute: 1440`
453
- - work blocks are compact recurring templates inside Forge, not repeated stored events for every day
454
-
455
- Provider-specific expectations:
456
-
457
- - Google and Apple plus writable custom CalDAV connections can mirror selected calendars and publish Forge-owned work blocks or timeboxes into a dedicated `Forge` calendar.
458
- - Exchange Online uses Microsoft Graph and is read-only in the current Forge implementation. It mirrors the selected calendars into Forge but does not publish work blocks, timeboxes, or native events back to Microsoft.
459
- - Exchange Online connection setup is guided and interactive. In normal self-hosted local use, the operator must first save the Microsoft client ID, tenant, and redirect URI in `Settings -> Calendar`, then continue through the popup sign-in flow backed by a local MSAL public-client configuration.
460
- - If an interactive Microsoft auth session has already been completed and the backend gave you an `authSessionId`, then `forge_connect_calendar_provider` accepts `provider: "microsoft"` with `label`, `authSessionId`, and `selectedCalendarUrls`.
461
-
462
- Use these exact calendar batch payload shapes when working generically:
463
-
464
- - create a native event:
465
- `{"operations":[{"entityType":"calendar_event","data":{"title":"Weekly research supervision","startAt":"2026-04-06T06:00:00.000Z","endAt":"2026-04-06T07:00:00.000Z","timezone":"Europe/Zurich","links":[{"entityType":"project","entityId":"project_123","relationshipType":"meeting_for"}]}}]}`
466
- - update or move an event:
467
- `{"operations":[{"entityType":"calendar_event","id":"calevent_123","patch":{"startAt":"2026-04-06T06:30:00.000Z","endAt":"2026-04-06T07:30:00.000Z","timezone":"Europe/Zurich","preferredCalendarId":"calendar_123"}}]}`
468
- - delete an event:
469
- `{"operations":[{"entityType":"calendar_event","id":"calevent_123"}]}`
470
- - create a recurring work block:
471
- `{"operations":[{"entityType":"work_block_template","data":{"title":"Main Activity","kind":"main_activity","color":"#f97316","timezone":"Europe/Zurich","weekDays":[1,2,3,4,5],"startMinute":480,"endMinute":720,"startsOn":"2026-04-06","endsOn":null,"blockingState":"blocked"}}]}`
472
- - create a holiday block:
473
- `{"operations":[{"entityType":"work_block_template","data":{"title":"Summer holiday","kind":"holiday","color":"#14b8a6","timezone":"Europe/Zurich","weekDays":[0,1,2,3,4,5,6],"startMinute":0,"endMinute":1440,"startsOn":"2026-08-01","endsOn":"2026-08-16","blockingState":"blocked"}}]}`
474
- - create a planned task slot:
475
- `{"operations":[{"entityType":"task_timebox","data":{"taskId":"task_123","projectId":"project_456","title":"Draft the methods section","startsAt":"2026-04-03T06:00:00.000Z","endsAt":"2026-04-03T07:30:00.000Z","source":"suggested"}}]}`
476
-
477
- Use these exact timebox helper payload shapes when the dedicated helper is simpler than batch CRUD:
478
-
479
- - create a manual task timebox directly:
480
- `{"taskId":"task_123","projectId":"project_456","title":"Draft the methods section","startsAt":"2026-04-03T06:00:00.000Z","endsAt":"2026-04-03T07:30:00.000Z","source":"manual","overrideReason":"Protected writing block before clinic.","activityPresetKey":"deep_work","customSustainRateApPerHour":6.5}`
481
- - create a suggested task timebox after reviewing recommendations:
482
- `{"taskId":"task_123","projectId":"project_456","title":"Draft the methods section","startsAt":"2026-04-03T08:00:00.000Z","endsAt":"2026-04-03T09:30:00.000Z","source":"suggested"}`
483
-
484
- Use these interaction rules.
485
-
486
- Keep the main discussion natural. Do not turn every conversation into a form. Do not offer Forge for every passing mention. Offer it once, near the end, only when the signal is strong and storing would help.
487
-
488
- Good examples:
489
- “This is a `project` in Forge. Do you want to save it?”
490
- “This sounds like a `behavior_pattern`. Do you want to map it and save it?”
491
- “This is a `trigger_report`. Do you want to capture it in Forge?”
492
-
493
- Bad behavior:
494
- interrupting too early
495
- asking for every optional field
496
- using vague labels instead of the real entity name
497
- repeating the Forge prompt after the user has declined
498
-
499
- Treat Psyche as structured reflective work, not as casual metadata. When the user is distressed, prioritize support and clarity over structure. Only suggest storage when the user seems ready.
500
-
501
- When the user asks which Forge tools are available, list exactly these tools:
502
- `forge_get_operator_overview`
503
- `forge_get_operator_context`
504
- `forge_get_agent_onboarding`
505
- `forge_get_user_directory`
506
- `forge_get_psyche_overview`
507
- `forge_get_sleep_overview`
508
- `forge_get_sports_overview`
509
- `forge_get_xp_metrics`
510
- `forge_get_weekly_review`
511
- `forge_get_current_work`
512
- `forge_get_ui_entrypoint`
513
- `forge_get_wiki_settings`
514
- `forge_list_wiki_pages`
515
- `forge_get_wiki_page`
516
- `forge_search_wiki`
517
- `forge_upsert_wiki_page`
518
- `forge_get_wiki_health`
519
- `forge_sync_wiki_vault`
520
- `forge_reindex_wiki_embeddings`
521
- `forge_ingest_wiki_source`
522
- `forge_search_entities`
523
- `forge_create_entities`
524
- `forge_update_entities`
525
- `forge_delete_entities`
526
- `forge_restore_entities`
527
- `forge_grant_reward_bonus`
528
- `forge_update_sleep_session`
529
- `forge_update_workout_session`
530
- `forge_log_work`
531
- `forge_start_task_run`
532
- `forge_heartbeat_task_run`
533
- `forge_focus_task_run`
534
- `forge_complete_task_run`
535
- `forge_release_task_run`
536
- `forge_post_insight`
537
- `forge_get_calendar_overview`
538
- `forge_connect_calendar_provider`
539
- `forge_sync_calendar_connection`
540
- `forge_create_work_block_template`
541
- `forge_recommend_task_timeboxes`
542
- `forge_create_task_timebox`
543
-
544
- Additional first-class surfaces:
545
-
546
- - Use the high-level batch routes for basic Preferences CRUD. `preference_catalog`, `preference_catalog_item`, `preference_context`, and `preference_item` all go through `forge_create_entities`, `forge_update_entities`, and `forge_delete_entities`.
547
- - Use the high-level batch routes for basic questionnaire CRUD too. `questionnaire_instrument` goes through `forge_create_entities`, `forge_update_entities`, and `forge_delete_entities`.
548
- - Use the high-level batch routes for ordinary health-session CRUD too. `sleep_session` and `workout_session` go through `forge_search_entities`, `forge_create_entities`, `forge_update_entities`, and `forge_delete_entities` by default. Keep the dedicated health tools for review surfaces and reflective enrichment on one record.
549
- - Keep the dedicated Preferences tools only for real preference actions and read models: `forge_get_preferences_workspace`, `forge_start_preferences_game`, `forge_merge_preferences_contexts`, `forge_enqueue_preferences_item_from_entity`, `forge_submit_preferences_judgment`, `forge_submit_preferences_signal`, and `forge_update_preferences_score`.
550
- - Keep the dedicated questionnaire tools only for real flow actions and read models: `forge_list_questionnaires`, `forge_get_questionnaire`, `forge_clone_questionnaire`, `forge_ensure_questionnaire_draft`, `forge_publish_questionnaire_draft`, `forge_start_questionnaire_run`, `forge_get_questionnaire_run`, `forge_update_questionnaire_run`, and `forge_complete_questionnaire_run`.
551
- - Self-observation is note-backed. Read the calendar through `forge_get_self_observation_calendar`, but create or update the stored observation as a `note` tagged `Self-observation` with `frontmatter.observedAt` and links to the relevant `behavior_pattern`, `trigger_report`, or other Forge records.
552
- - `sleep_session` and `workout_session` are first-class health records. Treat them like ordinary stored entities for CRUD, and use the dedicated health tools for read models or post-review enrichment rather than pretending they live on a special mutation island.