forge-openclaw-plugin 0.2.56 → 0.2.57

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.
@@ -2763,7 +2763,7 @@ const AGENT_ONBOARDING_CONVERSATION_RULES = [
2763
2763
  "Use a progression of concrete example or intent, working name, purpose or meaning, placement in Forge, operational details, and linked context.",
2764
2764
  "Ask one to three focused questions at a time. One is usually best when the user is uncertain or emotionally loaded.",
2765
2765
  "One focused question is the default. Only stack a second question when both serve the same clarification job and the user is steady enough for it.",
2766
- "When the user wants review, comparison, or navigation around an existing record, ask what they are trying to understand first and route to the read path before reopening create or update intake.",
2766
+ "When the user wants review, comparison, or navigation around an existing record, ask what they are trying to understand first and look up the existing record before reopening create or update intake.",
2767
2767
  "If the user already answered the normal opening question, do not repeat it. Move to the next missing clarification.",
2768
2768
  "Do not over-therapize logistical entities. For tasks, calendar events, work blocks, timeboxes, and task runs, one brief confirming sentence plus one question is usually enough.",
2769
2769
  "After each substantive answer, briefly say what is becoming clearer and ask only for the next thing that still changes the record shape or usefulness.",
@@ -2776,18 +2776,24 @@ const AGENT_ONBOARDING_CONVERSATION_RULES = [
2776
2776
  "For review requests, ask what practical question the user wants the read to answer before you ask for more scope.",
2777
2777
  "The opening question should help the user understand what they are actually trying to save, decide, review, or change, not make them perform the schema out loud.",
2778
2778
  "If the user already named the exact correction in usable language, confirm only the missing scope, timing, or route-selecting detail that still matters, then act.",
2779
- "Once a specialized-surface lane is clear, speak in route-relevant nouns such as timeline, overlay, weekday template, published output, run detail, or node result instead of generic record language.",
2779
+ "Keep API and architecture nouns out of user-facing questions unless the user asks about implementation. Do not ask the user about surfaces, route families, CRUD, payloads, mutation paths, or read paths; ask about the human object such as a wiki page, note, trigger report, behavior pattern, belief, mode, movement timeline, energy model, weekday pattern, flow, run, or node result.",
2780
+ "Self-observation is not the default container for Psyche material. Use it only for a lightweight observed event note; prefer trigger_report for one emotionally meaningful episode, behavior_pattern for a recurring loop and functional analysis, behavior for one repeated move, belief_entry for a core sentence, mode_guide_session or mode_profile for an active part-state, and wiki_page for durable memory.",
2781
+ "Do not bury schema work in self-observation. If the user is describing a schema theme, preserve it through a belief_entry, behavior_pattern, mode_profile, mode_guide_session, trigger_report, or wiki_page depending on whether it appears as a rule, loop, part-state, live exploration, one episode, or durable explanation.",
2782
+ "Once the Movement, Life Force, or Workbench job is clear, speak in product nouns such as timeline, overlay, weekday template, published output, run detail, or node result instead of generic record language.",
2780
2783
  "If the next answer would not change the route, wording, timing, or write payload in a meaningful way, stop asking and act.",
2781
2784
  "Before saving, briefly summarize the working formulation in the user's own language when that would reduce ambiguity.",
2782
2785
  "Once the record is clear enough to name, stop exploring broadly and ask only for the last structural detail that still matters.",
2783
2786
  "If the record is already clear enough to save, save it instead of performing a ceremonial extra question.",
2784
2787
  "If the user accepts the wording or record shape, move to the write instead of reopening the intake.",
2785
2788
  "When updating an entity, start with what is changing, what should stay true, and what prompted the update now.",
2786
- "For action-heavy flows such as work adjustments, preference judgments, preference signals, and specialized Movement, Life Force, or Workbench work, first ask what the user is trying to understand, change, add, update, link, or run, then choose the dedicated action or surface route instead of forcing the request into generic CRUD.",
2787
- "For specialized surfaces, ask what would make the answer or change useful before you ask route-shaped details such as provider, weekday, flow id, run id, or trip id.",
2789
+ "For action-heavy flows such as work adjustments, preference judgments, preference signals, and Movement, Life Force, or Workbench work, first ask what the user is trying to understand, change, add, update, link, or run, then choose the dedicated action or domain route instead of forcing the request into generic CRUD.",
2790
+ "For Movement, Life Force, and Workbench, ask what would make the answer or change useful before you ask route-shaped details such as provider, weekday, flow id, run id, or trip id.",
2788
2791
  "When the user already named a precise correction or review target, do not widen back out into a meta lane question. Confirm only the missing route-selecting detail and then act.",
2789
2792
  "Once the route family is clear, say it plainly enough that another agent could follow the same path without guessing.",
2790
2793
  "For Movement specifically, treat missing-data corrections as user-defined overlay boxes unless the user is editing an already-recorded stay or trip. When the user already gave a clear instruction like 'that missing block was home', act after only the last ambiguity is resolved.",
2794
+ "For action workflows such as task_run, work_adjustment, questionnaire_run, preference_judgment, preference_signal, and self_observation, keep the question focused on the missing action payload and do not downgrade the request into generic batch CRUD.",
2795
+ "For normal stored Preferences and questionnaire records, use batch CRUD by default; switch to dedicated action routes only for judgments, signals, run answers, clone/draft/publish lifecycle, or visual comparison gameplay.",
2796
+ "When the user wants to remember a book, article, paper, source, concept, person, conversation, project reference, recurring explanation, or personal manual, consider wiki_page before note or self_observation.",
2791
2797
  "For meaning-bearing updates, especially in Psyche, briefly say what feels newly true before you ask for the one structural detail that still changes the save."
2792
2798
  ];
2793
2799
  const AGENT_ONBOARDING_ENTITY_CONVERSATION_PLAYBOOKS = [
@@ -2876,12 +2882,13 @@ const AGENT_ONBOARDING_ENTITY_CONVERSATION_PLAYBOOKS = [
2876
2882
  },
2877
2883
  {
2878
2884
  focus: "wiki_page",
2879
- openingQuestion: "What should this page become the main reference for?",
2880
- coachingGoal: "Create a durable reference page with a clear scope instead of dumping raw notes into the wiki.",
2885
+ openingQuestion: "What do you want this wiki page to help you remember or reuse later?",
2886
+ coachingGoal: "Create durable memory for books, articles, sources, concepts, people, conversations, project references, reusable instructions, or personal manuals.",
2881
2887
  askSequence: [
2882
- "Ask what topic this page should become the canonical place for.",
2883
- "Ask whether it is a durable wiki page or supporting evidence.",
2884
- "Ask what future lookup, decision, or collaboration this page should support.",
2888
+ "Ask what this page should help the user remember, understand, or reuse later.",
2889
+ "Ask whether the material is a book, article, source, concept, person, conversation, project reference, or personal manual.",
2890
+ "Ask what the page should contain now: summary, key claims, quotes to verify, personal interpretation, action implications, or links.",
2891
+ "Ask whether it should be the durable wiki page itself or supporting evidence linked to another page.",
2885
2892
  "Ask about linked entities, aliases, or tags only if they will make the page more navigable later."
2886
2893
  ]
2887
2894
  },
@@ -2964,17 +2971,17 @@ const AGENT_ONBOARDING_ENTITY_CONVERSATION_PLAYBOOKS = [
2964
2971
  },
2965
2972
  {
2966
2973
  focus: "self_observation",
2967
- openingQuestion: "What did you notice most clearly in that moment?",
2968
- coachingGoal: "Capture one observation clearly enough that it can support later reflection without pretending it is already a full interpretation.",
2974
+ openingQuestion: "What happened in the situation, and what did you feel, think, or do next?",
2975
+ coachingGoal: "Capture one observed episode as situation, cue, emotion/body, thought/meaning, behavior/urge, and consequence, then choose the stronger Psyche or wiki container when one is visible.",
2969
2976
  askSequence: [
2970
- "Ask what was observed.",
2971
- "Reflect the moment without pretending it is already a finished interpretation.",
2972
- "Ask what felt most important to name before it gets smoothed over or forgotten.",
2973
- "Ask for the smallest concrete slice if the observation still feels vague or global.",
2974
- "Ask when it happened or became noticeable unless timing is already clear.",
2975
- "Remember that self-observation is note-backed and should be written through an observed note with frontmatter.observedAt.",
2976
- "Ask what it may connect to: pattern, belief, value, mode, task, project, or note.",
2977
- "Ask for tags or extra context only if that will help later review."
2977
+ "Ask what happened in the situation.",
2978
+ "Ask what cue, trigger, or body shift made the episode noticeable.",
2979
+ "Ask what emotion, body signal, thought, or meaning showed up.",
2980
+ "Ask what behavior showed up: what the user did, wanted to do, avoided, or repeated next.",
2981
+ "Ask what the immediate consequence was, including short-term relief or cost if it is visible.",
2982
+ "Decide whether this should stay a lightweight self-observation or become a trigger_report, behavior_pattern, behavior, belief_entry, mode_profile, mode_guide_session, event_type, emotion_definition, or wiki page.",
2983
+ "Remember that self-observation is note-backed and should be written through an observed note with frontmatter.observedAt only when a lightweight observation is the right container.",
2984
+ "Do not promote self-observation over functional analysis: use behavior_pattern for recurring loops, trigger_report for one emotionally meaningful episode, mode_guide_session or mode_profile for a central part-state, belief_entry for a central sentence, and wiki_page for durable memory."
2978
2985
  ]
2979
2986
  },
2980
2987
  {
@@ -3044,6 +3051,7 @@ const AGENT_ONBOARDING_ENTITY_CONVERSATION_PLAYBOOKS = [
3044
3051
  "Ask what preference or taste question this item belongs to.",
3045
3052
  "Ask what domain or context it should live in.",
3046
3053
  "Ask whether the user is saving a comparison candidate or a direct signal such as favorite, veto, or compare-later.",
3054
+ "If the user is saving or editing a candidate, keep it on batch CRUD; if they are recording a comparison outcome or direct mark, switch to the preference judgment or signal route.",
3047
3055
  "Ask what makes the item distinct enough to compare usefully only if it is still a comparison candidate."
3048
3056
  ]
3049
3057
  },
@@ -3055,6 +3063,7 @@ const AGENT_ONBOARDING_ENTITY_CONVERSATION_PLAYBOOKS = [
3055
3063
  "Ask what comparison the user is actually trying to settle.",
3056
3064
  "Ask which context or domain this judgment belongs to.",
3057
3065
  "Ask whether the result is left, right, tie, or skip.",
3066
+ "Use the dedicated preference judgment action route instead of batch CRUD once the pair and outcome are clear.",
3058
3067
  "Ask for reason tags or strength only if they will improve later interpretation."
3059
3068
  ]
3060
3069
  },
@@ -3066,6 +3075,7 @@ const AGENT_ONBOARDING_ENTITY_CONVERSATION_PLAYBOOKS = [
3066
3075
  "Ask what item the user wants to mark.",
3067
3076
  "Ask what signal they want to give it.",
3068
3077
  "Ask what domain or context this belongs to if that is still unclear.",
3078
+ "Use the dedicated preference signal action route instead of batch CRUD once the item and signal are clear.",
3069
3079
  "Ask about strength only if the user is expressing a gradient rather than a simple mark."
3070
3080
  ]
3071
3081
  },
