forge-openclaw-plugin 0.2.26 → 0.2.27

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 (108) hide show
  1. package/README.md +59 -3
  2. package/dist/assets/{board-ta0rUHOf.js → board-C6jCchjI.js} +2 -2
  3. package/dist/assets/{board-ta0rUHOf.js.map → board-C6jCchjI.js.map} +1 -1
  4. package/dist/assets/index-DVvS8iiU.css +1 -0
  5. package/dist/assets/index-zYB-9Dfo.js +85 -0
  6. package/dist/assets/index-zYB-9Dfo.js.map +1 -0
  7. package/dist/assets/knowledge-graph-layout.worker-DRvzPxhP.js +2 -0
  8. package/dist/assets/knowledge-graph-layout.worker-DRvzPxhP.js.map +1 -0
  9. package/dist/assets/{motion-fBKPB6yw.js → motion-DFHrH2rd.js} +2 -2
  10. package/dist/assets/{motion-fBKPB6yw.js.map → motion-DFHrH2rd.js.map} +1 -1
  11. package/dist/assets/{table-C-IGTQni.js → table-ZL7Di_u3.js} +2 -2
  12. package/dist/assets/{table-C-IGTQni.js.map → table-ZL7Di_u3.js.map} +1 -1
  13. package/dist/assets/{ui-DInOpaYF.js → ui-CKNPpz7q.js} +2 -2
  14. package/dist/assets/{ui-DInOpaYF.js.map → ui-CKNPpz7q.js.map} +1 -1
  15. package/dist/assets/vendor-DoNZuFhn.js +1247 -0
  16. package/dist/assets/vendor-DoNZuFhn.js.map +1 -0
  17. package/dist/index.html +7 -7
  18. package/dist/openclaw/local-runtime.js +16 -0
  19. package/dist/openclaw/routes.d.ts +27 -0
  20. package/dist/openclaw/routes.js +16 -12
  21. package/dist/server/server/migrations/037_workbench_public_inputs_and_run_inputs.sql +5 -0
  22. package/dist/server/server/migrations/038_data_management_settings.sql +11 -0
  23. package/dist/server/server/migrations/039_life_force_and_action_points.sql +114 -0
  24. package/dist/server/server/migrations/040_screen_time_domain.sql +89 -0
  25. package/dist/server/server/migrations/041_companion_source_states.sql +21 -0
  26. package/dist/server/server/migrations/042_movement_boxes.sql +47 -0
  27. package/dist/server/server/migrations/043_movement_box_overlap_overrides.sql +26 -0
  28. package/dist/server/server/src/app.js +1684 -117
  29. package/dist/server/server/src/connectors/box-registry.js +44 -9
  30. package/dist/server/server/src/data-management-types.js +107 -0
  31. package/dist/server/server/src/db.js +68 -4
  32. package/dist/server/server/src/demo-data.js +2 -2
  33. package/dist/server/server/src/health.js +702 -18
  34. package/dist/server/server/src/managers/platform/llm-manager.js +7 -4
  35. package/dist/server/server/src/managers/platform/mock-workbench-provider.js +149 -0
  36. package/dist/server/server/src/managers/platform/secrets-manager.js +18 -1
  37. package/dist/server/server/src/managers/runtime.js +9 -0
  38. package/dist/server/server/src/movement.js +1971 -112
  39. package/dist/server/server/src/openapi.js +489 -1
  40. package/dist/server/server/src/psyche-types.js +9 -1
  41. package/dist/server/server/src/repositories/activity-events.js +8 -0
  42. package/dist/server/server/src/repositories/ai-connectors.js +522 -74
  43. package/dist/server/server/src/repositories/habits.js +37 -1
  44. package/dist/server/server/src/repositories/model-settings.js +13 -3
  45. package/dist/server/server/src/repositories/notes.js +3 -0
  46. package/dist/server/server/src/repositories/settings.js +380 -18
  47. package/dist/server/server/src/repositories/tasks.js +170 -10
  48. package/dist/server/server/src/runtime-data-root.js +82 -0
  49. package/dist/server/server/src/screen-time.js +802 -0
  50. package/dist/server/server/src/services/data-management.js +788 -0
  51. package/dist/server/server/src/services/entity-crud.js +205 -2
  52. package/dist/server/server/src/services/knowledge-graph.js +1455 -0
  53. package/dist/server/server/src/services/life-force-model.js +197 -0
  54. package/dist/server/server/src/services/life-force.js +1270 -0
  55. package/dist/server/server/src/services/psyche-observation-calendar.js +383 -16
  56. package/dist/server/server/src/types.js +286 -13
  57. package/dist/server/server/src/web.js +228 -13
  58. package/dist/server/src/components/customization/utility-widgets.js +136 -27
  59. package/dist/server/src/components/ui/info-tooltip.js +25 -0
  60. package/dist/server/src/components/workbench-boxes/calendar/calendar-boxes.js +78 -0
  61. package/dist/server/src/components/workbench-boxes/goals/goals-boxes.js +62 -0
  62. package/dist/server/src/components/workbench-boxes/habits/habits-boxes.js +62 -0
  63. package/dist/server/src/components/workbench-boxes/health/health-boxes.js +63 -8
  64. package/dist/server/src/components/workbench-boxes/insights/insights-boxes.js +50 -0
  65. package/dist/server/src/components/workbench-boxes/kanban/kanban-boxes.js +62 -54
  66. package/dist/server/src/components/workbench-boxes/movement/movement-boxes.js +18 -8
  67. package/dist/server/src/components/workbench-boxes/notes/notes-boxes.js +56 -38
  68. package/dist/server/src/components/workbench-boxes/overview/overview-boxes.js +65 -0
  69. package/dist/server/src/components/workbench-boxes/preferences/preferences-boxes.js +78 -0
  70. package/dist/server/src/components/workbench-boxes/projects/projects-boxes.js +35 -30
  71. package/dist/server/src/components/workbench-boxes/psyche/psyche-boxes.js +88 -0
  72. package/dist/server/src/components/workbench-boxes/questionnaires/questionnaires-boxes.js +61 -0
  73. package/dist/server/src/components/workbench-boxes/review/review-boxes.js +53 -0
  74. package/dist/server/src/components/workbench-boxes/shared/define-workbench-box.js +3 -1
  75. package/dist/server/src/components/workbench-boxes/shared/generic-node-view.js +39 -3
  76. package/dist/server/src/components/workbench-boxes/strategies/strategies-boxes.js +62 -0
  77. package/dist/server/src/components/workbench-boxes/tasks/tasks-boxes.js +76 -0
  78. package/dist/server/src/components/workbench-boxes/today/today-boxes.js +47 -32
  79. package/dist/server/src/components/workbench-boxes/wiki/wiki-boxes.js +60 -0
  80. package/dist/server/src/lib/api.js +280 -21
  81. package/dist/server/src/lib/data-management-types.js +1 -0
  82. package/dist/server/src/lib/entity-visuals.js +279 -0
  83. package/dist/server/src/lib/knowledge-graph-types.js +276 -0
  84. package/dist/server/src/lib/knowledge-graph.js +470 -0
  85. package/dist/server/src/lib/schemas.js +4 -0
  86. package/dist/server/src/lib/snapshot-normalizer.js +43 -1
  87. package/dist/server/src/lib/workbench/contracts.js +229 -0
  88. package/dist/server/src/lib/workbench/nodes.js +200 -0
  89. package/dist/server/src/lib/workbench/registry.js +52 -5
  90. package/dist/server/src/lib/workbench/runtime.js +254 -38
  91. package/dist/server/src/lib/workbench/tool-catalog.js +68 -0
  92. package/openclaw.plugin.json +1 -1
  93. package/package.json +1 -1
  94. package/server/migrations/037_workbench_public_inputs_and_run_inputs.sql +5 -0
  95. package/server/migrations/038_data_management_settings.sql +11 -0
  96. package/server/migrations/039_life_force_and_action_points.sql +114 -0
  97. package/server/migrations/040_screen_time_domain.sql +89 -0
  98. package/server/migrations/041_companion_source_states.sql +21 -0
  99. package/server/migrations/042_movement_boxes.sql +47 -0
  100. package/server/migrations/043_movement_box_overlap_overrides.sql +26 -0
  101. package/skills/forge-openclaw/SKILL.md +24 -11
  102. package/skills/forge-openclaw/entity_conversation_playbooks.md +210 -34
  103. package/skills/forge-openclaw/psyche_entity_playbooks.md +113 -17
  104. package/dist/assets/index-Ro0ZF_az.css +0 -1
  105. package/dist/assets/index-ytlpSj23.js +0 -79
  106. package/dist/assets/index-ytlpSj23.js.map +0 -1
  107. package/dist/assets/vendor-lE3tZJcC.js +0 -876
  108. package/dist/assets/vendor-lE3tZJcC.js.map +0 -1
