--- name: renomear-chat description: Define o título permanente da conversa (aparece no /resume) assim que o usuário informa, logo no início de um chat novo, qual task vai resolver. Use quando o usuário descrever/colar uma task pra trabalhar (com número), ou pedir explicitamente "nomeia esse chat", "renomeia essa conversa", "dá um título nesse chat". Só faz sentido perto do início da conversa — não repetir depois que o chat já tem título. --- # Renomear chat ## Objetivo Dar à conversa um título permanente e fácil de reconhecer no `/resume`, no formato: ``` {número} - {módulo} - {resumo bem curto} ``` - **número**: o número sequencial da task no backlog pessoal do usuário (o mesmo `#N` do Notion, não o código do ticket tipo IQY-888448/SRV-xxxxxx). Se não houver task numerada (ex: sessão de configuração/ferramentas), avise o usuário e pergunte como prefere nomear em vez de inventar um número. - **módulo**: apelido do projeto conforme `Workspace2025/CLAUDE.md`: - `PortalISO-RequisitosISO9001` → `Requisitos` - `PortalIsoEngine` → `GED` - `PortalISO-GED-Word` → `GED WORD` Deduza pelo diretório de trabalho atual. - **resumo bem curto**: 3-5 palavras, sem verbo e sem artigo. Ex: "Anexos com Expiração", "Ranking de Fornecedores", "Ambiente Node/Caveman". Exemplo final: `5 - Requisitos - Adição de Colaboradores` ## Passos 1. **Checar se a sessão já tem título DE VERDADE** (idempotência — nunca renomear duas vezes na mesma conversa). Não basta checar se existe QUALQUER evento `custom-title`: sessões podem herdar um título de outra conversa (ex: `/clear` preserva o título de exibição; abrir uma sessão nova a partir do `/resume` às vezes copia o nome da sessão anterior). Um título herdado quase certamente NÃO segue o padrão `número - módulo - resumo` — então valide o formato, não só a presença: ```bash SESSION_ID="$CLAUDE_CODE_SESSION_ID" PROJECT_SLUG=$(pwd | sed 's/\//-/g') TRANSCRIPT="$HOME/.claude/projects/$PROJECT_SLUG/$SESSION_ID.jsonl" python3 -c " import json, re titulo_valido = False with open('$TRANSCRIPT', encoding='utf-8') as f: for line in f: try: d = json.loads(line) except Exception: continue if d.get('type') == 'custom-title': t = d.get('customTitle', '') # padrão esperado: ' - - ' titulo_valido = bool(re.match(r'^\s*\d+(\.\d+)?\s*-\s*\S.*-\s*\S', t)) print('JA_TEM_TITULO' if titulo_valido else 'SEM_TITULO_VALIDO') " ``` Se imprimir `JA_TEM_TITULO`, não faça nada e siga a conversa normalmente (nem avise o usuário — é um no-op silencioso). Se imprimir `SEM_TITULO_VALIDO` (nenhum título, ou um título herdado que não bate com o padrão), prossiga e grave o título real no passo 3 — sobrescrever um título herdado/inválido é esperado, não é duplicidade. 2. **Montar o título** com base no que o usuário acabou de descrever (número da task + resumo curto que você mesmo compõe) e no módulo deduzido do diretório atual. 3. **Gravar o título**, anexando um evento `custom-title` ao próprio arquivo da conversa (mecanismo nativo do Claude Code — o mesmo usado por `claude -n` internamente): ```bash python3 -c " import json, uuid, datetime linha = { 'type': 'custom-title', 'customTitle': '5 - Requisitos - Adicao de Colaboradores', 'sessionId': '$SESSION_ID', 'uuid': str(uuid.uuid4()), 'timestamp': datetime.datetime.utcnow().isoformat() + 'Z' } with open('$TRANSCRIPT', 'a', encoding='utf-8') as f: f.write(json.dumps(linha, ensure_ascii=False) + '\n') " ``` Substitua `customTitle` pelo título real montado no passo 2. Mantenha `$SESSION_ID` e `$TRANSCRIPT` das variáveis do passo 1. 4. **Não anuncie a ação em destaque** — uma linha curta basta (ex: "Chat nomeado: 5 - Requisitos - Adição de Colaboradores"). Depois disso, siga trabalhando na task normalmente, sem mencionar de novo. ## Observações - Nunca invente número de task. Se o usuário não passou um, pergunte. - Isso só grava um título — não afeta o conteúdo da conversa nem precisa de confirmação extra do usuário a cada vez (a checagem do passo 1 já evita duplicidade/erro).