forge-openclaw-plugin 0.3.14 → 0.3.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/index.html +4 -4
- package/dist/openclaw/index.d.ts +2 -7
- package/dist/server/server/src/app.js +11 -6
- package/dist/server/server/src/openapi.js +4 -0
- package/openclaw.plugin.json +1 -1
- package/package.json +6 -4
- package/server/index.js +6 -1
- package/skills/forge-openclaw/SKILL.md +54 -8
- package/skills/forge-openclaw/entity_conversation_playbooks.md +150 -5
- package/skills/forge-openclaw/psyche_entity_playbooks.md +77 -0
- package/dist/assets/favicon-B6oXI6k4.ico +0 -0
- package/dist/assets/favicon-Bai4rhyS.png +0 -0
- package/dist/assets/favicon-ERg17ZCd.svg +0 -3
- package/skills/forge-openclaw/SKILL.md.bak-20260415 +0 -552
- package/skills/forge-openclaw/entity_conversation_playbooks.md.bak-20260415 +0 -1303
package/README.md
CHANGED
|
@@ -255,7 +255,7 @@ openclaw forge health
|
|
|
255
255
|
openclaw forge ui
|
|
256
256
|
```
|
|
257
257
|
|
|
258
|
-
Tested on OpenClaw `2026.
|
|
258
|
+
Tested on OpenClaw `2026.6.9`: plain `openclaw plugins install forge-openclaw-plugin` is blocked by the plugin scanner because Forge contains local runtime startup helpers. The documented command uses OpenClaw's explicit approval flag and installs without the old config-edit workaround.
|
|
259
259
|
|
|
260
260
|
Check what OpenClaw loaded:
|
|
261
261
|
|
|
@@ -542,7 +542,7 @@ The repo now supports a tag-driven GitHub Actions release path for step 1. The n
|
|
|
542
542
|
prep flow from a clean checkout on `main` is:
|
|
543
543
|
|
|
544
544
|
```bash
|
|
545
|
-
FORGE_RELEASE_MODE=prepare ./scripts/release-forge-openclaw-plugin.sh patch
|
|
545
|
+
FORGE_RELEASE_MODE=prepare ./scripts/release/release-forge-openclaw-plugin.sh patch
|
|
546
546
|
```
|
|
547
547
|
|
|
548
548
|
That command bumps the aligned plugin versions, runs the verification suite, commits
|
package/dist/index.html
CHANGED
|
@@ -11,10 +11,10 @@
|
|
|
11
11
|
name="description"
|
|
12
12
|
content="Forge is a premium life operating system for turning long-horizon goals into daily motion."
|
|
13
13
|
/>
|
|
14
|
-
<link rel="icon" type="image/png" href="/forge/
|
|
15
|
-
<link rel="icon" type="image/svg+xml" href="/forge/
|
|
16
|
-
<link rel="alternate icon" href="/forge/
|
|
17
|
-
<link rel="apple-touch-icon" href="
|
|
14
|
+
<link rel="icon" type="image/png" href="/forge/favicon.png" />
|
|
15
|
+
<link rel="icon" type="image/svg+xml" href="/forge/favicon.svg" />
|
|
16
|
+
<link rel="alternate icon" href="/forge/favicon.ico" />
|
|
17
|
+
<link rel="apple-touch-icon" href="/forge/apple-touch-icon.png" />
|
|
18
18
|
<style>
|
|
19
19
|
:root {
|
|
20
20
|
color-scheme: dark;
|
package/dist/openclaw/index.d.ts
CHANGED
|
@@ -1,10 +1,5 @@
|
|
|
1
|
+
import { type OpenClawPluginDefinition } from "openclaw/plugin-sdk/plugin-entry";
|
|
1
2
|
import { forgePluginConfigSchema, registerForgePlugin, resolveForgePluginConfig } from "./plugin-entry-shared.js";
|
|
2
|
-
declare const pluginEntry:
|
|
3
|
-
id: string;
|
|
4
|
-
name: string;
|
|
5
|
-
description: string;
|
|
6
|
-
configSchema: import("openclaw/plugin-sdk/plugin-entry").OpenClawPluginConfigSchema;
|
|
7
|
-
register: NonNullable<import("openclaw/plugin-sdk/plugin-entry").OpenClawPluginDefinition["register"]>;
|
|
8
|
-
} & Pick<import("openclaw/plugin-sdk/plugin-entry").OpenClawPluginDefinition, "kind" | "reload" | "nodeHostCommands" | "securityAuditCollectors">;
|
|
3
|
+
declare const pluginEntry: OpenClawPluginDefinition;
|
|
9
4
|
export default pluginEntry;
|
|
10
5
|
export { forgePluginConfigSchema, registerForgePlugin, resolveForgePluginConfig };
|
|
@@ -3105,6 +3105,7 @@ const AGENT_ONBOARDING_CONVERSATION_RULES = [
|
|
|
3105
3105
|
"If the user already answered the normal opening question, do not repeat it. Move to the next missing clarification.",
|
|
3106
3106
|
"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.",
|
|
3107
3107
|
"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.",
|
|
3108
|
+
"Before asking a follow-up, know what the user's answer would change: save, update, review, link, schedule, correct, run, publish, preserve, enrich, open the UI, or stop. If no possible answer would change the next action, summarize and act instead of asking.",
|
|
3108
3109
|
"Use a minimum save-readiness checkpoint before asking another follow-up. For normal batch entities, act when you have accepted wording, meaningful body, and any ownership or placement that changes later use; do not ask for tags, links, priority, dates, assignees, or status just because optional fields exist. For operational records, act when the target action plus the time, object, or state that makes it truthful is clear. For read-model surfaces, read once the practical question and answer-changing scope are clear. For specialized Movement, Life Force, and Workbench writes, act once the lane plus target span/object/weekday/flow/run/node and intended correction or effect are clear.",
|
|
3109
3110
|
"For strategic, reflective, or emotionally meaningful non-Psyche records, ask what feels important to keep true before you ask for labels, dates, or taxonomy.",
|
|
3110
3111
|
"For reflection-sensitive non-Psyche records such as questionnaire_instrument, questionnaire_run, self_observation, reflective note, wiki_page, sleep_session, workout_session, preference_judgment, and preference_signal, first ask what the reflection should help the user understand, decide, notice, remember, or change later; then keep the API posture exact: batch CRUD for normal stored records, questionnaire run actions for answer lifecycle, self-observation calendar reads plus observed-note writes, and wiki routes for wiki pages.",
|
|
@@ -3116,6 +3117,7 @@ const AGENT_ONBOARDING_CONVERSATION_RULES = [
|
|
|
3116
3117
|
"For review requests, ask what practical question the user wants the read to answer before you ask for more scope.",
|
|
3117
3118
|
"For review-first requests, use the correct read posture before asking write-shaped questions: shared batch search or read hints for normal entities, wiki/calendar dedicated reads for specialized CRUD, read-model routes for overviews, and Movement, Life Force, or Workbench dedicated reads for those domain surfaces. After the read, answer the practical question before asking for any save, correction, link, run, enrichment, or publish detail.",
|
|
3118
3119
|
"After a review, overview, navigation, or specialized read returns data, first answer the user's practical question in plain language, then name one implication or uncertainty that matters for the next decision. Ask a follow-up only if it changes the next action: save, update, correct, link, schedule, run, publish, enrich, or open the UI.",
|
|
3120
|
+
"After a read, make the read's decision value explicit: what it rules in, what it rules out, and what one uncertainty remains. If no answer-changing uncertainty remains, close cleanly.",
|
|
3119
3121
|
"Treat userId, owner, and human/bot assignees as accountability and scope, not as opening form fields. Ask whose record or owner scope matters only when it changes visibility, review results, collaboration, automation behavior, or later filtering.",
|
|
3120
3122
|
"For read and overview requests, ask for human or bot user scope only when the answer would meaningfully differ across owners; otherwise keep the next question focused on the user's practical question.",
|
|
3121
3123
|
"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.",
|
|
@@ -3126,6 +3128,7 @@ const AGENT_ONBOARDING_CONVERSATION_RULES = [
|
|
|
3126
3128
|
"Do not minimize functional analysis, trigger chains, behavior patterns, modes, beliefs, or schema themes. After at least one concrete example is clear, offer one careful interpretive hypothesis when it would help the user understand what the reaction may be protecting, predicting, relieving, or costing.",
|
|
3127
3129
|
"Phrase Psyche interpretive hypotheses as collaborative and testable, not as verdicts. Ask whether the hypothesis lands or needs correction before turning it into a saved belief, pattern, mode, trigger report, or note.",
|
|
3128
3130
|
"A useful Psyche hypothesis starts from the user's concrete example, names one possible protection, prediction, relief, or cost, and asks for correction before it becomes a saved record shape.",
|
|
3131
|
+
"When the user reports an urge or wants a Psyche flashcard, search flashcards first, show a matching card's message before adding support, and if no card fits create only after the cue or urge sentence and short message are clear; postpone visual style, colors, tags, and optional links until the intervention sentence works.",
|
|
3129
3132
|
"For Psyche save-readiness, stop deepening once the user recognizes the working formulation and the minimum shape is present: belief sentence, functional loop, behavior move, part-state, trigger episode, value, event type, emotion definition, or flashcard cue/message. Ask one accuracy question at most, then save through shared batch CRUD when the user says yes.",
|
|
3130
3133
|
"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.",
|
|
3131
3134
|
"If the next answer would not change the route, wording, timing, or write shape in a meaningful way, stop asking and act.",
|
|
@@ -5486,19 +5489,21 @@ function buildAgentOnboardingPayload(request) {
|
|
|
5486
5489
|
saveSuggestionPlacement: "end_of_message",
|
|
5487
5490
|
saveSuggestionTone: "gentle_optional",
|
|
5488
5491
|
maxQuestionsPerTurn: 1,
|
|
5492
|
+
depthCalibrationRule: "Before deepening an intake, decide whether this is quick capture, guided formulation, review-first help, or action-first execution. Quick capture means the user already supplied usable wording and wants it saved, remembered, or logged; reflect the working shape once, ask only the one structural, accuracy, or consent detail that changes the write, and do not force full exploration. Guided formulation means the user asks to understand, name, map, decide, or work through unclear or charged material; use active listening, one lane at a time, and Psyche hypotheses when appropriate before saving. Review-first means read the relevant stored entity, overview, or specialized surface before asking write-shaped questions. Action-first means the target task run, work adjustment, preference signal or judgment, questionnaire run, Movement correction, Life Force signal or weekday template, or Workbench run or output is already clear, so act or ask only for the missing target, span, flow, run, node, weekday, correction, or consent. Do not downgrade psychologically meaningful material into quick capture when the user wants exploration, and do not expand a simple storage request into therapy or project planning.",
|
|
5493
|
+
operationLaneRule: "Keep the operation lane explicit before asking for lower-level details. Normal stored entities can be added, updated, reviewed or navigated, linked, or placed. Action workflows use verbs such as start, continue, complete, adjust, judge, signal, publish, sync, or observe. Specialized CRUD surfaces use lifecycle verbs such as create, read, update, sync, reconnect, delete, or browse. Read-model surfaces need a practical read question and scope before any write-shaped follow-up. Movement, Life Force, and Workbench use review, correct, repair, run, inspect, publish, or preserve lanes through their dedicated route keys. Psyche entities need a formulation lane before the storage lane when the user wants understanding; direct saves can move to one accuracy or consent question.",
|
|
5489
5494
|
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. After one concrete example is clear and a hypothesis lands or is corrected, translate it into a saveable record shape such as a belief sentence, functional loop, behavior, mode, trigger report, value, event type, or emotion definition; do not leave the user with interpretation alone, name the primary Forge record it is becoming, and ask one accuracy or consent question instead of reopening broad exploration, then use the shared batch entity routes after the user accepts the wording or explicitly asks to save. 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.",
|
|
5490
5495
|
progressiveDisclosureRule: "Treat partial answers as progress, not as failed intake. Before asking another question, identify what is already usable: operation, entity or surface, target record or time span, working wording, owner or placement, route lane, and consent. Say the usable part back briefly, then ask only for the first missing detail that changes the action: duplicate disambiguation, hierarchy parent, time window, weekday, flow, run, node, correction, link, or save consent. For normal batch entities, do not ask for optional tags, priority, status, dates, color, links, or assignees when the accepted wording and meaningful body are already enough unless that metadata changes accountability, retrieval, or execution. For Movement, Life Force, and Workbench, if the user's wording already implies the dedicated lane, skip the broad route-family question and ask only for the target span, place, weekday, profile field, flow, run, node, output, correction, or consent that is still missing. For direct Psyche saves or updates, treat an offered belief sentence, functional loop, part voice, trigger episode, value phrase, event kind, emotion signature, or flashcard message as real data; ask one accuracy or consent question instead of reopening origin, evidence, or repair.",
|
|
5491
5496
|
writeConfirmationRule: "After create, update, delete, restore, run, read, or repair actions, confirm the user-facing record, action, and result in the user's language instead of reopening intake. For batch creates and updates, confirm the working title or accepted wording, container, and owner or placement only when those changed retrieval, accountability, or execution; if optional tags, priority, status, color, links, dates, or assignees were left provisional, say that plainly once instead of asking for all of them. For action workflows, confirm the real product action such as task run started or completed, work adjustment applied, preference judgment or signal submitted, questionnaire run updated or completed, calendar connection synced, or self-observation note written. For Psyche saves, confirm the accepted wording and whether it was saved as a first version, update, link, archive, or distinct version; do not reopen origin, evidence, repair, or adjacent entity mapping after the save unless that next object is already visible and materially useful. Ask a follow-up only if it changes the next action: correction, link, schedule, run, publish, enrichment, preservation choice, or UI handoff.",
|
|
5492
|
-
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. When available, use forge_call_movement_route, forge_call_life_force_route, or forge_call_workbench_route after the lane is clear. 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, mutation, or result-producing run, read the relevant view back when the user is trying to understand the result rather than just store it: timeline or place/settings detail for Movement, the Life Force overview for energy-planning impact, and flow detail, run detail, node result, latest node output, published output, or run history for Workbench. After any dedicated read, translate the result into one next action: no change, Movement overlay/place/settings/link, Life Force workload/recovery/timebox/meeting/task-choice change, or Workbench rerun/node inspection/flow edit/publish/preserve/stop. Ask only for the missing span, place, weekday, flow, run, node, output, correction, preservation choice, or confirmation that would change that action. 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.",
|
|
5493
|
-
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. Use the correct read posture before asking write-shaped questions: shared batch search or read hints for normal entities, wiki/calendar dedicated reads for specialized CRUD, read-model routes for overviews, and Movement, Life Force, or Workbench dedicated reads for those domain surfaces. After the read, answer the practical question before asking for any save, correction, link, run, enrichment, or publish detail. If several actions are possible, narrow to the one most directly supported by the read instead of handing the user a broad menu. Do not reopen the whole intake unless the user is actually redefining the record.",
|
|
5497
|
+
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. Before every dedicated call, run a route-contract handshake internally: select the product lane in plain language, verify the matching routeKey against live onboarding routeKeys and methodRoutes, fill any placeholders through pathParams, and ask the user only for the missing product noun that fills the placeholder. When available, use forge_call_movement_route, forge_call_life_force_route, or forge_call_workbench_route after the lane is clear. If a route-key tool is unavailable, stale, or missing the needed key, read live onboarding and use the exact specializedDomainSurfaces.methodRoutes entry for the selected lane; cross-check OpenAPI only to confirm the same method and path, do not fall back to generic batch CRUD, do not invent a nearby raw path, and treat schema disagreement as a Forge contract bug to fix. Before calling a specialized route, inspect its methodRoutes entry for placeholders such as :id, :weekday, :slug, :runId, :nodeId, or :pointId, then fill each one through pathParams with the same placeholder name; do not hide IDs in query, body, or routeKey. If the contract is missing a lane the product clearly supports, report a contract bug instead of silently using generic batch CRUD or a nearby route. 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, mutation, or result-producing run, read the relevant view back when the user is trying to understand the result rather than just store it: timeline or place/settings detail for Movement, the Life Force overview for energy-planning impact, and flow detail, run detail, node result, latest node output, published output, or run history for Workbench. After any dedicated read, translate the result into one next action: no change, Movement overlay/place/settings/link, Life Force workload/recovery/timebox/meeting/task-choice change, or Workbench rerun/node inspection/flow edit/publish/preserve/stop. Ask only for the missing span, place, weekday, flow, run, node, output, correction, preservation choice, or confirmation that would change that action. 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.",
|
|
5498
|
+
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. Use the correct read posture before asking write-shaped questions: shared batch search or read hints for normal entities, wiki/calendar dedicated reads for specialized CRUD, read-model routes for overviews, and Movement, Life Force, or Workbench dedicated reads for those domain surfaces. After the read, answer the practical question before asking for any save, correction, link, run, enrichment, or publish detail, and state what the read rules in, rules out, or leaves uncertain. If several actions are possible, narrow to the one most directly supported by the read instead of handing the user a broad menu. Do not reopen the whole intake unless the user is actually redefining the record.",
|
|
5494
5499
|
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.",
|
|
5495
5500
|
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.",
|
|
5496
|
-
psycheHypothesisRule: "When one concrete Psyche example is visible, a helpful hypothesis should start from evidence in the user's own example, offer one testable interpretation, name the function without blame such as protection, prediction, relief, or cost, and ask whether the danger, need, or wording fits. Use the hypothesis timing checkpoint before asking a second or third deepening question: offer a hypothesis when one concrete episode, body cue, belief sentence, behavior, or mode voice is visible and the hypothesis would change the record shape, wording, links, or next action. Do not keep asking broad exploratory Psyche questions after the cue, meaning, protection, payoff, or cost is already visible. For behavior_pattern, belief_entry, mode_profile, mode_guide_session, and trigger_report, the next helpful move is usually one active formulation plus one correction question, not another passive reflection. Hypotheses should reduce the formulation burden. Do not make the user prove the experience: after one hypothesis, ask one fit-or-correction question rather than a stack of evidence, origin, and repair questions. If accuracy needs grounding, ask for the smallest lived cue or contrast that would change the wording, danger, protection, payoff, cost, or record shape. Do not hypothesize yet when no concrete moment is visible, the user only wants a direct mechanical save, the user is flooded or unsafe, or the only available interpretation would be diagnosis-like, an origin story, or a certainty claim. Do not present schema, mode, belief, or pattern language as a verdict. Do not leave the user with interpretation alone; name the primary Forge record and ask one accuracy or consent question that moves toward saving the corrected formulation. If the user corrects the hypothesis, revise it once and move toward the saveable record shape instead of asking for another broad story.",
|
|
5501
|
+
psycheHypothesisRule: "When one concrete Psyche example is visible, a helpful hypothesis should start from evidence in the user's own example, offer one testable interpretation, name the function without blame such as protection, prediction, relief, or cost, and ask whether the danger, need, or wording fits. Use the hypothesis timing checkpoint before asking a second or third deepening question: offer a hypothesis when one concrete episode, body cue, belief sentence, behavior, or mode voice is visible and the hypothesis would change the record shape, wording, links, or next action. Use the Psyche hypothesis examples when another broad question would make the user do all the interpretation alone: behavior_pattern should test cue, protection, payoff, and cost; belief_entry should test the activated sentence; mode_profile and mode_guide_session should test the part's job and feared danger; trigger_report should test the sequence; event_type and emotion_definition should test future recognition. Do not keep asking broad exploratory Psyche questions after the cue, meaning, protection, payoff, or cost is already visible. For behavior_pattern, belief_entry, mode_profile, mode_guide_session, and trigger_report, the next helpful move is usually one active formulation plus one correction question, not another passive reflection. Hypotheses should reduce the formulation burden. Do not make the user prove the experience: after one hypothesis, ask one fit-or-correction question rather than a stack of evidence, origin, and repair questions. If accuracy needs grounding, ask for the smallest lived cue or contrast that would change the wording, danger, protection, payoff, cost, or record shape. Do not hypothesize yet when no concrete moment is visible, the user only wants a direct mechanical save, the user is flooded or unsafe, or the only available interpretation would be diagnosis-like, an origin story, or a certainty claim. Do not present schema, mode, belief, or pattern language as a verdict. Do not leave the user with interpretation alone; name the primary Forge record and ask one accuracy or consent question that moves toward saving the corrected formulation. For flashcard support, search existing flashcards first and show a matching message before adding coaching; create only after the cue or urge sentence and short message are clear, and postpone visual style, colors, tags, and optional links until the intervention sentence works. If the user corrects the hypothesis, revise it once and move toward the saveable record shape instead of asking for another broad story.",
|
|
5497
5502
|
mixedIntentSequencingRule: "When one user message combines several Forge jobs, identify the primary job and the order of operations before asking a follow-up. If a read changes the truth of a later write, read first: Movement timeline or box detail before correction, Workbench run or node detail before editing or publishing, and Life Force overview before changing durable assumptions when the current energy picture is uncertain. If the user asks to understand and save Psyche material plus create a support record, formulate the primary Psyche record first, then derive the flashcard, note, link, task, or habit from the accepted wording. If the user already gave the concrete action, do not ask a broad lane question; say the product sequence briefly and ask only for the missing span, wording, flow, run, node, weekday, or link that changes the next action.",
|
|
5498
5503
|
duplicateDisambiguationRule: "Before creating or updating a normal stored entity when duplicate risk is plausible, search the shared batch entity route by entity type, distinctive title or wording, owner scope, and linked content. If a likely existing record appears, ask whether the user wants to update that record, link to it, or save a separate new record; do not reopen the whole create flow. For Psyche records, a similar belief, pattern, mode, trigger report, value, or flashcard is a formulation choice, not a duplicate error: compare the sentence, cue/payoff/cost, protective job, episode, urge sentence, or message and let the user choose update, link, or new version. For wiki_page and calendar_connection, use dedicated search/list/read routes before creating another page or connection. For Movement, Life Force, and Workbench, use the dedicated read lanes instead of batch duplicate search.",
|
|
5499
5504
|
destructiveActionRule: "Before deleting, archiving, invalidating, overwriting, disconnecting, or substantially replacing a Forge record or specialized object, confirm the exact target and what should remain understandable. Prefer normal soft-delete for stored entities unless the user explicitly asks for permanent removal. For Psyche records, preserve therapeutic history by asking whether the old belief, pattern, mode, trigger report, value, or flashcard should be updated, linked as history, archived, or kept distinct; do not delete it just because a cleaner formulation exists. For Movement, distinguish user-defined overlay deletion from automatic-box invalidation and stay/trip/point deletion, and read the specific span first when the target is uncertain. For calendar connections, Workbench flows, wiki pages, and questionnaire instruments, ask what downstream sync, published output, backlinks, run history, or completed runs should remain understandable before deleting or replacing the saved object.",
|
|
5500
|
-
followUpQuestionRule: "After a substantive answer, do not restart the opener or jump to the next schema field. First say what became clearer in concrete language, then choose exactly one next lane: wording, boundary, placement, timing, route scope, link, hypothesis, or write confirmation. Ask the smallest question that would change the record shape, route choice, useful wording, timing, or
|
|
5501
|
-
antiDriftRule: "Avoid vague reflective filler and internal route language. Keep a private action trace: intent, entity or dedicated domain lane, exact read/write/run tool, required target identifiers, and the one missing detail that would change the action. Do not narrate that trace to the user. Replace phrases like 'that sounds important' with the specific stake you heard, and replace API nouns like surface, CRUD, payload, mutation path, route key, or endpoint with user-facing product nouns such as belief, pattern, note, wiki page, timeline, overlay, missing stay, weekday template, flow, run, node result, or published output. Ask one product-language question when the trace is unclear; with the user, ask about the real thing: the span, place, weekday, flow, run, node, belief sentence, parent record, or save confirmation. When reporting actions, say the product result first: saved the belief, corrected the missing stay, updated the weekday energy pattern, or read the failed node. Mention route keys, HTTP paths, payloads, or batch routes only for implementation debugging. If a question would only decorate the intake, skip it.",
|
|
5505
|
+
followUpQuestionRule: "After a substantive answer, do not restart the opener or jump to the next schema field. First say what became clearer in concrete language, then choose exactly one next lane: wording, boundary, placement, timing, route scope, link, hypothesis, or write confirmation. Run the no-question gate before every follow-up: ask only if the answer can change record type, accepted wording, hierarchy placement, owner/accountability, timing, route lane, target object, correction, link, verification read, run/publish/preserve action, or consent. Ask the smallest question that would change the record shape, route choice, useful wording, timing, links, or next action. Before asking, be able to name what a possible answer would change: save, update, review, link, schedule, correct, run, publish, preserve, enrich, open the UI, or stop. If nothing decision-relevant would change, stop asking, summarize the working record, and act with consent. If the question would only add warmth, completeness, optional metadata, or form polish, skip it.",
|
|
5506
|
+
antiDriftRule: "Avoid vague reflective filler and internal route language. Keep a private action trace: intent, entity or dedicated domain lane, exact read/write/run tool, required target identifiers, and the one missing detail that would change the action. Do not narrate that trace to the user. Replace phrases like 'that sounds important' with the specific stake you heard, and replace API nouns like surface, CRUD, payload, mutation path, route key, batch route, or endpoint with user-facing product nouns such as belief, pattern, note, wiki page, timeline, overlay, missing stay, weekday template, flow, run, node result, or published output. Ask one product-language question when the trace is unclear; with the user, ask about the real thing: the span, place, weekday, flow, run, node, belief sentence, parent record, or save confirmation. If you cannot yet name the product noun, ask one grounding question instead of adding reflective filler. When reporting actions, say the product result first: saved the belief, corrected the missing stay, updated the weekday energy pattern, or read the failed node. Mention route keys, HTTP paths, payloads, or batch routes only for implementation debugging. If a question would only decorate the intake, skip it.",
|
|
5502
5507
|
duplicateCheckRoute: "/api/v1/entities/search",
|
|
5503
5508
|
uiSuggestionRule: "offer_visual_ui_when_review_or_editing_would_be_easier",
|
|
5504
5509
|
browserFallbackRule: "Do not open the Forge UI or a browser just to create or update normal entities when the batch entity tools can do the job. Batch CRUD is the default for simple entities; avoid spamming the agent with a large one-route-per-entity mental model.",
|
|
@@ -5520,7 +5525,7 @@ function buildAgentOnboardingPayload(request) {
|
|
|
5520
5525
|
searchRule: "forge_search_entities accepts searches as an array. Search before create or update when duplicate risk exists.",
|
|
5521
5526
|
createRule: "Each create operation must include entityType and full data. entityType alone is not enough. This includes calendar_event, work_block_template, task_timebox, sleep_session, workout_session, preference CRUD entities, and questionnaire_instrument alongside the usual planning and Psyche entities.",
|
|
5522
5527
|
updateRule: "Each update operation must include entityType, id, and patch. For projects, lifecycle changes are status patches: active to restart, paused to suspend, completed to finish. Keep task and project scheduling rules on those same patch payloads. Official habit outcomes can also be logged through forge_update_entities by patching the habit with checkIn: { status, dateKey?, note?, description? } instead of route-hunting. Calendar-event updates still run downstream provider projection sync, and manual health-session field edits belong on the batch route by default rather than on the reflective review helpers.",
|
|
5523
|
-
specializedRouteToolRule: "forge_call_movement_route, forge_call_life_force_route, and forge_call_workbench_route expect { routeKey, pathParams?, query?, body? }. Choose routeKey from the tool schema or entityRouteModel.specializedDomainSurfaces, fill pathParams
|
|
5528
|
+
specializedRouteToolRule: "forge_call_movement_route, forge_call_life_force_route, and forge_call_workbench_route expect { routeKey, pathParams?, query?, body? }. Choose routeKey from the tool schema or entityRouteModel.specializedDomainSurfaces, fill every methodRoutes placeholder with pathParams using names such as id, weekday, slug, runId, nodeId, or pointId, use query for read filters and userIds, and use body only for POST, PATCH, or PUT route keys. Do not put required IDs or weekdays inside routeKey, query, or body when the published path has a placeholder. The Life Force overview route key maps to GET /api/v1/life-force; do not invent /api/v1/life-force/overview. Normal stored entities still use the shared batch entity tools.",
|
|
5524
5529
|
createExample: '{"operations":[{"entityType":"goal","data":{"title":"Create meaningfully"},"clientRef":"goal-create-1"},{"entityType":"goal","data":{"title":"Build a beautiful family"},"clientRef":"goal-create-2"}]}',
|
|
5525
5530
|
updateExample: '{"operations":[{"entityType":"project","id":"project_123","patch":{"status":"paused","schedulingRules":{"blockWorkBlockKinds":["main_activity"],"allowWorkBlockKinds":["secondary_activity"]}},"clientRef":"project-suspend-1"},{"entityType":"habit","id":"habit_456","patch":{"checkIn":{"status":"missed","note":"Resisted the urge after dinner.","description":"85 sec reset"}},"clientRef":"habit-check-in-1"}]}',
|
|
5526
5531
|
specializedRouteToolExample: '{"routeKey":"weekdayTemplate","pathParams":{"weekday":"monday"},"body":{"points":[{"hour":13,"freeAp":-4}]}}',
|
|
@@ -4137,6 +4137,8 @@ export function buildOpenApiDocument() {
|
|
|
4137
4137
|
"saveSuggestionPlacement",
|
|
4138
4138
|
"saveSuggestionTone",
|
|
4139
4139
|
"maxQuestionsPerTurn",
|
|
4140
|
+
"depthCalibrationRule",
|
|
4141
|
+
"operationLaneRule",
|
|
4140
4142
|
"psycheExplorationRule",
|
|
4141
4143
|
"specializedSurfaceRule",
|
|
4142
4144
|
"reviewShortcutRule",
|
|
@@ -4158,6 +4160,8 @@ export function buildOpenApiDocument() {
|
|
|
4158
4160
|
saveSuggestionPlacement: { type: "string" },
|
|
4159
4161
|
saveSuggestionTone: { type: "string" },
|
|
4160
4162
|
maxQuestionsPerTurn: { type: "integer" },
|
|
4163
|
+
depthCalibrationRule: { type: "string" },
|
|
4164
|
+
operationLaneRule: { type: "string" },
|
|
4161
4165
|
psycheExplorationRule: { type: "string" },
|
|
4162
4166
|
specializedSurfaceRule: { type: "string" },
|
|
4163
4167
|
reviewShortcutRule: { type: "string" },
|
package/openclaw.plugin.json
CHANGED
|
@@ -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.3.
|
|
5
|
+
"version": "0.3.15",
|
|
6
6
|
"activation": {
|
|
7
7
|
"onStartup": true,
|
|
8
8
|
"onCapabilities": [
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "forge-openclaw-plugin",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.15",
|
|
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": "Apache-2.0",
|
|
@@ -40,11 +40,11 @@
|
|
|
40
40
|
"./dist/openclaw/index.js"
|
|
41
41
|
],
|
|
42
42
|
"install": {
|
|
43
|
-
"minHostVersion": ">=2026.
|
|
43
|
+
"minHostVersion": ">=2026.6.9"
|
|
44
44
|
}
|
|
45
45
|
},
|
|
46
46
|
"peerDependencies": {
|
|
47
|
-
"openclaw": "2026.
|
|
47
|
+
"openclaw": "2026.6.9"
|
|
48
48
|
},
|
|
49
49
|
"dependencies": {
|
|
50
50
|
"@azure/msal-node": "^5.1.2",
|
|
@@ -57,6 +57,7 @@
|
|
|
57
57
|
"@fontsource-variable/sora": "^5.2.8",
|
|
58
58
|
"@fontsource/space-grotesk": "^5.2.10",
|
|
59
59
|
"@hookform/resolvers": "^5.1.1",
|
|
60
|
+
"@mariozechner/pi-agent-core": "^0.73.1",
|
|
60
61
|
"@mariozechner/pi-ai": "^0.66.1",
|
|
61
62
|
"@radix-ui/react-dialog": "^1.1.14",
|
|
62
63
|
"@reduxjs/toolkit": "^2.11.2",
|
|
@@ -80,7 +81,7 @@
|
|
|
80
81
|
"graphology-layout": "^0.6.1",
|
|
81
82
|
"graphology-layout-forceatlas2": "^0.10.1",
|
|
82
83
|
"lucide-react": "^0.525.0",
|
|
83
|
-
"node-ical": "^0.
|
|
84
|
+
"node-ical": "^0.26.1",
|
|
84
85
|
"qrcode": "^1.5.4",
|
|
85
86
|
"react": "^19.1.0",
|
|
86
87
|
"react-arborist": "^3.4.3",
|
|
@@ -105,6 +106,7 @@
|
|
|
105
106
|
"follow-redirects": "^1.16.0",
|
|
106
107
|
"hono": "^4.12.18",
|
|
107
108
|
"ip-address": "^10.2.0",
|
|
109
|
+
"markdown-it": "^14.2.0",
|
|
108
110
|
"ws": "^8.20.1",
|
|
109
111
|
"uuid": "^14.0.0"
|
|
110
112
|
},
|
package/server/index.js
CHANGED
|
@@ -7,7 +7,12 @@ const packageRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "
|
|
|
7
7
|
const repoRoot = path.resolve(packageRoot, "..");
|
|
8
8
|
const builtRuntimeEntry = path.join(packageRoot, "dist", "server", "server", "src", "index.js");
|
|
9
9
|
const devRuntimeEntry = path.join(repoRoot, "server", "src", "index.ts");
|
|
10
|
-
const devDataRootWrapper = path.join(
|
|
10
|
+
const devDataRootWrapper = path.join(
|
|
11
|
+
repoRoot,
|
|
12
|
+
"scripts",
|
|
13
|
+
"dev",
|
|
14
|
+
"with-openclaw-plugin-data-root.mjs"
|
|
15
|
+
);
|
|
11
16
|
const tsxCliEntry = path.join(repoRoot, "node_modules", "tsx", "dist", "cli.mjs");
|
|
12
17
|
const devModeFlag = (process.env.FORGE_OPENCLAW_DEV ?? "").trim().toLowerCase();
|
|
13
18
|
const useDevRuntime = devModeFlag === "1" || devModeFlag === "true" || devModeFlag === "yes";
|
|
@@ -103,12 +103,25 @@ any route-key or endpoint detail.
|
|
|
103
103
|
route-key-to-`METHOD /api/v1/...` source of truth when checking specialized
|
|
104
104
|
methods, especially POST aggregate reads such as Movement `selection` and DELETE
|
|
105
105
|
repair paths. When a route key's exact path contains placeholders such as `:id`,
|
|
106
|
-
`:weekday`, `:runId`, or `:
|
|
107
|
-
placeholder names exactly. Do not place IDs inside
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
guess a nearby
|
|
106
|
+
`:weekday`, `:slug`, `:runId`, `:nodeId`, or `:pointId`, pass those values in
|
|
107
|
+
`pathParams` using the placeholder names exactly. Do not place IDs inside
|
|
108
|
+
`routeKey`, `query`, or `body`, invent a raw route string, or ask the user to
|
|
109
|
+
choose an endpoint when the lane already selects one. If that schema and live
|
|
110
|
+
onboarding disagree, trust the live onboarding for the current call and treat the
|
|
111
|
+
disagreement as a Forge contract bug to fix, not as a reason to guess a nearby
|
|
112
|
+
route.
|
|
113
|
+
- If a specialized route-key tool is unavailable, stale, or missing the needed route
|
|
114
|
+
key, do not fall back to generic batch CRUD and do not invent a nearby raw path. Read
|
|
115
|
+
live onboarding, use the exact `methodRoutes` entry for the selected Movement, Life
|
|
116
|
+
Force, or Workbench lane, and cross-check OpenAPI only to confirm the same method
|
|
117
|
+
and path.
|
|
118
|
+
- Before every Movement, Life Force, or Workbench call, run a route-contract
|
|
119
|
+
handshake internally: select the product lane in plain language, verify the matching
|
|
120
|
+
`routeKey` against live onboarding `routeKeys` and `methodRoutes`, fill any
|
|
121
|
+
placeholders through `pathParams`, and ask the user only for the missing product
|
|
122
|
+
noun that fills the placeholder. If the contract is missing a lane the product
|
|
123
|
+
clearly supports, report a contract bug instead of silently using generic batch
|
|
124
|
+
CRUD or a nearby route.
|
|
112
125
|
|
|
113
126
|
Concrete route-key examples for internal use:
|
|
114
127
|
|
|
@@ -258,12 +271,24 @@ Write to Forge only with clear user consent. If the user is just thinking aloud,
|
|
|
258
271
|
Entity conversation rule:
|
|
259
272
|
|
|
260
273
|
- For all entity creation or update flows, first use [`entity_conversation_playbooks.md`](./entity_conversation_playbooks.md) to decide the next best question.
|
|
274
|
+
- Calibrate depth before deepening: choose quick capture, guided formulation,
|
|
275
|
+
review-first, or action-first. For quick capture, use the user's supplied wording,
|
|
276
|
+
ask only the one structural, accuracy, or consent detail that changes the write, and
|
|
277
|
+
do not force full exploration. For guided formulation, use active listening and
|
|
278
|
+
Psyche hypotheses when the user is trying to understand or name charged material.
|
|
279
|
+
For review-first, read before write-shaped questions. For action-first, act or ask
|
|
280
|
+
only for the missing target, span, weekday, flow, run, node, correction, or consent.
|
|
261
281
|
- Ask only for what is missing or unclear. Do not walk through every schema field.
|
|
262
282
|
- Before asking another question, run the playbook's minimum save-readiness
|
|
263
283
|
checkpoint: if accepted wording, meaningful body, route lane, target object or
|
|
264
284
|
time scope, and any ownership/placement that changes later use are already clear,
|
|
265
285
|
summarize once and write, read, run, or update instead of collecting optional
|
|
266
286
|
fields.
|
|
287
|
+
- Run the no-question gate before every follow-up: ask only if the answer can change
|
|
288
|
+
record type, accepted wording, hierarchy placement, owner/accountability, timing,
|
|
289
|
+
route lane, target object, correction, link, verification read, run/publish/preserve
|
|
290
|
+
action, or consent. If the question would only add warmth, completeness, optional
|
|
291
|
+
metadata, or form polish, skip it, summarize what is clear, and act or close.
|
|
267
292
|
- Treat partial answers as progress. Before another follow-up, identify what is
|
|
268
293
|
already usable: operation, entity or surface, target record or time span, working
|
|
269
294
|
wording, owner or placement, route lane, and consent. Ask only for the first missing
|
|
@@ -276,8 +301,14 @@ Entity conversation rule:
|
|
|
276
301
|
most directly supported by what was learned and ask only for the missing detail
|
|
277
302
|
that would permit that action. Do not hand the user a broad menu after the read has
|
|
278
303
|
already narrowed the work.
|
|
304
|
+
- Make the read's decision value explicit before any follow-up: what the read rules
|
|
305
|
+
in, what it rules out, and what one uncertainty remains. If no answer-changing
|
|
306
|
+
uncertainty remains, close cleanly instead of asking another question.
|
|
279
307
|
- Let each question have one job. Know what you are trying to clarify before you ask it.
|
|
280
|
-
- Before you ask, decide the exact missing thing you need and how that answer will
|
|
308
|
+
- Before you ask, decide the exact missing thing you need and how that answer will
|
|
309
|
+
help you save, update, review, link, schedule, correct, run, publish, preserve,
|
|
310
|
+
enrich, open the UI, or stop. If you cannot name what the user's answer would
|
|
311
|
+
change, summarize and act instead of asking.
|
|
281
312
|
- Prefer a progression of:
|
|
282
313
|
concrete example or intent -> working name -> purpose or meaning -> placement in Forge -> operational details -> linked context.
|
|
283
314
|
- Use those same playbooks for action-heavy non-Psyche flows such as `work_adjustment`, `preference_judgment`, `preference_signal`, and specialized `movement`, `life_force`, or `workbench` requests so the conversation starts from what the user is trying to understand, change, add, update, link, or run before you choose the route.
|
|
@@ -292,6 +323,14 @@ Entity conversation rule:
|
|
|
292
323
|
- When the operation is not already explicit, identify the job first:
|
|
293
324
|
add, update, review, compare, navigate, link, or run. Skip that meta question
|
|
294
325
|
when the action is already obvious from the user's wording.
|
|
326
|
+
- Keep the operation lane explicit across every entity family. Normal stored entities
|
|
327
|
+
can be added, updated, reviewed/navigated, linked, or placed; action workflows use
|
|
328
|
+
verbs such as start, continue, complete, adjust, judge, signal, publish, sync, or
|
|
329
|
+
observe; specialized CRUD uses lifecycle verbs; read models need a practical read
|
|
330
|
+
question and scope; Movement, Life Force, and Workbench use review, correct,
|
|
331
|
+
repair, run, inspect, publish, or preserve lanes through their dedicated route keys;
|
|
332
|
+
and Psyche entities need formulation before storage when the user wants
|
|
333
|
+
understanding rather than direct save.
|
|
295
334
|
- For emotionally meaningful non-Psyche records such as goals, habits, and notes, reflect the meaning before you ask for structure.
|
|
296
335
|
- When the user is vague, ask for one small concrete example, stake, or desired outcome before you ask them to name the record.
|
|
297
336
|
- When the user is clear, say what the record seems to be becoming and ask only for the last missing detail.
|
|
@@ -347,6 +386,10 @@ Psyche interview rule:
|
|
|
347
386
|
- Do not minimize functional analysis, trigger chains, behavior patterns, modes, beliefs, or schema themes. Once at least one concrete example is clear, offer one careful interpretive hypothesis when it would help the user understand the function, protection, cost, belief, mode, or schema theme.
|
|
348
387
|
- Phrase interpretive hypotheses as collaborative and testable, not as verdicts. A good hypothesis says what the reaction may be protecting, predicting, relieving, or costing, then asks whether that lands or needs correction.
|
|
349
388
|
- For Psyche hypotheses, reduce the formulation burden. After one concrete example, offer one tentative function, danger, protection, payoff, or cost hypothesis and ask one fit-or-correction question. Do not make the user prove the experience, list evidence, or design repair before the wording feels held.
|
|
389
|
+
- Use the Psyche hypothesis examples when one concrete episode, belief sentence,
|
|
390
|
+
behavior, or mode voice is visible and another broad question would make the user do
|
|
391
|
+
all the interpretation alone. Offer one testable formulation, ask one correction
|
|
392
|
+
question, and then bridge to the saveable record if it lands.
|
|
350
393
|
- Do not keep asking broad exploratory Psyche questions after the cue, meaning, protection, payoff, or cost is already visible. For `behavior_pattern`, `belief_entry`, `mode_profile`, `mode_guide_session`, and `trigger_report`, the next helpful move is usually one active formulation plus one correction question, not another passive reflection.
|
|
351
394
|
- Do not leave the user with interpretation alone. Once the hypothesis lands or is
|
|
352
395
|
corrected, name the primary Forge record it becomes and ask one accuracy or consent
|
|
@@ -374,6 +417,9 @@ Psyche interview rule:
|
|
|
374
417
|
trigger episode, value phrase, event kind, emotion signature, or flashcard message,
|
|
375
418
|
treat it as real data and ask one accuracy or consent question instead of reopening
|
|
376
419
|
origin, evidence, or repair.
|
|
420
|
+
- For direct Psyche saves, do not reopen origin, evidence, or repair when the user
|
|
421
|
+
already supplied usable wording and asked to save it. Reflect the wording, ask one
|
|
422
|
+
accuracy or consent question, and save when accepted.
|
|
377
423
|
- When the conversation reveals an adjacent entity such as a linked belief, mode, value, pattern, or note, name that gently and ask whether the user wants to map it too.
|
|
378
424
|
- If nuance matters, preserve it in a linked Markdown `note` instead of forcing every detail into normalized fields.
|
|
379
425
|
- 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.
|
|
@@ -438,7 +484,7 @@ Use these exact entity meanings when deciding what the user is describing.
|
|
|
438
484
|
|
|
439
485
|
`flashcard` is a small therapeutic reminder card. Use it when the user wants a sentence or short message that can be shown back during an urge, trigger, mode activation, belief activation, or values-based pivot. The message is the main content; title is optional and compact. Tags, trigger sentence, trigger situation, and Psyche links matter most for retrieval. Styling fields such as colors, typography, layout, visual tone, and image make the card easier to recognize but should come after the therapeutic sentence is clear.
|
|
440
486
|
|
|
441
|
-
When a user says something like "I feel the urge to drink" or "help me not do this", search existing `flashcard` records first with `forge_search_entities` using `entityTypes: ["flashcard"]` and the user's urge, trigger words, tags, and situation language. If a matching card exists, show the flashcard message first, then add brief psychotherapy-informed support around it: grounding, urge surfing, cognitive defusion, schema/mode-aware reflection, or a values pivot.
|
|
487
|
+
When a user says something like "I feel the urge to drink" or "help me not do this", search existing `flashcard` records first with `forge_search_entities` using `entityTypes: ["flashcard"]` and the user's urge, trigger words, tags, and situation language. If a matching card exists, show the flashcard message first, then add brief psychotherapy-informed support around it: grounding, urge surfing, cognitive defusion, schema/mode-aware reflection, or a values pivot. If no card fits and the user wants one, create only after the cue or urge sentence and the short message are clear; postpone visual style, colors, tags, and optional links until the intervention sentence works.
|
|
442
488
|
|
|
443
489
|
`trigger_report` is one specific emotionally meaningful episode described as what happened, what was felt, what was thought, what was done, what happened next, and what would help next time.
|
|
444
490
|
|
|
@@ -110,6 +110,29 @@ Forge correctly, and gather only the structure that still matters.
|
|
|
110
110
|
- When the record is already clear enough to save, save it instead of performing a
|
|
111
111
|
ceremonial extra question.
|
|
112
112
|
|
|
113
|
+
## Depth calibration
|
|
114
|
+
|
|
115
|
+
Use this before choosing how much to ask. The goal is to match the user's actual job,
|
|
116
|
+
not to make every entity feel equally deep.
|
|
117
|
+
|
|
118
|
+
- Quick capture: the user already gave usable wording and says "save this", "remember
|
|
119
|
+
this", "log this", or otherwise makes storage the job. Reflect the working shape
|
|
120
|
+
once, ask only the one structural, accuracy, or consent detail that changes the
|
|
121
|
+
write, and do not force a full exploration.
|
|
122
|
+
- Guided formulation: the user wants to understand, name, map, decide, or work
|
|
123
|
+
through unclear or charged material. Use active listening, one lane at a time, and
|
|
124
|
+
Psyche hypotheses when appropriate before saving.
|
|
125
|
+
- Review-first: the user wants to inspect, compare, navigate, or understand something
|
|
126
|
+
already in Forge. Read the relevant stored entity, overview, or specialized surface
|
|
127
|
+
before asking write-shaped questions.
|
|
128
|
+
- Action-first: the target task run, work adjustment, preference judgment or signal,
|
|
129
|
+
questionnaire run, Movement correction, Life Force signal/template, or Workbench
|
|
130
|
+
run/output is already clear. Act, or ask only for the missing target, span, weekday,
|
|
131
|
+
flow, run, node, correction, or consent.
|
|
132
|
+
- Do not downgrade psychologically meaningful material into quick capture when the
|
|
133
|
+
user is asking to understand it. Do not expand a simple storage request into therapy
|
|
134
|
+
or project planning when a concise save is enough.
|
|
135
|
+
|
|
113
136
|
## Plain-language rule
|
|
114
137
|
|
|
115
138
|
Keep API and architecture nouns inside your own reasoning. Do not ask the user about
|
|
@@ -160,6 +183,50 @@ choice is an internal classification step, not a user-facing menu.
|
|
|
160
183
|
- Once the lane is selected, use the exact route key internally and do not invent a
|
|
161
184
|
friendlier path.
|
|
162
185
|
|
|
186
|
+
## Dedicated surface route fallback
|
|
187
|
+
|
|
188
|
+
Use this when the adapter tool surface is missing, stale, or narrower than live Forge
|
|
189
|
+
onboarding.
|
|
190
|
+
|
|
191
|
+
- First prefer the route-key tools when they exist:
|
|
192
|
+
`forge_call_movement_route`, `forge_call_life_force_route`, or
|
|
193
|
+
`forge_call_workbench_route`.
|
|
194
|
+
- If a route-key tool is unavailable, stale, or lacks the needed route key, read live
|
|
195
|
+
onboarding and use the exact `methodRoutes` entry for the selected lane. Cross-check
|
|
196
|
+
OpenAPI only to confirm the same method and path.
|
|
197
|
+
- Do not fall back to generic batch CRUD for Movement, Life Force, or Workbench just
|
|
198
|
+
because a route-key tool is missing. They remain specialized domain surfaces.
|
|
199
|
+
- Do not invent a nearby raw path, put IDs into the route key, or ask the user to pick
|
|
200
|
+
an endpoint. Ask only for the missing product identifier or span that fills the
|
|
201
|
+
published path.
|
|
202
|
+
- Before calling a specialized route, check the selected `methodRoutes` entry for
|
|
203
|
+
placeholders such as `:id`, `:weekday`, `:slug`, `:runId`, `:nodeId`, or
|
|
204
|
+
`:pointId`. Every placeholder must be filled through `pathParams` with the same
|
|
205
|
+
name before the call; never hide one inside `query`, `body`, or `routeKey`.
|
|
206
|
+
- If a required placeholder is missing, ask for the product noun that fills it: the
|
|
207
|
+
saved place, movement box, trip, weekday, flow, slug, run, node, or trip point.
|
|
208
|
+
- If tool schema, live onboarding, and OpenAPI disagree, trust live onboarding for the
|
|
209
|
+
immediate call when it names the exact route, then treat the disagreement as a Forge
|
|
210
|
+
contract bug to fix.
|
|
211
|
+
|
|
212
|
+
## Specialized route-contract handshake
|
|
213
|
+
|
|
214
|
+
Use this before every Movement, Life Force, or Workbench call so the route path is
|
|
215
|
+
truthful without turning the user's turn into implementation talk.
|
|
216
|
+
|
|
217
|
+
- Select the product lane first in plain language: movement span or repair, energy
|
|
218
|
+
assumption or signal, saved flow/run/node/output, or published artifact.
|
|
219
|
+
- Then verify the matching `routeKey` against live onboarding `routeKeys` and
|
|
220
|
+
`methodRoutes`. The route key and method/path must come from that contract, not from
|
|
221
|
+
memory or a guessed URL.
|
|
222
|
+
- If `methodRoutes` contains placeholders, fill every placeholder through
|
|
223
|
+
`pathParams` with the exact placeholder name before the call. Ask the user only for
|
|
224
|
+
the missing product noun that fills the placeholder.
|
|
225
|
+
- Cross-check OpenAPI when you are debugging or when a route-key tool looks stale; do
|
|
226
|
+
not make the user choose between endpoint names.
|
|
227
|
+
- If the contract is missing a lane the product clearly supports, stop and report a
|
|
228
|
+
contract bug instead of silently using generic batch CRUD or a nearby route.
|
|
229
|
+
|
|
163
230
|
## Dedicated surface verification loop
|
|
164
231
|
|
|
165
232
|
Use this after a Movement, Life Force, or Workbench mutation or result-producing run.
|
|
@@ -226,6 +293,9 @@ worked.
|
|
|
226
293
|
answers the user's practical question and ask only for the missing detail that would
|
|
227
294
|
permit that action. Do not hand the user a broad menu after you just learned enough
|
|
228
295
|
to narrow the next move.
|
|
296
|
+
- Make the read's decision value explicit before any follow-up: what the read rules
|
|
297
|
+
in, what it rules out, and what one uncertainty remains. If there is no
|
|
298
|
+
answer-changing uncertainty, do not ask another question.
|
|
229
299
|
- For Movement, Life Force, Workbench, calendar, health, and operator overviews,
|
|
230
300
|
keep the follow-up anchored to the read result: the span that is missing, the
|
|
231
301
|
weekday curve that needs correction, the failed run or node, the overloaded day, or
|
|
@@ -483,6 +553,33 @@ Use this before you choose an API path or ask for more structure.
|
|
|
483
553
|
- For Movement, Life Force, and Workbench, use the lane
|
|
484
554
|
to choose the dedicated route family before you ask for lower-level details.
|
|
485
555
|
|
|
556
|
+
## Operation coverage checkpoint
|
|
557
|
+
|
|
558
|
+
Use this as a live handling and simulation check so every entity family is exercised
|
|
559
|
+
as real work, not only as a create form.
|
|
560
|
+
|
|
561
|
+
- Normal stored entities need four possible lanes in the agent's head: add a new
|
|
562
|
+
record, update an existing record, review or navigate existing records, and link or
|
|
563
|
+
place the record in Forge. Ask the lane only when the user's verb does not already
|
|
564
|
+
choose it.
|
|
565
|
+
- Action workflows need action verbs instead of CRUD verbs: start, continue, complete,
|
|
566
|
+
adjust, judge, signal, publish, sync, or observe. Once the action verb is clear,
|
|
567
|
+
ask only for the missing target, answer, comparison, minutes, or consent.
|
|
568
|
+
- Specialized CRUD surfaces need lifecycle verbs: create, read, update, sync,
|
|
569
|
+
reconnect, delete, or browse. For wiki pages, ask about the durable page or evidence
|
|
570
|
+
source; for calendar connections, ask about the provider workflow and lifecycle
|
|
571
|
+
action.
|
|
572
|
+
- Read-model surfaces need a practical read question plus scope. Do not ask
|
|
573
|
+
write-shaped questions until the read creates a concrete follow-up.
|
|
574
|
+
- Movement, Life Force, and Workbench need their dedicated operation lanes: review,
|
|
575
|
+
correct, repair, run, inspect, publish, or preserve. After the lane is clear, use
|
|
576
|
+
the exact dedicated route key internally and ask only for the span, place, weekday,
|
|
577
|
+
flow, run, node, output, correction, or preservation choice that is still missing.
|
|
578
|
+
- Psyche entities need a formulation lane before the storage lane when the user wants
|
|
579
|
+
understanding. Direct saves can move to one accuracy or consent question; guided
|
|
580
|
+
formulation should stay with one lived example, one hypothesis when useful, and one
|
|
581
|
+
corrected saveable shape.
|
|
582
|
+
|
|
486
583
|
## Route posture checkpoint
|
|
487
584
|
|
|
488
585
|
Use this quick split before the conversation gets too detailed.
|
|
@@ -666,9 +763,12 @@ of those things, stop asking, summarize the working record, and act with consent
|
|
|
666
763
|
|
|
667
764
|
Do not drift into vague reflection or internal route language. Replace "that sounds
|
|
668
765
|
important" with the specific stake you heard, and replace API words such as surface,
|
|
669
|
-
CRUD, payload, mutation path, or endpoint with product nouns
|
|
670
|
-
belief, pattern, note, wiki page, timeline, overlay,
|
|
671
|
-
node result, or published output.
|
|
766
|
+
CRUD, payload, mutation path, route key, batch route, or endpoint with product nouns
|
|
767
|
+
the user recognizes: belief, pattern, note, wiki page, timeline, overlay, missing
|
|
768
|
+
stay, weekday template, flow, run, node result, or published output. If you cannot
|
|
769
|
+
name the product noun yet, ask one grounding question about the real span, place,
|
|
770
|
+
weekday, flow, run, node, belief sentence, parent record, or save confirmation
|
|
771
|
+
instead of adding reflective filler.
|
|
672
772
|
|
|
673
773
|
## Steering moves
|
|
674
774
|
|
|
@@ -754,8 +854,10 @@ Use this quick internal check before every follow-up question.
|
|
|
754
854
|
operational detail?
|
|
755
855
|
3. Does it affect the API posture: batch CRUD, specialized CRUD, action workflow, or
|
|
756
856
|
specialized domain route?
|
|
757
|
-
4. What
|
|
758
|
-
|
|
857
|
+
4. What concrete action would a possible answer enable: save, update, review, link,
|
|
858
|
+
schedule, correct, run, publish, preserve, or stop?
|
|
859
|
+
5. What is the smallest question that would answer that unknown?
|
|
860
|
+
6. If the user already gave enough to act, stop asking and move to a short summary or
|
|
759
861
|
the write.
|
|
760
862
|
|
|
761
863
|
Useful calibration heuristics:
|
|
@@ -772,6 +874,38 @@ Useful calibration heuristics:
|
|
|
772
874
|
skip it.
|
|
773
875
|
- If the next question would not change the API path, write shape, wording, timing, or
|
|
774
876
|
useful links, skip it.
|
|
877
|
+
- If you cannot say what the user's answer would change, do not ask the question.
|
|
878
|
+
Summarize what is already clear, take the read/write/run action, or close cleanly.
|
|
879
|
+
- For review-first work, the follow-up must point to one action enabled by the read:
|
|
880
|
+
no change, save, update, correct, link, schedule, run, publish, preserve, enrich, or
|
|
881
|
+
open the UI. Do not ask a generic "what do you want to do with this?" after the read
|
|
882
|
+
already narrowed the practical next move.
|
|
883
|
+
- For Movement, Life Force, and Workbench, the same rule applies through the product
|
|
884
|
+
object: missing span, place boundary, weekday curve, profile assumption, flow, run,
|
|
885
|
+
node, output, or preservation choice.
|
|
886
|
+
|
|
887
|
+
## No-question gate
|
|
888
|
+
|
|
889
|
+
Use this before every follow-up, especially after partial answers, reads, writes,
|
|
890
|
+
repairs, and Psyche-adjacent material. A polished extra question is still a bad
|
|
891
|
+
question when it cannot change the next action.
|
|
892
|
+
|
|
893
|
+
- Ask only if the answer can change one of these: record type, accepted wording,
|
|
894
|
+
hierarchy placement, owner/accountability, timing, route lane, target object,
|
|
895
|
+
correction, link, verification read, run/publish/preserve action, or consent.
|
|
896
|
+
- Do not ask for optional tags, colors, priority, assignees, dates, aliases, visual
|
|
897
|
+
style, or related links when the user already gave enough to save, read, run,
|
|
898
|
+
correct, or close.
|
|
899
|
+
- If the next question would only make the conversation feel warmer, more complete, or
|
|
900
|
+
more like a form, skip it. Summarize what is clear and act, or close cleanly.
|
|
901
|
+
- For review-first work, answer the practical question first. Ask another question
|
|
902
|
+
only when the read exposes an answer-changing uncertainty or a concrete action the
|
|
903
|
+
user has not yet authorized.
|
|
904
|
+
- For specialized domains, do not ask a reflective "why" after the route lane and
|
|
905
|
+
target are already known; ask only for the span, place, weekday, flow, run, node,
|
|
906
|
+
output, correction, or preservation choice that permits the action.
|
|
907
|
+
- For Psyche-adjacent work, do not keep exploring once the user has accepted a
|
|
908
|
+
formulation. Ask one accuracy or consent question, then save or stop.
|
|
775
909
|
|
|
776
910
|
## Abstract And Reusable Record Moves
|
|
777
911
|
|
|
@@ -2009,6 +2143,10 @@ Direct action rules:
|
|
|
2009
2143
|
- Treat day, month, all-time, timeline, trip detail, and selection as internal read
|
|
2010
2144
|
lanes. With the user, ask for the useful time window, place, selected span, stay, or
|
|
2011
2145
|
trip instead of listing route choices.
|
|
2146
|
+
- For route keys with placeholders, identify the product object before calling:
|
|
2147
|
+
`boxDetail`, `tripDetail`, `placeUpdate`, `userBoxUpdate`, `userBoxDelete`,
|
|
2148
|
+
`automaticBoxInvalidate`, `stayUpdate`, `stayDelete`, `tripUpdate`, `tripDelete`,
|
|
2149
|
+
`tripPointUpdate`, and `tripPointDelete` all need exact saved IDs in `pathParams`.
|
|
2012
2150
|
- Treat settings as a separate movement lane for passive capture, publish mode, and
|
|
2013
2151
|
retention behavior. Ask what operating behavior should change instead of routing it
|
|
2014
2152
|
through a place, stay, or trip edit.
|
|
@@ -2157,6 +2295,8 @@ Direct action rules:
|
|
|
2157
2295
|
`GET /api/v1/life-force`. Do not invent `/api/v1/life-force/overview`.
|
|
2158
2296
|
- If the user is describing a durable baseline such as work capacity, recovery style,
|
|
2159
2297
|
or action-point assumptions, patch the profile instead of logging a fatigue signal.
|
|
2298
|
+
- For the weekday-template route, fill `pathParams.weekday` from the real weekday name
|
|
2299
|
+
or number before sending the update; do not bury the weekday only in the body.
|
|
2160
2300
|
- If the user is describing a repeatable weekday rhythm, update that weekday template
|
|
2161
2301
|
instead of treating it as a one-off right-now feeling.
|
|
2162
2302
|
- If the user is describing how one weekday should usually feel, update that weekday
|
|
@@ -2261,6 +2401,11 @@ Direct action rules:
|
|
|
2261
2401
|
|
|
2262
2402
|
- If the user needs the stable public contract of a flow, prefer the flow detail or
|
|
2263
2403
|
published-output routes before a run-history read.
|
|
2404
|
+
- For Workbench route keys with placeholders, identify the saved flow, slug, run, and
|
|
2405
|
+
node explicitly before calling. `flowDetail`, `flowById`, `flowBySlug`,
|
|
2406
|
+
`publishedOutput`, `runHistory`, `runs`, `runDetail`, `runNodes`, `nodeResult`,
|
|
2407
|
+
`latestNodeOutput`, `updateFlow`, `deleteFlow`, `runFlow`, and `chatFlow` all
|
|
2408
|
+
depend on exact `pathParams`.
|
|
2264
2409
|
- Treat saved-flow catalog, box catalog, run history, run detail, node result, latest
|
|
2265
2410
|
node output, and published output as internal read lanes. With the user, ask whether
|
|
2266
2411
|
they need the saved flow, its input contract, one run, one node, or the public
|