u-foo 3.0.13 → 3.0.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.
@@ -0,0 +1,76 @@
1
+ ---
2
+ name: ubus-poll
3
+ description: |
4
+ Explicitly start a resident ufoo bus stream in an agent host that has been
5
+ configured to deliver streaming background-task output. Install by name only.
6
+ ---
7
+
8
+ # /ubus-poll - Resident Bus Stream
9
+
10
+ This is an opt-in session-start skill. Run it only in a host where a human has
11
+ configured this fallback. Do not install or invoke it for Codex CLI, Claude
12
+ Code CLI, Agy, Kimi, or native ucode; those runtimes already have their own
13
+ ufoo delivery path.
14
+
15
+ ## Start once per agent session
16
+
17
+ Reuse the provisioned subscriber identity. Never create a second identity just
18
+ for the poll process.
19
+
20
+ ```bash
21
+ SUBSCRIBER="${UFOO_SUBSCRIBER_ID:-}"
22
+ test -n "$SUBSCRIBER" || {
23
+ echo "ubus-poll requires a provisioned UFOO_SUBSCRIBER_ID"
24
+ exit 1
25
+ }
26
+ ```
27
+
28
+ Identity provisioning is a host/human setup step. Do not guess an agent type,
29
+ call bare `ufoo bus join`, or borrow the workspace's current subscriber.
30
+
31
+ Use the agent host's **streaming background-task** facility to start:
32
+
33
+ ```bash
34
+ ufoo bus poll "$SUBSCRIBER" --follow --interval 2
35
+ ```
36
+
37
+ The command must remain owned by that facility. Do not use `nohup`, shell `&`,
38
+ or an OS-detached daemon: those routes can put output in a log that never
39
+ reaches the agent. The command rejects a second resident poll for the same
40
+ subscriber.
41
+
42
+ The poll is deliberately queue-read-only. It emits current pending events at
43
+ startup, waits for that batch to be acknowledged, then emits the next pending
44
+ batch. It does not ack, claim, inject, or clear messages itself.
45
+
46
+ ## When background output arrives
47
+
48
+ For every `[ufoo]<from:...>` event:
49
+
50
+ 1. Read `Content.message` and execute actionable work.
51
+ 2. After handling the emitted batch, run the exact `ack --through <seq>`
52
+ command printed by the poll stream. For example:
53
+
54
+ ```bash
55
+ ufoo bus ack "$SUBSCRIBER" --through 42
56
+ ```
57
+
58
+ `--through` preserves any later message that was not in the displayed batch.
59
+
60
+ 3. Reply to the sender only for a requested result, an answer, or information
61
+ they need to continue:
62
+
63
+ ```bash
64
+ ufoo bus send "<sender-id>" "<substantive result>"
65
+ ```
66
+
67
+ Ack-only messages, greetings, and thanks need no reply.
68
+
69
+ After sending, do not poll, sleep, or wait for a reply. Keep working; this
70
+ resident stream will emit any follow-up.
71
+
72
+ ## Host requirement
73
+
74
+ This flow works only when the agent host forwards incremental output from a
75
+ still-running background task into the agent session. If it only returns output
76
+ after process exit, use an explicitly invoked `/ubus` instead.
package/README.md CHANGED
@@ -185,6 +185,11 @@ symlink; edit project instructions in `AGENTS.md`.
185
185
  Before a project has been initialized, the equivalent CLI form is also useful:
186
186
  `ufoo init --targets context,bus`.
187
187
 
188
+ The default agent skill set is intentionally limited to `ufoo`, `ufoo-bus`,
189
+ `ufoo-context`, and `ufoo-online`. They are installed only as skills, not as a
190
+ second command catalog. Initialization and unified status are handled by
191
+ `ufoo`.
192
+
188
193
  ### Event Bus
189
194
 
