skills/sync/SKILL.md
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".
npx skillsauth add EqualsGroup/claude-executive-assistant syncInstall 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.
Read these files from $EA_ROOT/ in parallel:
sync/sources.md — all source URLs, channel IDs, key contactsmemory/company.mdmemory/people/ — all person filesmemory/projects.mdmemory/my-work.mdmemory/dynamics.mdmemory/meetings.mdCheck the *Last synced:* line at the top of each memory file for an ISO 8601
timestamp. Use the oldest as the cutoff. If none exists, use 7 days ago.
Convert the cutoff timestamp to a Unix timestamp (seconds since epoch) for ~~messaging API calls.
Launch subagents in parallel — research only, no file edits. Only launch for
sources actually configured in sync/sources.md.
Each subagent must capture a UTC timestamp (date -u +%Y-%m-%dT%H:%MZ)
immediately before its first API call and return it as pull_timestamp.
mcp__notion__notion-query-data-sources to fetch from each configured databaseAccess: Yes in sources.md) since cutoff. Pass the channel names and IDs directly into the subagent prompt from the sources file — do not hardcode channel lists in this skill.oldest parameter with the Unix timestamp of the cutoff dateresponse_format: "concise" to keep output manageablesync/sources.md (User ID Cache table) — do NOT look up IDs at sync time unless someone is missing from the cachememory/people/ (relationship dynamics, working style observations)Only launch if ~~code is configured in sync/sources.md
Check the Auth Method in sync/sources.md to determine how to call the API:
If env-token: Use curl with -H "Authorization: Bearer ${GITHUB_TOKEN:-$GH_TOKEN}"
against https://api.github.com/. If neither variable is set, skip GitHub sync
and note it in the results.
If gh-cli: Verify gh is available and authenticated by running
gh auth status. If the command fails (binary not found or not authenticated),
skip GitHub sync and note it in the results. Otherwise use gh api commands
as shown below.
If api-token: Read the token from $EA_ROOT/.github-token and use
curl with -H "Authorization: Bearer {token}" against https://api.github.com/.
If the token file is missing or empty, skip GitHub sync and note it in the results.
Fetch PRs authored, reviewed, and pending review since cutoff. Run the
queries from the "What to Sync" table in sync/sources.md in parallel,
using the GitHub Search Issues API endpoint (/search/issues).
Transport (based on Auth Method):
gh-cli: gh api search/issues --method GET -f q="{query}" -f per_page=30 --jq '.items[] | {repo: (.repository_url | split("/") | .[-1]), title: .title, state: .state, number: .number, user: .user.login, created: .created_at, updated: .updated_at, url: .html_url}'api-token: curl -s -H "Authorization: Bearer {token}" "https://api.github.com/search/issues?q={query_url_encoded}&per_page=30" — parse the JSON .items[] array to extract the same fields.For each PR authored, note which project/initiative it relates to and current state
For PRs pending review, flag as potential action items for my-work.md
Return: PRs authored (project context), PRs reviewed (people context), pending reviews (action items)
After all subagents return:
*Last synced:* to the earliest pull_timestamp returned by the subagents — NOT the current time (data may have changed between the fetch and the apply)memory/people/, or company.md instead. If an item has no clear "user should do X" or "user needs to check Y", it does not belong in my-work.md.tools
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.
testing
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.
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".