@@ -0,0 +1,47 @@
1
+ CREATE TABLE IF NOT EXISTS movement_boxes (
2
+ id TEXT PRIMARY KEY,
3
+ user_id TEXT NOT NULL,
4
+ kind TEXT NOT NULL CHECK (kind IN ('stay', 'trip', 'missing')),
5
+ source_kind TEXT NOT NULL CHECK (source_kind IN ('automatic', 'user_defined')),
6
+ origin TEXT NOT NULL CHECK (
7
+ origin IN (
8
+ 'recorded',
9
+ 'continued_stay',
10
+ 'repaired_gap',
11
+ 'missing',
12
+ 'user_defined',
13
+ 'user_invalidated'
14
+ )
15
+ ),
16
+ started_at TEXT NOT NULL,
17
+ ended_at TEXT NOT NULL,
18
+ title TEXT NOT NULL DEFAULT '',
19
+ subtitle TEXT NOT NULL DEFAULT '',
20
+ place_label TEXT,
21
+ anchor_external_uid TEXT,
22
+ tags_json TEXT NOT NULL DEFAULT '[]',
23
+ distance_meters REAL,
24
+ average_speed_mps REAL,
25
+ editable INTEGER NOT NULL DEFAULT 0,
26
+ override_count INTEGER NOT NULL DEFAULT 0,
27
+ overridden_automatic_box_ids_json TEXT NOT NULL DEFAULT '[]',
28
+ raw_stay_ids_json TEXT NOT NULL DEFAULT '[]',
29
+ raw_trip_ids_json TEXT NOT NULL DEFAULT '[]',
30
+ raw_point_count INTEGER NOT NULL DEFAULT 0,
31
+ has_legacy_corrections INTEGER NOT NULL DEFAULT 0,
32
+ legacy_origin_key TEXT,
33
+ metadata_json TEXT NOT NULL DEFAULT '{}',
34
+ deleted_at TEXT,
35
+ created_at TEXT NOT NULL,
36
+ updated_at TEXT NOT NULL
37
+ );
38
+
39
+ CREATE INDEX IF NOT EXISTS idx_movement_boxes_user_time
40
+ ON movement_boxes(user_id, started_at, ended_at);
41
+
42
+ CREATE INDEX IF NOT EXISTS idx_movement_boxes_user_source
43
+ ON movement_boxes(user_id, source_kind, deleted_at, started_at);
44
+
45
+ CREATE UNIQUE INDEX IF NOT EXISTS idx_movement_boxes_legacy_origin
46
+ ON movement_boxes(user_id, legacy_origin_key)
47
+ WHERE legacy_origin_key IS NOT NULL;
@@ -0,0 +1,26 @@
1
+ ALTER TABLE movement_boxes
2
+ ADD COLUMN true_started_at TEXT;
3
+
4
+ ALTER TABLE movement_boxes
5
+ ADD COLUMN true_ended_at TEXT;
6
+
7
+ ALTER TABLE movement_boxes
8
+ ADD COLUMN overridden_started_at TEXT;
9
+
10
+ ALTER TABLE movement_boxes
11
+ ADD COLUMN overridden_ended_at TEXT;
12
+
13
+ ALTER TABLE movement_boxes
14
+ ADD COLUMN overridden_by_box_id TEXT;
15
+
16
+ ALTER TABLE movement_boxes
17
+ ADD COLUMN overridden_user_box_ids_json TEXT NOT NULL DEFAULT '[]';
18
+
19
+ ALTER TABLE movement_boxes
20
+ ADD COLUMN override_ranges_json TEXT NOT NULL DEFAULT '[]';
21
+
22
+ ALTER TABLE movement_boxes
23
+ ADD COLUMN is_overridden INTEGER NOT NULL DEFAULT 0;
24
+
25
+ ALTER TABLE movement_boxes
26
+ ADD COLUMN is_fully_hidden INTEGER NOT NULL DEFAULT 0;
@@ -41,8 +41,9 @@ Wiki navigation and search rule:
41
41
  Health rule:
42
42
 
43
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.
45
- - Use `forge_update_sleep_session` and `forge_update_workout_session` when the user wants to attach reflective context, tags, or Forge links to an existing health record.
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.
46
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.
47
48
 
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.
@@ -64,9 +65,9 @@ Entity conversation rule:
64
65
 
65
66
  Forge data location rule:
66
67
 
67
- - by default, Forge stores data under the active runtime root at `data/forge.sqlite`
68
- - on a normal OpenClaw install, this usually means `~/.openclaw/extensions/forge-openclaw-plugin/data/forge.sqlite`
69
- - on a linked repo-local install, this usually means `<repo>/openclaw-plugin/data/forge.sqlite`
68
+ - by default, Forge stores data under the active runtime root at `forge.sqlite`
69
+ - on a normal OpenClaw install, this usually means `~/.openclaw/extensions/forge-openclaw-plugin/forge.sqlite`
70
+ - on a linked repo-local install, this usually means `<repo>/openclaw-plugin/forge.sqlite`
70
71
  - 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
71
72
  - 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
72
73
 
@@ -282,12 +283,12 @@ Use the batch entity tools for stored records:
282
283
  `forge_search_entities`, `forge_create_entities`, `forge_update_entities`, `forge_delete_entities`, `forge_restore_entities`