190
195
  ```text
@@ -199,6 +204,23 @@ Use `/bus status` to find the real subscriber ID or resolvable nickname
199
204
  before sending. Agents should handle pending work, reply to the sender, and
200
205
  acknowledge their queue.
201
206
 
207
+ Agent hosts that cannot receive ufoo prompt injection can opt into a resident,
208
+ queue-read-only bus stream:
209
+
210
+ ```bash
211
+ ufoo skills list --optional
212
+ ufoo skills install ubus-poll --target /path/to/that/agent/skills
213
+ ufoo bus poll "$UFOO_SUBSCRIBER_ID" --follow --interval 2
214
+ ```
215
+
216
+ Run the final command through that host's streaming background-task facility.
217
+ It prints newly observed pending events but never claims or acknowledges them;
218
+ the agent runs the printed `ufoo bus ack --through <seq>` command only after
219
+ handling the emitted batch, preserving later arrivals. The fallback is not
220
+ installed by postinstall or `skills install all`, and follow mode refuses Codex
221
+ CLI, Claude Code CLI, Agy, Kimi, and native ucode subscriber types so their
222
+ existing delivery paths remain untouched.
223
+
202
224
  ### Context, Memory, History, Reports
203
225
 
204
226
  Inside chat:
package/README.zh-CN.md CHANGED
@@ -180,6 +180,10 @@ ufoo -g
180
180
 
181
181
  项目尚未初始化时,也可以先在外部执行等价 CLI:`ufoo init --targets context,bus`。
182
182
 
183
+ 默认 Agent skill 有意精简为 `ufoo`、`ufoo-bus`、`ufoo-context` 和
184
+ `ufoo-online`。它们只作为 skill 安装,不再生成一份 command 目录,
185
+ 避免宿主显示两个入口;初始化和统一状态统一由 `ufoo` 处理。
186
+
183
187
  ### 事件总线
184
188
 
185
189
  ```text
@@ -193,6 +197,22 @@ ufoo -g
193
197
  发送消息前,先用 `/bus status` 查看真实 subscriber ID 或可解析昵称。
194
198
  Agent 应处理 pending work、回复发送方,并 ack 自己的队列。
195
199
 
200
+ 无法接收 ufoo prompt 注入的 Agent host 可以显式启用常驻、队列只读的
201
+ bus 消息流:
202
+
203
+ ```bash
204
+ ufoo skills list --optional
205
+ ufoo skills install ubus-poll --target /path/to/that/agent/skills
206
+ ufoo bus poll "$UFOO_SUBSCRIBER_ID" --follow --interval 2
207
+ ```
208
+
209
+ 最后一条命令必须由该 host 的流式后台任务能力托管。它只输出新观察到的
210
+ pending event,不 claim、不 ack;Agent 处理完输出批次后,再执行输出中
211
+ 给出的 `ufoo bus ack --through <seq>`,以保留稍后到达的消息。
212
+ 这个 fallback 不会被 postinstall 或 `skills install all` 安装,而且
213
+ follow 模式会拒绝 Codex CLI、Claude Code CLI、Agy、Kimi 和原生 ucode
214
+ 的 subscriber 类型,确保其现有投递链路不受影响。
215
+
196
216
  ### Context、Memory、History、Report
197
217
 
198
218
  在 chat 内:
@@ -1,219 +1,96 @@
1
1
  ---
2
2
  name: ufoo
3
- description: |
4
- Unified ufoo agent protocol: context decisions, event bus, and initialization.
5
- Use when: (1) input starts with "/ufoo" or "$ufoo", (2) agent session startup, (3) any ufoo-related operation.
6
- Combines uctx (decisions), ubus (messaging), and uinit (initialization).
3
+ description: >-
4
+ Coordinate a ufoo workspace across context decisions, durable memory, event-bus
5
+ delivery, status, and initialization. Use at the start of an agent session in
6
+ a ufoo project, or when asked to initialize, inspect, or coordinate the unified
7
+ ufoo protocol.
7
8
  ---
8
9
 
