forge-openclaw-plugin 0.2.27 → 0.2.29

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 (39) hide show
  1. package/README.md +2 -1
  2. package/dist/assets/{board-C6jCchjI.js → board-q8cfwaAW.js} +2 -2
  3. package/dist/assets/{board-C6jCchjI.js.map → board-q8cfwaAW.js.map} +1 -1
  4. package/dist/assets/index-C6PCeHD_.css +1 -0
  5. package/dist/assets/index-bfHIqj0-.js +85 -0
  6. package/dist/assets/index-bfHIqj0-.js.map +1 -0
  7. package/dist/assets/{motion-DFHrH2rd.js → motion-DHfqFntt.js} +2 -2
  8. package/dist/assets/{motion-DFHrH2rd.js.map → motion-DHfqFntt.js.map} +1 -1
  9. package/dist/assets/{table-ZL7Di_u3.js → table-DLweENXt.js} +2 -2
  10. package/dist/assets/{table-ZL7Di_u3.js.map → table-DLweENXt.js.map} +1 -1
  11. package/dist/assets/{ui-CKNPpz7q.js → ui-BV0OYxkH.js} +2 -2
  12. package/dist/assets/{ui-CKNPpz7q.js.map → ui-BV0OYxkH.js.map} +1 -1
  13. package/dist/assets/{vendor-DoNZuFhn.js → vendor-OwcH20PM.js} +204 -204
  14. package/dist/assets/vendor-OwcH20PM.js.map +1 -0
  15. package/dist/index.html +7 -7
  16. package/dist/server/server/migrations/044_macos_local_calendar_provider.sql +21 -0
  17. package/dist/server/server/src/app.js +331 -14
  18. package/dist/server/server/src/openapi.js +828 -3
  19. package/dist/server/server/src/repositories/calendar.js +295 -12
  20. package/dist/server/server/src/repositories/tasks.js +36 -17
  21. package/dist/server/server/src/services/calendar-runtime.js +613 -32
  22. package/dist/server/server/src/services/life-force-model.js +20 -0
  23. package/dist/server/server/src/services/life-force.js +1333 -97
  24. package/dist/server/server/src/services/macos-calendar-helper.js +748 -0
  25. package/dist/server/server/src/types.js +67 -3
  26. package/dist/server/src/lib/api-error.js +2 -0
  27. package/dist/server/src/lib/api.js +39 -2
  28. package/dist/server/src/lib/calendar-name-deduper.js +2 -0
  29. package/dist/server/src/lib/snapshot-normalizer.js +2 -0
  30. package/openclaw.plugin.json +1 -1
  31. package/package.json +1 -1
  32. package/server/migrations/044_macos_local_calendar_provider.sql +21 -0
  33. package/skills/forge-openclaw/SKILL.md +38 -5
  34. package/skills/forge-openclaw/entity_conversation_playbooks.md +326 -5
  35. package/skills/forge-openclaw/psyche_entity_playbooks.md +57 -0
  36. package/dist/assets/index-DVvS8iiU.css +0 -1
  37. package/dist/assets/index-zYB-9Dfo.js +0 -85
  38. package/dist/assets/index-zYB-9Dfo.js.map +0 -1
  39. package/dist/assets/vendor-DoNZuFhn.js.map +0 -1
@@ -11,7 +11,12 @@ Forge correctly, and gather only the structure that still matters.
11
11
  with the entity label.
12
12
  - Start by saying what seems to matter here or what the record is becoming, then ask
13
13
  the next useful question.
14
+ - Whenever you can, make the direction of the intake visible before the question by
15
+ naming what you think the user is trying to preserve, clarify, decide, schedule, or
16
+ make easier.
14
17
  - Ask only for what is missing or still unclear.
18
+ - First identify the user's job when the lane is not already explicit:
19
+ are they trying to add, update, review, compare, navigate, link, or run something?
15
20
  - Before every question, decide the one missing thing you are trying to clarify.
16
21
  - Ask first for the missing thing that would change the record shape, title, or next
17
22
  action most, not just the easiest field to fill.
@@ -28,6 +33,8 @@ Forge correctly, and gather only the structure that still matters.
28
33
  short reflection -> one orienting question.
29
34
  - When the user is vague, ask for the smallest real example, desired outcome, or stake
30
35
  before you ask for wording.