@@ -3079,6 +3089,7 @@ const AGENT_ONBOARDING_ENTITY_CONVERSATION_PLAYBOOKS = [
3079
3089
  "Ask what kind of honest moment or decision it should help someone answer before getting into item wording.",
3080
3090
  "Reflect the practical use case back in plain language.",
3081
3091
  "Ask what would make the instrument distinct instead of redundant if a near-duplicate risk is visible.",
3092
+ "Use batch CRUD for ordinary questionnaire instrument create or update work; use clone, draft, and publish actions only for version lifecycle.",
3082
3093
  "Move to draft creation once the purpose is clear."
3083
3094
  ]
3084
3095
  },
@@ -3090,6 +3101,7 @@ const AGENT_ONBOARDING_ENTITY_CONVERSATION_PLAYBOOKS = [
3090
3101
  "Ask what the user wants from the run right now: start, continue, review, or finish.",
3091
3102
  "Ask which questionnaire or existing run this is about.",
3092
3103
  "If the user wants to continue or finish, ask what feels most stuck, unfinished, or important before asking for more content.",
3104
+ "Use the dedicated questionnaire run start, read, update, and complete routes instead of generic entity CRUD.",
3093
3105
  "If answering is still in progress, ask only for the next answer or note that matters."
3094
3106
  ]
3095
3107
  },