9
- # ufoo — Unified Agent Protocol
10
+ # ufoo
10
11
 
11
- ufoo is the multi-agent coordination layer. It provides four capabilities:
12
+ Apply the unified workspace protocol. Use `$ufoo-bus`, `$ufoo-context`, or
13
+ `$ufoo-online` when the task needs the focused workflow.
12
14
 
13
- 1. **Context Decisions** — Sparse log of major plan-level choices shared across agents
14
- 2. **Shared Memory** — Durable, low-noise project facts shared across agents
15
- 3. **Event Bus** — Inter-agent messaging
16
- 4. **Initialization** — Project setup for ufoo workspace state
15
+ ## Synchronize workspace state
17
16
 
18
- ## 1. Context Decisions (uctx)
17
+ 1. Read open decisions before related work:
19
18
 
20
- ### When to Record
19
+ ```bash
20
+ ufoo ctx decisions -s open
21
+ ```
21
22
 
22
- **"Only record decisions that matter beyond this session."**
23
+ 2. Read each relevant decision fully. Follow unresolved implications; never
24
+ resolve a decision from its title alone.
25
+ 3. Consume relevant shared memory before writing new memory.
26
+ 4. Keep the default as no new decision and no new memory entry.
23
27
 
24
- The default is **no new decision**. Record one only for important, plan-level knowledge that other agents or your future self will need.
28
+ ## Handle injected messages
25
29
 
26
- - **Always record**: architectural choices, plan-level decisions with multiple options, cross-agent coordination decisions, trade-off analysis where alternatives were considered and rejected
27
- - **Also record**: design patterns that set precedent, integration contracts between systems, decisions that constrain future work
28
- - **Do NOT record**: routine bug fixes, simple implementation details, trivial observations, generic planning/evaluation/recommendation requests, or findings that only matter within the current task
29
- - **Prefer shared memory**: durable project facts and long-lived factual constraints belong in shared memory, not decisions
30
- - **Write the decision BEFORE acting on it** — but only after the high bar above is clearly met
31
- - **Rule of thumb**: if another agent would not need this as a future constraint, do not write a decision
30
+ Treat these prompt prefixes as work inputs:
32
31
 
33
- ### Commands
32
+ - `[ufoo]<from:id(nickname)>` — event-bus delivery from another agent.
33
+ - `[manual]<to:id(nickname)>` — manual work directed to this agent.
34
34
 
35
- ```bash
36
- ufoo ctx decisions -l # List all decisions
37
- ufoo ctx decisions -s open # Check open decisions
38
- ufoo ctx decisions -n 1 # Show latest decision
39
- ufoo ctx decisions new "Title" # Create new decision
40
- ```
41
-
42
- ### Decision Format
43
-
44
- Decisions live at: `.ufoo/context/decisions/`
45
-
46
- ```yaml
47
- ---
48
- status: open
49
- ---
50
- # DECISION NNNN: <Title>
51
-
52
- Date: YYYY-MM-DD
53
- Author: <agent>
54
-
55
- Context:
56
- What led to this decision?
57
-
58
- Decision:
59
- What is now considered true?
60
-
61
- Implications:
62
- What must follow from this?
63
- ```
64
-
65
- ### Handling Open Decisions
66
-
67
- 1. **Read and understand** — sync other agents' knowledge
68
- 2. **Check if action needed** — does it require implementation?
69
- 3. **Execute if needed** — do the work
70
- 4. **Resolve** — update frontmatter: `status: resolved`, `resolved_by:`, `resolved_at:`
71
-
72
- **NEVER resolve blindly.** Reading the title is not enough.
73
-
74
- ### Read-First Rule
75
-
76
- Shared context is **read-first**, not write-only:
77
-
78
- 1. At session start or before related work, read open decisions first.
79
- 2. Do not create a new decision just to persist ordinary work state.
80
- 3. Consume shared memory via prompt prefix / `recall` / `search_memory` before writing new memory.
81
-
82
- ---
83
-
84
- ## 2. Shared Memory
85
-
86
- Shared memory records durable project facts only. It is not a scratchpad, progress log, user-preference store, or replacement for decisions.
87
-
88
- ### When to Record
35
+ For each received bus task:
89
36
 
