From 7d809af569899660446b6dc74bbe13891a012a42 Mon Sep 17 00:00:00 2001 From: Mao Nakamoto <41178744+maonakamoto@users.noreply.github.com> Date: Thu, 27 Aug 2026 21:22:05 +0200 Subject: [PATCH] chore: retire the dead agent runtime, and describe what this repo is now MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CLAUDE.md called the PyQt beacon and dashboard "the core product". Neither file has existed for months: the dashboard was deleted in 9717cf2 ("kill dashboard") and claude-popup.py was renamed in 8fa7ea7. Every session opening this repo was being briefed on a product that is gone, and told to test it with a command that cannot run. What was actually left behind pointed at ~/dev/cockpit, a directory that stopped existing when that repo became fleetcrown: - beacon.py exec'd ~/dev/cockpit/scripts/beacon.py -> deleted - lib.sh sourced ~/dev/cockpit/scripts/agent-hook-lib.sh -> deleted - notification.sh exec'd a fleetcrown-beacon bridge that is also gone, so the wired Notification hook failed every pause -> no-op, matching stop.sh, which has been a documented no-op since 2026-06-11 .bashrc carried the same rot, plus a duplicate-definition bug: claude() and codex() were each defined twice, ~130 lines apart, so the first copy of each never ran. Removed the dead copies, cockpit() (cd into the missing dir), and the zellij-tab project detection — _agent_resolve_project_dir mapped the focused tab name through claude-projects.conf and silently cd'd there, which the global standards already declare retired. It was provably dead: tabs read "Tab #9" and match nothing, and 5 of the conf's 22 entries pointed at directories that no longer exist. Verified with --norc that the three removed functions are gone and every live one still resolves. The close_session prompt was the last consumer of that mapping, and the reason a file literally named "Tab #1" is sitting in ~/.claude/sessions. It now derives the project from the git repo root, so worktrees resolve to their repo instead of the worktree name. Gitignored fleetcrown-*.sh: Fleet Runner generates and rewrites them, so they are FleetCrown's output, not this repo's source. CLAUDE.md and README.md now say what is true — this is the environment plus the fleet's central audits, and agent dispatch belongs to FleetCrown. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01AZCNYHwjEeqxNpYCUk6Yna --- .bashrc | 116 +++------------------------------- .claude/hooks/beacon.py | 16 ----- .claude/hooks/lib.sh | 6 -- .claude/hooks/notification.sh | 10 ++- .config/claude-projects.conf | 25 -------- .config/claude-prompts.json | 2 +- .gitignore | 4 ++ CLAUDE.md | 100 +++++++++++++++++++---------- README.md | 42 ++++++++---- install.sh | 2 - 10 files changed, 118 insertions(+), 205 deletions(-) delete mode 100755 .claude/hooks/beacon.py delete mode 100644 .claude/hooks/lib.sh delete mode 100644 .config/claude-projects.conf diff --git a/.bashrc b/.bashrc index 9fda9bf..b55f088 100644 --- a/.bashrc +++ b/.bashrc @@ -330,120 +330,24 @@ if [ -z "${ZELLIJ:-}" ] && [ -z "${BASH_EXECUTION_STRING:-}" ] && command -v zel fi # ═══════════════════════════════════════════════════ -# Agent + Cockpit helpers with Zellij Tab Awareness +# Agent helpers # ═══════════════════════════════════════════════════ -_agent_resolve_project_dir() { - local CONFIG="$HOME/.config/claude-projects.conf" - [ -f "$CONFIG" ] || return 1 - - local TAB_NAME TMP="/tmp/_claude_zt_$$.txt" - zellij action dump-layout > "$TMP" 2>/dev/null - TAB_NAME=$(grep 'focus=true' "$TMP" | grep 'tab name=' | sed 's/.*tab name="\([^"]*\)".*/\1/') - rm -f "$TMP" - [ -z "$TAB_NAME" ] && return 1 - - local DIR - DIR=$(while IFS='|' read -r name dir; do - [[ "$name" =~ ^#.*$ ]] && continue - [ -z "$name" ] && continue - local clean_tab=$(echo "$TAB_NAME" | sed 's/[$[:space:]]*$//') - local clean_name=$(echo "$name" | sed 's/[$[:space:]]*$//') - if [ "${clean_tab,,}" = "${clean_name,,}" ]; then - echo "$dir" - break - fi - done < "$CONFIG") - - [ -z "$DIR" ] && return 1 - [ -d "$DIR" ] || return 1 - echo "$DIR" -} - -_agent_cd_from_tab_if_home() { - [ "$PWD" = "$HOME" ] || return 0 - [ -n "${ZELLIJ:-}" ] || return 0 - - local PROJECT_DIR - PROJECT_DIR=$(_agent_resolve_project_dir) - if [ -n "$PROJECT_DIR" ]; then - echo " -> Tab -> $PROJECT_DIR" - cd "$PROJECT_DIR" || return 1 - fi -} - -claude() { - _agent_cd_from_tab_if_home || true - - local SESSION_DIR="$HOME/.claude/sessions" - mkdir -p "$SESSION_DIR" - - local DIR_HASH=$(echo "$(pwd)" | md5sum | cut -d' ' -f1) - local SESSION_FILE="$SESSION_DIR/$DIR_HASH.txt" - local PROJECT=$(basename "$(pwd)") - - if [ -f "$SESSION_FILE" ]; then - local SAVED_TIME=$(cut -d'|' -f2 "$SESSION_FILE" 2>/dev/null || echo "0") - local NOW=$(date +%s) - local DIFF=$((NOW - SAVED_TIME)) - - if [ $DIFF -gt 120 ] && [ $DIFF -lt 172800 ]; then - local SAVED_PROJECT=$(cut -d'|' -f1 "$SESSION_FILE") - local HOURS=$((DIFF / 3600)) - local MINS=$(((DIFF % 3600) / 60)) - - local TIME_AGO="" - if [ $HOURS -gt 0 ]; then - TIME_AGO="${HOURS}h ${MINS}m ago" - else - TIME_AGO="${MINS}m ago" - fi - - echo "" - echo " Previous session: $SAVED_PROJECT ($TIME_AGO)" - echo " Tell Claude: \"continue\"" - echo "" - fi - fi - - echo "$PROJECT|$(date +%s)|$(pwd)" > "$SESSION_FILE" - - # Write tab identity keyed by ZELLIJ_PANE_ID so Claude can detect its project - # even after context-limit continuations (which don't re-run this wrapper). - if [ -n "$ZELLIJ_PANE_ID" ]; then - local _tab - _tab=$(zellij action dump-layout 2>/dev/null \ - | grep 'focus=true' \ - | grep 'tab name=' \ - | sed 's/.*tab name="\([^"]*\)".*/\1/' \ - | head -1) - [ -n "$_tab" ] && printf '%s' "$_tab" > "/tmp/claude-pane-${ZELLIJ_PANE_ID}" - - # Record which monitor the cursor is on right now — cursor is in the terminal - # at invocation time, so this is the terminal's screen. beacon.py reads this. - python3 "$HOME/dev/cockpit/scripts/record-terminal-screen.py" \ - "${ZELLIJ_PANE_ID}" 2>/dev/null & - fi +# The zellij-tab -> project mapping that used to live here was removed on +# 2026-08-27. It resolved the focused tab name against ~/.config/ +# claude-projects.conf and silently cd'd there. Tabs have not been renamed per +# project for months (they read "Tab #9"), so it matched nothing — and when it +# did match it could move you into the wrong project. cwd is the project. - command claude "$@" - rm -f "/tmp/claude-pane-${ZELLIJ_PANE_ID}" "/tmp/claude-screen-${ZELLIJ_PANE_ID}" -} - -codex() { - _agent_cd_from_tab_if_home || true - command codex --no-alt-screen "$@" -} - -cockpit() { - cd "$HOME/dev/cockpit" || return 1 - npm run dev "$@" -} +# claude() and codex() used to be defined here. Both were overridden ~130 +# lines below ("Override existing claude/codex"), so these copies never ran — +# the live definitions are the later ones. cockpit() cd'd into ~/dev/cockpit, +# which no longer exists (the repo became fleetcrown). Removed 2026-08-27. # Secrets (passwords, tokens) — loaded from .env, which is gitignored [ -f "$HOME/.env" ] && source "$HOME/.env" # --- Agent Orchestration Wrappers --- _agent_pre_launch() { - _agent_cd_from_tab_if_home || true if [ -n "$ZELLIJ_PANE_ID" ]; then local _tab _tab=$(zellij action dump-layout 2>/dev/null | grep 'focus=true' | grep 'tab name=' | sed 's/.*tab name="\([^"]*\)".*/\1/' | head -1) diff --git a/.claude/hooks/beacon.py b/.claude/hooks/beacon.py deleted file mode 100755 index 530b4b7..0000000 --- a/.claude/hooks/beacon.py +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/env python3 -import os -import sys - -COCKPIT_BEACON = os.path.expanduser("~/dev/cockpit/scripts/beacon.py") -QT_LIB = os.path.expanduser("~/dev/cockpit/.python-vendor/site-packages/PyQt6/Qt6/lib") -QT_PLUGINS = os.path.expanduser("~/dev/cockpit/.python-vendor/site-packages/PyQt6/Qt6/plugins") - -ld = os.environ.get("LD_LIBRARY_PATH", "") -paths = [QT_LIB, "/lib/x86_64-linux-gnu", "/usr/lib/x86_64-linux-gnu"] -if ld: - paths.append(ld) -os.environ["LD_LIBRARY_PATH"] = ":".join(paths) -os.environ["QT_PLUGIN_PATH"] = QT_PLUGINS - -os.execvp("python3", ["python3", COCKPIT_BEACON, *sys.argv[1:]]) diff --git a/.claude/hooks/lib.sh b/.claude/hooks/lib.sh deleted file mode 100644 index 4402fb6..0000000 --- a/.claude/hooks/lib.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash -# Compatibility shim. The hook runtime now lives in Cockpit. -# Source this file from legacy hooks if they still expect ~/.claude/hooks/lib.sh. - -# shellcheck source=/dev/null -source /home/g/dev/cockpit/scripts/agent-hook-lib.sh diff --git a/.claude/hooks/notification.sh b/.claude/hooks/notification.sh index bbfa18b..8d7e198 100755 --- a/.claude/hooks/notification.sh +++ b/.claude/hooks/notification.sh @@ -1,2 +1,10 @@ #!/usr/bin/env bash -exec "/home/g/.local/share/fleetcrown-beacon/agent-hook-bridge.sh" notification +# No-op since 2026-08-27. +# +# This previously exec'd ~/.local/share/fleetcrown-beacon/agent-hook-bridge.sh, +# which has not existed since the bash bridge was retired — so every +# Notification event failed here. Dispatch on idle now belongs to FleetCrown's +# Fleet Runner (home/watcher.ts -> notifyOnIdle), not to this repo. +# +# Kept as a wired no-op rather than deleted so settings.json stays valid. +exit 0 diff --git a/.config/claude-projects.conf b/.config/claude-projects.conf deleted file mode 100644 index b3e0219..0000000 --- a/.config/claude-projects.conf +++ /dev/null @@ -1,25 +0,0 @@ -# Zellij tab name → project directory mapping -# Format: tab_name|directory -# Matching is case-insensitive — one entry per project is enough. -evig|/home/g/dev/evig -Revamp-Info|/home/g/dev/revamp-info -AOZ|/home/g/dev/aoz-housing -OrangeCat|/home/g/dev/orangecat -Kivvi|/home/g/dev/kivvi -OpenClaw|/home/g/openclaw -Cockpit|/home/g/dev/cockpit -Cockpit Claude|/home/g/dev/cockpit -Cockpit Openclaw|/home/g/dev/cockpit -Dotfiles|/home/g/dev/dotfiles -SYL|/home/g/dev/surf-your-life -Vitareba|/home/g/dev/vitareba -petvity|/home/g/dev/petvity -DataCat|/home/g/dev/datacat -Printcraft|/home/g/dev/printcraft -Solon|/home/g/dev/solon -Hirnli|/home/g/dev/hirnli -Botsmann|/home/g/dev/botsmann -Ivy|/home/g/dev/ivy-portal -Bitbaum|/home/g/dev/bitbaum -Fitfoot|/home/g/dev/fitfoot -Warbuffet|/home/g/dev/warbuffet diff --git a/.config/claude-prompts.json b/.config/claude-prompts.json index eb5f1ab..48a9af3 100644 --- a/.config/claude-prompts.json +++ b/.config/claude-prompts.json @@ -114,7 +114,7 @@ "label": "Close session", "style": "more", "category": "ship", - "prompt": "Close this work session cleanly so the next session can start cold. Perform these steps in order:\n\nStep 1 — Finish uncommitted work:\nRun git status. If there are uncommitted changes, commit them with a conventional commit message ((): ). If scratch/debug work, stash or discard it.\n\nStep 2 — Quality gate:\nRun the project type checker and linter (e.g. tsc --noEmit && eslint src/ for TypeScript). They must pass with zero errors. Fix any failures before continuing.\n\nStep 3 — Run tests:\nRun the project test suite. Note the result (N pass / N fail).\n\nStep 4 — Write session handoff:\nDetermine the tab name: run `grep -i \"$(pwd -P)\" ~/.config/claude-projects.conf | head -1 | cut -d'|' -f1 | tr -d ' '`. Use that as TAB (fall back to directory name if empty). Write exactly these lines to ~/.claude/sessions/.md:\ndone: \nnext: \ntests: \ntodos: \nhealth: — HEAD , \n\nStep 5 — Final report:\nPrint a clear summary:\n- Uncommitted changes: YES (committed as ) / NO / STASHED\n- Quality checks: PASS / FAIL\n- Tests: PASS (N/N) / FAIL\n- Session file written to: ~/.claude/sessions/.md\n- Safe to close this tab: YES / NO — \n\n(Note: the popup-suppression sentinel is written automatically by the infrastructure — you do not need to write any /tmp files.)" + "prompt": "Close this work session cleanly so the next session can start cold. Perform these steps in order:\n\nStep 1 — Finish uncommitted work:\nRun git status. If there are uncommitted changes, commit them with a conventional commit message ((): ). If scratch/debug work, stash or discard it.\n\nStep 2 — Quality gate:\nRun the project type checker and linter (e.g. tsc --noEmit && eslint src/ for TypeScript). They must pass with zero errors. Fix any failures before continuing.\n\nStep 3 — Run tests:\nRun the project test suite. Note the result (N pass / N fail).\n\nStep 4 — Write session handoff:\nDetermine the project: run `basename \"$(git rev-parse --show-toplevel 2>/dev/null || pwd -P)\"`. Use that as PROJECT (a worktree resolves to its repo root, not the worktree name). Write exactly these lines to ~/.claude/sessions/.md:\ndone: \nnext: \ntests: \ntodos: \nhealth: — HEAD , \n\nStep 5 — Final report:\nPrint a clear summary:\n- Uncommitted changes: YES (committed as ) / NO / STASHED\n- Quality checks: PASS / FAIL\n- Tests: PASS (N/N) / FAIL\n- Session file written to: ~/.claude/sessions/.md\n- Safe to close this tab: YES / NO — \n\n(Note: the popup-suppression sentinel is written automatically by the infrastructure — you do not need to write any /tmp files.)" }, { "key": "continue", diff --git a/.gitignore b/.gitignore index bbb3575..f7ed66a 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,7 @@ __pycache__/ # Per-session agent worktrees — scratch, never part of the repo. .claude/worktrees/ + +# FleetCrown Fleet Runner generates these on startup and rewrites them. +# Their source is FleetCrown (capture-hook.ts), not this repo. +.claude/hooks/fleetcrown-*.sh diff --git a/CLAUDE.md b/CLAUDE.md index fbece15..e31c6d6 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -1,56 +1,86 @@ -## Mission -Turn AI-assisted development into a reliable autopilot: Claude autonomously maintains and advances 19+ projects, surfaces the right work at the right time, and keeps the human in control with minimal friction. - ## What This Repo Is -George's dotfiles and Claude Code automation system. The Claude hooks in `.claude/hooks/` are the core product — a real-time agentic development platform. + +George's dotfiles, plus the **fleet's central automation** — the CI checks and +audits that run from here against every other repo, and `SHARED.md`, the +registry of shared packages. + +**It is no longer the agent runtime.** The stop/notify/dispatch loop that used +to live here — the PyQt beacon, prompt injection into Zellij tabs, the bash +bridge — migrated to FleetCrown (Fleet Runner) over 2026-06. What remains in +`.claude/hooks/` is the thin per-session edge; anything about *dispatching +work to agents* belongs in FleetCrown, not here. ## Architecture ``` -.claude/hooks/ - claude-popup.py PyQt6 stop/confirm popup (Whisper STT, progressive disclosure) - claude-dashboard.py PyQt6 projects dashboard (All Projects overview + profiles) - stop.sh Fires on Claude finish → popup → prompt injection into Zellij tab - notification.sh Fires on Claude pause → auto-injects "continue" - pre-tool-use.sh Auto-approves safe commands, shows confirm popup for destructive ops - lib.sh Shared: resolve_tab, get_prompt, inject_prompt, play_sound - -.config/ - claude-prompts.json SSOT for all 13 injected prompts (next_best, test_and_fix, etc.) - claude-projects.conf Zellij tab name → project directory registry (19 projects) - claude-dashboard-settings.json Runtime settings: whisper model, countdown, Claude model +scripts/ci/ Fleet-wide audits. These run FROM here against every repo, + so there is nothing to adopt and nothing to drift: + auto-merge-sweep.sh the canonical merge policy (16 repos + call it as a reusable workflow) + model-pin-audit.mjs is any pinned model id still served? + verify-floor-audit.sh does every repo's `verify` really run + lint + typecheck + test? + shared-inventory.sh the duplication ratchet + ui-defect-audit.mjs, verify-predicates.sh, find-false-needs.py + Each has a test-*.sh / test-*.mjs beside it. Keep it that way. +scripts/fleet/ Local upkeep: gc-merged-worktrees.sh, stranded-work.sh +scripts/audit/ secret-in-response.py +templates/ci/ Golden CI workflows + pre-commit. ONE central copy, never a + fork per repo — see templates/ci/README.md. +.github/workflows/ This repo's own CI, plus the scheduled fleet audits. +SHARED.md The shared-package registry and the duplication ratchet. + Read it before building anything cross-cutting. + +.claude/hooks/ Per-session edge only (see the table below). +.claude/skills/ fix-lint, fix-types, write-tests +.config/ kitty, starship, zellij, git hooks +.bashrc .ssh/config .editorconfig install.sh ``` -## Design System (PyQt6) -All design tokens live in `claude-dashboard.py` at the top as module-level constants. -**SSOT rule**: never hardcode a color, size, or spacing inline — use the constants. +## The hooks, and which are actually alive -Font stack (set via `QFont` in `main()`): -- UI: Inter → Segoe UI → Helvetica Neue → sans-serif -- Mono: JetBrains Mono → Fira Code → Cascadia Code +`settings.json` is the SSOT for what runs. Verified 2026-08-27: -Spacing uses an 8px grid: 8, 16, 24, 32, 48. -Border radius: sm=8, md=12, lg=16, card=12. +| Hook | Event | State | +|---|---|---| +| `pre-tool-use.sh` | PreToolUse | **alive** — auto-approves; audits destructive commands to `dangerous-commands.log` | +| `post-tool-use.sh` | PostToolUse | **alive** — typechecks after `.ts/.tsx` writes and feeds errors back | +| `keep-awake-acquire.sh` / `-release.sh` | UserPromptSubmit / Stop | **alive** — inhibits sleep while a session is working | +| `fleetcrown-capture.sh`, `fleetcrown-session-end.sh` | UserPromptSubmit / Stop | **alive, but not ours** — generated by FleetCrown's Fleet Runner, which rewrites them on startup. Gitignored deliberately. Do not edit here. | +| `stop.sh` | Stop | **no-op since 2026-06-11.** Dispatch moved to Fleet Runner. | +| `notification.sh` | Notification | **no-op since 2026-08-27.** Previously exec'd a bridge under `~/.local/share/fleetcrown-beacon/` that no longer exists, so it failed on every pause. | + +If you are about to add agent-dispatch logic here, stop: that is FleetCrown's job +now. This repo's half is the environment and the fleet-wide checks. ## When Working Here -**Test changes (always run both):** +**Test changes:** ```bash -python3 -c "import py_compile; py_compile.compile('.claude/hooks/claude-dashboard.py', doraise=True)" -DISPLAY=:0 timeout 4 python3 .claude/hooks/claude-dashboard.py +bash -n .claude/hooks/*.sh # syntax +scripts/ci/test-auto-merge-sweep.sh # the audits have real suites — run +scripts/ci/test-model-pin-audit.mjs # the one you touched +scripts/ci/test-shared-inventory.sh +scripts/fleet/test-stranded-work.sh ``` -**Commit frequently** — these hooks power all 19 projects. Every working state should be committed. +**Commit frequently** — these checks gate every repo in the fleet. + +**After editing a hook**: takes effect on the next session event. There is no +daemon to restart. + +**Before adding a fleet-wide checker**: it probably exists in `scripts/ci/`. +Before adding a shared library: read `SHARED.md`. -**After editing prompts** (`claude-prompts.json`): the changes take effect immediately on the next Stop hook fire. No restart needed. +## Project detection -**After editing hooks** (`stop.sh`, `notification.sh`, etc.): changes take effect on the next Claude session finish/pause. +Use `cwd`. The session registry at `~/.claude/sessions/.json` is the SSOT +for what else is running. -## Key Constraints -- PyQt6 only — no web tech, no Electron, no external servers -- Prompts injected via `zellij action write-chars` — no length limit but keep them focused -- Session files at `~/.claude/sessions/.md` — one per project, updated by Claude -- Settings at `~/.config/claude-dashboard-settings.json` — shared between popup and dashboard +**Zellij tab names are not project identity.** Tabs read `Tab #9`, one pane hosts +many concurrent sessions, and the `claude-projects.conf` mapping was removed on +2026-08-27 after it had been dead for months (nothing could match `Tab #9`). +Do not reintroduce it. ## Quality Standards @~/.claude/CLAUDE.md diff --git a/README.md b/README.md index 594f269..2a3a938 100644 --- a/README.md +++ b/README.md @@ -1,22 +1,38 @@ # dotfiles -Personal development environment configuration for Linux. +George's Linux environment, plus the fleet's central automation. -## What's included +Two things live here, and only these two: -- Shell configuration (Zsh/Bash) -- Editor settings -- Git configuration -- Tool configs and aliases - -## Setup +**1. The environment.** `.bashrc`, `.ssh/config`, `.editorconfig`, and +`.config/` (kitty, starship, zellij, git hooks). Installed by symlink: ```bash -git clone https://github.com/g-but/dotfiles.git ~/dotfiles -cd ~/dotfiles -# Symlink configs as needed +git clone git@github.com:catomean/dotfiles.git ~/dev/dotfiles +cd ~/dev/dotfiles && ./install.sh ``` -## Structure +**2. Fleet-wide automation.** Checks that run *from this repo against every +other repo*, so there is one copy and nothing can drift: + +| | | +|---|---| +| [`SHARED.md`](SHARED.md) | the shared-package registry and the duplication ratchet — **read before building anything cross-cutting** | +| `scripts/ci/auto-merge-sweep.sh` | the canonical merge policy; 16 repos call it as a reusable workflow | +| `scripts/ci/model-pin-audit.mjs` | runs daily: is any model id the fleet pins still served by its vendor? | +| `scripts/ci/verify-floor-audit.sh` | does every repo's `verify` actually run lint + typecheck + test? | +| `scripts/ci/shared-inventory.sh` | counts duplication across the fleet and holds it as a ratchet | +| `templates/ci/` | golden CI workflows + pre-commit, deliberately one central copy | + +Every audit has a test suite beside it (`test-*.sh`, `test-*.mjs`). Keep it +that way — these gate every repo, so a broken checker is a fleet-wide outage. + +## What does *not* live here + +Agent dispatch. The stop/notify loop, prompt injection and the PyQt beacon +migrated to **FleetCrown** (Fleet Runner) over 2026-06. `.claude/hooks/` keeps +only the thin per-session edge — see [CLAUDE.md](CLAUDE.md) for which hooks are +alive and which are deliberate no-ops. -Configuration files are organized by tool. Symlink or source them from your home directory. +Product and business decisions belong in the repo that owns them, not beside +`SHARED.md`. diff --git a/install.sh b/install.sh index 9aff895..4726099 100755 --- a/install.sh +++ b/install.sh @@ -46,8 +46,6 @@ link .config/kitty/kitty.conf link .config/starship.toml link .config/zellij/config.kdl -# Project mapping -link .config/claude-projects.conf link .config/claude-prompts-meta.json # Editor