36
+ - For strategic, reflective, or emotionally meaningful non-Psyche records, ask what
37
+ feels important to keep true before you ask for labels, dates, or taxonomy.
31
38
  - When the user is clear, say what the record seems to be becoming and move straight to
32
39
  the last missing structural detail.
33
40
  - For straightforward logistical entities such as tasks, calendar events, work blocks,
@@ -36,6 +43,11 @@ Forge correctly, and gather only the structure that still matters.
36
43
  - For logistical records such as tasks, calendar events, work blocks, timeboxes, and
37
44
  task runs, use a fast path:
38
45
  one brief confirming sentence -> one operational question.
46
+ - For action-heavy flows such as work adjustments, preference judgments, preference
47
+ signals, and specialized surface work in Movement, Life Force, or Workbench, first
48
+ ask what the user is trying to understand, change, add, update, link, or run, then
49
+ route to the dedicated action or surface path instead of pretending it is normal
50
+ CRUD.
39
51
  - Do not read schema fields out loud unless the user explicitly wants a checklist.
40
52
  - One focused question is the default. Ask two only when both questions serve the same
41
53
  job and the user is steady enough for it.
@@ -68,6 +80,21 @@ Most good Forge intake flows follow this sequence:
68
80
 
69
81
  That sequence is not a script. Skip steps the user already answered.
70
82
 
83
+ ## Operation lane checkpoint
84
+
85
+ Use this before you choose an API path or ask for more structure.
86
+
87
+ - If the user has not made the operation explicit yet, clarify the job first:
88
+ add, update, review, compare, navigate, link, or run.
89
+ - Ask the lane question only when it changes the route family or the next question.
90
+ - Skip the meta lane question when the user already gave both the entity and the
91
+ action clearly, such as "pause this project", "add a home stay for that missing
92
+ block", or "run this flow again".
93
+ - For simple stored entities, once the lane is clear, fall back to the shared batch
94
+ CRUD flow.
95
+ - For specialized surfaces such as Movement, Life Force, and Workbench, use the lane
96
+ to choose the dedicated route family before you ask for lower-level details.
97
+
71
98
  ## Active-listening patterns
72
99
 
73
100
  Use one of these shapes when the user is not yet precise.
@@ -148,6 +175,21 @@ When an adjacent record becomes visible:
148
175
  - name it gently and ask whether it should be linked now, saved separately later, or
149
176
  left alone for now
150
177
 
178
+ ## Review And Navigation Moves
179
+
180
+ Use this when the user wants to inspect, compare, review, or navigate existing Forge
181
+ records rather than create something new.
182
+
183
+ - Start by asking what they are trying to understand, decide, compare, or check.
184
+ - Ask only for the scoping detail that changes the read path most:
185
+ entity, owner, timeframe, context, or comparison target.
186
+ - If the record already exists and the user wants review, do not reopen a creation
187
+ intake. Route to search, list, overview, or detail first.
188
+ - For review-heavy questions, the useful progression is:
189
+ user goal -> scope -> read path -> interpretation -> optional follow-up write.
190
+ - Only drift back into create or update intake if the user actually wants the record
191
+ changed after the review.
192
+
151
193
  ## Question Calibration Loop
152
194
 
153
195
  Use this quick internal check before every follow-up question.
@@ -191,6 +233,35 @@ reusable records.
191
233
  - Once the distinction is clear, offer a candidate label yourself and invite
192
234
  correction instead of making the user wordsmith alone.
193
235
 
236
+ ## Opening move recipes
237
+
238
+ Use these when you want the first turn to feel more guided and less form-like.
239
+
240
+ Strategic record:
241
+
242
+ - "This sounds like something you want to hold onto directionally, not just list.
243
+ What would feel important to keep true here?"
244
+
245
+ Bounded-work record:
246
+
247
+ - "This sounds like it wants to become a real piece of work. What outcome would make
248
+ it feel meaningfully real for now?"
249
+
250
+ Reflective record:
251
+
252
+ - "There is something here you do not want to lose. What feels most worth capturing
253
+ before we decide where to store it?"
254
+
255
+ Reusable record:
256
+
257
+ - "Before we settle the label, what future decision, comparison, or retrieval moment
258
+ should this help with?"
259
+
260
+ Operational record:
261
+
262
+ - "I can turn that into a concrete Forge action. What is the one timing, owner, or
263
+ placement detail that still needs to be decided?"
264
+
194
265
  ## Name, Define, Connect
195
266
 