90
- - **Record**: permanent project invariants, external ownership facts, integration contracts, long-lived process constraints
91
- - **Do NOT record**: current task status, transient observations, "today/current/recent" facts, agent feedback, routine findings, or anything likely to expire
92
- - **Read first**: if memory may already exist, use `recall` / `search_memory` before `remember` or `edit_memory`
93
- - **Prefer edit over duplicate**: update an existing memory when the fact already exists but wording changed
37
+ 1. Execute it immediately within the current authority.
38
+ 2. Acknowledge it only after handling:
94
39
 
95
- ### Commands
40
+ ```bash
41
+ ufoo bus ack "$UFOO_SUBSCRIBER_ID"
42
+ ```
96
43
 
97
- ```bash
98
- ufoo memory add "Title" --body "Durable fact body" --tags infra,billing
99
- ufoo memory list [--tag infra] [--all]
100
- ufoo memory show mem-0001
101
- ufoo memory edit mem-0001
102
- ufoo memory forget mem-0001
103
- ufoo memory rebuild-index
104
- ufoo memory audit mem-0001
105
- ```
106
-
107
- ### Agent Tools
108
-
109
- - `remember` — write a new durable memory fact
110
- - `recall` — read memory by id or tags
111
- - `search_memory` — search memory before writing or when more context is needed
112
- - `search_history` — search local Claude/Codex session history as redacted evidence
113
- - `edit_memory` — directly update any existing memory, with optional `expected_updated_at`
114
- - `forget` — archive an obsolete or polluted memory entry
115
-
116
- ---
44
+ 3. Reply only with a requested answer, delegated result, or fact the sender
45
+ needs to continue. Do not reply with greetings or bare acknowledgements.
46
+ 4. Emit a concise runtime report for delegated work:
117
47
 
118
- ## 3. Event Bus (ubus)
48
+ ```bash
49
+ ufoo report done "<summary>" --agent "$UFOO_SUBSCRIBER_ID"
50
+ ```
119
51
 
120
- ### Delivery Rule
52
+ After sending or broadcasting a message, continue the current task. Do not
53
+ poll, invoke a bus-check skill, sleep, or wait for a reply; follow-up messages
54
+ are injected automatically.
121
55
 
122
- After `ufoo bus send` or `ufoo bus broadcast`, do not run
123
- `ufoo bus check`, invoke `/ubus`, sleep, or wait for a reply. Continue the
124
- current task. Any follow-up message will be automatically injected into your
125
- prompt/session.
56
+ ## Preserve shared knowledge
126
57
 
127
- When `/ubus` is explicitly requested, follow its pending-message flow
128
- immediately. Do not invoke it merely to wait for a reply to a message you sent.
129
-
130
- ### Commands
58
+ Record a decision only for architecture, meaningful trade-offs, cross-agent
59
+ contracts, or precedent that constrains future work:
131
60
 
132
61
  ```bash
133
- ufoo bus check "$UFOO_SUBSCRIBER_ID" # Used by an explicit /ubus request
134
- ufoo bus ack "$UFOO_SUBSCRIBER_ID" # Acknowledge after handling
135
- ufoo bus send "<target>" "<message>" # Send message
136
- ufoo bus broadcast "<message>" # Broadcast to all
137
- ufoo bus status # Show bus status
62
+ ufoo ctx decisions new "<title>"
138
63
  ```
139
64
 
140
- ### Runtime Report (Unified for assistant/ucodex/uclaude)
141
-
142
- Use the same report contract for runtime progress sync:
65
+ Store only durable project facts in shared memory:
143
66
 