@@ -3098,6 +3110,7 @@ const AGENT_ONBOARDING_ENTITY_CONVERSATION_PLAYBOOKS = [
3098
3110
  openingQuestion: "What are you trying to understand, correct, or preserve about where you stayed and traveled?",
3099
3111
  coachingGoal: "Clarify whether the user wants a time-in-place query, travel-history review, a missing-gap overlay, one stay or trip change, one place summary, or a link before choosing the dedicated movement route.",
3100
3112
  askSequence: [
3113
+ "Ask what they are trying to make clearer, repair, or preserve about where they were before you narrow to the exact movement lane.",
3101
3114
  "Ask whether the user is trying to query behavior, add something manually, update an existing movement item, or link movement to another Forge entity.",
3102
3115
  "Ask whether the focus is a stay, a trip, a place, a timeline window, or a selected span.",
3103
3116
  "Ask for the time window, place, or movement item that makes the question concrete.",
@@ -3114,9 +3127,10 @@ const AGENT_ONBOARDING_ENTITY_CONVERSATION_PLAYBOOKS = [
3114
3127
  },
3115
3128
  {
3116
3129
  focus: "life_force",
3117
- openingQuestion: "Do you want to understand the current energy picture, change how Forge models it, or log how you feel right now?",
3130
+ openingQuestion: "What feels most off, important, or worth understanding in your energy picture right now?",
3118
3131
  coachingGoal: "Clarify whether the job is overview, profile change, weekday-template editing, or a real-time fatigue signal before choosing the dedicated life-force route.",
3119
3132
  askSequence: [
3133
+ "Ask what feels off, important, or worth tracking in their energy picture before you reduce it to one life-force lane.",
3120
3134
  "Ask whether the job is overview, profile change, weekday-template change, or fatigue signaling.",
3121
3135
  "Ask what part of the current energy picture feels most important or inaccurate.",
3122
3136
  "Ask what should stay true if they are changing profile or template assumptions.",
@@ -3133,10 +3147,10 @@ const AGENT_ONBOARDING_ENTITY_CONVERSATION_PLAYBOOKS = [
3133
3147
  openingQuestion: "What are you trying to inspect, change, run, or publish through Workbench?",
3134
3148
  coachingGoal: "Clarify whether the user wants flow discovery, editing, execution, run history, published outputs, or node-level inspection before using the dedicated workbench route family.",
3135
3149
  askSequence: [
3150
+ "Ask what they are trying to learn, repair, publish, or run through Workbench before you narrow to flow discovery, editing, execution, or results.",
3136
3151
  "Ask whether the job is flow discovery, one flow edit, execution, run history, published output, node-level inspection, or latest-node-output lookup.",
3137
3152
  "Ask which flow, slug, run, or node the request is about.",
3138
3153
  "Ask whether they need the stable flow contract, one run result, one published output, one node result, or the latest node output.",
3139
- "Ask what the user is trying to learn, repair, or publish through that flow.",
3140
3154
  "If the user already named the flow and action clearly, skip the meta lane question and ask only for the missing run, node, or output scope.",
3141
3155
  "If the user wants a stable public input contract or published output, prefer those dedicated reads instead of detouring through run history first.",
3142
3156
  "If the user is still shaping a payload or edit, prefer flow detail or box catalog reads before asking for structured inputs.",
@@ -3447,6 +3461,72 @@ const AGENT_ONBOARDING_PSYCHE_PLAYBOOKS = [
3447
3461
  "Use emotionDefinitionId only when a known emotion definition fits; otherwise keep the raw label.",
3448
3462
  "If the user becomes overwhelmed, slow down, summarize, and return to one segment of the chain at a time instead of pushing for the full report in one turn."
3449
3463
  ]
3464
+ },
3465
+ {
3466
+ focus: "event_type",
3467
+ useWhen: "Use for a repeated emotionally meaningful kind of moment that should make future trigger reports consistent without erasing the lived stake.",
3468
+ coachingGoal: "Help the user name the repeated episode type through a recent example, emotional stake, and boundary from nearby incidents before saving the taxonomy label.",
3469
+ askSequence: [
3470
+ "Ask what kind of moment keeps recurring and why it matters to name it consistently.",
3471
+ "Reflect the repeated emotional or relational stake in plain language before wording the category.",
3472
+ "Ask for one recent example if the boundary is still abstract.",
3473
+ "Clarify what belongs inside this event type and what should stay outside it.",
3474
+ "Offer one concise candidate label once the repeated moment is clear.",
3475
+ "Link it to trigger reports, beliefs, patterns, modes, or emotion definitions only after the category itself feels accurate."
3476
+ ],
3477
+ requiredForCreate: ["label"],
3478
+ highValueOptionalFields: [
3479
+ "description",
3480
+ "linkedReportIds",
3481
+ "linkedPatternIds",
3482
+ "linkedBeliefIds",
3483
+ "linkedModeIds"
3484
+ ],
3485
+ exampleQuestions: [
3486
+ "What kind of moment keeps happening that you want future reports to name the same way each time?",
3487
+ "What feels threatened, exposed, relieved, or important in those moments?",
3488
+ "What would make a future incident count as this type instead of a nearby one?",
3489
+ "Which reports or patterns should this help organize later?"
3490
+ ],
3491
+ notes: [
3492
+ "event_type is a Psyche taxonomy record, but it still needs active listening because it names emotionally meaningful episodes.",
3493
+ "Do not open with pure label wording unless the lived category and boundary are already clear.",
3494
+ "Offer a candidate label after the repeated moment is understood, and keep the user's wording when it already fits."
3495
+ ]
3496
+ },
3497
+ {
3498
+ focus: "emotion_definition",
3499
+ useWhen: "Use for a reusable feeling label that should help trigger reports and Psyche records name an emotion consistently in the user's own language.",
3500
+ coachingGoal: "Define the feeling through its lived signature, boundary from nearby feelings, and likely signal or protective function before saving the label.",
3501
+ askSequence: [
3502
+ "Ask when this feeling was present recently and what made it recognizable.",
3503
+ "Reflect the felt signature before asking for a category or label polish.",
3504
+ "Ask what distinguishes it from nearby feelings if the boundary matters.",
3505
+ "Ask what the feeling tends to signal, protect, or ask for.",
3506
+ "Offer one concise definition in the user's language and invite correction.",
3507
+ "Link it to trigger reports, modes, beliefs, or patterns only after the definition feels steady."
3508
+ ],
3509
+ requiredForCreate: ["label"],
3510
+ highValueOptionalFields: [
3511
+ "description",
3512
+ "family",
3513
+ "bodySignals",
3514
+ "linkedReportIds",
3515
+ "linkedModeIds",
3516
+ "linkedBeliefIds",
3517
+ "linkedPatternIds"
3518
+ ],
3519
+ exampleQuestions: [
3520
+ "When this feeling is present, what tells you it is this feeling and not a nearby one?",
3521
+ "What body signal, urge, image, thought, or relational meaning identifies it?",
3522
+ "What does this feeling usually warn about, long for, protect, or demand?",
3523
+ "Which reports or patterns should use this label later?"
3524
+ ],
3525
+ notes: [
3526
+ "emotion_definition is a Psyche taxonomy record, not a generic dictionary entry.",
3527
+ "Start from the lived feeling before asking for category or browsing fields.",
3528
+ "If the user already gives a good label, reflect the felt signature and ask only for the one boundary or definition detail that still matters."
3529
+ ]
3450
3530
  }
3451
3531
  ];
3452
3532
  const AGENT_ONBOARDING_TOOL_INPUT_CATALOG = [
@@ -4120,7 +4200,7 @@ function buildAgentOnboardingPayload(request) {
4120
4200
  task_run: {
4121
4201
  readModel: "/api/v1/operator/context",
4122
4202
  actions: {
4123
- start: "/api/v1/tasks/:taskId/runs",
4203
+ start: "/api/v1/tasks/:id/runs",
4124
4204
  heartbeat: "/api/v1/task-runs/:id/heartbeat",
4125
4205
  focus: "/api/v1/task-runs/:id/focus",
4126
4206
  complete: "/api/v1/task-runs/:id/complete",
@@ -4153,6 +4233,18 @@ function buildAgentOnboardingPayload(request) {
4153
4233
  overrideScore: "/api/v1/preferences/items/:id/score"
4154
4234
  }
4155
4235
  },
4236
+ preference_judgment: {
4237
+ readModel: "/api/v1/preferences/workspace",
4238
+ action: "/api/v1/preferences/judgments",
4239
+ tool: "forge_submit_preferences_judgment",
4240
+ writeModel: "Submit one pairwise preference judgment through the dedicated Preferences action route, not batch CRUD."
4241
+ },
4242
+ preference_signal: {
4243
+ readModel: "/api/v1/preferences/workspace",
4244
+ action: "/api/v1/preferences/signals",
4245
+ tool: "forge_submit_preferences_signal",
4246
+ writeModel: "Submit one direct preference signal through the dedicated Preferences action route, not batch CRUD."
4247
+ },
4156
4248
  questionnaires: {
4157
4249
  list: "/api/v1/psyche/questionnaires",
4158
4250
  detail: "/api/v1/psyche/questionnaires/:id",
@@ -4165,10 +4257,15 @@ function buildAgentOnboardingPayload(request) {
4165
4257
  selfObservation: {
4166
4258
  read: "/api/v1/psyche/self-observation/calendar",
4167
4259
  writeModel: "Create or update an observed note with frontmatter.observedAt. Manual reflections usually carry the Self-observation tag, while movement sync can also publish rolling observed notes tagged movement."
4260
+ },
4261
+ self_observation: {
4262
+ read: "/api/v1/psyche/self-observation/calendar",
4263
+ writeModel: "Read the self-observation calendar, then create or update an observed note with frontmatter.observedAt; do not invent a standalone self_observation CRUD route."
4168
4264
  }
4169
4265
  },
4170
4266
  specializedDomainSurfaces: {
4171
4267
  movement: {
4268
+ classification: "specialized_domain_surface",
4172
4269
  summary: "Dedicated movement workspace API. Use these routes for stays, trips, time-in-place questions, visited places, trip detail, selection aggregates, user-defined overlays, and repair actions on already-recorded movement data.",
4173
4270
  routeSelectionQuestions: [
4174
4271
  "Is the user asking for a day, month, all-time, timeline, place, trip detail, or selected-span answer?",
@@ -4211,6 +4308,7 @@ function buildAgentOnboardingPayload(request) {
4211
4308
  ]
4212
4309
  },
4213
4310
  lifeForce: {
4311
+ classification: "specialized_domain_surface",
4214
4312
  summary: "Dedicated life-force API. Use it to read the current energy budget, drains, recommendations, and warnings, then patch only the parts that are meant to be user-controlled.",
4215
4313
  routeSelectionQuestions: [
4216
4314
  "Is the user trying to understand the overview, change durable profile assumptions, change a weekday curve, or log a right-now fatigue signal?",
@@ -4235,6 +4333,7 @@ function buildAgentOnboardingPayload(request) {
4235
4333
  ]
4236
4334
  },
4237
4335
  workbench: {
4336
+ classification: "specialized_domain_surface",
4238
4337
  summary: "Dedicated graph-flow API. Use it for flow catalog reads, flow CRUD, execution, run history, published outputs, node results, and latest successful node outputs.",
4239
4338
  routeSelectionQuestions: [
4240
4339
  "Is the job flow discovery, flow editing, execution, published output, run detail, node result, latest node output, or flow chat follow-up?",
@@ -4484,9 +4583,9 @@ function buildAgentOnboardingPayload(request) {
4484
4583
  saveSuggestionTone: "gentle_optional",
4485
4584
  maxQuestionsPerTurn: 1,
4486
4585
  psycheExplorationRule: "When a Psyche entity needs understanding first, begin with one exploratory question before any working formulation, replacement belief, suggested title, or save pitch. Keep the opening reflection to one or two short sentences, stay in plain prose instead of bullets or numbered lists, keep that first reply short, do not mention Forge search or save structure yet, avoid colons or list-shaped phrasing, prefer what/when/how over why until the experience is grounded, wait for the user's answer before offering a fuller formulation, ask permission before moving from charged exploration into naming or challenge when needed, make the next question help the user feel more able to name the experience rather than more examined, do not widen into adjacent entities until the current one has a working sentence the user recognizes, and once the lived experience is coherent stop deepening and help the user name it cleanly. When the user is updating a Psyche record because of one fresh episode, anchor in that episode before renaming the durable formulation, begin with the smallest part of the old wording that no longer fits, and do not reopen the full origin story unless the new understanding is truly structural. If the user accepts the wording, move toward the save instead of reopening deeper exploration.",
4487
- specializedSurfaceRule: "For Movement, Life Force, and Workbench, clarify the lane first, then name the dedicated route family in plain language and do not guess at a generic CRUD path. Use specializedDomainSurfaces.routeSelectionQuestions when they are present so the next follow-up stays route-selective instead of generic. Once the lane is clear, talk in route-relevant nouns such as timeline, overlay, weekday template, published output, run detail, or node result rather than generic record language. If the truth of the current state is still uncertain, read the relevant specialized view before you mutate it. When the user already named a precise correction or review target, confirm only the route-selecting detail that is still missing. After a concrete specialized-surface correction, read the relevant specialized view back when the user is trying to understand the result rather than just store it. The canonical runtime routes stay under /api/v1/*, and the OpenClaw HTTP mirror exposes the same families under /forge/v1/movement, /forge/v1/life-force, and /forge/v1/workbench.",
4586
+ specializedSurfaceRule: "For Movement, Life Force, and Workbench, clarify the job first, then choose the dedicated route family internally and do not guess at a generic CRUD path. Use specializedDomainSurfaces.routeSelectionQuestions when they are present so the next follow-up selects the right route instead of asking generic questions. In user-facing language, talk about timeline, overlay, weekday template, published output, run detail, or node result rather than surfaces, payloads, read paths, mutation paths, or CRUD. If the truth of the current state is still uncertain, read the relevant dedicated view before you mutate it. When the user already named a precise correction or review target, confirm only the route-selecting detail that is still missing. After a concrete Movement, Life Force, or Workbench correction, read the relevant view back when the user is trying to understand the result rather than just store it. The canonical runtime routes stay under /api/v1/*, and the OpenClaw HTTP mirror exposes the same families under /forge/v1/movement, /forge/v1/life-force, and /forge/v1/workbench.",
4488
4587
  reviewShortcutRule: "When the user is reviewing or correcting an existing record, ask what practical question they want the read or correction to answer, then narrow the saved object, timeframe, or route family first. Do not reopen the whole intake unless the user is actually redefining the record.",
4489
- readModelWriteRule: "Self-observation is note-backed and should be written through observed notes with frontmatter.observedAt. Sleep and workout sessions stay on batch CRUD by default; use the reflective review helpers only when enriching one already-known record after review.",
4588
+ readModelWriteRule: "Self-observation is note-backed and should be written through observed notes with frontmatter.observedAt only when a lightweight episode observation is the right container. Do not use it as the default bucket for Psyche material: prefer trigger_report for one emotionally meaningful episode, behavior_pattern for functional analysis of a recurring loop, behavior for one repeated move, belief_entry for a core sentence, mode_guide_session or mode_profile for a central part-state, and wiki_page for durable memory such as books, articles, concepts, sources, or personal manuals. Sleep and workout sessions stay on batch CRUD by default; use the reflective review helpers only when enriching one already-known record after review.",
4490
4589
  psycheOpeningQuestionRule: "Prefer a concrete opening question tied to the entity: ask when the value mattered, what happened the last time the pattern appeared, what cue or body signal came first before the behavior, what the belief starts saying about self or outcome, what feels most at risk inside the mode, what the part is trying to get the user to do or stop doing, or where the shift began in the incident. Reflect briefly before the question, choose one follow-up lane at a time, say what is becoming clearer before the next deeper question, and if several Psyche entities are visible hold the adjacent ones lightly until the main container is clear.",
4491
4590
  duplicateCheckRoute: "/api/v1/entities/search",
4492
4591
  uiSuggestionRule: "offer_visual_ui_when_review_or_editing_would_be_easier",
@@ -3193,7 +3193,32 @@ export function buildOpenApiDocument() {
3193
3193
  type: "object",
3194
3194
  additionalProperties: {
3195
3195
  type: "object",
3196
- additionalProperties: true
3196
+ additionalProperties: false,
3197
+ required: [
3198
+ "classification",
3199
+ "summary",
3200
+ "readRoutes",
3201
+ "writeRoutes",
3202
+ "routeSelectionQuestions",
3203
+ "notes"
3204
+ ],
3205
+ properties: {
3206
+ classification: {
3207
+ type: "string",
3208
+ enum: ["specialized_domain_surface"]
3209
+ },
3210
+ summary: { type: "string" },
3211
+ readRoutes: {
3212
+ type: "object",
3213
+ additionalProperties: { type: "string" }
3214
+ },
3215
+ writeRoutes: {
3216
+ type: "object",
3217
+ additionalProperties: { type: "string" }
3218
+ },
3219
+ routeSelectionQuestions: arrayOf({ type: "string" }),
3220
+ notes: arrayOf({ type: "string" })
3221
+ }
3197
3222
  }
3198
3223
  },
3199
3224
  readModelOnlySurfaces: {
@@ -2,7 +2,7 @@
2
2
  "id": "forge-openclaw-plugin",
3
3
  "name": "Forge",
4
4
  "description": "Curated OpenClaw adapter for the Forge collaboration API, UI entrypoint, and localhost auto-start runtime.",
5
- "version": "0.2.56",
5
+ "version": "0.2.57",
6
6
  "skills": [
7
7
  "./skills"
8
8
  ],
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "forge-openclaw-plugin",
3
- "version": "0.2.56",
3
+ "version": "0.2.57",
4
4
  "description": "Curated OpenClaw adapter for the Forge collaboration API, UI entrypoint, and localhost auto-start runtime.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: forge-openclaw-plugin
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.
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 or domain surface such as a goal, project, strategy, task, habit, note, wiki_page, calendar_event, calendar_connection, work_block_template, task_timebox, task_run, work_adjustment, insight, preference item, preference context, preference catalog, preference judgment, preference signal, questionnaire instrument, questionnaire run, self observation, movement, life_force, workbench, 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 or specialized surface, 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
4
  ---
5
5
 
6
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.
@@ -59,10 +59,32 @@ PM surface rule:
59
59
  human/bot ownership filters.
60
60
  - Guided modal flows handle create, edit, move, link, and closeout actions.
61
61
 
62
- 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 SQLite-backed Wiki memory layer with explicit spaces, Markdown content in database rows, 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”.
62
+ Forge has four major stored-entity surfaces and three specialized domain 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. The specialized domain surfaces are Movement, Life Force, and Workbench; agents must use their dedicated route families instead of forcing them through batch CRUD. Forge also has a SQLite-backed Wiki memory layer with explicit spaces, Markdown content in database rows, 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”.
63
63
  Habits are a first-class recurring entity in the planning side.
64
64
  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.
65
65
 
66
+ ## Entity Route Posture
67
+
68
+ Before asking for lower-level details, decide whether the user's request is normal
69
+ stored-entity CRUD, an action workflow, specialized CRUD, or a specialized domain
70
+ surface. Name the path plainly enough that another agent could follow it without
71
+ guessing.
72
+
73
+ - Batch CRUD is the default for normal stored entities, including `goal`, `project`,
74
+ `strategy`, `task`, `habit`, `tag`, `note`, `insight`, `calendar_event`,
75
+ `work_block_template`, `task_timebox`, all main Psyche records, basic Preferences
76
+ CRUD records, `questionnaire_instrument`, `sleep_session`, and `workout_session`.
77
+ - `wiki_page` and `calendar_connection` are specialized CRUD surfaces. Use the wiki
78
+ tools for wiki pages and the calendar connection tools for provider setup and sync.
79
+ - `task_run`, `work_adjustment`, `questionnaire_run`, `preference_judgment`,
80
+ `preference_signal`, and `self_observation` are action workflows. Use their
81
+ dedicated tools or note-backed write model instead of generic entity create/update
82
+ when the action route is the real product behavior.
83
+ - Movement, Life Force, and Workbench are specialized domain surfaces. Read
84
+ `forge_get_agent_onboarding.entityRouteModel.specializedDomainSurfaces` and use
85
+ the dedicated route families for timeline/overlay repair, energy templates/signals,
86
+ and flow execution/results.
87
+
66
88
  Preferences rule:
67
89
 
68
90
  - 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.
@@ -74,6 +96,11 @@ Preferences rule:
74
96
  Wiki rule:
75
97
 
76
98
  - Treat the Wiki as the canonical long-form memory surface, not as a loose note dump.
99
+ - Use a wiki page whenever the user wants to remember or reuse durable knowledge:
100
+ a book, article, paper, source, concept, person, conversation, project reference,
101
+ recurring explanation, or personal manual.
102
+ - Prefer `wiki_page` over `note` when the user is asking for durable memory,
103
+ synthesis, reference, or something they will want to find again by topic.
77
104
  - Use the wiki tools when the user wants SQLite-backed reference pages, backlink-aware recall, ingest from a URL or local file, or wiki maintenance work such as unresolved-link cleanup.
78
105
  - `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.
79
106
  - Keep evidence notes and wiki pages conceptually distinct: evidence notes are linked operating records, while wiki pages are curated long-form memory.
@@ -118,23 +145,24 @@ Entity conversation rule:
118
145
  - When the user is vague, ask for one small concrete example, stake, or desired outcome before you ask them to name the record.
119
146
  - When the user is clear, say what the record seems to be becoming and ask only for the last missing detail.
120
147
  - When the user wants to review, compare, inspect, or navigate an existing Forge
121
- record, ask what they are trying to understand first and prefer the read path before
122
- you reopen create or update intake.
148
+ record, ask what they are trying to understand first and look up the existing record
149
+ before you reopen create or update intake.
123
150
  - When updating an entity, start with what is changing, what should stay true, and what prompted the update now.
124
151
  - When enough is clear, briefly summarize what you heard in the user's own language before asking for the last missing structural detail.
125
152
  - The quick intake prompts later in this file are fallback checkpoints, not a script to read aloud.
126
153
 
127
154
  Forge data location rule:
128
155
 
129
- - by default, Forge stores data under the active runtime root at `forge.sqlite`
130
- - on a normal OpenClaw install, this usually means `~/.openclaw/extensions/forge-openclaw-plugin/forge.sqlite`
131
- - on a linked repo-local install, this usually means `<repo>/openclaw-plugin/forge.sqlite`
156
+ - by default, current Forge plugins converge on the shared local Forge home at `~/.forge/forge.sqlite`
157
+ - the exact storage root is the active runtime `dataRoot`; when `dataRoot` is set in plugin config, Forge stores `forge.sqlite` directly inside that folder
158
+ - on repo-local development installs, keep using the configured shared `dataRoot` unless the user explicitly asks to move data
132
159
  - 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
133
160
  - 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
134
161
 
135
162
  Psyche interview rule:
136
163
 
137
- - For `psyche_value`, `behavior_pattern`, `behavior`, `belief_entry`, `mode_profile`, `mode_guide_session`, and `trigger_report`, do not jump straight to raw field collection.
164
+ - For `psyche_value`, `behavior_pattern`, `behavior`, `belief_entry`, `mode_profile`, `mode_guide_session`, `trigger_report`, `event_type`, and `emotion_definition`, do not jump straight to raw field collection.
165
+ - Treat `event_type` and `emotion_definition` as psychologically meaningful Psyche records, not cold taxonomy labels; start from the repeated lived moment or felt signature before wording the reusable label.
138
166
  - First use the active-listening playbooks in [`psyche_entity_playbooks.md`](./psyche_entity_playbooks.md).
139
167
  - Ask permission before going deeper, ask one or two focused questions at a time, reflect back what you heard, and summarize before moving on.
140
168
  - Start from a recent concrete example before naming an abstract pattern, belief, or mode.
@@ -156,6 +184,26 @@ Psyche interview rule:
156
184
  - If nuance matters, preserve it in a linked Markdown `note` instead of forcing every detail into normalized fields.
157
185
  - 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.
158
186
 
187
+ Self-observation rule:
188
+
189
+ - Do not use `self_observation` as the default bucket for Psyche material.
190
+ - A self-observation is a lightweight observed episode, written as a note-backed
191
+ calendar observation with `frontmatter.observedAt`.
192
+ - When the user describes an episode, help map the chain:
193
+ situation -> cue -> emotion/body -> thought/meaning -> behavior/urge ->
194
+ consequence.
195
+ - If the chain is one emotionally meaningful episode, prefer `trigger_report`.
196
+ - If it is a recurring loop, prefer `behavior_pattern` and do a functional analysis.
197
+ - If the core is one repeated action, prefer `behavior`.
198
+ - If the core is a sentence the user believes, prefer `belief_entry`.
199
+ - If a part-state, protector, critic, child state, or healthy-adult stance is active,
200
+ prefer `mode_guide_session` or `mode_profile`.
201
+ - If a schema theme is visible, do not bury it in self-observation: preserve it as
202
+ the belief, recurring pattern, active mode, guided mode session, trigger report, or
203
+ wiki explanation that best matches the material.
204
+ - If the user wants durable memory about a book, article, concept, source, or personal
205
+ manual, prefer `wiki_page`.
206
+
159
207
  Use these exact entity meanings when deciding what the user is describing.
160
208
 
161
209
  `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.
@@ -364,7 +412,7 @@ Use the dedicated domain routes for specialized surfaces that are not simple bat
364
412
  - 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?".
365
413
  - 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.
366
414
  - 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.
367
- - Movement read lanes map cleanly to the dedicated routes:
415
+ - For movement review, choose the route that matches the user's question:
368
416
  `/api/v1/movement/day`, `/api/v1/movement/month`, `/api/v1/movement/all-time`,
369
417
  `/api/v1/movement/timeline`, `/api/v1/movement/places`,
370
418
  `/api/v1/movement/selection`, and `/api/v1/movement/trips/:id`.
@@ -383,7 +431,9 @@ Use the dedicated domain routes for specialized surfaces that are not simple bat
383
431
  same specialized families are exposed under `/forge/v1/movement/*`,
384
432
  `/forge/v1/life-force/*`, and `/forge/v1/workbench/*`.
385
433
  - Workbench lane hints:
386
- use `/api/v1/workbench/flows` for flow catalog and CRUD,
434
+ use `GET /api/v1/workbench/flows` for flow catalog,
435
+ `POST /api/v1/workbench/flows` for flow creation,
436
+ `PATCH /api/v1/workbench/flows/:id` and `DELETE /api/v1/workbench/flows/:id` for saved-flow edits or deletion,
387
437
  `/api/v1/workbench/flows/:id/run` or `/api/v1/workbench/run` for execution,
388
438
  `/api/v1/workbench/flows/:id/output` for published outputs, and the run/node routes
389
439
  under `/api/v1/workbench/flows/:id` for run history and node-level inspection.
@@ -568,37 +618,55 @@ When the user asks which Forge tools are available, list exactly these tools:
568
618
  `forge_get_operator_context`
569
619
  `forge_get_agent_onboarding`
570
620
  `forge_get_user_directory`
621
+ `forge_get_ui_entrypoint`
571
622
  `forge_get_psyche_overview`
572
- `forge_get_sleep_overview`
573
- `forge_get_sports_overview`
574
623
  `forge_get_xp_metrics`
575
624
  `forge_get_weekly_review`
576
- `forge_get_current_work`
577
- `forge_get_ui_entrypoint`
578
625
  `forge_get_wiki_settings`
579
626
  `forge_list_wiki_pages`
580
627
  `forge_get_wiki_page`
628
+ `forge_get_wiki_health`
581
629
  `forge_search_wiki`
582
630
  `forge_upsert_wiki_page`
583
- `forge_get_wiki_health`
584
631
  `forge_sync_wiki_vault`
585
632
  `forge_reindex_wiki_embeddings`
586
633
  `forge_ingest_wiki_source`
634
+ `forge_get_current_work`
635
+ `forge_get_sleep_overview`
636
+ `forge_get_sports_overview`
637
+ `forge_update_sleep_session`
638
+ `forge_update_workout_session`
639
+ `forge_get_preferences_workspace`
640
+ `forge_start_preferences_game`
641
+ `forge_merge_preferences_contexts`
642
+ `forge_enqueue_preferences_item_from_entity`
643
+ `forge_submit_preferences_judgment`
644
+ `forge_submit_preferences_signal`
645
+ `forge_update_preferences_score`
646
+ `forge_list_questionnaires`
647
+ `forge_get_questionnaire`
648
+ `forge_clone_questionnaire`
649
+ `forge_ensure_questionnaire_draft`
650
+ `forge_publish_questionnaire_draft`
651
+ `forge_start_questionnaire_run`
652
+ `forge_get_questionnaire_run`
653
+ `forge_update_questionnaire_run`
654
+ `forge_complete_questionnaire_run`
655
+ `forge_get_self_observation_calendar`
587
656
  `forge_search_entities`
588
657
  `forge_create_entities`
589
658
  `forge_update_entities`
590
659
  `forge_delete_entities`
591
660
  `forge_restore_entities`
592
661
  `forge_grant_reward_bonus`
593
- `forge_update_sleep_session`
594
- `forge_update_workout_session`
662
+ `forge_adjust_work_minutes`
663
+ `forge_post_insight`
595
664
  `forge_log_work`
596
665
  `forge_start_task_run`
597
666
  `forge_heartbeat_task_run`
598
667
  `forge_focus_task_run`
599
668
  `forge_complete_task_run`
600
669
  `forge_release_task_run`
601
- `forge_post_insight`
602
670
  `forge_get_calendar_overview`
603
671
  `forge_connect_calendar_provider`
604
672
  `forge_sync_calendar_connection`
@@ -47,16 +47,16 @@ Forge correctly, and gather only the structure that still matters.
47
47
  task runs, use a fast path:
48
48
  one brief confirming sentence -> one operational question.
49
49
  - For action-heavy flows such as work adjustments, preference judgments, preference
50
- signals, and specialized surface work in Movement, Life Force, or Workbench, first
50
+ signals, and Movement, Life Force, or Workbench work, first
51
51
  ask what the user is trying to understand, change, add, update, link, or run, then
52
- route to the dedicated action or surface path instead of pretending it is normal
52
+ route to the dedicated action or domain path instead of pretending it is normal
53
53
  CRUD.
54
- - For specialized surfaces, ask what would make the answer or change useful before you
54
+ - For specialized domain areas, ask what would make the answer or change useful before you
55
55
  ask route-shaped details such as provider, weekday, flow id, run id, or trip id.
56
- - For specialized surfaces, start from the user's real job in plain language, then
56
+ - For specialized domain areas, start from the user's real job in plain language, then
57
57
  narrow to the route family. Do not open with a route menu unless the user already
58
58
  named the exact object and action.
59
- - For specialized surfaces, if the truth of the current state is still uncertain, read
59
+ - For specialized domain areas, if the truth of the current state is still uncertain, read
60
60
  the relevant dedicated view before you mutate it.
61
61
  - When the user has already named a precise correction or review target, do not widen
62
62
  back out into a meta lane question. Confirm only the missing route-selecting detail
@@ -91,6 +91,46 @@ Forge correctly, and gather only the structure that still matters.
91
91
  - When the record is already clear enough to save, save it instead of performing a
92
92
  ceremonial extra question.
93
93
 
94
+ ## Plain-language rule
95
+
96
+ Keep API and architecture nouns inside your own reasoning. Do not ask the user about
97
+ "surfaces", "route families", "CRUD", "payloads", "mutation paths", or "read paths".
98
+ With the user, say the human thing:
99
+
100
+ - "Movement timeline", "place", "trip", "missing block", or "time window"
101
+ - "Energy model", "weekday pattern", or "fatigue signal"
102
+ - "Workbench flow", "run", "published output", or "node result"
103
+ - "Wiki page", "note", "trigger report", "behavior pattern", "belief", or "mode"
104
+
105
+ The API path still matters, but it should not leak into the question unless the user
106
+ is explicitly asking about implementation.
107
+
108
+ ## Psyche and memory routing
109
+
110
+ Self-observation is not the default container for psychological material. Use it only
111
+ when the user wants a lightweight observed event note or a quick calendar entry.
112
+
113
+ When the user describes a psychological episode or repeated difficulty, actively route
114
+ to the stronger container:
115
+
116
+ - Use `trigger_report` for one emotionally meaningful episode.
117
+ - Use `behavior_pattern` for a recurring loop that needs functional analysis:
118
+ situation -> cue -> emotion/body -> thought/meaning -> behavior/urge ->
119
+ short-term payoff -> long-term cost -> replacement response.
120
+ - Use `behavior` for one recurring move inside a loop.
121
+ - Use `belief_entry` when a sentence about self, others, safety, worth, or outcome is
122
+ visible.
123
+ - Use `mode_profile` when a recurring part-state, protector, critic, child state, or
124
+ healthy-adult stance is visible.
125
+ - Use `mode_guide_session` when the active part is not yet clear and the user needs
126
+ guided exploration.
127
+ - Use `event_type` and `emotion_definition` when the reusable category or feeling
128
+ label will improve future trigger reports.
129
+ - Use `wiki_page` when the user wants durable memory, a book/article/source summary,
130
+ a reference page, a concept page, or a reusable personal manual.
131
+ - Use a linked `note` when nuance should be preserved without pretending it is the
132
+ whole structured model.
133
+
94
134
  ## Conversation arc
95
135
 
96
136
  Most good Forge intake flows follow this sequence:
@@ -149,9 +189,31 @@ Use this before you choose an API path or ask for more structure.
149
189
  block", or "run this flow again".
150
190
  - For simple stored entities, once the lane is clear, fall back to the shared batch
151
191
  CRUD flow.
152
- - For specialized surfaces such as Movement, Life Force, and Workbench, use the lane
192
+ - For Movement, Life Force, and Workbench, use the lane
153
193
  to choose the dedicated route family before you ask for lower-level details.
154
194
 
195
+ ## Route posture checkpoint
196
+
197
+ Use this quick split before the conversation gets too detailed.
198
+
199
+ - Normal stored Forge entities use the shared batch entity routes by default:
200
+ `/api/v1/entities/search`, `/api/v1/entities/create`,
201
+ `/api/v1/entities/update`, `/api/v1/entities/delete`, and
202
+ `/api/v1/entities/restore`.
203
+ - `wiki_page` and `calendar_connection` are specialized CRUD areas. Use the wiki
204
+ page routes and calendar connection setup or sync routes instead of pretending they
205
+ are simple batch records.
206
+ - `task_run`, `work_adjustment`, `questionnaire_run`, `preference_judgment`,
207
+ `preference_signal`, and `self_observation` are action workflows. Start from what
208
+ the user is trying to do, then use the dedicated action tool or note-backed write
209
+ model.
210
+ - Movement, Life Force, and Workbench are specialized domain areas. Use their
211
+ dedicated route families for timelines and overlays, energy profile/templates and
212
+ fatigue signals, and Workbench flow execution or result artifacts.
213
+ - Once the route posture is clear, keep the questioning focused on the missing detail
214
+ that selects the route or payload. Do not ask route-neutral reflective questions
215
+ after the action path is already obvious.
216
+
155
217
  ## Active-listening patterns
156
218
 
157
219
  Use one of these shapes when the user is not yet precise.
@@ -244,7 +306,7 @@ exists.
244
306
  - When the user wants review rather than mutation, ask what answer they need from the
245
307
  read:
246
308
  what this would help them decide later is often the clearest scope signal.
247
- - For specialized surfaces, ask what exact saved object, span, weekday, flow, run, or
309
+ - For Movement, Life Force, and Workbench, ask what exact saved object, span, weekday, flow, run, or
248
310
  node the user wants to check before you ask why it matters.
249
311
  - If the next answer would not change the route, wording, timing, links, or useful
250
312
  interpretation, stop asking and act.
@@ -263,12 +325,12 @@ Use this when the user wants to inspect, compare, review, or navigate existing F
263
325
  records rather than create something new.
264
326
 
265
327
  - Start by asking what they are trying to understand, decide, compare, or check.
266
- - Ask only for the scoping detail that changes the read path most:
328
+ - Ask only for the scoping detail that changes what you need to look up:
267
329
  entity, owner, timeframe, context, or comparison target.
268
330
  - If the record already exists and the user wants review, do not reopen a creation
269
331
  intake. Route to search, list, overview, or detail first.
270
332
  - For review-heavy questions, the useful progression is:
271
- user goal -> scope -> read path -> interpretation -> optional follow-up write.
333
+ user goal -> scope -> lookup -> interpretation -> optional follow-up write.
272
334
  - Only drift back into create or update intake if the user actually wants the record
273
335
  changed after the review.
274
336
 
@@ -425,7 +487,7 @@ Connect:
425
487
  to save, decide, review, or change, not make them perform the schema out loud.
426
488
  - For review or correction work, do not slip back into a create-style opener once the
427
489
  saved object is already known.
428
- - Once a specialized-surface lane is clear, speak in route-relevant nouns such as
490
+ - Once the Movement, Life Force, or Workbench job is clear, speak in product nouns such as
429
491
  timeline, overlay, weekday template, published output, run detail, or node result
430
492
  instead of generic "record" language.
431
493
  - If the user is emotionally loaded but the record is still non-Psyche, reflect the
@@ -681,22 +743,37 @@ Preferred opening question:
681
743
 
682
744
  ## Wiki Page
683
745
 
684
- Aim: create a durable reference page with a clear scope instead of dumping raw notes
685
- into the wiki.
746
+ Aim: create durable memory when the user wants to remember, study, cite, explain, or
747
+ return to something later. Wiki pages are the right default for books, articles,
748
+ sources, concepts, people, conversations, reusable instructions, and personal manuals.
686
749
 
687
750
  Arc:
688
751
 
689
- 1. Ask what topic this page should become the canonical place for.
690
- 2. Ask whether it is a durable wiki page or supporting evidence.
691
- 3. Ask what future lookup, decision, or collaboration this page should support.
692
- 4. Ask about linked entities, aliases, or tags only if they will make the page more
752
+ 1. Ask what this page should help the user remember, understand, or reuse later.
753
+ 2. Ask whether the material is a book, article, source, concept, person, conversation,
754
+ project reference, or personal manual.
755
+ 3. Ask what the page should contain now: summary, key claims, quotes to verify,
756
+ personal interpretation, action implications, or links.
757
+ 4. Ask whether it should be the durable wiki page itself or supporting evidence linked
758
+ to another page.
759
+ 5. Ask about linked entities, aliases, or tags only if they will make the page more
693
760
  navigable later.
694
761
 
695
762
  Helpful follow-up lanes:
696
763
 
697
- - what this page should be the home for
698
- - what should belong on the page versus remain linked evidence
699
- - who would open this page later and what they should quickly understand
764
+ - what the user wants to remember or reuse
765
+ - whether this is a book, article, source, concept, person, conversation, project
766
+ reference, or personal manual
767
+ - what belongs on the durable page versus a supporting evidence note
768
+ - what Forge entities, Psyche records, goals, projects, or tasks this memory should
769
+ link to
770
+
771
+ Routing rule:
772
+
773
+ - When the user says they want to remember something, save a reference, preserve a
774
+ book or article, keep a concept, or build a reusable explanation, consider
775
+ `wiki_page` before `note`. Use `note` for temporary evidence, work logs, or linked
776
+ detail; use `wiki_page` for durable memory.
700
777
 
701
778
  Ready to save when:
702
779
 
@@ -706,7 +783,7 @@ Ready to save when:
706
783
 
707
784
  Preferred opening question:
708
785
 
709
- - "What should this page become the main reference for?"
786
+ - "What do you want this wiki page to help you remember or reuse later?"
710
787
 
711
788
  ## Insight
712
789
 
@@ -871,39 +948,63 @@ Preferred opening question:
871
948
 
872
949
  ## Self Observation
873
950
 
874
- Aim: capture one observation clearly enough that it can support later reflection
875
- without pretending it is already a full interpretation.
951
+ Aim: capture one observed episode in a structured chain without letting a loose note
952
+ replace the stronger Psyche model. A self-observation should usually name the
953
+ situation, cue, emotion/body, thought/meaning, behavior/urge, and consequence. If the
954
+ material reveals a recurring loop, belief, mode, schema theme, or
955
+ trigger chain, route toward the structured Psyche record instead of parking it as an
956
+ unstructured observation.
876
957
 
877
958
  Arc:
878
959
 
879
- 1. Ask what was observed.
880
- 2. Reflect the moment without pretending it is already a finished interpretation.
881
- 3. Ask what felt most important to name before it gets smoothed over or forgotten.
882
- 4. Ask for the smallest concrete slice if the observation still feels vague or
883
- global.
884
- 5. Ask when it happened or became noticeable.
885
- 6. Ask what it may connect to: pattern, belief, value, mode, task, project, or note.
886
- 7. Ask for tags or extra context only if that will help later review.
960
+ 1. Ask what happened in the situation.
961
+ 2. Ask what cue, trigger, or shift made the episode noticeable.
962
+ 3. Ask what emotion, body signal, thought, or meaning showed up.
963
+ 4. Ask what behavior showed up: what the user did, wanted to do, avoided, or
964
+ repeated next.
965
+ 5. Ask what happened immediately after, including short-term relief or cost if it is
966
+ visible.
967
+ 6. Decide whether this should stay a lightweight self-observation or become a
968
+ `trigger_report`, `behavior_pattern`, `behavior`, `belief_entry`, `mode_profile`,
969
+ `mode_guide_session`, `event_type`, `emotion_definition`, or wiki page.
970
+ 7. Link the observation to the structured record when the structured record is the
971
+ real container.
972
+
973
+ Helpful follow-up lanes:
974
+
975
+ - situation or event
976
+ - cue, trigger, or body shift
977
+ - emotion and intensity
978
+ - thought, meaning, belief sentence, or schema theme
979
+ - behavior, urge, avoidance, or coping move
980
+ - short-term payoff and later cost
981
+ - whether this is one episode, a recurring pattern, an active mode, or durable memory
887
982
 
888
983
  Route note:
889
984
 
890
985
  - `self_observation` is note-backed. Read the calendar first, then create or update an
891
986
  observed `note` with `frontmatter.observedAt` instead of inventing a standalone CRUD
892
987
  write.
988
+ - Do not promote self-observation over functional analysis. If the user is describing
989
+ a loop, use `behavior_pattern`; if they are describing one emotionally meaningful
990
+ episode, use `trigger_report`; if a part-state is central, use `mode_guide_session`
991
+ or `mode_profile`; if a belief sentence is central, use `belief_entry`.
992
+ - If the user wants to remember a source, concept, book, article, or durable personal
993
+ explanation, use `wiki_page` rather than self-observation.
893
994
 
894
- If the user already gave the moment or timing, move straight to what they noticed most
895
- clearly instead of re-asking when.
995
+ If the user already gave the event or timing, move straight to the missing part of the
996
+ chain: cue, emotion, thought, behavior, consequence, or structured Psyche link.
896
997
 
897
998
  Ready to save when:
898
999
 
899
- - the observation itself is clear
900
- - the lived point of the observation is clear enough to revisit later
1000
+ - the situation/event is clear
1001
+ - at least one emotion/body signal, thought/meaning, or behavior/urge is clear
901
1002
  - timing is clear enough
902
- - any useful links are captured
1003
+ - any better structured container has been chosen or linked
903
1004
 
904
1005
  Preferred opening question:
905
1006
 
906
- - "What did you notice most clearly in that moment?"
1007
+ - "What happened in the situation, and what did you feel, think, or do next?"
907
1008
 
908
1009
  ## Sleep Session
909
1010
 
@@ -1009,6 +1110,12 @@ Helpful follow-up lanes:
1009
1110
  - which preference context should own the signal
1010
1111
  - whether the choice feels decisive, weak, tied, or not ready
1011
1112
 
1113
+ Route note:
1114
+
1115
+ - `preference_judgment` is an action workflow. Submit it through
1116
+ `POST /api/v1/preferences/judgments` with the preferences judgment tool, not batch
1117
+ CRUD.
1118
+
1012
1119
  Ready to act when:
1013
1120
 
1014
1121
  - the left and right items are clear
@@ -1037,6 +1144,11 @@ Helpful follow-up lanes:
1037
1144
  - whether this is a favorite, veto, bookmark, neutral, or compare-later signal
1038
1145
  - what context makes the signal meaningful
1039
1146
 
1147
+ Route note:
1148
+
1149
+ - `preference_signal` is an action workflow. Submit it through
1150
+ `POST /api/v1/preferences/signals` with the preferences signal tool, not batch CRUD.
1151
+
1040
1152
  Ready to act when:
1041
1153
 
1042
1154
  - the item is clear
@@ -1068,7 +1180,8 @@ Arc:
1068
1180
  detail before you mutate it.
1069
1181
  8. Skip the meta lane question when the user already named the exact correction or
1070
1182
  review target and only one ambiguity remains.
1071
- 9. Route to the dedicated movement read or write path once the surface is clear.
1183
+ 9. Use the dedicated movement route once you know whether the user needs timeline
1184
+ review, overlay, place or trip detail, selection summary, or repair.
1072
1185
 
1073
1186
  Direct action rules:
1074
1187
 
@@ -1133,7 +1246,7 @@ Lane-to-route map:
1133
1246
 
1134
1247
  Ready to act when:
1135
1248
 
1136
- - the movement surface is clear
1249
+ - the movement question or correction is clear
1137
1250
  - the time range, place, stay, trip, or selection is clear enough
1138
1251
  - the user goal is clear enough to tell review, overlay, and repair apart
1139
1252
  - the user goal is clear enough to choose the route
@@ -1242,7 +1355,8 @@ Lane-to-route map:
1242
1355
  - discover or inspect flows:
1243
1356
  `/api/v1/workbench/flows`, `/api/v1/workbench/flows/:id`, or `/api/v1/workbench/flows/by-slug/:slug`
1244
1357
  - create, update, or delete a flow:
1245
- `POST/PATCH/DELETE /api/v1/workbench/flows`
1358
+ `POST /api/v1/workbench/flows`, then `PATCH /api/v1/workbench/flows/:id` or
1359
+ `DELETE /api/v1/workbench/flows/:id` for an existing saved flow
1246
1360
  - run a known flow:
1247
1361
  `/api/v1/workbench/flows/:id/run`
1248
1362
  - run from a payload-first contract:
@@ -1304,6 +1418,12 @@ Helpful follow-up lanes:
1304
1418
  - what belongs in scope
1305
1419
  - what would make the catalog immediately useful instead of bloated
1306
1420
 
1421
+ Route note:
1422
+
1423
+ - `preference_catalog` is normal stored Preferences CRUD. Use the shared batch entity
1424
+ routes unless the user is playing the comparison game or submitting a judgment or
1425
+ signal.
1426
+
1307
1427
  Ready to save when:
1308
1428
 
1309
1429
  - the catalog has a stable purpose
@@ -1332,6 +1452,11 @@ Helpful follow-up lanes:
1332
1452
  - what would distinguish it from nearby items
1333
1453
  - whether the label alone will be clear later
1334
1454
 
1455
+ Route note:
1456
+
1457
+ - `preference_catalog_item` is normal stored Preferences CRUD. Use batch entity
1458
+ create/update/search for catalog membership and wording changes.
1459
+
1335
1460
  Ready to save when:
1336
1461
 
1337
1462
  - the item label is clear
@@ -1360,6 +1485,11 @@ Helpful follow-up lanes:
1360
1485
  - what belongs inside versus outside the mode
1361
1486
  - whether it should be default or explicitly separate
1362
1487
 
1488
+ Route note:
1489
+
1490
+ - `preference_context` is normal stored Preferences CRUD. Use batch entity
1491
+ create/update/search for context definition changes.
1492
+
1363
1493
  Ready to save when:
1364
1494
 
1365
1495
  - the context has a stable purpose
@@ -1391,6 +1521,12 @@ Helpful follow-up lanes:
1391
1521
  - whether this is a signal or a comparison candidate
1392
1522
  - what distinguishes the item from nearby options
1393
1523
 
1524
+ Route note:
1525
+
1526
+ - `preference_item` is normal stored Preferences CRUD when saving or editing a
1527
+ candidate. Use `preference_judgment` or `preference_signal` routes only when the
1528
+ user is recording a comparison outcome or direct mark.
1529
+
1394
1530
  Ready to act when:
1395
1531
 
1396
1532
  - the item is clear
@@ -1423,6 +1559,12 @@ Helpful follow-up lanes:
1423
1559
  - who will answer it and under what circumstances
1424
1560
  - what would make the instrument distinct instead of redundant
1425
1561
 
1562
+ Route note:
1563
+
1564
+ - `questionnaire_instrument` is normal stored CRUD for ordinary create, update,
1565
+ delete, and search work. Use clone, draft, and publish action routes only when the
1566
+ user is working with instrument version state.
1567
+
1426
1568
  Ready to act when:
1427
1569
 
1428
1570
  - the purpose is clear
@@ -1451,6 +1593,11 @@ Helpful follow-up lanes:
1451
1593
  - what questionnaire or run is in scope
1452
1594
  - what next answer, uncertainty, or note is actually blocking progress
1453
1595
 
1596
+ Route note:
1597
+
1598
+ - `questionnaire_run` is an action workflow. Use the questionnaire run start, read,
1599
+ update, and complete routes instead of treating answers as generic batch CRUD.
1600
+
1454
1601
  Ready to act when:
1455
1602
 
1456
1603
  - the questionnaire is identified
@@ -259,6 +259,31 @@ Connect:
259
259
  - only after the primary formulation feels steady, ask whether an adjacent value,
260
260
  belief, mode, pattern, note, or task should be linked or mapped separately
261
261
 
262
+ ## Schema Theme Routing
263
+
264
+ Forge does not treat schema work as a loose self-observation. When a schema theme is
265
+ visible, help the user name how it organizes meaning, protection, expectation, and
266
+ behavior.
267
+
268
+ Use these containers:
269
+
270
+ - `belief_entry` when the schema appears as a sentence, rule, prediction, or
271
+ self/other/world assumption.
272
+ - `behavior_pattern` when the schema drives a recurring cue -> emotion/body ->
273
+ thought/meaning -> behavior/urge -> payoff -> cost loop.
274
+ - `mode_profile` when the schema is carried by a recurring part-state such as a
275
+ protector, critic, vulnerable child, coping mode, or healthy-adult response.
276
+ - `mode_guide_session` when the user is in the reaction and needs guided exploration
277
+ before a durable mode or belief is clear.
278
+ - `trigger_report` when the schema became visible in one emotionally meaningful
279
+ episode.
280
+ - `wiki_page` when the user wants a durable explanation of a schema theme, therapy
281
+ concept, book, article, source, or personal manual they will need to find again.
282
+
283
+ Do not ask the user to pick the container first. Reflect the active meaning in plain
284
+ language, ask for one recent moment or one belief sentence, then choose the record that
285
+ will preserve the structure best.
286
+
262
287
  ## Lane chooser
263
288
 
264
289
  After each real answer, choose the next best lane. Do not mix several lanes at once.
@@ -729,3 +754,83 @@ Ready to save when:
729
754
  Preferred opening question:
730
755
 
731
756
  - "What happened in that moment, as concretely as you can say it?"
757
+
758
+ ## Event Type
759
+
760
+ Aim: name a repeated emotionally meaningful kind of moment without flattening the
761
+ lived episode into a cold taxonomy.
762
+
763
+ Arc:
764
+
765
+ 1. Ask what kind of moment keeps recurring and why it matters to name it consistently.
766
+ 2. Reflect the repeated emotional or relational stake in plain language before wording
767
+ the category.
768
+ 3. Ask for one recent example if the boundary is still abstract.
769
+ 4. Clarify what belongs inside this event type and what should stay outside it.
770
+ 5. Offer one concise candidate label once the repeated moment is clear.
771
+ 6. Link it to trigger reports, beliefs, patterns, modes, or emotion definitions only
772
+ after the category itself feels accurate.
773
+
774
+ Helpful follow-up lanes:
775
+
776
+ - what repeated moment this event type should help future reports name
777
+ - what felt threatened, exposed, relieved, or important in those moments
778
+ - what would make a future incident count as this type instead of a nearby one
779
+ - which trigger reports or patterns this event type should help organize
780
+
781
+ Likely linked entities:
782
+
783
+ - `trigger_report` when a specific episode shows the category clearly
784
+ - `behavior_pattern` when the event type usually starts a recurring loop
785
+ - `belief_entry` when the event type reliably activates one sentence or prediction
786
+ - `emotion_definition` when one feeling label needs to stay consistent across reports
787
+
788
+ Ready to save when:
789
+
790
+ - the repeated moment is understandable in plain language
791
+ - the boundary is clear enough for future reports to use consistently
792
+ - the label feels accurate enough or has one candidate wording to confirm
793
+
794
+ Preferred opening question:
795
+
796
+ - "What kind of moment keeps happening that you want future reports to name the same way each time?"
797
+
798
+ ## Emotion Definition
799
+
800
+ Aim: define a psychologically meaningful feeling label by its lived signature, not just
801
+ by a dictionary word.
802
+
803
+ Arc:
804
+
805
+ 1. Ask when this feeling was present recently and what made it recognizable.
806
+ 2. Reflect the felt signature before asking for a category or label polish.
807
+ 3. Ask what distinguishes it from nearby feelings if the boundary matters.
808
+ 4. Ask what the feeling tends to signal, protect, or ask for.
809
+ 5. Offer one concise definition in the user's language and invite correction.
810
+ 6. Link it to trigger reports, modes, beliefs, or patterns only after the definition
811
+ feels steady.
812
+
813
+ Helpful follow-up lanes:
814
+
815
+ - body signal, urge, image, thought, or relational meaning that identifies the feeling
816
+ - what makes it different from nearby feelings such as fear, shame, anger, sadness,
817
+ grief, or numbness
818
+ - what the feeling usually warns about, longs for, protects, or demands
819
+ - which reports or patterns should use this label later
820
+
821
+ Likely linked entities:
822
+
823
+ - `trigger_report` when one episode makes the feeling concrete
824
+ - `mode_profile` when the feeling belongs to a recurring part-state
825
+ - `belief_entry` when the feeling is tied to one self-statement or prediction
826
+ - `behavior_pattern` when the feeling is a common cue in a repeated loop
827
+
828
+ Ready to save when:
829
+
830
+ - the felt signature is clear enough to recognize later
831
+ - the boundary from nearby feelings is clear enough when it matters
832
+ - the definition can be written in language the user recognizes
833
+
834
+ Preferred opening question:
835
+
836
+ - "When this feeling is present, what tells you it is this feeling and not a nearby one?"