196
267
  Once the core record is visible, use this short checkpoint.
@@ -208,6 +279,17 @@ Connect:
208
279
  - ask about links only after the record itself feels named and defined enough to stay
209
280
  stable
210
281
 
282
+ ## Close cleanly
283
+
284
+ - Once the record has a working shape, tell the user what is now clear and what one
285
+ detail, if any, is still worth deciding.
286
+ - If no detail is still decision-relevant, summarize the record in plain language and
287
+ move to the save.
288
+ - Prefer "what I have now is..." or "what seems clear now is..." over a cold final
289
+ field check.
290
+ - If the user gives a correction, revise the working formulation once and close again
291
+ instead of reopening the whole intake.
292
+
211
293
  ## Question design rules
212
294
 
213
295
  - Let each question have one job:
@@ -249,6 +331,8 @@ Connect:
249
331
  inside them.
250
332
  - After the user answers, prefer "what is becoming clearer is..." over a cold jump to
251
333
  the next field.
334
+ - For reusable or abstract records, it is often better to say "what this would help
335
+ you decide later is..." before asking for the final wording.
252
336
 
253
337
  ## Ready-to-save check
254
338
 
@@ -644,6 +728,33 @@ Preferred opening question:
644
728
 
645
729
  - "Which task should I start?"
646
730
 
731
+ ## Work Adjustment
732
+
733
+ Aim: correct tracked minutes truthfully without pretending a live run happened.
734
+
735
+ Arc:
736
+
737
+ 1. Ask what existing task or project the minutes belong to.
738
+ 2. Ask whether time should be added or removed.
739
+ 3. Ask what real work or correction the adjustment is meant to capture.
740
+ 4. Ask for a short audit note only if the reason would otherwise be unclear later.
741
+
742
+ Helpful follow-up lanes:
743
+
744
+ - what record the correction belongs to
745
+ - whether the adjustment is positive or negative
746
+ - what truthful reason should stay attached to the correction
747
+
748
+ Ready to act when:
749
+
750
+ - the target task or project is clear
751
+ - the minute delta is clear
752
+ - the note is clear enough when an audit trail matters
753
+
754
+ Preferred opening question:
755
+
756
+ - "Which task or project should this time correction belong to?"
757
+
647
758
  ## Self Observation
648
759
 
649
760
  Aim: capture one observation clearly enough that it can support later reflection
@@ -741,6 +852,212 @@ Preferred opening question:
741
852
 
742
853
  - "Which calendar provider are you trying to connect, and what do you want Forge to do with it?"
743
854
 
