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.
Files changed (60) hide show
  1. package/BOOTSTRAP_PROMPT.md +120 -0
  2. package/bin/connectors/github.js +617 -0
  3. package/bin/connectors/index.js +13 -0
  4. package/bin/connectors/intercom.js +595 -0
  5. package/bin/connectors/llm.js +469 -0
  6. package/bin/connectors/notion.js +747 -0
  7. package/bin/connectors/transport.js +325 -0
  8. package/bin/content-store.js +2006 -0
  9. package/bin/digest.js +813 -0
  10. package/bin/rebuild-status.js +297 -0
  11. package/bin/slack-bot.js +1535 -0
  12. package/bin/slack.js +342 -0
  13. package/bin/storage/index.js +171 -0
  14. package/bin/storage/json-backend.js +348 -0
  15. package/bin/storage/sqlite-backend.js +415 -0
  16. package/bin/team-context.js +4209 -0
  17. package/bin/telemetry.js +159 -0
  18. package/doctor.sh +291 -0
  19. package/install.sh +144 -0
  20. package/journal-summary.sh +577 -0
  21. package/package.json +48 -6
  22. package/setup.sh +641 -0
  23. package/specializations/claude-code/CLAUDE.md-global-fragment.md +53 -0
  24. package/specializations/claude-code/CLAUDE.md-repo-fragment.md +16 -0
  25. package/specializations/claude-code/README.md +99 -0
  26. package/specializations/claude-code/commands/doctor.md +31 -0
  27. package/specializations/claude-code/commands/init-memory.md +154 -0
  28. package/specializations/claude-code/commands/init-team.md +415 -0
  29. package/specializations/claude-code/commands/journal.md +66 -0
  30. package/specializations/claude-code/commands/review-prs.md +119 -0
  31. package/specializations/claude-code/hooks/check-global-state.sh +20 -0
  32. package/specializations/claude-code/hooks/session-end.sh +36 -0
  33. package/specializations/claude-code/settings.json +15 -0
  34. package/specializations/cursor/README.md +120 -0
  35. package/specializations/cursor/global-rule.mdc +53 -0
  36. package/specializations/cursor/repo-rule.mdc +25 -0
  37. package/specializations/generic/README.md +47 -0
  38. package/templates/autopilot/design.md +22 -0
  39. package/templates/autopilot/engineering.md +22 -0
  40. package/templates/autopilot/product.md +22 -0
  41. package/templates/autopilot/strategy.md +22 -0
  42. package/templates/autopilot/unified.md +24 -0
  43. package/templates/deploy/.env.example +110 -0
  44. package/templates/deploy/docker-compose.yml +63 -0
  45. package/templates/deploy/slack-app-manifest.json +45 -0
  46. package/templates/github-actions/meridian-digest.yml +85 -0
  47. package/templates/global.md +79 -0
  48. package/templates/memory-file.md +18 -0
  49. package/templates/personal-state.md +14 -0
  50. package/templates/personas.json +28 -0
  51. package/templates/product-state.md +41 -0
  52. package/templates/prompts-readme.md +19 -0
  53. package/templates/repo-state.md +18 -0
  54. package/templates/session-protocol-fragment.md +46 -0
  55. package/templates/slack-app-manifest.json +27 -0
  56. package/templates/statusline.sh +22 -0
  57. package/templates/strategy-state.md +39 -0
  58. package/templates/team-state.md +55 -0
  59. package/uninstall.sh +105 -0
  60. 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
@@ -1,4 +0,0 @@
1
- # wayfind
2
- Team context layer for AI-assisted engineering.
3
-
4
- Coming soon. https://usewayfind.ai