crm
Personal CRM - add, log, radar, find, update contacts
Installer avec Codex ou Claude Copiez ce prompt, collez-le dans Codex, Claude ou un autre assistant, puis laissez-le vérifier la page du skill et l'installer pour vous.
Menu
Personal CRM - add, log, radar, find, update contacts
Installer avec Codex ou Claude Copiez ce prompt, collez-le dans Codex, Claude ou un autre assistant, puis laissez-le vérifier la page du skill et l'installer pour vous.
Basé sur la classification professionnelle SOC
Daily email intelligence processor. Scans incoming + outgoing 31C Exchange emails (ceo@31c.io via exchangelib/EWS), groups by conversation thread, categorizes for CRM actions, tasks, pipeline updates, knowledge capture, and relationship signals. Presents digest for approval before executing. Integrates with /prime for morning briefing. Trigger: '/email-intel', 'process emails', 'email digest', 'check my email'. Do NOT trigger for: sending email (use send-email.py), reading specific emails, email search queries, or Gmail operations.
Ultrathink principal-engineer review gate. Runs a Validate-Identify-Improve-Adjust (VIIA) pass over a target - a plan awaiting approval, just-executed work, a specific file or directory, or the entire workspace - then runs an adversarial refutation layer (Phase 2.5) with cross-family judge rotation (Claude / Gemini / Grok) and optional two-agent debate on BLOCKER + HIGH findings before presenting findings with concrete proposed fixes for batched approval. Blocks forward progress until approved. Triggers on "scrutinize", "stress-test this", "principal review", "validate and improve", "review the plan before I approve", "audit what you just did", "ultrathink review". Do NOT trigger for artifact grading alone (use /evaluate), fact-checking drafts (use /validate), or strategic reasoning (use /deep-think). Usage: /scrutinize [plan | execution | file:<path> | dir:<path> | workspace | trajectory:<run_id>] [--relentless] [--no-refute] [--include-low-confidence] [--include-ambiguous]
Second-opinion advisor. Consults Gemini, Grok, and Kimi in parallel for independent views on hard or high-stakes calls. Two modes: independent (all models see the problem only, reason fresh) and critique (all stress-test a draft). Distinct from /deep-think (Claude reasoning structured, alone) and /odin (Claude + the curated knowledge brain). Trigger when the user says: "council", "/council", "second opinion on", "consult the council", "what would Gemini/Grok/Kimi say about", "stress-test this with Gemini/Grok/Kimi", "council vote".
Reflective memory consolidation - performs a periodic pass over memory files, synthesizing recent learnings into durable, well-organized memories for future sessions. Validates technical claims against Context7, enforces security protocols, prunes stale entries, and produces a structured consolidation report. Use when the user says "dream", "/dream", "consolidate memories", "memory cleanup", "reflect on recent sessions", "update memories", or at the end of a productive session when significant new information was learned. Do NOT use for: simple memory writes (use auto-memory), knowledge base operations (use /zk), or session initialization (use /prime).
Odin - personal AI advisor with persistent knowledge brain. Ingests books, articles, videos, documents. Builds principles and positions. Gives referenced advice prioritizing learned knowledge. Nine modes: learn (ingest material), consult (give advice), reflect (review brain), recall (query brain), teach (direct learning), log (record an episode - something that happened), collect (scan business threads + captured comms for episodes you forgot to log), compile (unified linting across brain and ZK), skill-proposal (propose a reflection-derived how-to principle as a checklist step in a target skill - proposal only). Triggers on "Odin" as name/address, "ask Odin", "what would Odin say", "/odin". DO NOT trigger on "odin" as the Russian numeral "one" in phrases like "odin variant" or "another one". Only trigger when used as a proper name or form of address.
Workspace-wide semantic recall. Searches the local associative-memory index (scripts/memory-index.py: bge-m3 hybrid dense+BM25, on-machine, zero API cost) across everything meaningful in the workspace -- Odin brain, business threads, CRM, LinkedIn, context, reference, plans, deliverable outputs, knowledge, datastore extracts, and the auto-memory files -- then answers ONLY from the retrieved sources with file-path citations, or says "not in memory" when the index reports a gap. Use when the user asks "what do we know about X", "where did we decide Y", "have we touched Z before", "recall ...", "search my memory for ...", "find what we said about ...", or wants to surface a past decision / brief / contact / note by meaning rather than exact words. Do NOT use for: Odin-brain-only advice or episode dedup (use /odin recall, which is brain-scoped); external/world intelligence on a company or person (use /osint); capturing a NEW note (use /zk); plain exact-string file search (use Grep). This skill never fabricates be
| name | crm |
| x-heading-requires | ["email"] |
| description | Personal CRM - add, log, radar, find, update contacts |
| metadata | {"author":"Misha Hanin","email":"misha.hanin@odinix.com","version":"1.3"} |
| argument-hint | [add|log|radar|find|update|next] [contact] [details] |
| allowed-tools | Read, Write, Edit, Glob |
| model | sonnet |
| x-heading-orchestration | {"parallel_safe":"partial","shared_state":["crm/contacts/","context/people.md","config/routing-map.yaml"],"triggers":["crm add","crm log","crm radar","crm find","crm update","crm next","check CRM","contact health"]} |
| x-heading-capability | {"what":"The personal CRM - add contacts, log interactions, update records, find people, and surface a health radar of who has gone overdue across your relationship base.\n","how":"Run /crm <add|log|radar|find|update|next> <contact> <details>. Writes to crm/contacts/ and keeps context/people.md in sync.\n","when":"Use to record or query a relationship. For drafting nudges to many overdue contacts use /cold-sweep; for Google address book use /google-contacts.\n"} |
| x-heading-routing | {"category":"CRM","triggers":["crm add","crm log","crm radar","crm find","crm update","check CRM","contact health"],"exclusions":["N/A"],"compound":"No","router":"auto"} |
Manage contacts, log interactions, track relationship health, and surface follow-up priorities.
This skill works across both CEO and exec workspaces. On startup, read .workspace-identity.json from the workspace root to determine workspace type.
| Resource | CEO Workspace | Exec Workspace |
|---|---|---|
| Personal contacts | crm/contacts/ | personal/crm/contacts/ |
| Tribe contacts (shared) | crm/contacts/ (type: tribe*) | corporate/crm/contacts/ (read-only) |
| CRM config | crm/config.md | corporate/crm/config.md |
| People index | context/people.md | context/people.md (personal root) |
All path references below (e.g., crm/contacts/) should be resolved using this mapping based on the detected workspace type.
Tribe contacts are corporate-wide. In exec workspaces, Tribe member contacts live in corporate/crm/contacts/ (read-only, synced from CEO workspace). When searching or displaying contacts, always check BOTH personal and corporate CRM directories. When logging interactions for Tribe members in exec workspaces, log to the personal copy if it exists, otherwise note that the contact is read-only corporate.
$ARGUMENTS — Subcommand and parameters. Format: [action] [details]Parse the first word of $ARGUMENTS to determine the action:
radar (default — also runs when no arguments provided)Display the relationship health dashboard.
Run python scripts/crm-health.py to get the health report
Present the output organized by urgency:
For each RED contact, suggest a specific action (email, call, meeting)
Company-Wide Radar (admin only): If .workspace-identity.json has role: "admin":
a. Run python scripts/aggregate-crm.py to refresh aggregated data
b. Read the following from ../31c-crm-central/aggregated/:
company-radar.md - all contacts with health status across all execsshared-contacts.md - contacts tracked by multiple execsownership-map.md - who owns which relationships
c. Present Company-Wide View after personal radar:Full CRM View (admin only): If the user says "full CRM view" or "CRM dashboard":
a. Run python scripts/generate-crm-dashboard.py to produce the HTML dashboard
b. Present the output path and a summary of what's in it
After surfacing radar output, suggest: Run /crm next to see the top 3 follow-ups with drafts ready for review.
nextSurface the top-3 priority follow-ups with checking-in drafts ready for manual review and send. v0 of this subcommand presents drafts; the CEO decides per-draft and sends manually via send-email.py. Auto-send-on-approval is a Phase 3 follow-up.
python3 scripts/crm_next.py to generate today's queue. (Note: filename is snake_case for Python importability — crm_next.py, not crm-next.py.)outputs/operations/crm/next-{TODAY}.md).python3 scripts/send-email.py --to <addr> --subject "<subject>" --body "<body>" using the draft body. The auto-log hook in send-email.py (Phase 1) handles the last_touch bump + interaction log entry automatically.addCreate a new contact. Two-tier model: address book entity (corporate) + relationship record (exec-private).
firstname-lastname (kebab-case).crm/address-book/{slug}.md.
personal/.sync/pending-address-book.jsonl for CEO promotion. Proceed with relationship record creation using the slug; entity will resolve once CEO promotes.alex-riveramisha-haninmisha-haninmisha-haninlee-parkcrm/contacts/{slug}.md (CEO) or personal/crm/contacts/{slug}.md (exec) with:
entity_ref: {slug}, relationship_type, last_touch: today, created: today. Optional fields per user input: cadence, source, pipeline_company.knowledge/odin-brain/ exists AND relationship_type is a deal-bearing/external type (NOT tribe/tribe-leadership/inactive), also stamp an optional relevant_principles: YAML list by running python scripts/odin-principles.py --type {relationship_type} [--stage {stage}] --json and taking the top slugs. Internal types and exec workspaces (no brain): skip silently, never write the field, never error.type is tribe or tribe-leadership, also add a corporate rule for the file to config/routing-map.yaml (CEO only; execs surface a note).email contains @31c.io AND type is NOT tribe/tribe-leadership, surface a warning: "This contact has a @31c.io email but is not classified as tribe. Update type to 'tribe' if they are a Tribe member."context/people.md radar table.logLog an interaction for an existing contact.
crm/contacts/ for the matching contact file (match against filename or frontmatter name field)/crm add### YYYY-MM-DD | Type | Brief Title
Description of the interaction.
**Next:** What happens next (if applicable).
last_touch in the YAML frontmatter to today's datefindSearch across all CRM contact files.
crm/contacts/ for matches in:
context/people.md for contacts not yet migratedupdateUpdate a contact's profile information.
log)type, recalculate cadence from crm/config.md defaults (unless cadence was manually set)relationship_type or pipeline_company changed AND knowledge/odin-brain/ exists AND the type is deal-bearing/external (NOT tribe/tribe-leadership/inactive), re-derive relevant_principles via python scripts/odin-principles.py --type {relationship_type} [--stage {stage}] --json. Skip silently on exec workspaces or internal types.Read .workspace-identity.json first to determine workspace type, then load these files using the resolved paths from the Workspace-Aware Paths table above:
crm/config.md, exec: corporate/crm/config.mdcontext/people.md — quick-reference index (from personal root)context/pipeline.md — deal context (when logging deal-related interactions)crm/contacts/America/New_York, America/Winnipeg, Asia/Jerusalem). If the user does not explicitly define a different operating timezone, omit operating_timezone from the YAML - it defaults to timezone.owner field in contact frontmatter is auto-injected by the CRM sync script. Execs should never set it manually - it is populated automatically during sync based on the workspace identity.