diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml index 2f38c45..a0cc428 100644 --- a/.github/FUNDING.yml +++ b/.github/FUNDING.yml @@ -1 +1 @@ -custom: ["https://alivecomputer.com"] +custom: ["https://walnut.world"] diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index 96d63f1..2662863 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -1,5 +1,5 @@ blank_issues_enabled: true contact_links: - name: Community Discussion - url: https://github.com/alivecomputer/alive-claude/discussions + url: https://github.com/stackwalnuts/walnut/discussions about: Questions, ideas, and show & tell diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index 99b3846..6ecac27 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -7,7 +7,7 @@ assignees: '' --- **Component:** -**Affects:** +**Affects:** ## Problem diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 0467acc..d020fe7 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -21,7 +21,7 @@ ## Session context - + ```yaml ``` diff --git a/.github/workflows/validate-plugin.yml b/.github/workflows/validate-plugin.yml index d5888c9..923fc31 100644 --- a/.github/workflows/validate-plugin.yml +++ b/.github/workflows/validate-plugin.yml @@ -16,10 +16,10 @@ jobs: - name: Validate plugin structure run: | - PLUGIN_DIR="plugins/alive" + PLUGIN_DIR="plugins/walnut" ERRORS=0 - echo "=== Validating ALIVE plugin structure ===" + echo "=== Validating Walnut plugin structure ===" # Check required top-level files for file in CLAUDE.md; do @@ -88,7 +88,7 @@ jobs: # Check templates exist echo "" echo "=== Templates ===" - for template_dir in alive walnut capsule squirrel; do + for template_dir in world walnut capsule squirrel; do if [ ! -d "$PLUGIN_DIR/templates/$template_dir" ]; then echo "⚠️ Template directory '$template_dir' not found (optional)" else diff --git a/deploy.sh b/deploy.sh index a3c8969..77b1c4d 100755 --- a/deploy.sh +++ b/deploy.sh @@ -1,37 +1,54 @@ #!/bin/bash -# Deploy alive plugin from local clone to cache +# Deploy walnut plugin from local clone to cache + marketplace # Usage: ./deploy.sh [--dry-run] set -euo pipefail -SOURCE="$(cd "$(dirname "$0")/plugins/alive" && pwd)" -CACHE="$HOME/.claude/plugins/cache/alivecomputer/alive/1.0.1-beta" +SOURCE="$(cd "$(dirname "$0")/plugins/walnut" && pwd)" +CACHE="$HOME/.claude/plugins/cache/stackwalnuts/walnut/1.0.0" +MARKETPLACE="$HOME/.claude/plugins/marketplaces/stackwalnuts/plugins/walnut" if [ ! -d "$SOURCE" ]; then echo "ERROR: Source not found at $SOURCE" exit 1 fi -if [ ! -d "$CACHE" ]; then - echo "ERROR: Cache not found at $CACHE" - exit 1 -fi - DRY_RUN="" if [ "${1:-}" = "--dry-run" ]; then DRY_RUN="--dry-run" echo "=== DRY RUN ===" fi -echo "Source: $SOURCE" -echo "Cache: $CACHE" +echo "Source: $SOURCE" +echo "Cache: $CACHE" +echo "Marketplace: $MARKETPLACE" echo "" -rsync -av --delete \ - --exclude='.git' \ - --exclude='.DS_Store' \ - $DRY_RUN \ - "$SOURCE/" "$CACHE/" +# Deploy to cache (if it exists) +if [ -d "$CACHE" ]; then + rsync -av --delete \ + --exclude='.git' \ + --exclude='.DS_Store' \ + $DRY_RUN \ + "$SOURCE/" "$CACHE/" + echo "" + echo "Cache deployed." +else + echo "Cache dir not found at $CACHE — skipping." +fi + +# Deploy to marketplace (if it exists) +if [ -d "$MARKETPLACE" ]; then + rsync -av --delete \ + --exclude='.git' \ + --exclude='.DS_Store' \ + $DRY_RUN \ + "$SOURCE/" "$MARKETPLACE/" + echo "" + echo "Marketplace deployed." +else + echo "Marketplace dir not found at $MARKETPLACE — skipping." +fi echo "" -echo "Deployed $(date '+%Y-%m-%d %H:%M:%S')" +echo "Done $(date '+%Y-%m-%d %H:%M:%S')" diff --git a/plugins/walnut/CLAUDE.md b/plugins/walnut/CLAUDE.md index ac9c7e0..c6632a4 100644 --- a/plugins/walnut/CLAUDE.md +++ b/plugins/walnut/CLAUDE.md @@ -3,7 +3,7 @@ version: 1.0.1-beta runtime: squirrel.core@1.0 --- -# ALIVE +# Walnut **Personal Private Context Infrastructure** diff --git a/plugins/walnut/hooks/scripts/walnut-log-guardian.sh b/plugins/walnut/hooks/scripts/walnut-log-guardian.sh index 2fb17aa..94d15d2 100755 --- a/plugins/walnut/hooks/scripts/walnut-log-guardian.sh +++ b/plugins/walnut/hooks/scripts/walnut-log-guardian.sh @@ -31,7 +31,7 @@ fi # For Edit: check if the old_string contains a signed entry OLD_STRING=$(echo "$HOOK_INPUT" | jq -r '.tool_input.old_string // empty') -if echo "$OLD_STRING" | grep -q 'signed: squirrel:'; then +if echo "$OLD_STRING" | grep -qE 'signed: (squirrel:|walnut-mcp:)'; then echo '{"hookSpecificOutput":{"hookEventName":"PreToolUse","permissionDecision":"deny","permissionDecisionReason":"log.md is immutable. That entry is signed — add a correction entry instead."}}' exit 0 fi diff --git a/plugins/walnut/hooks/scripts/walnut-rules-guardian.sh b/plugins/walnut/hooks/scripts/walnut-rules-guardian.sh index f106403..16c4b90 100755 --- a/plugins/walnut/hooks/scripts/walnut-rules-guardian.sh +++ b/plugins/walnut/hooks/scripts/walnut-rules-guardian.sh @@ -66,7 +66,7 @@ esac # Block: anything in the Walnut plugin cache case "$FILE_PATH" in - */.claude/plugins/cache/alivecomputer/walnut/*) + */.claude/plugins/cache/stackwalnuts/walnut/*) echo "$DENY_MSG" exit 0 ;; diff --git a/plugins/walnut/hooks/scripts/walnut-session-new.sh b/plugins/walnut/hooks/scripts/walnut-session-new.sh index 8f0695a..e06b2c1 100755 --- a/plugins/walnut/hooks/scripts/walnut-session-new.sh +++ b/plugins/walnut/hooks/scripts/walnut-session-new.sh @@ -143,9 +143,9 @@ if [ -f "$WORLD_KEY_FILE" ]; then WORLD_KEY_CONTENT=$(cat "$WORLD_KEY_FILE") fi -# Read world index (.alive/_index.yaml) for injection — walnut registry +# Read world index (.walnut/_index.yaml) for injection — walnut registry WORLD_INDEX_CONTENT="" -WORLD_INDEX_FILE="$WORLD_ROOT/.alive/_index.yaml" +WORLD_INDEX_FILE="$WORLD_ROOT/.walnut/_index.yaml" if [ -f "$WORLD_INDEX_FILE" ]; then WORLD_INDEX_CONTENT=" $(cat "$WORLD_INDEX_FILE") diff --git a/plugins/walnut/rules/squirrels.md b/plugins/walnut/rules/squirrels.md index 8179f5f..0a097c4 100644 --- a/plugins/walnut/rules/squirrels.md +++ b/plugins/walnut/rules/squirrels.md @@ -98,7 +98,7 @@ One clear explanation. Then move on. Don't over-explain. Don't patronise. Don't Never create or overwrite a system file without reading its template first. -Before writing to `.walnut/` → read the corresponding template from the plugin at `templates/alive/`. +Before writing to `.walnut/` → read the corresponding template from the plugin at `templates/world/`. Before writing to any walnut system file (_core/key.md, _core/now.md, _core/log.md, _core/insights.md, _core/tasks.md) → read the corresponding template from `templates/walnut/`. Before creating a capsule companion → read `templates/capsule/companion.md`. diff --git a/plugins/walnut/skills/extend/SKILL.md b/plugins/walnut/skills/extend/SKILL.md index 5132d59..5f33c04 100644 --- a/plugins/walnut/skills/extend/SKILL.md +++ b/plugins/walnut/skills/extend/SKILL.md @@ -18,7 +18,7 @@ Not about adjusting preferences or voice (that's `walnut:tune`). Extend is about | **Skill** | Repeatable workflow with instructions | `.walnut/skills/{skill-name}/SKILL.md` | | **Rule** | Behavioral constraint or guide | `.walnut/rules/{rule-name}.md` | | **Hook** | Automated trigger on system events | `.walnut/hooks/` (scripts + hooks.json) | -| **Plugin** | Distributable package of skills + rules + hooks | Hands off to `contributor@alivecomputer` | +| **Plugin** | Distributable package of skills + rules + hooks | Hands off to `contributor@stackwalnuts` | --- @@ -178,13 +178,13 @@ When a custom skill is polished and battle-tested: ╰─ ``` -**Contributor plugin handoff:** For marketplace packaging, PII stripping, testing, and publishing -> suggest installing `contributor@alivecomputer`. This is a SEPARATE plugin, not part of walnut core. The extend skill's job ends at building working custom capabilities. The contributor plugin handles everything from packaging to publishing. +**Contributor plugin handoff:** For marketplace packaging, PII stripping, testing, and publishing -> suggest installing `contributor@stackwalnuts`. This is a SEPARATE plugin, not part of walnut core. The extend skill's job ends at building working custom capabilities. The contributor plugin handles everything from packaging to publishing. ``` ╭─ 🐿️ to publish this skill: │ │ 1. Install the contributor plugin: -│ claude plugin install contributor@alivecomputer +│ claude plugin install contributor@stackwalnuts │ │ 2. Run: walnut:contribute {skill-name} │ It handles: PII check, packaging, testing, submission diff --git a/plugins/walnut/skills/history/SKILL.md b/plugins/walnut/skills/history/SKILL.md index d28628c..2e5c2ec 100644 --- a/plugins/walnut/skills/history/SKILL.md +++ b/plugins/walnut/skills/history/SKILL.md @@ -36,7 +36,7 @@ Show recent sessions across all walnuts. │ System architecture, blueprint, 8 skills built, shipped v0.1-beta │ │ 2. a44d04aa orbit-lab yesterday opus-4-6 -│ alivecomputer.com rebuilt, whitepaper v0.3, brand locked +│ walnut.world rebuilt, whitepaper v0.3, brand locked │ │ 3. 5551126e orbit-lab Feb 22 opus-4-6 │ Companion app, web installer, plugin v0.1-beta released diff --git a/plugins/walnut/skills/world/setup.md b/plugins/walnut/skills/world/setup.md index fe5a8d5..91ca645 100644 --- a/plugins/walnut/skills/world/setup.md +++ b/plugins/walnut/skills/world/setup.md @@ -6,7 +6,7 @@ internal: true # Setup — Three Paths to a World -First time. No ALIVE folders exist. You just installed alive. Make it feel like something just came alive. +First time. No ALIVE folders exist. You just installed Walnut. Make it feel like something just came alive. All three paths produce the same result: a fully scaffolded ALIVE world with domain folders, `.walnut/` config, and at least one walnut. The only difference is how we collect the information. @@ -400,7 +400,7 @@ Show: #### Step 2: World identity — .walnut/key.md -Read the template from the plugin: `templates/alive/key.md` +Read the template from the plugin: `templates/world/key.md` Replace template variables: - `{{name}}` → world name @@ -434,7 +434,7 @@ Show: #### Step 3: Preferences — .walnut/preferences.yaml -Read the template from the plugin: `templates/alive/preferences.yaml` +Read the template from the plugin: `templates/world/preferences.yaml` If preferences were provided (Path A only), uncomment the relevant lines and set values. @@ -460,7 +460,7 @@ Show: #### Step 4: Overrides — .walnut/overrides.md -Read the template from the plugin: `templates/alive/overrides.md` +Read the template from the plugin: `templates/world/overrides.md` Write as-is. No variable replacement needed. diff --git a/plugins/walnut/templates/alive/agents.md b/plugins/walnut/templates/world/agents.md similarity index 100% rename from plugins/walnut/templates/alive/agents.md rename to plugins/walnut/templates/world/agents.md diff --git a/plugins/walnut/templates/alive/key.md b/plugins/walnut/templates/world/key.md similarity index 96% rename from plugins/walnut/templates/alive/key.md rename to plugins/walnut/templates/world/key.md index 09d232a..fa1c75e 100644 --- a/plugins/walnut/templates/alive/key.md +++ b/plugins/walnut/templates/world/key.md @@ -30,7 +30,7 @@ links: [] - **Slack** — via MCP server. Posts to channels, reads history. - **Notion** — via MCP server. Task management, knowledge base. - **Otter** — transcript sync script at ~/scripts/otter-sync.sh - - **GitHub** — via gh CLI. Repos: alivecomputer/walnut + - **GitHub** — via gh CLI. Repos: stackwalnuts/walnut --> ## Key People diff --git a/plugins/walnut/templates/alive/overrides.md b/plugins/walnut/templates/world/overrides.md similarity index 100% rename from plugins/walnut/templates/alive/overrides.md rename to plugins/walnut/templates/world/overrides.md diff --git a/plugins/walnut/templates/alive/preferences.yaml b/plugins/walnut/templates/world/preferences.yaml similarity index 100% rename from plugins/walnut/templates/alive/preferences.yaml rename to plugins/walnut/templates/world/preferences.yaml diff --git a/src/index.ts b/src/index.ts index 4b1cf11..84b28f3 100644 --- a/src/index.ts +++ b/src/index.ts @@ -263,7 +263,7 @@ server.tool( content: [ { type: "text" as const, - text: `Captured to ${walnut}/_capsules/${capsule}/raw/${filename}`, + text: `Captured to ${walnut}/_core/_capsules/${capsule}/raw/${filename}`, }, ], }; @@ -340,7 +340,7 @@ server.tool( // Create directory structure const coreDir = join(walnutDir, "_core"); - const capsulesDir = join(walnutDir, "_capsules"); + const capsulesDir = join(coreDir, "_capsules"); mkdirSync(coreDir, { recursive: true }); mkdirSync(capsulesDir, { recursive: true }); diff --git a/src/setup.ts b/src/setup.ts index 3e745c5..dbc8435 100644 --- a/src/setup.ts +++ b/src/setup.ts @@ -117,7 +117,7 @@ export async function runSetup() { for (const d of domains) { mkdirSync(join(worldPath, d), { recursive: true }); } - mkdirSync(join(worldPath, ".alive"), { recursive: true }); + mkdirSync(join(worldPath, ".walnut"), { recursive: true }); mkdirSync(join(worldPath, "02_Life", "people"), { recursive: true }); configured.push("World scaffolded at ~/world/"); } else { diff --git a/src/world/scanner.ts b/src/world/scanner.ts index 26ab49a..282b382 100644 --- a/src/world/scanner.ts +++ b/src/world/scanner.ts @@ -181,7 +181,7 @@ function walkForWalnuts(dir: string, results: FoundKeyMd[]): void { }); } - // Recurse into subdirectories, but skip _core/, _capsules/, _squirrels/, .alive/ + // Recurse into subdirectories, but skip _core/, _capsules/, _squirrels/, .walnut/ for (const entry of entries) { if (entry.startsWith(".") || entry === "_core" || entry === "_capsules" || entry === "_squirrels") { continue;