144
67
  ```bash
145
- ufoo report start "<task>" --task <id> --agent "$UFOO_SUBSCRIBER_ID" --scope public
146
- ufoo report progress "<detail>" --task <id> --agent "$UFOO_SUBSCRIBER_ID" --scope public
147
- ufoo report done "<summary>" --task <id> --agent "$UFOO_SUBSCRIBER_ID" --scope public
148
- ufoo report error "<reason>" --task <id> --agent "$UFOO_SUBSCRIBER_ID" --scope public
68
+ ufoo memory add "<title>" --body "<durable fact>" --tags <tags>
69
+ ufoo memory list
70
+ ufoo memory show <memory-id>
71
+ ufoo memory edit <memory-id>
149
72
  ```
150
73
 
151
- Notes:
152
- - Use `--scope private` for helper-internal reports (assistant-like private channel).
153
- - `--controller ufoo-agent` routes report events to the ufoo-agent private inbox.
154
-
155
- ### Target Resolution
156
-
157
- - Exact ID: `claude-code:abc123`
158
- - Nickname: `architect`
159
- - Type: `codex` (all codex agents)
160
- - Wildcard: `*` (broadcast)
161
-
162
- ### CRITICAL: When a message is received
163
-
164
- **EXECUTE tasks immediately. Do NOT ask the user.**
74
+ Do not use decisions or memory as progress logs, scratchpads, or transient
75
+ status storage.
165
76
 
166
- 1. Read the available `[ufoo]<from:...>` message.
167
- 2. Execute each task.
168
- 3. **Always ack after handling**: `ufoo bus ack $UFOO_SUBSCRIBER_ID`
169
- 4. Reply only when substantive — send `ufoo bus send "<publisher>" "<result>"` only if:
170
- - The sender asked a question → reply with the answer
171
- - The sender delegated a task → reply with the result / artifact
172
- - You found something the sender needs to proceed
173
- Do NOT reply with greetings, acknowledgments, or emoji alone — those create infinite reply loops.
174
- 5. **Report** if the work arrived from `[manual]<to:...>` or `[ufoo]<from:...>`:
175
- `ufoo report progress|done|error "<short summary>"`
77
+ ## Inspect unified status
176
78
 
177
- If `/ubus` is explicitly requested, run
178
- `ufoo bus check "$UFOO_SUBSCRIBER_ID"` and then follow the same execute → ack
179
- flow.
79
+ Run:
180
80
 
181
- ---
182
-
183
- ## 4. Message Format
184
-
185
- Bus messages use a unified prefix format to distinguish sources:
186
-
187
- - `[ufoo]<from:id(nickname)>` — message from another agent via the bus
188
- - `[manual]<to:id(nickname)>` — manual user input directed at an agent
189
-
190
- When you see `[ufoo]<from:xxx>` in your prompt, it's an inter-agent message — `xxx` is the sender's ID and nickname.
191
- When you see `[manual]<to:xxx>`, it's a direct user instruction to an agent — `xxx` is the recipient's ID and nickname.
192
-
193
- ---
194
-
195
- ## 5. Team Activity (Input History)
196
-
197
- Your bootstrap prompt may include a `## Team Activity` section showing recent prompts sent to all agents. Use this to understand:
198
- - What each agent is currently working on
199
- - Who sent what tasks to whom
200
- - The overall coordination flow
201
-
202
- Commands:
203
81
  ```bash
204
- ufoo history build # Rebuild timeline from bus + session data
205
- ufoo history show [limit] # Show recent entries
206
- ufoo history prompt [limit] # Render as injectable prompt block
82
+ ufoo status
207
83
  ```
208
84
 
209
- ---
85
+ Summarize unread messages, open decisions, and any immediate action needed.
210
86
 
211
- ## 6. Initialization (uinit)
87
+ ## Initialize workspace state
212
88
 
213
- Trigger: `/uinit` or `/ufoo init`
89
+ Initialize only the required targets:
214
90
 
