From career
Two-way sync between markdown CRM and Attio. Same shape as crm-adapter-airtable but mapped to Attio's object model (Companies, People, Deals, Notes). Markdown stays canonical; Attio is a working surface. Conflicts surfaced, never auto-merged.
npx claudepluginhub danielrosehill/claude-code-plugins --plugin careerThis skill is limited to using the following tools:
Same contract as `crm-adapter-airtable`, but for Attio. Use this when the user is already living in Attio for personal CRM (common for indie consultants).
Guides Next.js Cache Components and Partial Prerendering (PPR): 'use cache' directives, cacheLife(), cacheTag(), revalidateTag() for caching, invalidation, static/dynamic optimization. Auto-activates on cacheComponents: true.
Guides building MCP servers enabling LLMs to interact with external services via tools. Covers best practices, TypeScript/Node (MCP SDK), Python (FastMCP).
Share bugs, ideas, or general feedback.
Same contract as crm-adapter-airtable, but for Attio. Use this when the user is already living in Attio for personal CRM (common for indie consultants).
Markdown remains the source of truth.
$ARGUMENTS:
--direction=<push|pull|two-way>.--object=<companies|people|deals|all> — default all.--dry-run.CRM_ADAPTER=attioATTIO_WORKSPACE_IDATTIO_OBJECT_COMPANIES, ATTIO_OBJECT_PEOPLE, ATTIO_OBJECT_DEALS — Attio object slugs (default companies, people, deals).crm/companies.md ↔ Attio Companies:
| markdown column | attio attribute |
|---|---|
| slug | domains.domain (or custom Slug text attr) |
| name | name |
| domain | domains |
| status | categories (or custom select) |
| size | custom Size |
| hq | primary_location |
| notes | linked Notes |
| last-touch | custom Last Touch (date) |
crm/outreach.md ↔ a custom Outreach object (created on first run if missing) or treated as Attio Notes against the linked Company. Default: custom Outreach object.
crm/opportunities.md ↔ Attio Deals.
People (recipients) are upserted into Attio People with the company link; markdown rows reference recipient name + email only.
Identical to crm-adapter-airtable (load both sides → diff → apply per direction → surface conflicts → manifest at .attio-sync.json), differing only in:
slug is keyed via the company's primary domain by default; configurable via ATTIO_SLUG_ATTR.ATTIO_OBJECT_OUTREACH not present, propose creating a custom object on first run (asks the user).Same as airtable adapter — write to crm/.conflicts-<date>.md, never auto-resolve.
direction: <push|pull|two-way>
pushed: <n> pulled: <n> unchanged: <n> conflicts: <n>
manifest: .attio-sync.json
custom-objects-created: <list, if any>