855
+ ## Preference Judgment
856
+
857
+ Aim: capture one pairwise preference decision with the right context, not just log a
858
+ left-versus-right click.
859
+
860
+ Arc:
861
+
862
+ 1. Ask what comparison the user is actually trying to settle.
863
+ 2. Ask which context or domain this judgment belongs to.
864
+ 3. Ask whether the result is left, right, tie, or skip.
865
+ 4. Ask for reason tags or strength only if they will improve later interpretation.
866
+
867
+ Helpful follow-up lanes:
868
+
869
+ - what the comparison is really about
870
+ - which preference context should own the signal
871
+ - whether the choice feels decisive, weak, tied, or not ready
872
+
873
+ Ready to act when:
874
+
875
+ - the left and right items are clear
876
+ - the outcome is clear
877
+ - the relevant context or profile is clear enough
878
+
879
+ Preferred opening question:
880
+
881
+ - "What comparison are you actually trying to settle here?"
882
+
883
+ ## Preference Signal
884
+
885
+ Aim: store a direct preference signal such as favorite, veto, bookmark, or
886
+ compare-later with the context that makes it interpretable later.
887
+
888
+ Arc:
889
+
890
+ 1. Ask what item the user wants to mark.
891
+ 2. Ask what signal they want to give it.
892
+ 3. Ask what domain or context this belongs to if that is still unclear.
893
+ 4. Ask about strength only if the user is expressing a gradient rather than a simple mark.
894
+
895
+ Helpful follow-up lanes:
896
+
897
+ - what item is being marked
898
+ - whether this is a favorite, veto, bookmark, neutral, or compare-later signal
899
+ - what context makes the signal meaningful
900
+
901
+ Ready to act when:
902
+
903
+ - the item is clear
904
+ - the signal type is clear
905
+ - the context is clear enough if it changes interpretation
906
+
907
+ Preferred opening question:
908
+
909
+ - "What do you want Forge to remember about this item right now?"
910
+
911
+ ## Movement
912
+
913
+ Aim: clarify whether the user wants to understand time in place, review travel
914
+ behavior, add or update a stay or trip, inspect one place, or link movement context to
915
+ another Forge record before choosing the dedicated route family.
916
+
917
+ Arc:
918
+
919
+ 1. Ask whether the user is trying to query behavior, add something manually, update an existing movement item, or link movement to another Forge entity.
920
+ 2. Ask whether the focus is a stay, a trip, a place, a timeline window, or a selected span.
921
+ 3. Ask for the time window, place, or movement item that makes the question concrete.
922
+ 4. Ask what they are trying to notice, preserve, or answer through that movement context.
923
+ 5. Route to the dedicated movement read or write path once the surface is clear.
924
+
925
+ Direct action rules:
926
+
927
+ - If the user is clearly talking about a missing-data gap that should become a stay or
928
+ trip, use a user-defined movement box.
929
+ - Preflight with `/api/v1/movement/user-boxes/preflight` when overlap or exact timing
930
+ is unclear, then create the overlay with `/api/v1/movement/user-boxes`.
931
+ - Use `kind: "stay"` when the user stayed in one place and `kind: "trip"` when they
932
+ traveled.
933
+ - Use raw `PATCH /api/v1/movement/stays/:id` or `/api/v1/movement/trips/:id` only for
934
+ editing an already-recorded stay or trip, not for filling a missing span.
935
+ - When the user has already given the real answer, for example "I stayed home during
936
+ that missing block", do not ask a broad review question again. Confirm only the
937
+ interval or place if that is still ambiguous, then act.
938
+
939
+ Helpful follow-up lanes:
940
+
941
+ - whether the user wants time-in-place, travel history, one specific stay or trip, a
942
+ place summary, or a link
943
+ - what time window, place, stay, trip, or selection is in scope
944
+ - whether the question is behavioral, such as time at home, travel frequency, or place
945
+ distribution, versus an edit
946
+ - whether the edit is a missing-gap overlay versus a true recorded stay/trip patch
947
+
948
+ Lane-to-route map:
949
+
950
+ - review one day or month:
951
+ `/api/v1/movement/day` or `/api/v1/movement/month`
952
+ - review long-range behavior or dominant places:
953
+ `/api/v1/movement/all-time`, `/api/v1/movement/places`, or `/api/v1/movement/selection`
954
+ - inspect the full life timeline:
955
+ `/api/v1/movement/timeline`
956
+ - inspect one trip:
957
+ `/api/v1/movement/trips/:id`
958
+ - fill a missing span:
959
+ `/api/v1/movement/user-boxes/preflight` then `/api/v1/movement/user-boxes`
960
+ - edit an already-recorded stay, trip, or trip point:
961
+ `/api/v1/movement/stays/:id`, `/api/v1/movement/trips/:id`, or `/api/v1/movement/trips/:id/points/:pointId`
962
+
963
+ Ready to act when:
964
+
965
+ - the movement surface is clear
966
+ - the time range, place, stay, trip, or selection is clear enough
967
+ - the user goal is clear enough to choose the route
968
+
969
+ Preferred opening question:
970
+
971
+ - "Are you trying to understand where you stayed and traveled, change one stay or trip, or answer a question about your movement behavior?"
972
+
973
+ ## Life Force
974
+
975
+ Aim: clarify whether the user wants to review current energy state, change durable
976
+ profile assumptions, edit weekday curves, or log a real-time fatigue signal.
977
+
978
+ Arc:
979
+
980
+ 1. Ask whether the job is overview, profile change, weekday-template change, or fatigue signaling.
981
+ 2. Ask what part of the current energy picture feels most important or inaccurate.
982
+ 3. Ask what should stay true if they are changing profile or template assumptions.
983
+ 4. Route to the dedicated life-force path once the lane is clear.
984
+
985
+ Helpful follow-up lanes:
986
+
987
+ - whether the user wants explanation, editing, or signaling
988
+ - what part of the energy model feels off or useful
989
+ - what durable assumption versus real-time state is being changed
990
+
991
+ Lane-to-route map:
992
+
993
+ - understand the current energy picture:
994
+ `GET /api/v1/life-force`
995
+ - change durable profile assumptions:
996
+ `PATCH /api/v1/life-force/profile`
997
+ - change one weekday curve or template:
998
+ `PUT /api/v1/life-force/templates/:weekday`
999
+ - log a real-time tired or recovered signal:
1000
+ `POST /api/v1/life-force/fatigue-signals`
1001
+
1002
+ Ready to act when:
1003
+
1004
+ - the life-force lane is clear
1005
+ - the relevant weekday, profile field, or signal is clear enough
1006
+ - the user intent is clear enough to choose overview versus mutation
1007
+
1008
+ Preferred opening question:
1009
+
1010
+ - "Do you want to understand the current energy picture, change how Forge models it, or log how you feel right now?"
1011
+
1012
+ ## Workbench
1013
+
1014
+ Aim: clarify whether the user wants to inspect a flow, edit it, run it, or inspect
1015
+ results so the agent uses the dedicated workbench contract instead of vague CRUD.
1016
+
1017
+ Arc:
1018
+
1019
+ 1. Ask whether the job is flow discovery, one flow edit, execution, run history, published output, node-level inspection, or latest-node-output lookup.
1020
+ 2. Ask which flow, slug, run, or node the request is about.
1021
+ 3. Ask what the user is trying to learn, repair, or publish through that flow.
1022
+ 4. Route to the dedicated workbench route family once the execution lane is clear.
1023
+
1024
+ Helpful follow-up lanes:
1025
+
1026
+ - whether the user wants structure, execution, or results
1027
+ - what exact flow or run is in scope
1028
+ - whether they need whole-flow output or node-level detail
1029
+
1030
+ Lane-to-route map:
1031
+
1032
+ - discover or inspect flows:
1033
+ `/api/v1/workbench/flows`, `/api/v1/workbench/flows/:id`, or `/api/v1/workbench/flows/by-slug/:slug`
1034
+ - create, update, or delete a flow:
1035
+ `POST/PATCH/DELETE /api/v1/workbench/flows`
1036
+ - run a known flow:
1037
+ `/api/v1/workbench/flows/:id/run`
1038
+ - run from a payload-first contract:
1039
+ `/api/v1/workbench/run`
1040
+ - inspect published output or run history:
1041
+ `/api/v1/workbench/flows/:id/output` or `/api/v1/workbench/flows/:id/runs`
1042
+ - inspect one run or node result:
1043
+ `/api/v1/workbench/flows/:id/runs/:runId`,
1044
+ `/api/v1/workbench/flows/:id/runs/:runId/nodes`,
1045
+ `/api/v1/workbench/flows/:id/runs/:runId/nodes/:nodeId`
1046
+ - inspect the latest successful node output:
1047
+ `/api/v1/workbench/flows/:id/nodes/:nodeId/output`
1048
+ - inspect available box inputs:
1049
+ `/api/v1/workbench/catalog/boxes`
1050
+
1051
+ Ready to act when:
1052
+
1053
+ - the workbench lane is clear
1054
+ - the flow, run, or node is clear enough
1055
+ - the requested read or mutation is clear enough to choose the route
1056
+
1057
+ Preferred opening question:
1058
+
1059
+ - "Are you trying to inspect a flow, change it, run it, or inspect one run's outputs?"
1060
+
744
1061
  ## Preference Catalog