283
284
 
284
285
  These tools operate on:
285
- `goal`, `project`, `task`, `habit`, `note`, `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`
286
+ `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`
286
287
 
287
288
  Use the wiki tools for file-first memory work:
288
289
  `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`
289
290
 
290
- Sleep and workout sessions are not batch entities. Use the health tools instead:
291
+ Use the health tools for review and reflective enrichment, not as the default CRUD architecture:
291
292
  `forge_get_sleep_overview`, `forge_get_sports_overview`, `forge_update_sleep_session`, `forge_update_workout_session`
292
293
 
293
294
  Use live work tools for `task_run`:
@@ -343,7 +344,7 @@ For project deletion and recovery, prefer the generic delete and restore tools:
343
344
 
344
345
  For restore operations, each item must include `entityType` and `id`.
345
346
 
346
- Batch tools do not create or control `task_run` or `insight`.
347
+ Batch tools do not create or control `task_run`.
347
348
 
348
349
  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.
349
350
 
@@ -376,10 +377,21 @@ Use the health tools when the request is about sleep or sports review:
376
377
 
377
378
  - `forge_get_sleep_overview` to inspect recent nights, averages, regularity, stage breakdown, and linked reflective context
378
379
  - `forge_get_sports_overview` to inspect training volume, workout types, effort trends, habit-generated sessions, and linked context
379
- - `forge_update_sleep_session` to add sleep-quality notes, tags, or links back to Forge entities
380
- - `forge_update_workout_session` to add subjective effort, mood, meaning, tags, or links on one workout
380
+ - `forge_update_sleep_session` to add sleep-quality notes, tags, or links back to Forge entities after review
381
+ - `forge_update_workout_session` to add subjective effort, mood, meaning, tags, or links on one workout after review
381
382
  - remember that the UI route is `/sports` while the backend overview route is `/api/v1/health/fitness`
382
383
 
384
+ Use these exact health batch payload shapes when the user is creating or editing the stored records themselves:
385
+
386
+ - create a manual sleep session:
387
+ `{"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"}]}}]}`
388
+ - update a sleep session through batch CRUD:
389
+ `{"operations":[{"entityType":"sleep_session","id":"sleep_123","patch":{"notes":"Woke once around 03:00 but settled quickly.","tags":["travel","recovered"]}}]}`
390
+ - create a manual workout session:
391
+ `{"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"}]}}]}`
392
+ - update a workout session through batch CRUD:
393
+ `{"operations":[{"entityType":"workout_session","id":"workout_123","patch":{"moodAfter":"clear","tags":["zone2"]}}]}`
394
+
383
395
  Work-block payload guidance:
384
396
 
385
397
  - `kind` must be one of `main_activity`, `secondary_activity`, `third_activity`, `rest`, `holiday`, or `custom`
@@ -476,7 +488,8 @@ Additional first-class surfaces:
476
488
 
477
489
  - 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`.
478
490
  - 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`.
491
+ - 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.
479
492
  - 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`.
480
493
  - 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`.
481
494
  - 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.
