u-foo 1.0.0
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/LICENSE +35 -0
- package/README.md +163 -0
- package/README.zh-CN.md +163 -0
- package/bin/uclaude +65 -0
- package/bin/ucodex +65 -0
- package/bin/ufoo +93 -0
- package/bin/ufoo.js +35 -0
- package/modules/AGENTS.template.md +87 -0
- package/modules/bus/README.md +132 -0
- package/modules/bus/SKILLS/ubus/SKILL.md +209 -0
- package/modules/bus/scripts/bus-alert.sh +185 -0
- package/modules/bus/scripts/bus-listen.sh +117 -0
- package/modules/context/ASSUMPTIONS.md +7 -0
- package/modules/context/CONSTRAINTS.md +7 -0
- package/modules/context/CONTEXT-STRUCTURE.md +49 -0
- package/modules/context/DECISION-PROTOCOL.md +62 -0
- package/modules/context/HANDOFF.md +33 -0
- package/modules/context/README.md +82 -0
- package/modules/context/RULES.md +15 -0
- package/modules/context/SKILLS/README.md +14 -0
- package/modules/context/SKILLS/uctx/SKILL.md +91 -0
- package/modules/context/SYSTEM.md +18 -0
- package/modules/context/TEMPLATES/assumptions.md +4 -0
- package/modules/context/TEMPLATES/constraints.md +4 -0
- package/modules/context/TEMPLATES/decision.md +16 -0
- package/modules/context/TEMPLATES/project-context-readme.md +6 -0
- package/modules/context/TEMPLATES/system.md +3 -0
- package/modules/context/TEMPLATES/terminology.md +4 -0
- package/modules/context/TERMINOLOGY.md +10 -0
- package/modules/resources/ICONS/README.md +12 -0
- package/modules/resources/ICONS/libraries/README.md +17 -0
- package/modules/resources/ICONS/libraries/heroicons/LICENSE +22 -0
- package/modules/resources/ICONS/libraries/heroicons/README.md +15 -0
- package/modules/resources/ICONS/libraries/heroicons/arrow-right.svg +4 -0
- package/modules/resources/ICONS/libraries/heroicons/check.svg +4 -0
- package/modules/resources/ICONS/libraries/heroicons/chevron-down.svg +4 -0
- package/modules/resources/ICONS/libraries/heroicons/cog-6-tooth.svg +5 -0
- package/modules/resources/ICONS/libraries/heroicons/magnifying-glass.svg +4 -0
- package/modules/resources/ICONS/libraries/heroicons/x-mark.svg +4 -0
- package/modules/resources/ICONS/libraries/lucide/LICENSE +40 -0
- package/modules/resources/ICONS/libraries/lucide/README.md +15 -0
- package/modules/resources/ICONS/libraries/lucide/arrow-right.svg +15 -0
- package/modules/resources/ICONS/libraries/lucide/check.svg +14 -0
- package/modules/resources/ICONS/libraries/lucide/chevron-down.svg +14 -0
- package/modules/resources/ICONS/libraries/lucide/search.svg +15 -0
- package/modules/resources/ICONS/libraries/lucide/settings.svg +15 -0
- package/modules/resources/ICONS/libraries/lucide/x.svg +15 -0
- package/modules/resources/ICONS/rules.md +7 -0
- package/modules/resources/README.md +9 -0
- package/modules/resources/UI/ANTI-PATTERNS.md +6 -0
- package/modules/resources/UI/TONE.md +6 -0
- package/package.json +40 -0
- package/scripts/banner.sh +89 -0
- package/scripts/bus-alert.sh +6 -0
- package/scripts/bus-autotrigger.sh +6 -0
- package/scripts/bus-daemon.sh +231 -0
- package/scripts/bus-inject.sh +144 -0
- package/scripts/bus-listen.sh +6 -0
- package/scripts/bus.sh +984 -0
- package/scripts/context-decisions.sh +167 -0
- package/scripts/context-doctor.sh +72 -0
- package/scripts/context-lint.sh +110 -0
- package/scripts/doctor.sh +22 -0
- package/scripts/init.sh +247 -0
- package/scripts/skills.sh +113 -0
- package/scripts/status.sh +125 -0
- package/src/agent/cliRunner.js +190 -0
- package/src/agent/internalRunner.js +212 -0
- package/src/agent/normalizeOutput.js +41 -0
- package/src/agent/ufooAgent.js +222 -0
- package/src/chat/index.js +1603 -0
- package/src/cli.js +349 -0
- package/src/config.js +37 -0
- package/src/daemon/index.js +501 -0
- package/src/daemon/ops.js +120 -0
- package/src/daemon/run.js +41 -0
- package/src/daemon/status.js +78 -0
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
# bus-listen.sh
|
|
5
|
+
# Foreground listener that prints incoming messages.
|
|
6
|
+
#
|
|
7
|
+
# Usage:
|
|
8
|
+
# bash bus-listen.sh <subscriber> [options]
|
|
9
|
+
#
|
|
10
|
+
# Options:
|
|
11
|
+
# --from-beginning Print existing queued messages first
|
|
12
|
+
# --reset Truncate pending queue before listening
|
|
13
|
+
# --auto-join Auto-join bus to get subscriber ID
|
|
14
|
+
|
|
15
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
16
|
+
REPO_ROOT="$(cd "$SCRIPT_DIR/../../.." && pwd)"
|
|
17
|
+
BUS_DIR=".ufoo/bus"
|
|
18
|
+
FROM_BEGINNING=0
|
|
19
|
+
RESET=0
|
|
20
|
+
AUTO_JOIN=0
|
|
21
|
+
|
|
22
|
+
SUBSCRIBER="${1:-}"
|
|
23
|
+
shift || true
|
|
24
|
+
|
|
25
|
+
while [[ $# -gt 0 ]]; do
|
|
26
|
+
case "$1" in
|
|
27
|
+
--from-beginning)
|
|
28
|
+
FROM_BEGINNING=1
|
|
29
|
+
shift
|
|
30
|
+
;;
|
|
31
|
+
--reset)
|
|
32
|
+
RESET=1
|
|
33
|
+
shift
|
|
34
|
+
;;
|
|
35
|
+
--auto-join)
|
|
36
|
+
AUTO_JOIN=1
|
|
37
|
+
shift
|
|
38
|
+
;;
|
|
39
|
+
*)
|
|
40
|
+
shift
|
|
41
|
+
;;
|
|
42
|
+
esac
|
|
43
|
+
done
|
|
44
|
+
|
|
45
|
+
# Auto-join if requested
|
|
46
|
+
if [[ "$AUTO_JOIN" == "1" ]] && [[ -z "$SUBSCRIBER" ]]; then
|
|
47
|
+
SUBSCRIBER="$(ufoo bus join 2>/dev/null | tail -1)"
|
|
48
|
+
echo "[listen] Auto-joined as: $SUBSCRIBER"
|
|
49
|
+
fi
|
|
50
|
+
|
|
51
|
+
if [[ -z "$SUBSCRIBER" ]]; then
|
|
52
|
+
echo "Usage: bus-listen.sh <subscriber> [options]" >&2
|
|
53
|
+
echo " or: bus-listen.sh --auto-join" >&2
|
|
54
|
+
exit 1
|
|
55
|
+
fi
|
|
56
|
+
|
|
57
|
+
# Sanitize subscriber for filename
|
|
58
|
+
SAFE_SUB="${SUBSCRIBER//:/_}"
|
|
59
|
+
QUEUE_FILE="$BUS_DIR/queues/${SAFE_SUB}/pending.jsonl"
|
|
60
|
+
QUEUE_DIR="$BUS_DIR/queues/${SAFE_SUB}"
|
|
61
|
+
|
|
62
|
+
mkdir -p "$QUEUE_DIR"
|
|
63
|
+
touch "$QUEUE_FILE"
|
|
64
|
+
|
|
65
|
+
# Reset queue if requested
|
|
66
|
+
if [[ "$RESET" == "1" ]]; then
|
|
67
|
+
echo "[listen] Resetting queue..."
|
|
68
|
+
: > "$QUEUE_FILE"
|
|
69
|
+
fi
|
|
70
|
+
|
|
71
|
+
# Print existing messages if requested
|
|
72
|
+
if [[ "$FROM_BEGINNING" == "1" ]] && [[ -s "$QUEUE_FILE" ]]; then
|
|
73
|
+
echo "[listen] Existing messages:"
|
|
74
|
+
echo "---"
|
|
75
|
+
while IFS= read -r line; do
|
|
76
|
+
# Parse JSON and extract message
|
|
77
|
+
msg="$(echo "$line" | jq -r '.data.message // .data // .' 2>/dev/null || echo "$line")"
|
|
78
|
+
from="$(echo "$line" | jq -r '.publisher // "unknown"' 2>/dev/null || echo "unknown")"
|
|
79
|
+
ts="$(echo "$line" | jq -r '.ts // ""' 2>/dev/null || echo "")"
|
|
80
|
+
short_ts="${ts:11:8}" # Extract HH:MM:SS
|
|
81
|
+
echo "[$short_ts] <$from> $msg"
|
|
82
|
+
done < "$QUEUE_FILE"
|
|
83
|
+
echo "---"
|
|
84
|
+
fi
|
|
85
|
+
|
|
86
|
+
echo "[listen] Listening for new messages... (Ctrl+C to stop)"
|
|
87
|
+
|
|
88
|
+
# Track last line count
|
|
89
|
+
LAST_LINES=0
|
|
90
|
+
if [[ -s "$QUEUE_FILE" ]]; then
|
|
91
|
+
LAST_LINES="$(wc -l < "$QUEUE_FILE" | tr -d ' ')"
|
|
92
|
+
fi
|
|
93
|
+
|
|
94
|
+
while true; do
|
|
95
|
+
if [[ -f "$QUEUE_FILE" ]]; then
|
|
96
|
+
CURRENT_LINES="$(wc -l < "$QUEUE_FILE" | tr -d ' ')"
|
|
97
|
+
|
|
98
|
+
if [[ "$CURRENT_LINES" -gt "$LAST_LINES" ]]; then
|
|
99
|
+
# Read new lines
|
|
100
|
+
tail -n "+$((LAST_LINES + 1))" "$QUEUE_FILE" | while IFS= read -r line; do
|
|
101
|
+
msg="$(echo "$line" | jq -r '.data.message // .data // .' 2>/dev/null || echo "$line")"
|
|
102
|
+
from="$(echo "$line" | jq -r '.publisher // "unknown"' 2>/dev/null || echo "unknown")"
|
|
103
|
+
ts="$(echo "$line" | jq -r '.ts // ""' 2>/dev/null || echo "")"
|
|
104
|
+
short_ts="${ts:11:8}"
|
|
105
|
+
|
|
106
|
+
# Bell notification
|
|
107
|
+
printf '\a'
|
|
108
|
+
|
|
109
|
+
echo "[$short_ts] <$from> $msg"
|
|
110
|
+
done
|
|
111
|
+
|
|
112
|
+
LAST_LINES="$CURRENT_LINES"
|
|
113
|
+
fi
|
|
114
|
+
fi
|
|
115
|
+
|
|
116
|
+
sleep 1
|
|
117
|
+
done
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Context Structure
|
|
2
|
+
|
|
3
|
+
## Global (read-only)
|
|
4
|
+
|
|
5
|
+
```
|
|
6
|
+
~/.ufoo/
|
|
7
|
+
└── modules/
|
|
8
|
+
└── context/ # installed context module
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
- **Read-only**
|
|
12
|
+
- Template source for init
|
|
13
|
+
- No decisions, no assumptions
|
|
14
|
+
- Law, not truth
|
|
15
|
+
|
|
16
|
+
## Project-local (writable)
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
<project>/
|
|
20
|
+
└── .context/
|
|
21
|
+
├── README.md
|
|
22
|
+
├── SYSTEM.md
|
|
23
|
+
├── CONSTRAINTS.md
|
|
24
|
+
├── ASSUMPTIONS.md
|
|
25
|
+
├── TERMINOLOGY.md
|
|
26
|
+
└── DECISIONS/
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
- **In the repo** — can diff, can review
|
|
30
|
+
- This is where truth lives
|
|
31
|
+
- Must be versionable
|
|
32
|
+
|
|
33
|
+
## Required files (project)
|
|
34
|
+
|
|
35
|
+
| File | Purpose |
|
|
36
|
+
|------|---------|
|
|
37
|
+
| README.md | Entry point; how to use this context |
|
|
38
|
+
| SYSTEM.md | Project architecture and purpose |
|
|
39
|
+
| CONSTRAINTS.md | Non-negotiable rules |
|
|
40
|
+
| ASSUMPTIONS.md | Current assumptions (update when changed) |
|
|
41
|
+
| TERMINOLOGY.md | Shared vocabulary |
|
|
42
|
+
| DECISIONS/ | Append-only decision log |
|
|
43
|
+
|
|
44
|
+
## Red line
|
|
45
|
+
|
|
46
|
+
**Never write decisions or assumptions to global.**
|
|
47
|
+
|
|
48
|
+
Global = law.
|
|
49
|
+
Project = truth.
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# Decision Protocol
|
|
2
|
+
|
|
3
|
+
## What is a Decision?
|
|
4
|
+
|
|
5
|
+
A decision is any new or changed “shared truth” that affects future work, including:
|
|
6
|
+
- Architecture
|
|
7
|
+
- Semantics
|
|
8
|
+
- Roles or responsibilities
|
|
9
|
+
- UI meaning or behavior
|
|
10
|
+
- Naming or structure
|
|
11
|
+
- Installation / distribution / tooling workflows
|
|
12
|
+
- Trade-offs and “we chose X over Y”
|
|
13
|
+
|
|
14
|
+
## Triage (Must / Ask / Skip)
|
|
15
|
+
|
|
16
|
+
### Must record (no confirmation needed)
|
|
17
|
+
|
|
18
|
+
Write a decision **before replying** when you do any of the following:
|
|
19
|
+
|
|
20
|
+
- Provide an evaluation / analysis / recommendation that could steer future work
|
|
21
|
+
- Propose an improvement plan or a set of next steps
|
|
22
|
+
- Introduce or change any rule/constraint/process
|
|
23
|
+
- Choose a default (e.g. install method, folder structure, version pinning policy)
|
|
24
|
+
- Decide between alternatives (trade-off)
|
|
25
|
+
|
|
26
|
+
### Ask first (medium importance)
|
|
27
|
+
|
|
28
|
+
If you’re unsure whether the recommendation should become shared truth, ask:
|
|
29
|
+
|
|
30
|
+
> “Should I record a decision for X?”
|
|
31
|
+
|
|
32
|
+
Examples:
|
|
33
|
+
- Optional refactors or style preferences
|
|
34
|
+
- Suggestions that depend on missing info (URL, constraints, team preference)
|
|
35
|
+
- Reversible tweaks that may not be adopted
|
|
36
|
+
|
|
37
|
+
### Skip (not worth a decision)
|
|
38
|
+
|
|
39
|
+
Do **not** write a decision for:
|
|
40
|
+
|
|
41
|
+
- One-off clarifications or Q&A that doesn’t change future behavior
|
|
42
|
+
- Trivial edits (formatting, typos) with no semantic impact
|
|
43
|
+
- Ephemeral runtime details (logs, transient errors) unless they affect policy
|
|
44
|
+
|
|
45
|
+
## Where Decisions Live
|
|
46
|
+
|
|
47
|
+
- **Never** write decisions to global `~/.context/` (global = law).
|
|
48
|
+
- Always write decisions to the project-local log:
|
|
49
|
+
- `<project>/.context/DECISIONS/`
|
|
50
|
+
- For this repo, that is: `.context/DECISIONS/`
|
|
51
|
+
|
|
52
|
+
## Rules
|
|
53
|
+
|
|
54
|
+
- Decisions are append-only.
|
|
55
|
+
- Do not rewrite history.
|
|
56
|
+
- AI agents are allowed to write decisions.
|
|
57
|
+
|
|
58
|
+
## Minimum Content
|
|
59
|
+
|
|
60
|
+
- Context: why this matters now
|
|
61
|
+
- Decision: what is now considered true
|
|
62
|
+
- Implications: what must follow from this
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# AI Handoff Protocol
|
|
2
|
+
|
|
3
|
+
## When taking over work
|
|
4
|
+
|
|
5
|
+
1. Read this repository (global protocol).
|
|
6
|
+
2. Read the project-local `.context/`.
|
|
7
|
+
3. Check for open decisions: `bash scripts/context-decisions.sh -l`
|
|
8
|
+
|
|
9
|
+
## Processing open decisions
|
|
10
|
+
|
|
11
|
+
Open decisions are messages from other agents. You MUST:
|
|
12
|
+
|
|
13
|
+
1. **Read** — Read the full content, not just the title.
|
|
14
|
+
2. **Understand** — Sync their decisions to your understanding.
|
|
15
|
+
3. **Execute** — If action is required, do it first.
|
|
16
|
+
4. **Verify** — Confirm the action succeeded.
|
|
17
|
+
5. **Resolve** — Only then mark as resolved.
|
|
18
|
+
|
|
19
|
+
```yaml
|
|
20
|
+
---
|
|
21
|
+
status: resolved
|
|
22
|
+
resolved_by: <your-agent-name>
|
|
23
|
+
resolved_at: <date>
|
|
24
|
+
---
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
**NEVER resolve blindly.** This defeats the purpose of multi-agent collaboration.
|
|
28
|
+
|
|
29
|
+
## Before finishing work
|
|
30
|
+
|
|
31
|
+
- Declare whether any new decisions were introduced.
|
|
32
|
+
- Ensure all decisions are written down.
|
|
33
|
+
- Leave the project ready for the next agent.
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# context
|
|
2
|
+
|
|
3
|
+
A collaboration protocol that constrains AI behavior through explicit, versioned files.
|
|
4
|
+
|
|
5
|
+
## Why
|
|
6
|
+
|
|
7
|
+
AI coding agents (Claude Code, Codex, Cursor, etc.) have two fundamental problems:
|
|
8
|
+
|
|
9
|
+
1. **No shared memory** — Decisions made in one session are invisible to other agents or future sessions. Each agent starts fresh, repeating mistakes or contradicting prior work.
|
|
10
|
+
|
|
11
|
+
This protocol solves it by treating decisions and context as files:
|
|
12
|
+
- **Decisions as files** — Persistent, versioned, reviewable. All agents read the same truth.
|
|
13
|
+
|
|
14
|
+
## Core Principle
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
Global context defines the law.
|
|
18
|
+
Project context defines the truth.
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
**Files are truth, not memory.**
|
|
22
|
+
|
|
23
|
+
## Quick Start
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
# Install `ufoo` globally (once), then use it to install modules and init projects.
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
This repository is the `context` module. The recommended entrypoint is `ufoo`.
|
|
30
|
+
|
|
31
|
+
## Architecture
|
|
32
|
+
|
|
33
|
+
### Global: `~/.ufoo/` (read-only for agents, managed by humans)
|
|
34
|
+
|
|
35
|
+
Global modules live under `~/.ufoo/modules/`.
|
|
36
|
+
|
|
37
|
+
### Project: `<project>/.context/` (writable)
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
.context/
|
|
41
|
+
├── README.md # Entry point / how to use this context
|
|
42
|
+
├── SYSTEM.md # Project architecture
|
|
43
|
+
├── CONSTRAINTS.md # Non-negotiable rules
|
|
44
|
+
├── ASSUMPTIONS.md # Current assumptions
|
|
45
|
+
├── TERMINOLOGY.md # Shared vocabulary
|
|
46
|
+
└── DECISIONS/ # Append-only log
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Must be in Git. Must be reviewable. Truth.
|
|
50
|
+
|
|
51
|
+
## Protocol Structure
|
|
52
|
+
|
|
53
|
+
```
|
|
54
|
+
context/ # This repo
|
|
55
|
+
├── SYSTEM.md # Protocol definition
|
|
56
|
+
├── RULES.md # Collaboration rules
|
|
57
|
+
├── CONSTRAINTS.md # Protocol constraints
|
|
58
|
+
├── DECISION-PROTOCOL.md # How to write decisions
|
|
59
|
+
├── HANDOFF.md # Session handoff rules
|
|
60
|
+
├── CONTEXT-STRUCTURE.md # Project structure spec
|
|
61
|
+
├── TEMPLATES/ # AI behavior constraint
|
|
62
|
+
├── SKILLS/ # tool skill docs (module-local)
|
|
63
|
+
└── .context/ # Local project context for this repo (ignored; not part of protocol distribution)
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## For AI Agents
|
|
67
|
+
|
|
68
|
+
1. Read installed module from `~/.ufoo/modules/context/`
|
|
69
|
+
2. Read/write context from `<project>/.context/`
|
|
70
|
+
3. **Never write to global** — only to project
|
|
71
|
+
4. When unsure, write a decision
|
|
72
|
+
5. Do not modify TEMPLATES/ without a decision
|
|
73
|
+
|
|
74
|
+
## Validate
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
# protocol repo
|
|
78
|
+
ufoo ctx lint
|
|
79
|
+
|
|
80
|
+
# project-local context (in a real project repo)
|
|
81
|
+
ufoo ctx lint --project <path-to-project-context>
|
|
82
|
+
```
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Collaboration Rules
|
|
2
|
+
|
|
3
|
+
## Core rules
|
|
4
|
+
|
|
5
|
+
- Always read this repository before coding.
|
|
6
|
+
- Do not rely on model-internal memory.
|
|
7
|
+
- All shared understanding must exist as files.
|
|
8
|
+
- Decisions override comments and discussions.
|
|
9
|
+
- When unsure, write a decision.
|
|
10
|
+
|
|
11
|
+
## Decision handling
|
|
12
|
+
|
|
13
|
+
- Open decisions are unprocessed messages from other agents.
|
|
14
|
+
- You must read, understand, and act before resolving.
|
|
15
|
+
- Never resolve without reading the full content.
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# Skills
|
|
2
|
+
|
|
3
|
+
Protocol-level skills that enforce context rules.
|
|
4
|
+
|
|
5
|
+
- NOT memory systems
|
|
6
|
+
- Do NOT store project knowledge
|
|
7
|
+
- Only bootstrap and validate protocol compliance
|
|
8
|
+
|
|
9
|
+
Available:
|
|
10
|
+
- `uctx` — quick context check (list decisions, show latest, report status)
|
|
11
|
+
|
|
12
|
+
Helpers:
|
|
13
|
+
- `bash scripts/skills.sh list`
|
|
14
|
+
- `bash scripts/skills.sh install <name|all> --codex|--agents|--target <dir>`
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: uctx
|
|
3
|
+
description: |
|
|
4
|
+
Quick ufoo context status check. Shows decisions and context health.
|
|
5
|
+
Use when: (1) Starting a session, (2) User says "uctx", (3) Need quick context refresh.
|
|
6
|
+
For full initialization, use uinit (ufoo init CLI).
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# /uctx - AI Context Quick Check
|
|
10
|
+
|
|
11
|
+
## What this does
|
|
12
|
+
|
|
13
|
+
Fast context check for daily use. Run at session start or anytime.
|
|
14
|
+
|
|
15
|
+
Pre-flight reminder:
|
|
16
|
+
- If the user is asking for evaluation/recommendation/plan, write a decision before replying.
|
|
17
|
+
|
|
18
|
+
## Workflow
|
|
19
|
+
|
|
20
|
+
### 1. Verify structure exists
|
|
21
|
+
|
|
22
|
+
Check `.ufoo/context/` exists. If missing, tell user to run `uinit` (ufoo init CLI).
|
|
23
|
+
|
|
24
|
+
### 2. List all decisions
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
ufoo ctx decisions -l
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### 3. Show latest decision
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
ufoo ctx decisions -n 1
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### 4. Report status
|
|
37
|
+
|
|
38
|
+
Brief summary:
|
|
39
|
+
- Open decisions count (need attention)
|
|
40
|
+
- Total decisions count
|
|
41
|
+
- Any issues found
|
|
42
|
+
- Ready to work
|
|
43
|
+
|
|
44
|
+
## Output format
|
|
45
|
+
|
|
46
|
+
```
|
|
47
|
+
=== ufoo context status ===
|
|
48
|
+
Project: <cwd>
|
|
49
|
+
Decisions: N open, M total
|
|
50
|
+
Latest open: DECISION XXXX: <title>
|
|
51
|
+
|
|
52
|
+
[Latest decision content]
|
|
53
|
+
|
|
54
|
+
Status: Ready ✓
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## Handling Open Decisions
|
|
58
|
+
|
|
59
|
+
When there are open decisions, you MUST:
|
|
60
|
+
|
|
61
|
+
### 1. Read and understand
|
|
62
|
+
- Read the full content of each open decision
|
|
63
|
+
- Understand what other agents decided
|
|
64
|
+
- This is "syncing their memory to yours"
|
|
65
|
+
|
|
66
|
+
### 2. Check if action needed
|
|
67
|
+
- Does the decision require implementation?
|
|
68
|
+
- Is something already done that needs verification?
|
|
69
|
+
- Are there implications you need to follow?
|
|
70
|
+
|
|
71
|
+
### 3. Execute if needed
|
|
72
|
+
- If the decision requires action, do it first
|
|
73
|
+
- Verify the action was successful
|
|
74
|
+
|
|
75
|
+
### 4. Then resolve
|
|
76
|
+
Only after understanding and completing any required actions:
|
|
77
|
+
```yaml
|
|
78
|
+
---
|
|
79
|
+
status: resolved
|
|
80
|
+
resolved_by: <your-agent-name>
|
|
81
|
+
resolved_at: <date>
|
|
82
|
+
---
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
**NEVER resolve blindly.** Reading the title is not enough.
|
|
86
|
+
|
|
87
|
+
## Notes
|
|
88
|
+
|
|
89
|
+
- Script defaults to showing only `open` decisions
|
|
90
|
+
- Resolved decisions are skipped (already processed)
|
|
91
|
+
- Use `-s all` to see all decisions regardless of status
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# AI System Contract
|
|
2
|
+
|
|
3
|
+
This repository defines the canonical collaboration context
|
|
4
|
+
for all AI agents working on a codebase.
|
|
5
|
+
|
|
6
|
+
## Purpose
|
|
7
|
+
|
|
8
|
+
Solve one core problem with AI coding agents:
|
|
9
|
+
|
|
10
|
+
1. **Memory sync across agents** — Multiple AI tools (Claude Code, Codex, Cursor, etc.) have no shared memory. Decisions made in one session are lost to others. This protocol makes decisions persist as files, enabling true multi-agent collaboration.
|
|
11
|
+
|
|
12
|
+
## Rules
|
|
13
|
+
|
|
14
|
+
- Files in this repository are authoritative.
|
|
15
|
+
- Constraints are hard requirements, not suggestions.
|
|
16
|
+
- Silent architectural or semantic decisions are forbidden.
|
|
17
|
+
- If conflict or ambiguity exists, stop and ask.
|
|
18
|
+
- Shared truth must be written, not remembered.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# Terminology
|
|
2
|
+
|
|
3
|
+
| Term | Definition |
|
|
4
|
+
|------|------------|
|
|
5
|
+
| Protocol | The rules defined in this repository |
|
|
6
|
+
| Decision | A recorded change affecting architecture/semantics/behavior |
|
|
7
|
+
| Context | Project-specific knowledge stored in context/ |
|
|
8
|
+
| Handoff | One AI session ending, another beginning |
|
|
9
|
+
| Constraint | Non-negotiable rule |
|
|
10
|
+
| Assumption | Belief currently considered true, subject to change |
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# Icon Context
|
|
2
|
+
|
|
3
|
+
Icons here define visual grammar, not shippable assets.
|
|
4
|
+
|
|
5
|
+
They are used as:
|
|
6
|
+
- Reference bases
|
|
7
|
+
- Modification sources
|
|
8
|
+
- Style constraints
|
|
9
|
+
|
|
10
|
+
Do not copy blindly into projects.
|
|
11
|
+
|
|
12
|
+
`libraries/` contains minimal subsets of third-party icon libraries (with licenses) as reference material.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Icon Libraries (Minimal Subsets)
|
|
2
|
+
|
|
3
|
+
This directory vendors **small, representative subsets** of third-party icon libraries.
|
|
4
|
+
|
|
5
|
+
Purpose:
|
|
6
|
+
- Provide strong, unambiguous signal that icons are **canonical protocol context**
|
|
7
|
+
- Serve as reference bases and modification sources
|
|
8
|
+
|
|
9
|
+
Non-goals:
|
|
10
|
+
- Shipping assets for products
|
|
11
|
+
- Full icon sets
|
|
12
|
+
|
|
13
|
+
Each library subfolder contains:
|
|
14
|
+
- A minimal set of SVGs
|
|
15
|
+
- The upstream license text
|
|
16
|
+
- A short README with source info
|
|
17
|
+
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) Tailwind Labs, Inc.
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
22
|
+
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Heroicons (Minimal Subset)
|
|
2
|
+
|
|
3
|
+
Source:
|
|
4
|
+
- Repository: https://github.com/tailwindlabs/heroicons
|
|
5
|
+
- Path: `optimized/24/outline/`
|
|
6
|
+
- License: MIT (see `LICENSE`)
|
|
7
|
+
- Fetched: 2026-01-27
|
|
8
|
+
|
|
9
|
+
Included icons:
|
|
10
|
+
- `arrow-right.svg`
|
|
11
|
+
- `chevron-down.svg`
|
|
12
|
+
- `magnifying-glass.svg`
|
|
13
|
+
- `cog-6-tooth.svg`
|
|
14
|
+
- `check.svg`
|
|
15
|
+
- `x-mark.svg`
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" aria-hidden="true" data-slot="icon">
|
|
2
|
+
<path stroke-linecap="round" stroke-linejoin="round" d="M9.594 3.94c.09-.542.56-.94 1.11-.94h2.593c.55 0 1.02.398 1.11.94l.213 1.281c.063.374.313.686.645.87.074.04.147.083.22.127.325.196.72.257 1.075.124l1.217-.456a1.125 1.125 0 0 1 1.37.49l1.296 2.247a1.125 1.125 0 0 1-.26 1.431l-1.003.827c-.293.241-.438.613-.43.992a7.723 7.723 0 0 1 0 .255c-.008.378.137.75.43.991l1.004.827c.424.35.534.955.26 1.43l-1.298 2.247a1.125 1.125 0 0 1-1.369.491l-1.217-.456c-.355-.133-.75-.072-1.076.124a6.47 6.47 0 0 1-.22.128c-.331.183-.581.495-.644.869l-.213 1.281c-.09.543-.56.94-1.11.94h-2.594c-.55 0-1.019-.398-1.11-.94l-.213-1.281c-.062-.374-.312-.686-.644-.87a6.52 6.52 0 0 1-.22-.127c-.325-.196-.72-.257-1.076-.124l-1.217.456a1.125 1.125 0 0 1-1.369-.49l-1.297-2.247a1.125 1.125 0 0 1 .26-1.431l1.004-.827c.292-.24.437-.613.43-.991a6.932 6.932 0 0 1 0-.255c.007-.38-.138-.751-.43-.992l-1.004-.827a1.125 1.125 0 0 1-.26-1.43l1.297-2.247a1.125 1.125 0 0 1 1.37-.491l1.216.456c.356.133.751.072 1.076-.124.072-.044.146-.086.22-.128.332-.183.582-.495.644-.869l.214-1.28Z"/>
|
|
3
|
+
<path stroke-linecap="round" stroke-linejoin="round" d="M15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z"/>
|
|
4
|
+
</svg>
|
|
5
|
+
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" aria-hidden="true" data-slot="icon">
|
|
2
|
+
<path stroke-linecap="round" stroke-linejoin="round" d="m21 21-5.197-5.197m0 0A7.5 7.5 0 1 0 5.196 5.196a7.5 7.5 0 0 0 10.607 10.607Z"/>
|
|
3
|
+
</svg>
|
|
4
|
+
|