745
1062
 
746
1063
  Aim: define a useful comparison pool, not just a list with no decision purpose.
@@ -907,10 +1224,12 @@ consistent.
907
1224
  Arc:
908
1225
 
909
1226
  1. Ask what kind of moment or incident this label should capture in lived terms.
910
- 2. Ask how narrow or broad it should be.
911
- 3. Ask what would count as inside versus outside the category if that boundary is
1227
+ 2. Reflect the repeated moment back in plain language before narrowing the wording.
1228
+ 3. Ask how narrow or broad it should be.
1229
+ 4. Ask what would count as inside versus outside the category if that boundary is
912
1230
  still fuzzy.
913
- 4. Ask for a short description only if the label could be ambiguous later.
1231
+ 5. Offer a concise label if the lived meaning is clearer than the wording.
1232
+ 6. Ask for a short description only if the label could be ambiguous later.
914
1233
 
915
1234
  If the user already offered a candidate label, keep the wording provisional and ask
916
1235
  what kinds of moments belong inside it before you ask whether the label is right.
@@ -931,8 +1250,10 @@ Aim: define one reusable emotion entry clearly enough that future reports stay p
931
1250
  Arc:
932
1251
 
933
1252
  1. Ask what this feeling is like in lived terms when the user says it.
934
- 2. Ask what distinguishes it from nearby emotions if that matters.
935
- 3. Ask for a short description only if later reports would benefit from it.
1253
+ 2. Reflect the felt signature back in plain language before you settle the label.
1254
+ 3. Ask what distinguishes it from nearby emotions if that matters.
1255
+ 4. Offer a concise label if the felt meaning is clearer than the wording.
1256
+ 5. Ask for a short description only if later reports would benefit from it.
936
1257
 
