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