skills/setup/SKILL.md
Interactive setup wizard — initializes the EA memory folder, fills in placeholders, and checks connector availability. Use when the user says "setup", "initialize", "get started", or when the SessionStart hook reports memory is not initialized.
npx skillsauth add EqualsGroup/claude-executive-assistant setupInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
EA_ROOT. If the SessionStart hook
already output it, use that path./sessions/*/mnt/ (any
directory that is not outputs or uploads). If found, set
EA_ROOT to {mount}/claude-executive-assistant.~/claude-executive-assistant/ (shared across all projects).$EA_ROOT/memory already exists, skip to Phase 0b then Phase 2.$EA_ROOT doesn't exist yet, confirm:
"I'll create ~/claude-executive-assistant/ to store your persistent memory. This folder
is shared across all your projects. OK?"Check if the SessionStart hook set LOCAL_EA — this means the current
working directory has EA files (from the old clone-based setup) that
differ from the shared location.
Also independently scan for EA files in the current directory (memory/
dir + CLAUDE.md present) even if the hook didn't flag it.
If local files found and shared location is empty (first-time plugin install):
[cwd]. Want me to move
them to ~/claude-executive-assistant/ so they're shared across all your projects?"EA_ROOT, continue setup.EA_ROOT to the current directory and continue.If local files found and shared location also has files (merge scenario):
[cwd] and ~/claude-executive-assistant/ have EA files. I can merge them
— for each file, I'll keep the most recent version. Want me to show you the
plan first?"~/claude-executive-assistant/) becomes the single source of
truth. Offer to clean up the local copy.mkdir -p "$EA_ROOT/memory/people"
mkdir -p "$EA_ROOT/outputs/meeting-prep"
mkdir -p "$EA_ROOT/outputs/assessments"
mkdir -p "$EA_ROOT/outputs/drafts"
mkdir -p "$EA_ROOT/outputs/proposals"
mkdir -p "$EA_ROOT/outputs/reviews"
mkdir -p "$EA_ROOT/sync"
Copy scaffold templates from the plugin's scaffold/ directory into $EA_ROOT/.
Use ${CLAUDE_PLUGIN_ROOT}/scaffold/ to locate them.
Initialize git:
cd "$EA_ROOT" && git init && git add -A && git commit -m "Initialize EA memory"
Check which MCP tools are available in the current session. Check browser tools first — they unlock several later steps (GitHub token creation, HR system access).
~~browser (Claude in Chrome) — use ToolSearch for chrome or
Claude_in_Chrome to detect browser tools.
If found: note that browser automation is available. This enables:
If not found: explain what browser tools enable and guide setup: "Browser tools let me interact with websites on your behalf — creating GitHub tokens, accessing HR systems, and more. To set it up:"
Offer to continue without it — browser tools are optional but strongly
recommended, especially in Cowork where gh CLI isn't available.
If the user sets it up, re-run the ToolSearch to confirm detection.
~~messaging (Slack) — use ToolSearch for slack to detect Slack tools. If found, note that Slack IDs can be auto-populated.
~~documents (Notion) — use ToolSearch for notion to detect Notion tools. If found, note that database links can be verified.
~~email (Microsoft 365 / Google) — use ToolSearch for microsoft or outlook (Microsoft 365) or google (Google Workspace) to detect email tools.
~~calendar — search for calendar tools
~~hr-system — use ToolSearch for bamboo, workday, hibob, or
lattice to detect HR system tools. If none found but browser tools were
detected in step 1, note that browser-based HR access is available as a
fallback. If neither, HR features (performance reviews, assessments) will
be unavailable.
For each missing connector, explain what it enables and whether it's required or optional.
Also check for GitHub access — try methods in order until one works:
GitHub — three auth methods, checked in priority order:
Method A: Environment token (check first in all environments)
Check if GITHUB_TOKEN or GH_TOKEN is already set in the environment:
[ -n "${GITHUB_TOKEN:-${GH_TOKEN:-}}" ] && echo "GitHub token found in environment"
curl -s -H "Authorization: Bearer ${GITHUB_TOKEN:-$GH_TOKEN}" \
https://api.github.com/user | jq -r .login
If this returns a username, the environment token is valid. Set Auth
Method to env-token in sync/sources.md and auto-populate the
username. No further GitHub setup needed.Method B: gh CLI (preferred in Claude Code / local dev)
Run gh auth status to check if gh CLI is installed and authenticated.
gh-cli in
sync/sources.md and auto-populate the username from
gh api user --jq .login.gh is installed but not authenticated: guide the user through
gh auth login — explain they'll need to follow the browser flow. After
they complete it, re-run gh auth status to verify.gh is not installed and NOT in Cowork: explain that GitHub
integration is optional but useful — it enables PR tracking, stale PR
detection in standup prep, and activity syncing. Point them to
https://cli.github.com for installation, then they can run
gh auth login. Offer to continue setup without it.gh auth setup (fresh login or installation), always verify
by running gh api user --jq .login to confirm access works. If
verification succeeds, set Auth Method to gh-cli in sync/sources.md
and auto-populate the username — same as the "already authenticated"
branch. If verification fails, suggest checking for stale GITHUB_TOKEN
exports in shell profiles.Method C: Personal Access Token file (required in Cowork / fallback elsewhere)
If in Cowork (detected by /sessions directory existing), or if neither
Method A nor B is available and the user wants GitHub integration:
Explain: "In this environment we can't use the gh CLI, but we can use
the GitHub API directly with a Personal Access Token (PAT)."
Check if a token already exists at $EA_ROOT/.github-token. If
it does, verify it works (see verification step below). If valid, skip
token creation.
If no token exists, offer two paths:
Path 1: Automated (if browser tools available from step 1)
Offer: "I can create the GitHub token for you using your browser. You just need to be logged into GitHub. Want me to do that?"
If yes, use Claude in Chrome to:
sync/sources.md (if not visible, stop and explain they need
an admin to enable fine-grained tokens for the org)$EA_ROOT/.github-tokenIf any step fails unexpectedly (CAPTCHA, 2FA prompt, page layout doesn't match, or the token value can't be read), fall back to Path 2 and explain what happened so the user can finish manually.
Path 2: Manual (if no browser tools, or user prefers)
Guide the user through creating one themselves:
Token creation steps:
sync/sources.md
Once the user provides the token, save it.
Ensure .github-token is gitignored before saving — existing
EA folders from before this feature may not have the entry.
If the EA folder is a git repo, check and fix first:
if [ -d "$EA_ROOT/.git" ]; then
grep -qxF '.github-token' "$EA_ROOT/.gitignore" 2>/dev/null || \
echo '.github-token' >> "$EA_ROOT/.gitignore"
fi
In Cowork there's no git repo, so this step is skipped — the token lives in the mounted cloud folder alongside the rest of the EA files.
Save the token (both paths):
printf '%s' "{token}" > "$EA_ROOT/.github-token"
chmod 600 "$EA_ROOT/.github-token"
Verify the token by running:
curl -s -H "Authorization: Bearer $(cat "$EA_ROOT/.github-token")" \
https://api.github.com/user | jq -r .login
If this returns a username, the token works. Set Auth Method to
api-token in sync/sources.md and auto-populate the username.
If verification fails, do NOT set the Auth Method. Common issues:
Token renewal reminder: When verifying an existing token, also check
if it's close to expiry by examining the github-authentication-token-expiration
response header. If expiring within 14 days, warn the user.
Fill in what we can before asking the user anything:
Scan all .md files in $EA_ROOT/ for square bracket placeholders that
were not already filled by Phase 3. Ignore placeholders in code blocks, markdown
links, checkboxes, HTML comments, and template examples.
Walk through remaining placeholders in batches:
Present auto-populated values for confirmation — don't silently apply them.
Fill in all placeholders. Present summary. Ask: "Want me to run /ea:sync now to populate your memory files from existing data?"
$EA_ROOT/ already exists FIRST — don't overwrite user's data$EA_ROOT/ — version history is valuabletools
Compare user's data files against the current plugin scaffold to find and fix structural drift — missing sections, wrong placements, format mismatches, CLAUDE.md rule drift, stale placeholders, and directory gaps. Use when the user says "upgrade", "check for updates", "compare scaffold", or after a plugin update.
development
Sync memory files from external sources (~~documents, ~~messaging, ~~code) using parallel subagents. Use when the user says "sync", "refresh", "pull latest", or "update from sources".
testing
Review a document with full memory context, then post structured comments on specific sections. Use when the user says "review this", "look at this doc", "give me feedback on", or shares a document link for analysis.
documentation
Generate structured meeting prep docs using memory context. Usage: /meeting-prep [meeting-type] Examples: /meeting-prep standup, /meeting-prep 1:1 Run without arguments to auto-detect from your calendar. Also triggers on "prep me for", "meeting with", "1:1 with", "prepare for".