937
1258
  Helpful follow-up lanes:
938
1259
 
@@ -11,6 +11,15 @@ Forge without turning the conversation into a worksheet.
11
11
  experience, not like a schema form and not like a lecturer.
12
12
  - Name the emotional center or lived stake in plain language before the next question
13
13
  whenever that would help the user feel accurately understood.
14
+ - Begin close to the living center of the moment:
15
+ danger,
16
+ shame,
17
+ grief,
18
+ anger,
19
+ collapse,
20
+ longing,
21
+ pressure,
22
+ or protection.
14
23
  - Stay collaborative. Do not claim certainty about what a belief, pattern, or mode
15
24
  "really is".
16
25
  - Start from lived experience before abstraction.
@@ -40,6 +49,8 @@ Forge without turning the conversation into a worksheet.
40
49
  the user can feel understood and correct you if needed.
41
50
  - When the material is charged, ask permission before moving from understanding into
42
51
  naming, challenging, or solution-finding.
52
+ - Your first job is not interpretation. It is to make the moment feel graspable enough
53
+ that the user can stay with it and describe it.
43
54
  - Before you ask for change, naming, or repair, usually ask what the experience is
44
55
  trying to protect, prevent, or hold onto.
45
56
  - The warmth should come from accuracy and steadiness, not from extra softness,
@@ -58,6 +69,42 @@ Forge without turning the conversation into a worksheet.
58
69
  - When the user has said enough for an accurate working formulation, stop deepening and
59
70
  help them name it cleanly.
60
71
 
72
+ ## First reflection menu
73
+
74
+ Use one brief reflection that matches the center of the moment before you deepen.
75
+
76
+ Threat:
77
+
78
+ - "Something in this landed as danger very quickly."
79
+
80
+ Shame or collapse:
81
+
82
+ - "The painful part seems to be what this starts to say about your worth."
83
+
84
+ Pressure or control:
85
+
86
+ - "It sounds like a part of you moved fast to keep things from getting worse."
87
+
88
+ Loss or longing:
89
+
90
+ - "There is a lot of ache in what mattered there."
91
+
92
+ Confusion:
93
+
94
+ - "The moment still feels tangled, so let us stay close to one slice of it."
95
+
96
+ ## Permission pivots
97
+
98
+ Use these when you are about to move from understanding into naming, interpretation,
99
+ or change.
100
+
101
+ - "I think I have the shape of it more clearly now. Do you want me to stay with the
102
+ experience a little longer, or try putting language around it?"
103
+ - "There may be a belief or mode here. Do you want a tentative formulation, or should
104
+ we keep clarifying the moment first?"
105
+ - "I can help think about what might help next time, but I want to check whether the
106
+ experience itself feels understood enough first."
107
+
61
108
  ## Therapist micro-skills
62
109
 
63
110
  Use these in small doses rather than as a script.
@@ -281,6 +328,7 @@ When the lived experience is clear enough to name:
281
328
  - invite correction without defensiveness
282
329
  - if the wording is close but not right, revise it with the user once instead of
283
330
  restarting the whole intake
331
+ - say in plain language what makes you think the proposed wording fits
284
332
 
285
333
  Example shape:
286
334
 
@@ -308,6 +356,15 @@ If the entity is not yet clear:
308
356
  - once the user accepts the wording, do not reopen deeper exploration unless they ask
309
357
  for it
310
358
 
359
+ ## Change and save pivots
360
+
361
+ - Before change-oriented questions, check whether the user wants understanding,
362
+ naming, or next-step help.
363
+ - When the user says the formulation lands, summarize it once in their language and
364
+ move to the write.
365
+ - If another belief, value, pattern, mode, or note becomes visible, name it gently but
366
+ do not switch containers unless the user wants to.
367
+
311
368
  ## Psyche update loop
312
369
 
313
370
  Use this when the user is revising an existing Psyche record rather than creating one