wayfind 0.0.1 → 2.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/BOOTSTRAP_PROMPT.md +120 -0
- package/bin/connectors/github.js +617 -0
- package/bin/connectors/index.js +13 -0
- package/bin/connectors/intercom.js +595 -0
- package/bin/connectors/llm.js +469 -0
- package/bin/connectors/notion.js +747 -0
- package/bin/connectors/transport.js +325 -0
- package/bin/content-store.js +2006 -0
- package/bin/digest.js +813 -0
- package/bin/rebuild-status.js +297 -0
- package/bin/slack-bot.js +1535 -0
- package/bin/slack.js +342 -0
- package/bin/storage/index.js +171 -0
- package/bin/storage/json-backend.js +348 -0
- package/bin/storage/sqlite-backend.js +415 -0
- package/bin/team-context.js +4209 -0
- package/bin/telemetry.js +159 -0
- package/doctor.sh +291 -0
- package/install.sh +144 -0
- package/journal-summary.sh +577 -0
- package/package.json +48 -6
- package/setup.sh +641 -0
- package/specializations/claude-code/CLAUDE.md-global-fragment.md +53 -0
- package/specializations/claude-code/CLAUDE.md-repo-fragment.md +16 -0
- package/specializations/claude-code/README.md +99 -0
- package/specializations/claude-code/commands/doctor.md +31 -0
- package/specializations/claude-code/commands/init-memory.md +154 -0
- package/specializations/claude-code/commands/init-team.md +415 -0
- package/specializations/claude-code/commands/journal.md +66 -0
- package/specializations/claude-code/commands/review-prs.md +119 -0
- package/specializations/claude-code/hooks/check-global-state.sh +20 -0
- package/specializations/claude-code/hooks/session-end.sh +36 -0
- package/specializations/claude-code/settings.json +15 -0
- package/specializations/cursor/README.md +120 -0
- package/specializations/cursor/global-rule.mdc +53 -0
- package/specializations/cursor/repo-rule.mdc +25 -0
- package/specializations/generic/README.md +47 -0
- package/templates/autopilot/design.md +22 -0
- package/templates/autopilot/engineering.md +22 -0
- package/templates/autopilot/product.md +22 -0
- package/templates/autopilot/strategy.md +22 -0
- package/templates/autopilot/unified.md +24 -0
- package/templates/deploy/.env.example +110 -0
- package/templates/deploy/docker-compose.yml +63 -0
- package/templates/deploy/slack-app-manifest.json +45 -0
- package/templates/github-actions/meridian-digest.yml +85 -0
- package/templates/global.md +79 -0
- package/templates/memory-file.md +18 -0
- package/templates/personal-state.md +14 -0
- package/templates/personas.json +28 -0
- package/templates/product-state.md +41 -0
- package/templates/prompts-readme.md +19 -0
- package/templates/repo-state.md +18 -0
- package/templates/session-protocol-fragment.md +46 -0
- package/templates/slack-app-manifest.json +27 -0
- package/templates/statusline.sh +22 -0
- package/templates/strategy-state.md +39 -0
- package/templates/team-state.md +55 -0
- package/uninstall.sh +105 -0
- package/README.md +0 -4
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# Global State — Index
|
|
2
|
+
|
|
3
|
+
Last updated: YYYY-MM-DD
|
|
4
|
+
|
|
5
|
+
## Preferences
|
|
6
|
+
|
|
7
|
+
### Working style
|
|
8
|
+
- [Communication tone — e.g. "direct, no filler, skip pleasantries"]
|
|
9
|
+
- [Draft preference — e.g. "draft all external comms to me first; flag what to leave OUT"]
|
|
10
|
+
- [Review step — e.g. "I review important comms with [name] before sending — always include that step"]
|
|
11
|
+
|
|
12
|
+
### Technical preferences
|
|
13
|
+
- [Tool/language defaults — e.g. "always TypeScript strict mode"]
|
|
14
|
+
- [Commit style — e.g. "imperative mood, explain why not what"]
|
|
15
|
+
- [Build/deploy habits — e.g. "never touch production before local repro"]
|
|
16
|
+
|
|
17
|
+
### Team context
|
|
18
|
+
<!--
|
|
19
|
+
This section is where the real leverage lives. Record relationship dynamics so the AI
|
|
20
|
+
handles people correctly without being re-briefed every session. Examples:
|
|
21
|
+
|
|
22
|
+
- "Sarah (Design): prefers async feedback via Figma, not Slack. 24h heads-up for scope changes."
|
|
23
|
+
- "Jordan (co-founder): peer, not a report. Keep informed; Jordan manages their own workload."
|
|
24
|
+
- "Engineering team: mostly PST, decisions async in Notion."
|
|
25
|
+
-->
|
|
26
|
+
- [Name (role): key dynamic, communication preference, anything the AI should know]
|
|
27
|
+
|
|
28
|
+
### Decision frameworks
|
|
29
|
+
<!--
|
|
30
|
+
Record how you actually think about recurring decision types. Examples:
|
|
31
|
+
|
|
32
|
+
- "Pricing questions: always segment paid vs. free before drawing conclusions."
|
|
33
|
+
- "Build vs. buy: default buy for non-core infra unless vendor creates lock-in risk."
|
|
34
|
+
- "Vendor disputes: frame in writing first, negotiate specifics live."
|
|
35
|
+
-->
|
|
36
|
+
- [Decision type: your default approach or framework]
|
|
37
|
+
|
|
38
|
+
## Active Projects
|
|
39
|
+
<!-- AUTO-GENERATED by `wayfind status --write`. Do not edit manually. -->
|
|
40
|
+
|
|
41
|
+
| Project | Repo | Updated | Status | Next |
|
|
42
|
+
|---------|------|---------|--------|------|
|
|
43
|
+
|
|
44
|
+
## Manual Projects
|
|
45
|
+
<!-- Non-repo items (admin, vendor tasks, etc.). Edit freely — not auto-generated. -->
|
|
46
|
+
|
|
47
|
+
| Project | Status | Next |
|
|
48
|
+
|---------|--------|------|
|
|
49
|
+
|
|
50
|
+
## Memory Files (load on demand)
|
|
51
|
+
|
|
52
|
+
Load these from `~/.ai-memory/memory/` when the session topic matches:
|
|
53
|
+
|
|
54
|
+
| File | When to load | Summary |
|
|
55
|
+
|------|-------------|---------|
|
|
56
|
+
| `example-topic.md` | Keywords that trigger loading | One-line summary of what's inside |
|
|
57
|
+
|
|
58
|
+
## State Files (per-repo)
|
|
59
|
+
|
|
60
|
+
| Location | Covers |
|
|
61
|
+
|----------|--------|
|
|
62
|
+
| `~/.ai-memory/state.md` | Admin work, non-repo tasks |
|
|
63
|
+
| `~/repos/org/repo/.ai-memory/state.md` | What this repo is about |
|
|
64
|
+
|
|
65
|
+
## Session Protocol
|
|
66
|
+
|
|
67
|
+
**Start:**
|
|
68
|
+
1. Read this file + the repo's `.ai-memory/state.md`
|
|
69
|
+
2. Check Memory Files table — load any that match this session's topic
|
|
70
|
+
3. Summarize current state, then ask: **"What's the goal for this session? What does success look like?"**
|
|
71
|
+
|
|
72
|
+
**Mid-session drift check:** If work diverges from the stated goal, flag it gently and ask whether to stay the course or pivot.
|
|
73
|
+
|
|
74
|
+
**End (on "stop" / "done" / "pause" / "tomorrow"):**
|
|
75
|
+
1. Update the repo's `.ai-memory/state.md`
|
|
76
|
+
2. Do NOT update this file's Active Projects table — it is rebuilt automatically by `wayfind status`.
|
|
77
|
+
3. Create/update topic memory files for any significant new cross-repo context
|
|
78
|
+
4. Append to `~/.ai-memory/memory/journal/YYYY-MM-DD.md`
|
|
79
|
+
5. Confirm: **"State saved. Say 'let's continue' next time."**
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# [Topic Name]
|
|
2
|
+
|
|
3
|
+
> Load this file when: [keywords that indicate this context is relevant]
|
|
4
|
+
|
|
5
|
+
## Context
|
|
6
|
+
[What is this? Why does it exist as a memory file?]
|
|
7
|
+
|
|
8
|
+
## Current State
|
|
9
|
+
[What's the situation right now?]
|
|
10
|
+
|
|
11
|
+
## Key Details
|
|
12
|
+
[The actual content — decisions, strategies, data, email threads, whatever makes this worth preserving]
|
|
13
|
+
|
|
14
|
+
## Next Step
|
|
15
|
+
[What action is pending, if any]
|
|
16
|
+
|
|
17
|
+
## History
|
|
18
|
+
[Brief log of how this evolved — useful for understanding why things are the way they are]
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# [Repo Name] — Personal State
|
|
2
|
+
|
|
3
|
+
Last updated: YYYY-MM-DD
|
|
4
|
+
|
|
5
|
+
(This file is gitignored. It's yours — context you wouldn't want teammates reading as objective fact.)
|
|
6
|
+
|
|
7
|
+
## My Current Focus
|
|
8
|
+
<!-- Your personal next steps -->
|
|
9
|
+
|
|
10
|
+
## Personal Context
|
|
11
|
+
<!-- Working notes, opinions, relationship dynamics for this repo -->
|
|
12
|
+
|
|
13
|
+
## What I'm Watching
|
|
14
|
+
<!-- Open questions, things to follow up on -->
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"personas": [
|
|
3
|
+
{
|
|
4
|
+
"id": "product",
|
|
5
|
+
"name": "Product",
|
|
6
|
+
"description": "Decides what to build, for whom, and in what order. Produces intent, priorities, and success criteria. Consumes shipping status, discoveries, and design rationale.",
|
|
7
|
+
"autopilot": true
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
"id": "design",
|
|
11
|
+
"name": "Design",
|
|
12
|
+
"description": "Decides how the product is experienced. Produces design rationale, UX trade-offs, and rejected alternatives. Consumes product intent, engineering constraints, and usage data.",
|
|
13
|
+
"autopilot": true
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
"id": "engineering",
|
|
17
|
+
"name": "Engineering",
|
|
18
|
+
"description": "Decides how to build it and implementation trade-offs. Produces decisions, discoveries, and drift signals. Consumes product context, design rationale, and strategic constraints.",
|
|
19
|
+
"autopilot": true
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"id": "strategy",
|
|
23
|
+
"name": "Strategy",
|
|
24
|
+
"description": "Decides where next, technology bets, and team enablement. Produces research outcomes, prototypes, and direction. Consumes cross-team patterns, drift trends, and capability gaps.",
|
|
25
|
+
"autopilot": true
|
|
26
|
+
}
|
|
27
|
+
]
|
|
28
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# [Repo/Area] — Product State
|
|
2
|
+
<!-- Default template for the "Product" persona. Rename or adapt if your team
|
|
3
|
+
uses different personas (see: wayfind personas). -->
|
|
4
|
+
|
|
5
|
+
Last updated: YYYY-MM-DD
|
|
6
|
+
Source: [PM name, or "relayed by [name]", or "self — wearing product hat"]
|
|
7
|
+
|
|
8
|
+
## What We're Building
|
|
9
|
+
<!-- The feature or capability in user/customer terms.
|
|
10
|
+
Not "API endpoint returns JSON" — "users can export their data as CSV from settings."
|
|
11
|
+
If this repo covers multiple features, list the active ones. -->
|
|
12
|
+
|
|
13
|
+
## Why This, Why Now
|
|
14
|
+
<!-- Customer problem, strategic rationale, or business driver.
|
|
15
|
+
What evidence supports this priority? (customer conversations, data, strategic bet)
|
|
16
|
+
Link to source material if it exists (Notion doc, research, Slack thread). -->
|
|
17
|
+
|
|
18
|
+
## Success Criteria
|
|
19
|
+
<!-- Observable outcomes in user or business terms. Not implementation milestones.
|
|
20
|
+
"Support team resolves X-type tickets without engineering help" not "function deployed."
|
|
21
|
+
Include how we'll measure it if possible. -->
|
|
22
|
+
|
|
23
|
+
## Scope & Constraints
|
|
24
|
+
<!-- What's in. What's explicitly out. Product decisions that constrain implementation.
|
|
25
|
+
Include the "why" — engineers will push back on constraints they don't understand.
|
|
26
|
+
Example: "No batch mode in v1 — we need to validate the single-record UX first." -->
|
|
27
|
+
|
|
28
|
+
## Open Questions
|
|
29
|
+
<!-- Unresolved product decisions. Engineering may add to this list during sessions
|
|
30
|
+
when they discover things that need PM input.
|
|
31
|
+
Format: Question — Who should answer — Urgency (blocking / soon / backlog) -->
|
|
32
|
+
|
|
33
|
+
## Customer Signal
|
|
34
|
+
<!-- What users are saying about this area. Bugs, requests, complaints, praise.
|
|
35
|
+
Include source and date so the signal can be traced back.
|
|
36
|
+
Example: "2026-02-15 — Intercom #4521 — 'We need to export by date range, not just all'" -->
|
|
37
|
+
|
|
38
|
+
## Decisions Log
|
|
39
|
+
<!-- Product decisions that have been made, with date and rationale. Prevents re-litigating.
|
|
40
|
+
Format: YYYY-MM-DD — Decision — Rationale
|
|
41
|
+
Example: "2026-02-10 — CSV only, no Excel — 80% of users import into Google Sheets anyway" -->
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Team Prompts
|
|
2
|
+
|
|
3
|
+
Shared, version-controlled prompts for common workflows. Anyone on the team can add or improve these.
|
|
4
|
+
|
|
5
|
+
## How to use
|
|
6
|
+
|
|
7
|
+
Copy-paste from here into your AI assistant, or reference by name when asking the Wayfind bot:
|
|
8
|
+
> @wayfind show me the code-review prompt
|
|
9
|
+
|
|
10
|
+
## How to contribute
|
|
11
|
+
|
|
12
|
+
1. Create a new `.md` file in this directory
|
|
13
|
+
2. Use a clear, descriptive filename (e.g. `code-review.md`, `bug-triage.md`)
|
|
14
|
+
3. Start with a brief description of when to use this prompt
|
|
15
|
+
4. Commit and push — the team will see it immediately
|
|
16
|
+
|
|
17
|
+
## Available Prompts
|
|
18
|
+
|
|
19
|
+
<!-- This list is auto-maintained by the file listing below -->
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# [Repo Name] — Project State
|
|
2
|
+
|
|
3
|
+
Last updated: YYYY-MM-DD
|
|
4
|
+
|
|
5
|
+
## Current Branch
|
|
6
|
+
main
|
|
7
|
+
|
|
8
|
+
## Current Status
|
|
9
|
+
[What's the current state of play? What has been done recently? Be specific enough that a fresh session can orient immediately.]
|
|
10
|
+
|
|
11
|
+
## What's Next
|
|
12
|
+
[Concrete next action. Not a list of options — the one thing to pick up from.]
|
|
13
|
+
|
|
14
|
+
## Blockers
|
|
15
|
+
[Anything waiting on someone else, a decision, or an external dependency.]
|
|
16
|
+
|
|
17
|
+
## Gotchas
|
|
18
|
+
[Repo-specific things the AI should know: quirks, non-obvious patterns, traps to avoid, decisions that were made and why.]
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Session State Protocol
|
|
2
|
+
## (Add this to your AI tool's system prompt or project instructions file)
|
|
3
|
+
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## Session State Protocol
|
|
7
|
+
|
|
8
|
+
**Memory directory:** `~/.ai-memory/` (global) and `.ai-memory/` (per-repo)
|
|
9
|
+
|
|
10
|
+
**At session start (REQUIRED):**
|
|
11
|
+
1. Read `~/.ai-memory/global.md` — preferences, active projects table, memory file manifest
|
|
12
|
+
2. Read `.ai-memory/state.md` in the current repo — branch, progress, next steps, gotchas
|
|
13
|
+
3. If persona state files exist (e.g. `.ai-memory/product-state.md`, `.ai-memory/strategy-state.md`), read them — these capture intent, success criteria, and constraints from your configured personas. Keep them in mind during the session.
|
|
14
|
+
4. Check the "Memory Files" table in global.md — load any files from `~/.ai-memory/memory/` whose keywords match this session's topic
|
|
15
|
+
5. Summarize the current state of the project, then ask: **"What's the goal for this session? What does success look like?"**
|
|
16
|
+
|
|
17
|
+
**Mid-session:**
|
|
18
|
+
If the session appears to be diverging from the stated goal (new tangent, scope creep), gently flag it:
|
|
19
|
+
> *"Quick check — we set out to [goal]. This feels like it's moving toward [tangent]. Want to stay the course, or deliberately pivot?"*
|
|
20
|
+
If the user pivots, update the goal. This is a nudge, not a gate — the user always decides.
|
|
21
|
+
|
|
22
|
+
**At session end (when user says "stop", "done", "pause", "tomorrow", "wrap up"):**
|
|
23
|
+
1. Update `.ai-memory/state.md` in the current repo: what was done, what's next, blockers, gotchas
|
|
24
|
+
2. Do NOT update `~/.ai-memory/global.md` Active Projects table — it is rebuilt automatically by `wayfind status`.
|
|
25
|
+
3. If significant new cross-repo context was created (patterns, strategies, decisions), create or update a file in `~/.ai-memory/memory/` and add it to the Memory Files manifest
|
|
26
|
+
4. Append to `~/.ai-memory/memory/journal/YYYY-MM-DD.md`:
|
|
27
|
+
|
|
28
|
+
```
|
|
29
|
+
## [Repo or context] — [Brief title]
|
|
30
|
+
**Why:** [The stated goal]
|
|
31
|
+
**What:** [Bullet list of what was done]
|
|
32
|
+
**Outcome:** [Did we hit the goal? Key deliverables]
|
|
33
|
+
**On track?:** [Focused or drift? What caused drift?]
|
|
34
|
+
**Lessons:** [Worth remembering cross-session]
|
|
35
|
+
**Discovery:** [Optional — things learned that challenge assumptions, create new options,
|
|
36
|
+
or need PM/CTO attention. Skip if nothing notable. Include who should see this and why.]
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
5. If the session surfaced items that belong in a persona state file (e.g. open questions for the product owner, strategic discoveries for the CTO), add them to the relevant persona state file.
|
|
40
|
+
6. Confirm: **"State saved. Say 'let's continue' next time."**
|
|
41
|
+
|
|
42
|
+
**Rules:**
|
|
43
|
+
- Use the Edit tool to update files in place — don't append new sections
|
|
44
|
+
- Keep `global.md` under 80 lines. Detail goes in topic files.
|
|
45
|
+
- Per-repo state stays focused on that repo. Cross-repo context goes in `~/.ai-memory/memory/`
|
|
46
|
+
- Do NOT use proprietary memory CLI tools for state storage. Plain markdown files only.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"display_information": {
|
|
3
|
+
"name": "Wayfind",
|
|
4
|
+
"description": "Team context layer — persona digests from engineering journals and signal channels.",
|
|
5
|
+
"background_color": "#1a1a2e"
|
|
6
|
+
},
|
|
7
|
+
"features": {
|
|
8
|
+
"bot_user": {
|
|
9
|
+
"display_name": "Wayfind",
|
|
10
|
+
"always_online": false
|
|
11
|
+
}
|
|
12
|
+
},
|
|
13
|
+
"oauth_config": {
|
|
14
|
+
"scopes": {
|
|
15
|
+
"bot": [
|
|
16
|
+
"channels:history",
|
|
17
|
+
"groups:history",
|
|
18
|
+
"incoming-webhook"
|
|
19
|
+
]
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"settings": {
|
|
23
|
+
"org_deploy_enabled": false,
|
|
24
|
+
"socket_mode_enabled": false,
|
|
25
|
+
"is_hosted": false
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Wayfind status line for Claude Code
|
|
3
|
+
# Shows Wayfind-specific data: decision quality from last session.
|
|
4
|
+
# Installed by: wayfind init / wayfind update
|
|
5
|
+
|
|
6
|
+
input=$(cat)
|
|
7
|
+
|
|
8
|
+
STATS_FILE="$HOME/.claude/team-context/session-stats.json"
|
|
9
|
+
|
|
10
|
+
if [ -f "$STATS_FILE" ] && command -v jq &>/dev/null; then
|
|
11
|
+
DECISIONS=$(jq -r '.decisions // 0' "$STATS_FILE" 2>/dev/null)
|
|
12
|
+
RICH=$(jq -r '.rich // 0' "$STATS_FILE" 2>/dev/null)
|
|
13
|
+
THIN=$(jq -r '.thin // 0' "$STATS_FILE" 2>/dev/null)
|
|
14
|
+
DATE=$(jq -r '.session_date // ""' "$STATS_FILE" 2>/dev/null)
|
|
15
|
+
if [ "$DECISIONS" -gt 0 ] 2>/dev/null; then
|
|
16
|
+
echo "Wayfind | last: ${DECISIONS} decisions (${RICH} rich, ${THIN} thin) ${DATE}"
|
|
17
|
+
else
|
|
18
|
+
echo "Wayfind"
|
|
19
|
+
fi
|
|
20
|
+
else
|
|
21
|
+
echo "Wayfind"
|
|
22
|
+
fi
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Strategy State
|
|
2
|
+
<!-- Default template for the "Strategy" persona. Rename or adapt if your team
|
|
3
|
+
uses different personas (see: wayfind personas). -->
|
|
4
|
+
|
|
5
|
+
Last updated: YYYY-MM-DD
|
|
6
|
+
|
|
7
|
+
## Current Direction
|
|
8
|
+
<!-- What's the strategic thesis right now? What are we betting on and why?
|
|
9
|
+
This is the "north star" that product and engineering decisions should align to. -->
|
|
10
|
+
|
|
11
|
+
## Active Research
|
|
12
|
+
<!-- What's being investigated. Include the hypothesis being tested.
|
|
13
|
+
Format: Topic — Hypothesis — Status — Repo (if applicable)
|
|
14
|
+
Example: "AI extraction accuracy — Can we hit 95% on room rates? — Testing — ~/repos/research" -->
|
|
15
|
+
|
|
16
|
+
## Prototype Outcomes
|
|
17
|
+
<!-- What's been built, what it proved or disproved, and what to do with it.
|
|
18
|
+
This is the CTO → PM/Engineering handoff point. Be explicit about what
|
|
19
|
+
the prototype means for the product and who needs to act on it. -->
|
|
20
|
+
|
|
21
|
+
| Prototype | Repo | What it proves | Status | Handoff |
|
|
22
|
+
|---|---|---|---|---|
|
|
23
|
+
<!-- Example row:
|
|
24
|
+
| Extraction pipeline | ~/repos/research | AI extracts room rates at 95% accuracy | Complete | April: spec the support-facing UI; Nick: production-grade the pipeline |
|
|
25
|
+
-->
|
|
26
|
+
|
|
27
|
+
## Technology Bets
|
|
28
|
+
<!-- What we're betting on, the thesis behind each bet, and what would make us reconsider.
|
|
29
|
+
Example: "Azure Container Apps for batch jobs — cheaper than Functions at scale,
|
|
30
|
+
but if cold start > 30s we'll revisit." -->
|
|
31
|
+
|
|
32
|
+
## Constraints & Guardrails
|
|
33
|
+
<!-- Strategic decisions that constrain product and engineering. The "we will not" list.
|
|
34
|
+
Example: "No vendor lock-in on data storage — customer must be able to export everything." -->
|
|
35
|
+
|
|
36
|
+
## Patterns I'm Watching
|
|
37
|
+
<!-- Cross-team observations, market signals, recurring issues. Things that aren't
|
|
38
|
+
urgent but shape where we're heading.
|
|
39
|
+
Example: "Third repo this quarter where the data model assumed 1:1 but reality is 1:many." -->
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# [Repo Name] — Team State
|
|
2
|
+
|
|
3
|
+
Last updated: YYYY-MM-DD
|
|
4
|
+
|
|
5
|
+
## Product Context
|
|
6
|
+
<!-- What is this repo building, for whom, and why? One paragraph.
|
|
7
|
+
If a product-state.md exists, summarize it here and point to it for detail.
|
|
8
|
+
Engineers: read this before starting a session. It's why your work matters. -->
|
|
9
|
+
|
|
10
|
+
## Architecture & Key Decisions
|
|
11
|
+
<!-- Decisions the whole team should know. Include the "why" not just the "what". -->
|
|
12
|
+
|
|
13
|
+
## Conventions
|
|
14
|
+
<!-- Patterns, naming, tooling choices that apply across the team. -->
|
|
15
|
+
|
|
16
|
+
## Current Sprint Focus
|
|
17
|
+
<!-- Team-level "what are we working on right now" -->
|
|
18
|
+
|
|
19
|
+
## Signal Routing
|
|
20
|
+
<!-- Where do external signals for this repo come from, and where should
|
|
21
|
+
discoveries go? This helps the AI route information correctly.
|
|
22
|
+
Adapt the entries below to match your configured personas
|
|
23
|
+
(see: wayfind personas).
|
|
24
|
+
|
|
25
|
+
Bugs & feedback: [tool — e.g. Intercom, GitHub Issues]
|
|
26
|
+
Persona contacts: [name — who to flag questions to for each persona]
|
|
27
|
+
QA process: [how testing works for this repo] -->
|
|
28
|
+
|
|
29
|
+
## Elicitation Prompts
|
|
30
|
+
|
|
31
|
+
<!-- These prompts guide the AI to capture richer context at decision moments.
|
|
32
|
+
The AI should ask AT MOST ONE of these when a significant decision is stated
|
|
33
|
+
without reasoning. Do not ask during routine implementation — only at moments
|
|
34
|
+
where a choice was made between alternatives.
|
|
35
|
+
|
|
36
|
+
The answers aren't for you (you already know) — they're for your teammates
|
|
37
|
+
who will read the digest tomorrow. -->
|
|
38
|
+
|
|
39
|
+
When a technical or product decision is made without stated reasoning, ask one of:
|
|
40
|
+
- "What alternatives did you consider?"
|
|
41
|
+
- "What constraint or requirement drove this choice?"
|
|
42
|
+
- "What would need to change for you to reverse this decision?"
|
|
43
|
+
- "Who else on the team does this affect, and how?"
|
|
44
|
+
- "What's the risk if this assumption is wrong?"
|
|
45
|
+
|
|
46
|
+
Do not ask if the decision already includes reasoning, tradeoffs, or constraints.
|
|
47
|
+
Do not ask more than once per decision. Do not ask during routine implementation.
|
|
48
|
+
|
|
49
|
+
Elicitation intensity: normal
|
|
50
|
+
<!-- Options: low (only ask when reasoning is completely absent), normal (default),
|
|
51
|
+
high (ask on every non-trivial decision even if some reasoning is present).
|
|
52
|
+
Team admins can adjust this to improve overall decision context quality. -->
|
|
53
|
+
|
|
54
|
+
## Shared Gotchas
|
|
55
|
+
<!-- Hard-won lessons. What surprised us. What NOT to do. -->
|
package/uninstall.sh
ADDED
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Wayfind — Uninstaller
|
|
3
|
+
# Removes installed hooks, commands, and settings fragments.
|
|
4
|
+
# NEVER deletes your memory content (global-state.md, memory/ directory).
|
|
5
|
+
#
|
|
6
|
+
# Usage: bash uninstall.sh [--tool claude-code]
|
|
7
|
+
|
|
8
|
+
set -euo pipefail
|
|
9
|
+
|
|
10
|
+
TOOL="${1:-}"
|
|
11
|
+
[[ "${1:-}" == "--tool" ]] && TOOL="${2:-}"
|
|
12
|
+
[[ "${1:-}" == "--tool="* ]] && TOOL="${1#--tool=}"
|
|
13
|
+
|
|
14
|
+
GREEN='\033[0;32m'; YELLOW='\033[1;33m'; RED='\033[0;31m'; RESET='\033[0m'
|
|
15
|
+
log() { echo -e "${GREEN}✓${RESET} $1"; }
|
|
16
|
+
warn() { echo -e "${YELLOW}⚠${RESET} $1"; }
|
|
17
|
+
info() { echo " $1"; }
|
|
18
|
+
err() { echo -e "${RED}✗${RESET} $1"; exit 1; }
|
|
19
|
+
|
|
20
|
+
echo ""
|
|
21
|
+
echo "Wayfind — Uninstall"
|
|
22
|
+
echo ""
|
|
23
|
+
warn "This will remove hooks, commands, and settings fragments."
|
|
24
|
+
warn "Your memory files (global-state.md, memory/) will NOT be deleted."
|
|
25
|
+
echo ""
|
|
26
|
+
read -rp "Continue? [y/N] " confirm
|
|
27
|
+
[[ "$confirm" =~ ^[Yy]$ ]] || { echo "Aborted."; exit 0; }
|
|
28
|
+
|
|
29
|
+
# Remove hook
|
|
30
|
+
HOOK="$HOME/.claude/hooks/check-global-state.sh"
|
|
31
|
+
if [ -f "$HOOK" ]; then
|
|
32
|
+
rm "$HOOK"
|
|
33
|
+
log "Removed $HOOK"
|
|
34
|
+
fi
|
|
35
|
+
|
|
36
|
+
# Remove commands
|
|
37
|
+
CMD="$HOME/.claude/commands/init-memory.md"
|
|
38
|
+
if [ -f "$CMD" ]; then
|
|
39
|
+
rm "$CMD"
|
|
40
|
+
log "Removed $CMD"
|
|
41
|
+
fi
|
|
42
|
+
|
|
43
|
+
DOCTOR_CMD="$HOME/.claude/commands/doctor.md"
|
|
44
|
+
if [ -f "$DOCTOR_CMD" ]; then
|
|
45
|
+
rm "$DOCTOR_CMD"
|
|
46
|
+
log "Removed $DOCTOR_CMD"
|
|
47
|
+
fi
|
|
48
|
+
|
|
49
|
+
# Remove hook from settings.json
|
|
50
|
+
SETTINGS="$HOME/.claude/settings.json"
|
|
51
|
+
if [ -f "$SETTINGS" ] && grep -q "check-global-state" "$SETTINGS" 2>/dev/null; then
|
|
52
|
+
python3 - "$SETTINGS" <<'PYEOF'
|
|
53
|
+
import json, sys
|
|
54
|
+
path = sys.argv[1]
|
|
55
|
+
with open(path) as f:
|
|
56
|
+
settings = json.load(f)
|
|
57
|
+
hooks = settings.get("hooks", {})
|
|
58
|
+
for event in ("SessionStart", "Stop"):
|
|
59
|
+
groups = hooks.get(event, [])
|
|
60
|
+
if not isinstance(groups, list):
|
|
61
|
+
continue
|
|
62
|
+
cleaned = []
|
|
63
|
+
for group in groups:
|
|
64
|
+
if not isinstance(group, dict):
|
|
65
|
+
continue
|
|
66
|
+
# Correct format: {matcher, hooks: [...]}
|
|
67
|
+
if "hooks" in group and isinstance(group["hooks"], list):
|
|
68
|
+
group["hooks"] = [h for h in group["hooks"]
|
|
69
|
+
if not ("check-global-state" in h.get("command", "")
|
|
70
|
+
or "session-end" in h.get("command", ""))]
|
|
71
|
+
if group["hooks"]:
|
|
72
|
+
cleaned.append(group)
|
|
73
|
+
# Legacy flat format: {type, command}
|
|
74
|
+
elif "type" in group:
|
|
75
|
+
cmd = group.get("command", "")
|
|
76
|
+
if "check-global-state" not in cmd and "session-end" not in cmd:
|
|
77
|
+
cleaned.append(group)
|
|
78
|
+
if cleaned:
|
|
79
|
+
hooks[event] = cleaned
|
|
80
|
+
elif event in hooks:
|
|
81
|
+
del hooks[event]
|
|
82
|
+
if not hooks:
|
|
83
|
+
del settings["hooks"]
|
|
84
|
+
with open(path, "w") as f:
|
|
85
|
+
json.dump(settings, f, indent=2)
|
|
86
|
+
f.write("\n")
|
|
87
|
+
PYEOF
|
|
88
|
+
log "Removed hook from $SETTINGS"
|
|
89
|
+
fi
|
|
90
|
+
|
|
91
|
+
# Remove installed kit copy
|
|
92
|
+
KIT_DEST="$HOME/.claude/team-context"
|
|
93
|
+
if [ -d "$KIT_DEST" ]; then
|
|
94
|
+
rm -rf "$KIT_DEST"
|
|
95
|
+
log "Removed $KIT_DEST"
|
|
96
|
+
fi
|
|
97
|
+
|
|
98
|
+
echo ""
|
|
99
|
+
log "Uninstall complete."
|
|
100
|
+
echo ""
|
|
101
|
+
info "Your memory files are preserved:"
|
|
102
|
+
info " ~/.claude/global-state.md"
|
|
103
|
+
info " ~/.claude/memory/"
|
|
104
|
+
info ""
|
|
105
|
+
info "To reinstall: curl -fsSL https://raw.githubusercontent.com/leizerowicz/meridian/main/install.sh | bash"
|
package/README.md
DELETED