215
91
  ```bash
216
- ufoo init --targets context,bus --project $(pwd)
92
+ ufoo init --targets context,bus --project "$(pwd)"
217
93
  ```
218
94
 
219
- After init, auto-join bus if enabled.
95
+ Reuse an existing subscriber identity after initialization. Join the bus only
96
+ when no current identity can be recovered.
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: "ufoo"
3
+ short_description: "Coordinate ufoo workspace state and agent protocol"
4
+ default_prompt: "Use $ufoo to synchronize and coordinate this ufoo workspace."
@@ -0,0 +1,92 @@
1
+ ---
2
+ name: ufoo-bus
3
+ description: >-
4
+ Operate the local ufoo event bus: check and acknowledge pending messages,
5
+ identify or join a subscriber, inspect status, resolve targets, send results,
6
+ and broadcast updates. Use when asked to handle bus messages or perform local
7
+ agent-to-agent routing.
8
+ ---
9
+
10
+ # ufoo bus
11
+
12
+ Operate the project-local event bus without creating reply loops or competing
13
+ with automatic prompt injection.
14
+
15
+ ## Establish the subscriber
16
+
17
+ Verify `.ufoo/bus/` exists. If it does not, initialize it:
18
+
19
+ ```bash
20
+ ufoo init --targets bus --project "$(pwd)"
21
+ ```
22
+
23
+ Prefer `UFOO_SUBSCRIBER_ID`, then recover the current identity:
24
+
25
+ ```bash
26
+ ufoo bus whoami
27
+ ```
28
+
29
+ Run `ufoo bus join` only when neither source yields an identity. Rejoining can
30
+ cause identity drift.
31
+
32
+ ## Handle pending messages
33
+
34
+ Check messages only when this skill was invoked to do so:
35
+
36
+ ```bash
37
+ ufoo bus check "$UFOO_SUBSCRIBER_ID"
38
+ ```
39
+
40
+ For every pending batch:
41
+
42
+ 1. Read the sender from `[ufoo]<from:id(nickname)>`.
43
+ 2. Execute each actionable task.
44
+ 3. Acknowledge after handling:
45
+
46
+ ```bash
47
+ ufoo bus ack "$UFOO_SUBSCRIBER_ID"
48
+ ```
49
+
50
+ When a batch supplies a final sequence, prefer
51
+ `ufoo bus ack "$UFOO_SUBSCRIBER_ID" --through <seq>` so later arrivals stay
52
+ pending.
53
+ 4. Reply only when the sender requested an answer, delegated work whose result
54
+ is needed, or needs a discovered blocker or fact.
55
+
56
+ Do not reply to greetings, thanks, `ok`, `收到`, or other acknowledgement-only
57
+ messages. Acknowledge them locally and stop.
58
+
59
+ ## Route messages
60
+
61
+ Inspect identities and nicknames before sending:
62
+
63
+ ```bash
64
+ ufoo bus status
65
+ ufoo bus resolve "$UFOO_SUBSCRIBER_ID" <target>
66
+ ```
67
+
68
+ Send to an exact subscriber ID, unique nickname, or agent type:
69
+
70
+ ```bash
71
+ ufoo bus send "<target>" "<substantive message>"
72
+ ufoo bus broadcast "<substantive message>"
73
+ ```
74
+
75
+ Target resolution order is exact ID, nickname, agent type, then `*`.
76
+
77
+ After sending or broadcasting, continue the current task. Do not run
78
+ `ufoo bus check`, poll, sleep, or wait for a reply. Follow-up messages are
79
+ injected into the prompt/session automatically.
80
+
81
+ ## Report delegated work
82
+
83
+ Use the shared report contract when bus work represents a task:
84
+
85
+ ```bash
86
+ ufoo report start "<task>" --task <id> --agent "$UFOO_SUBSCRIBER_ID"
87
+ ufoo report progress "<detail>" --task <id> --agent "$UFOO_SUBSCRIBER_ID"
88
+ ufoo report done "<summary>" --task <id> --agent "$UFOO_SUBSCRIBER_ID"
89
+ ufoo report error "<reason>" --task <id> --agent "$UFOO_SUBSCRIBER_ID"
90
+ ```
91
+
92
+ Use `--scope private` only for helper-internal reports.
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: "ufoo bus"
3
+ short_description: "Handle local ufoo bus messages and agent routing"
4
+ default_prompt: "Use $ufoo-bus to check and handle pending event-bus work."
@@ -0,0 +1,101 @@
1
+ ---
2
+ name: ufoo-context
3
+ description: >-
4
+ Synchronize ufoo context decisions and durable shared memory. Use when
5
+ starting work in a ufoo project, reviewing open architectural decisions,
6
+ recording a consequential decision, recalling durable project facts, or
7
+ maintaining the shared context index.
8
+ ---
9
+
10
+ # ufoo context
11
+
12
+ Read shared context before writing it. Keep decisions sparse and memory
13
+ durable.
14
+
15
+ ## Read decisions first
16
+
17
+ List open decisions:
18
+
19
+ ```bash
20
+ ufoo ctx decisions -s open
21
+ ```
22
+
23
+ Read each relevant decision fully. Determine whether its implications require
24
+ work, verification, or no action. Never resolve a decision from its title.
25
+
26
+ Use these commands for broader inspection:
27
+
28
+ ```bash
29
+ ufoo ctx decisions -l
30
+ ufoo ctx decisions -n 1
31
+ ufoo ctx decisions -s all
32
+ ufoo ctx decisions index
33
+ ```
34
+
35
+ If context state is missing, initialize it:
36
+
37
+ ```bash
38
+ ufoo init --targets context --project "$(pwd)"
39
+ ```
40
+
41
+ ## Record only consequential decisions
42
+
43
+ Create a decision only for:
44
+
45
+ - architectural choices;
46
+ - meaningful trade-offs with rejected alternatives;
47
+ - cross-agent or integration contracts;
48
+ - precedent that constrains future work.
49
+
50
+ Do not create decisions for routine fixes, implementation details, generic
51
+ plans, transient findings, or task progress.
52
+
53
+ Create a decision before acting on it:
54
+
55
+ ```bash
56
+ ufoo ctx decisions new "<short title>"
57
+ ```
58
+
59
+ Use the canonical body:
60
+
61
+ ```yaml
62
+ ---
63
+ status: open
64
+ nickname: <nickname>
65
+ ---
66
+ # DECISION NNNN: <Title>
67
+
68
+ Date: YYYY-MM-DD
69
+ Author: <agent>
70
+ Nickname: <nickname>
71
+
72
+ Context:
73
+ <why a decision was required>
74
+
75
+ Decision:
76
+ <what is now true>
77
+
78
+ Implications:
79
+ <what future work must follow>
80
+ ```
81
+
82
+ Resolve only after required implications are understood and completed. Change
83
+ frontmatter status fields without rewriting historical content.
84
+
85
+ ## Maintain durable memory
86
+
87
+ Search or recall before adding:
88
+
89
+ ```bash
90
+ ufoo memory list
91
+ ufoo memory show <memory-id>
92
+ ufoo memory add "<title>" --body "<durable fact>" --tags <tags>
93
+ ufoo memory edit <memory-id>
94
+ ufoo memory forget <memory-id>
95
+ ufoo memory rebuild-index
96
+ ufoo memory audit <memory-id>
97
+ ```
98
+
99
+ Store stable project invariants, ownership facts, and long-lived integration
100
+ constraints. Do not store current task state, user preferences, ephemeral
101
+ observations, or facts likely to expire.
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: "ufoo context"
3
+ short_description: "Sync ufoo decisions and durable shared memory"
4
+ default_prompt: "Use $ufoo-context to review shared decisions and durable project memory."