Skip to content
Back to skills

Crm

ASecurity

Opera o CRM local do Ravi sobre contatos (`ravi crm`): relacionamento, pipeline, facts e follow-ups que só agents usam. Use quando precisar: - ler ou atualizar o card CRM de um contato - criar contas, oportunidades, stakeholders e follow-ups - propor, confirmar ou rejeitar facts com evidência - decidir entre campo forte e proposta revisável Pipeline que pessoas do time veem ou editam numa tela é Bases + Pages (skill bases; para decidir, skill solucoes). Um dono por campo: não espelhe CRM e ba...

  • 9 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added October 20, 2026
ai-agentsgoshellbash

Works with

  • cli

Security analysis

A100/100

Scanned October 20, 2026

npx -y skills add filipexyz/ravi --skill crm --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Crm?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Crm
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/filipexyz-crm/badge)](https://www.skillsdirectory.com/skills/filipexyz-crm)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: crm-manager
description: |
  Opera o CRM local do Ravi sobre contatos (`ravi crm`): relacionamento, pipeline, facts e follow-ups que só agents usam. Use quando precisar:
  - ler ou atualizar o card CRM de um contato
  - criar contas, oportunidades, stakeholders e follow-ups
  - propor, confirmar ou rejeitar facts com evidência
  - decidir entre campo forte e proposta revisável
  Pipeline que pessoas do time veem ou editam numa tela é Bases + Pages (skill bases; para decidir, skill solucoes). Um dono por campo: não espelhe CRM e base sem sync.
---

# CRM Manager

> Verbos: GUARDAR (local, só agentes). Compõe com: contacts, cron, bases.
> Solução com mais de uma peça? `ravi skills show solucoes` primeiro.

Voce opera o CRM nativo do Ravi. O CRM e a camada de relacionamento acima de
`contacts`; ele nao substitui identidade, policy, chats, sessoes ou mensagens.

A sintaxe voce descobre no proprio CLI (`ravi crm --help`, `ravi crm <grupo> --help`,
`ravi crm <grupo> <op> --help`). Esta skill cobre o que o `--help` nao ensina: quando
usar cada operacao, as regras do funil e as armadilhas do dominio.

## Modelo Mental

- `contact`: pessoa ou organizacao canonica.
- `contact_policy.status`: permissao operacional (`allowed`, `pending`, `blocked`, `discovered`).
- `crm_contact_profile.lifecycle`: estado de relacionamento (`lead`, `qualified`, `active`, etc.).
- `account`: wrapper CRM para uma organizacao, idealmente ancorado em um contact `kind=org`.
- `opportunity`: oportunidade de trabalho/venda/projeto ligada a conta e/ou contato.
- `task`: proxima acao rastreavel.
- `fact`: afirmacao proposta ou confirmada sobre contato, conta ou oportunidade.
- `crm_events`: ledger append-only que explica por que o estado mudou.

Nunca confunda policy status com lifecycle CRM.

## Quando é Base

- O CRM local é memória de agente, sem tela. Se gente do time vê ou edita o dado numa tela, ele vai para Bases + Pages (skill `bases`; para decidir, `solucoes`).
- Um dono por campo: CRM ou base, nunca os dois, porque espelhar sem sync diverge calado.
- Na linha, ligue o contato por `ref` (`{"type": "contact", "id": "<contact-id>"}`), não por nome copiado: a identidade fica no `contacts`.

## Contrato Do CLI

Rode com `--json` sempre que for decidir programaticamente. Com `--json`, falha sai em
envelope `{success:false, op, error:{code, message, retryable, suggestedAction, suggestions?}}`.

Taxonomia de saida:

- `0` sucesso.
- `1` erro de execucao ou not-found. O envelope traz `suggestions` com entidades reais
  parecidas — consulte antes de concluir "nao existe".
- `2` erro de uso (flag/arg invalido). O envelope traz `acceptedFlags`: corrija a
  chamada, nao insista na mesma sintaxe.
- `3` bloqueio de confirmacao do contrato global. Esse exit nao ocorre nas operacoes
  CRM atuais.

`crm pipeline create`, `crm opportunity create` e `crm opportunity move` executam
imediatamente sem `--execute`. **Todas as escritas CRM gravam na hora**, sem dry-run:
`crm contact set`, `crm account create`, `crm account link-contact`,
`crm opportunity link-contact`, `crm pipeline set`, `crm task create|done|cancel|snooze`,
`crm fact propose|confirm|reject`. Nessas o freio e voce: confira o alvo antes de rodar.

**Compact mode:** `crm next`, `crm contacts`, `crm board` e `crm pipeline list` aceitam
`--fields a,b,c`. Use em varredura para nao arrastar o card inteiro.

**Help por operacao:** `ravi crm pipeline help <op>` (idem `task` e `fact`). Nos grupos
`contact` e `opportunity` o `help <op>` falha porque o grupo tem argumento posicional
proprio — nesses use `ravi crm contact set --help`, `ravi crm opportunity create --help`.

## Primeiro Leia

Antes de escrever, colete a visao atual do alvo: `crm contact`, `contacts profile`,
`contacts timeline`, `contacts messages`, `contacts activity`, `crm fact list --contact`
e `crm next --contact`. No repo `ravi.bot`, prefira o wrapper local `bin/ravi`: o CLI so
e confiavel apontando para o mesmo runtime/DB do daemon vivo.

## Resolva O Alvo

Antes de qualquer write, garanta que o alvo e o contato canonico certo
(`contacts info`, `contacts duplicates`).

- Nao use display name como prova de identidade.
- Se o contato nao resolver, pare e reporte que o alvo nao foi encontrado.
- Se houver duplicata ou ambiguidade relevante, nao escreva CRM ate a identidade
  ser confirmada ou os contatos serem mergeados.
- Nunca escreva CRM em grupo/chat/thread como se fosse pessoa ou conta.

## Regra De Escrita

Escolha entre campo forte e fact:

- Escreva campo forte quando o operador pediu explicitamente, quando a informacao
  vem de fonte confiavel, ou quando o proprio workflow acabou de produzir o dado.
- Proponha `crm fact` quando a informacao foi inferida, resumida, ambigua,
  incompleta, sensivel, ou ainda precisa de revisao humana.
- Nao sobrescreva campo forte apenas porque uma mensagem recente sugeriu algo.
- Nao derive identidade por display name. Use contato canonico ou identity resolvida.
- Nao modele grupo/chat como contato, conta ou pessoa.

Campos fortes aceitos por `crm contact set <contact> <campo> <valor>`: `lifecycle`,
`relationship-health`, `priority`, `score`, `health-score`, `owner`, `primary-account`,
`primary-opportunity`, `lead-source`, `persona`, `buying-role`,
`last-meaningful-interaction-at`, `next-action-at`, `next-action-summary`, `next-task`,
`metadata`. Valor `-` limpa campo anulavel.

## Facts

Use facts para memoria revisavel e evidenciada. Chaves boas:

`profile.persona` · `profile.buying_role` · `profile.preference` · `relationship.context` ·
`opportunity.need` · `account.context` · `risk.objection` · `followup.commitment`

Use `--status confirmed` so quando a confirmacao ja estiver clara no pedido ou na fonte;
caso contrario deixe `proposed`. Fact confirmado nao propaga para campo forte — aplique o
campo forte separadamente quando essa for a decisao correta.

## Idempotencia

Toda criacao repetivel deve usar `--idempotency-key` (`crm task create`,
`crm opportunity create`, `crm account create`, `crm fact propose`). Formato:

```text
<agent>:<entity>:<operation>:<source-id-or-date>
```

Ex.: `crm-agent:<contact>:followup:2026-05-22`. Sem chave estavel, reprocessamento
duplica registro — o CRM nao faz dedupe semantico de conta/oportunidade.

## Next Actions

Proxima acao boa e concreta: tem dono (`--owner agent:main`), alvo (`--contact` e/ou
`--opportunity`), prioridade e, quando possivel, `--due` em ISO com timezone. Toda task
exige pelo menos um alvo (contact, account, opportunity, chat ou session). Feche com
`crm task done`; leia a fila com `crm next --owner`.

## Scheduled Commitments + Daily Digest

Quando o cliente promete algo com data ("vou comprar sexta", "te aviso semana que vem"),
o agent que esta conversando cria uma `crm_tasks` com `--task-type commitment` e `--due`
no momento prometido. Todo dia 1 cron varredor lista o que vence e entrega o digest.

### Padrao arquitetural

**1 cron varredor + N rows em `crm_tasks`.** Nunca 1 cron por cliente. O agent que ja tem
o contexto da conversa cria a task direto via CLI. O digest e UM cron de shell, sem task
profile envolvido:

```bash
ravi cron add commitment-digest-morning --cron "0 8 * * *" \
  --shell "ravi crm next --due-today --owner agent:main --json"
```

### Quando o agent cria commitment

- `--due` na timezone do operador, normalizado (sem ambiguidade entre "sexta"
  2026-05-22 ou 2026-05-29). O CLI recusa `commitment` sem `--due`.
- `--evidence` com `[{ message_id, quote, extracted_phrase, extracted_date_iso }]`.
- `--confidence` proporcional a clareza do enunciado.
- `--idempotency-key` = hash de `(contact_id, due_at_normalizado, phrase_fingerprint)`,
  para tolerar reprocessamento sem duplicar.
- `--metadata` com `commitment_kind` opcional: `purchase | follow_up_request | callback | revisit`.

### Quando o cliente muda de ideia

Sempre atualize a row existente (mesma idempotency key), nunca crie nova:

- **Cancela**: `crm task cancel <id>` -> status `canceled`.
- **Reagenda**: `crm task snooze <id> --until <novo-due>` -> status `snoozed` e o due_at
  antigo vai para `metadata.history`. Task ja `done`/`canceled` nao aceita snooze.
- **Confirma**: `crm task done <id>` -> status `done`; se houve venda, opcionalmente
  cria/atualiza a oportunidade ganha.

Cada mutacao emite `crm_events` correspondente — a timeline reconstroi o arco da
negociacao. Para evitar dupla notificacao no mesmo dia, o cron pode filtrar tarefas com
`metadata.last_digested_at` recente.

### Regras de ouro

- Commitment E sempre uma row em `crm_tasks`. Nao e cron, nao e trigger, nao e fact.
- Desmarcar ou reagendar atualiza a row existente, nao cria nova.
- Digest E read-only — observa, nao muta status.
- Sem due concreto nao vira commitment. Promessa vaga ("te aviso quando puder") fica
  como `follow_up` (default) sem `--due`, e por isso nunca entra no digest.
- O agent que conversa e quem cria. Sem observer separado.

## Fluxo Recomendado Para Agente

1. Resolva o alvo para contato canonico.
2. Verifique ambiguidade/duplicatas antes de escrever.
3. Leia card CRM, profile, timeline, mensagens recentes, activity e facts.
4. Separe evidencia em tres grupos: confirmado, inferido, acao necessaria.
5. Escreva campos fortes apenas para dados confirmados ou pedidos pelo operador.
6. Proponha facts para inferencias e preferencias.
7. Crie tasks para compromissos, follow-ups e bloqueios acionaveis.
8. Vincule conta/oportunidade quando houver contexto comercial ou projeto claro.
9. Retorne um resumo curto: leituras feitas, writes aplicados, facts pendentes e next actions.

## Limites Atuais

- Nao ha `crm account set`, `crm opportunity set` nem `crm task set` generico: o que nao
  tem comando proprio nao se edita por aqui.
- Nao existe delete de oportunidade — criar a oportunidade errada e irreversivel.
  Confira o alvo antes de criar e use `--idempotency-key` para evitar duplicacoes.
- `crm task create` nao aceita status: toda task nasce `open` com prioridade `normal`.
- Campo desconhecido em `crm contact set` ainda falha em texto puro (exit 1), fora do
  envelope; a mensagem lista os campos aceitos.
- Atividades CRM sao eventos curados; nao despeje toda mensagem bruta como atividade.
- Mutacoes precisam da permissao `write_contacts`. Se receber permission denied, reporte
  a falta de permissao em vez de contornar.

## Checklist Antes De Responder

- Usei contato canonico, nao display name solto?
- Chequei ambiguidade/duplicatas antes de escrever?
- Diferenciei policy status de lifecycle CRM?
- Usei `--json` nas leituras que guiaram writes?
- Confirmei o alvo e nao acrescentei `--execute` aos comandos CRM?
- Consultei `suggestions` do envelope antes de declarar not-found?
- Usei idempotency key em criacoes/propostas repetiveis?
- Provei ou propus facts conforme a confianca?
- Criei next action somente se ela for acionavel?

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.