482
- - `sleep_session` and `workout_session` are first-class health records. Review them through the dedicated health tools instead of treating them like loose notes.
495
+ - `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.
@@ -9,8 +9,12 @@ Forge correctly, and gather only the structure that still matters.
9
9
 
10
10
  - Lead with what the user is trying to preserve, change, resolve, or make true, not
11
11
  with the entity label.
12
+ - Start by saying what seems to matter here or what the record is becoming, then ask
13
+ the next useful question.
12
14
  - Ask only for what is missing or still unclear.
13
15
  - Before every question, decide the one missing thing you are trying to clarify.
16
+ - Ask first for the missing thing that would change the record shape, title, or next
17
+ action most, not just the easiest field to fill.
14
18
  - Know where the conversation is headed before you ask the next question.
15
19
  - Prefer one clean question to a stacked sentence with several asks.
16
20
  - Reflect briefly when the user gives meaning, ambivalence, or emotionally loaded
@@ -33,16 +37,24 @@ Forge correctly, and gather only the structure that still matters.
33
37
  task runs, use a fast path:
34
38
  one brief confirming sentence -> one operational question.
35
39
  - Do not read schema fields out loud unless the user explicitly wants a checklist.
40
+ - One focused question is the default. Ask two only when both questions serve the same
41
+ job and the user is steady enough for it.
36
42
  - Do not ask the user to do naming work alone when the meaning is already clear. Offer
37
43
  a tentative title or formulation and invite correction.
38
44
  - When the meaning is clearer than the wording, offer a tentative title or summary
39
45
  yourself and ask whether it fits.
46
+ - After each substantive answer, briefly say what is becoming clearer before you ask
47
+ for the next missing detail.
48
+ - Let the user feel the direction of the intake. The next question should make sense
49
+ because of what just became clearer, not because a hidden checklist says it is next.
40
50
  - If the user already answered the usual opening question, do not repeat the stock
41
51
  opener. Move straight to the next missing clarification.
42
52
  - After a substantive answer, briefly say what is becoming clear so the user can
43
53
  correct the direction early.
44
54
  - Once the record is clear enough to name, stop exploring broadly and ask only for the
45
55
  last missing structural detail.
56
+ - When the record is already clear enough to save, save it instead of performing a
57
+ ceremonial extra question.
46
58
 
47
59
  ## Conversation arc
48
60
 
@@ -79,6 +91,28 @@ Update record:
79
91
 
80
92
  - "Before I change it, what feels newly true now, and what should stay intact?"
81
93
 
94
+ ## Turn shapes
95
+
96
+ Use these as small conversation molds when you need the next turn to feel guided
97
+ rather than mechanical.
98
+
99
+ Opening turn:
100
+
101
+ - briefly reflect what seems to matter here
102
+ - ask the one question that clarifies shape, stake, or outcome most
103
+
104
+ Middle turn:
105
+
106
+ - say what is becoming clearer
107
+ - name the one thing that still needs to be known
108
+ - ask only for that
109
+
110
+ Closing turn:
111
+
112
+ - offer the working title, summary, or record shape in plain language
113
+ - ask whether it feels true enough to save or needs one correction
114
+ - if the user says yes, move to the write instead of reopening the intake
115
+
82
116
  ## Steering moves
83
117
 
84
118
  Use these small moves to keep the intake natural and intentional.
@@ -107,12 +141,73 @@ When you are about to save:
107
141
 
108
142
  - give one short working summary in the user's language and ask whether it feels true
109
143
  enough or needs one correction
144
+ - if the user confirms it, stop asking and save
110
145
 
111
146
  When an adjacent record becomes visible:
112
147
 
113
148
  - name it gently and ask whether it should be linked now, saved separately later, or
114
149
  left alone for now
115
150
 
151
+ ## Question Calibration Loop
152
+
153
+ Use this quick internal check before every follow-up question.
154
+
155
+ 1. What is the one thing still unknown?
156
+ 2. Does that unknown affect the entity shape, the wording, the placement, or the
157
+ operational detail?
158
+ 3. What is the smallest question that would answer that unknown?
159
+ 4. If the user already gave enough to act, stop asking and move to a short summary or
160
+ the write.
161
+
162
+ Useful calibration heuristics:
163
+
164
+ - If the unknown changes whether this is a goal, project, task, note, or Psyche
165
+ record, ask that first.
166
+ - If the shape is already clear but the wording is soft, offer a candidate title or
167
+ formulation rather than asking the user to invent one from scratch.
168
+ - If the wording is clear but the placement is missing, ask only for the parent,
169
+ timing, owner, or linked context that will make the record usable later.
170
+ - If the user is emotionally invested but the entity is not Psyche, reflect the stake
171
+ once and then return to the one missing structural detail.
172
+ - If the next question would only decorate the record and not change its usefulness,
173
+ skip it.
174
+
175
+ ## Abstract And Reusable Record Moves
176
+
177
+ Use this posture for tags, event types, emotion definitions, preference contexts,
178
+ preference catalogs, preference items, questionnaire instruments, and similar
179
+ reusable records.
180
+
181
+ - Start from the future use, decision, or repeated moment the record should clarify,
182
+ not from the label alone.
183
+ - Ask what distinction this record should help the user notice, compare, sort, or
184
+ retrieve later.
185
+ - For collection records, ask what they are meant to help decide before you ask what
186
+ belongs inside them.
187
+ - For vocabulary records, ask what counts as inside versus outside the term before you
188
+ settle the wording.
189
+ - If the user already proposes a label, keep it provisional until the boundary and
190
+ future use are clear.
191
+ - Once the distinction is clear, offer a candidate label yourself and invite
192
+ correction instead of making the user wordsmith alone.
193
+
194
+ ## Name, Define, Connect
195
+
196
+ Once the core record is visible, use this short checkpoint.
197
+
198
+ Name:
199
+
200
+ - offer a working title or label if the user has the meaning but not the wording yet
201
+
202
+ Define:
203
+
204
+ - ask what belongs inside this record and what would make it stop being this record
205
+
206
+ Connect:
207
+
208
+ - ask about links only after the record itself feels named and defined enough to stay
209
+ stable
210
+
116
211
  ## Question design rules
117
212
 
118
213
  - Let each question have one job:
@@ -124,6 +219,8 @@ When an adjacent record becomes visible:
124
219
  or clarify the links.
125
220
  - Do not over-warm or over-therapize logistical records. For those flows, one brief
126
221
  confirming sentence plus one question is usually enough.
222
+ - The first question should usually clarify lived meaning, use, stake, or timing, not
223
+ ask the user to invent a title from scratch.
127
224
  - Ask the more meaning-bearing question before the more administrative one.
128
225
  - Prefer "what", "when", and "how" before "why" when the user's meaning is still
129
226
  forming. "Why" is often better after the experience or outcome is already clear.
@@ -134,6 +231,8 @@ When an adjacent record becomes visible:
134
231
  figuring out what the thing is.
135
232
  - For labels such as `tag`, `event_type`, and `emotion_definition`, do not open with a
136
233
  naming question unless the meaning is already clear and only the wording is missing.
234
+ - For reusable records, help the user define the boundary before you settle the final
235
+ label.
137
236
  - Before the final save question, it is often better to offer a candidate formulation
138
237
  than to ask for raw wording from scratch.
139
238
  - When useful, say what you think the record is becoming before asking the next
@@ -148,6 +247,8 @@ When an adjacent record becomes visible:
148
247
  - For collection-like records such as `preference_catalog` and
149
248
  `questionnaire_instrument`, ask what they are for before you ask what should go
150
249
  inside them.
250
+ - After the user answers, prefer "what is becoming clearer is..." over a cold jump to
251
+ the next field.
151
252
 
152
253
  ## Ready-to-save check
153
254
 
@@ -165,6 +266,9 @@ Before the final write, it is usually worth asking one light confirmation such a
165
266
  - "That sounds like the right shape to save. Do you want to keep it that way, or is
166
267
  there one thing you want adjusted first?"
167
268
 
269
+ If an adjacent goal, project, task, note, value, pattern, or tag became visible, ask
270
+ about linking only after the main record already feels named and steady.
271
+
168
272
  ## Update loop
169
273
 
170
274
  Use this when the user is updating an existing record rather than creating a new one.
@@ -184,9 +288,10 @@ Aim: clarify the direction and why it matters, not just produce a title.
184
288
  Arc:
185
289
 
186
290
  1. Ask what direction or outcome the user wants to keep in view.
187
- 2. Ask why it matters now.
188
- 3. Distinguish the goal from a project or task if needed.
189
- 4. Clarify horizon and status only after the meaning is clear.
291
+ 2. Reflect back the deeper stake in plain language before moving on.
292
+ 3. Ask why it matters now.
293
+ 4. Distinguish the goal from a project or task if needed.
294
+ 5. Clarify horizon and status only after the meaning is clear.
190
295
 
191
296
  Helpful follow-up lanes:
192
297
 
@@ -202,7 +307,7 @@ Ready to save when:
202
307
 
203
308
  Preferred opening question:
204
309
 
205
- - "What direction here feels important enough that you want to keep it in view?"
310
+ - "What direction are you trying to keep hold of here?"
206
311
 
207
312
  ## Project
208
313
 
@@ -211,10 +316,11 @@ Aim: turn an intention into a bounded workstream with a clear outcome.
211
316
  Arc:
212
317
 
213
318
  1. Ask what this piece of work is trying to make true.
214
- 2. Ask what outcome would make it feel real or complete for now.
215
- 3. Ask which goal it belongs under.
216
- 4. Land on a working name once the scope is clear.
217
- 5. Clarify status, owner, and notes only after the scope is clear.
319
+ 2. Reflect the emerging boundary so the user can hear what is in scope.
320
+ 3. Ask what outcome would make it feel real or complete for now.
321
+ 4. Ask which goal it belongs under.
322
+ 5. Land on a working name once the scope is clear.
323
+ 6. Clarify status, owner, and notes only after the scope is clear.
218
324
 
219
325
  Helpful follow-up lanes:
220
326
 
@@ -230,7 +336,7 @@ Ready to save when:
230
336
 
231
337
  Preferred opening question:
232
338
 
233
- - "If this became a real project, what would you be trying to make true?"
339
+ - "If this became a real project, what would you be trying to make true in your life or work?"
234
340
 
235
341
  ## Strategy
236
342
 
@@ -239,10 +345,11 @@ Aim: turn a vague plan into a deliberate sequence toward a real end state.
239
345
  Arc:
240
346
 
241
347
  1. Ask what future state the strategy is trying to make real.
242
- 2. Ask which goals or projects are the true targets.
243
- 3. Ask what the major steps or phases are.
244
- 4. Ask about order, dependencies, and anything that must not be skipped.
245
- 5. Clarify links or ownership once the sequence itself makes sense.
348
+ 2. Reflect the destination in plain language so the user can correct it early.
349
+ 3. Ask which goals or projects are the true targets.
350
+ 4. Ask what the major steps or phases are.
351
+ 5. Ask about order, dependencies, and anything that must not be skipped.
352
+ 6. Clarify links or ownership once the sequence itself makes sense.
246
353
 
247
354
  Helpful follow-up lanes:
248
355
 
@@ -259,7 +366,7 @@ Ready to save when:
259
366
 
260
367
  Preferred opening question:
261
368
 
262
- - "What future state is this strategy supposed to make real?"
369
+ - "What future state are you actually trying to arrive at with this strategy?"
263
370
 
264
371
  ## Task
265
372
 
@@ -286,7 +393,7 @@ Ready to save when:
286
393
 
287
394
  Preferred opening question:
288
395
 
289
- - "What is the next concrete move you want to remember or do?"
396
+ - "What is the next concrete move here?"
290
397
 
291
398
  ## Habit
292
399
 
@@ -315,7 +422,7 @@ Ready to save when:
315
422
 
316
423
  Preferred opening question:
317
424
 
318
- - "What recurring move are you trying to strengthen or loosen?"
425
+ - "What recurring move are you trying to strengthen or interrupt?"
319
426
 
320
427
  ## Tag
321
428
 
@@ -362,6 +469,8 @@ Helpful follow-up lanes:
362
469
  - what the note is for later
363
470
  - what should stay linked
364
471
  - whether it is durable or should expire
472
+ - whether part of the detail belongs in a note while the cleaner structure belongs on
473
+ another entity
365
474
 
366
475
  Ready to save when:
367
476
 
@@ -371,7 +480,36 @@ Ready to save when:
371
480
 
372
481
  Preferred opening question:
373
482
 
374
- - "What feels important enough here that you would want to be able to find it again later?"
483
+ - "What about this feels worth preserving in a note?"
484
+
485
+ ## Wiki Page
486
+
487
+ Aim: create a durable reference page with a clear scope instead of dumping raw notes
488
+ into the wiki.
489
+
490
+ Arc:
491
+
492
+ 1. Ask what topic this page should become the canonical place for.
493
+ 2. Ask whether it is a durable wiki page or supporting evidence.
494
+ 3. Ask what future lookup, decision, or collaboration this page should support.
495
+ 4. Ask about linked entities, aliases, or tags only if they will make the page more
496
+ navigable later.
497
+
498
+ Helpful follow-up lanes:
499
+
500
+ - what this page should be the home for
501
+ - what should belong on the page versus remain linked evidence
502
+ - who would open this page later and what they should quickly understand
503
+
504
+ Ready to save when:
505
+
506
+ - the page scope is clear
507
+ - the page kind is clear enough
508
+ - the title is stable enough to find later
509
+
510
+ Preferred opening question:
511
+
512
+ - "What should this page become the main reference for?"
375
513
 
376
514
  ## Insight
377
515
 
@@ -514,9 +652,10 @@ without pretending it is already a full interpretation.
514
652
  Arc:
515
653
 
516
654
  1. Ask what was observed.
517
- 2. Ask when it happened or became noticeable.
518
- 3. Ask what it may connect to: pattern, belief, value, mode, task, project, or note.
519
- 4. Ask for tags or extra context only if that will help later review.
655
+ 2. Reflect the moment without pretending it is already a finished interpretation.
656
+ 3. Ask when it happened or became noticeable.
657
+ 4. Ask what it may connect to: pattern, belief, value, mode, task, project, or note.
658
+ 5. Ask for tags or extra context only if that will help later review.
520
659
 
521
660
  If the user already gave the moment or timing, move straight to what they noticed most
522
661
  clearly instead of re-asking when.
@@ -529,7 +668,7 @@ Ready to save when:
529
668
 
530
669
  Preferred opening question:
531
670
 
532
- - "What did you notice that feels worth capturing?"
671
+ - "What did you notice most clearly in that moment?"
533
672
 
534
673
  ## Sleep Session
535
674
 
@@ -572,6 +711,36 @@ Preferred opening question:
572
711
 
573
712
  - "What about this workout feels most worth remembering or connecting?"
574
713
 
714
+ ## Calendar Connection
715
+
716
+ Aim: connect the right provider deliberately without turning setup into a credential
717
+ dump.
718
+
719
+ Arc:
720
+
721
+ 1. Ask which provider the user wants to connect and what they want Forge to do with
722
+ it.
723
+ 2. Ask whether the goal is read-only visibility, writable planning, or both.
724
+ 3. Ask only for the next provider-specific step that still matters, such as auth flow,
725
+ label, or calendar selection.
726
+ 4. Move into the actual connection flow once the setup goal is clear.
727
+
728
+ Helpful follow-up lanes:
729
+
730
+ - what calendar workflow the user wants to unlock
731
+ - whether writable projection matters
732
+ - whether the provider requires a local sign-in step instead of manual fields
733
+
734
+ Ready to act when:
735
+
736
+ - the provider is clear
737
+ - the intended sync behavior is clear enough
738
+ - the next setup step is obvious
739
+
740
+ Preferred opening question:
741
+
742
+ - "Which calendar provider are you trying to connect, and what do you want Forge to do with it?"
743
+
575
744
  ## Preference Catalog
576
745
 
577
746
  Aim: define a useful comparison pool, not just a list with no decision purpose.
@@ -597,7 +766,7 @@ Ready to save when:
597
766
 
598
767
  Preferred opening question:
599
768
 
600
- - "What preference question do you want this catalog to help answer?"
769
+ - "What decision or taste question should this catalog help with?"
601
770
 
602
771
  ## Preference Catalog Item
603
772
 
@@ -624,7 +793,7 @@ Ready to save when:
624
793
 
625
794
  Preferred opening question:
626
795
 
627
- - "What makes this item worth comparing in that catalog?"
796
+ - "What makes this option meaningfully worth comparing?"
628
797
 
629
798
  ## Preference Context
630
799
 
@@ -633,9 +802,10 @@ Aim: define a real operating mode for preferences, not a decorative label.
633
802
  Arc:
634
803
 
635
804
  1. Ask what situation or mode this context is meant to represent.
636
- 2. Ask what should count inside that context and what should stay outside it.
637
- 3. Ask whether it should be active, default, or kept separate from other evidence.
638
- 4. Offer a concise name if the mode is clearer than the wording.
805
+ 2. Ask what decisions or comparisons should feel different inside that context.
806
+ 3. Ask what should count inside that context and what should stay outside it.
807
+ 4. Ask whether it should be active, default, or kept separate from other evidence.
808
+ 5. Offer a concise name if the mode is clearer than the wording.
639
809
 
640
810
  Helpful follow-up lanes:
641
811
 
@@ -651,7 +821,7 @@ Ready to save when:
651
821
 
652
822
  Preferred opening question:
653
823
 
654
- - "What situation or mode should this context help Forge treat differently?"
824
+ - "In what situation should Forge treat your preferences differently here?"
655
825
 
656
826
  ## Preference Item
657
827
 
@@ -695,9 +865,10 @@ Arc:
695
865
 
696
866
  1. Ask what the questionnaire is meant to measure or surface.
697
867
  2. Ask who it is for and when it should be used.
698
- 3. Ask what kind of questions would make it honest and useful before getting into
699
- item wording.
700
- 4. Move to draft creation once the purpose is clear.
868
+ 3. Ask what kind of honest moment or decision it should help someone answer before
869
+ getting into item wording.
870
+ 4. Reflect the practical use case back in plain language.
871
+ 5. Move to draft creation once the purpose is clear.
701
872
 
702
873
  Ready to act when:
703
874
 
@@ -707,7 +878,7 @@ Ready to act when:
707
878
 
708
879
  Preferred opening question:
709
880
 
710
- - "What is this questionnaire meant to help surface or measure?"
881
+ - "What would this questionnaire help someone notice or track?"
711
882
 
712
883
  ## Questionnaire Run
713
884
 
@@ -726,7 +897,7 @@ Ready to act when:
726
897
 
727
898
  Preferred opening question:
728
899
 
729
- - "Are you trying to start a questionnaire, continue one, or review a finished run?"
900
+ - "Do you want to start, continue, review, or finish a questionnaire run?"
730
901
 
731
902
  ## Event Type
732
903
 
@@ -751,7 +922,7 @@ Ready to save when:
751
922
 
752
923
  Preferred opening question:
753
924
 
754
- - "What kind of moment do you want this event type to help you name more consistently?"
925
+ - "What kind of moment keeps happening that you want future reports to name the same way each time?"
755
926
 
756
927
  ## Emotion Definition
757
928
 
@@ -763,6 +934,11 @@ Arc:
763
934
  2. Ask what distinguishes it from nearby emotions if that matters.
764
935
  3. Ask for a short description only if later reports would benefit from it.
765
936
 
937
+ Helpful follow-up lanes:
938
+
939
+ - what tells the user this is that feeling and not a nearby one
940
+ - what kind of moments this emotion name should be used for later
941
+
766
942
  Ready to save when:
767
943
 
768
944
  - the label is clear
@@ -770,4 +946,4 @@ Ready to save when:
770
946
 
771
947
  Preferred opening question:
772
948
 
773
- - "When you say this feeling, what does it actually feel like for you?"
949
+ - "When this feeling is present, what tells you it is this feeling and not a nearby one?"