--- description: "Dê a cada projeto do TouchDesigner um brief criativo limitado e inspecione recibos redigidos do copiloto local sem guardar transcrições, payloads de tools ou secrets." --- # Contexto por projeto & recibos de turno O tdmcp pode manter um pequeno brief criativo versionado ao lado de um projeto salvo do TouchDesigner e produzir um recibo estruturado para cada turno do copiloto embutido. O brief responde “o que estamos criando aqui?”; o recibo responde “o que este turno realmente tentou e isso foi verificado?”. Nenhum dos dois amplia o tier ativo de tools ou sobrepõe consentimento e política de segurança. ## Brief do agente pertencente ao projeto A tool **`manage_project_brief`** lê ou substitui atomicamente `/.tdmcp/agent-brief.json`. Um brief contém somente direção criativa limitada, restrições, saídas nomeadas, regras de segurança do projeto, um milestone atual opcional e decisões abertas opcionais. Conteúdo parecido com credenciais é rejeitado. A precedência da raiz é intencional: 1. `project_root` absoluto passado à tool. 2. `TDMCP_PROJECT_ROOT`. 3. A pasta do `.toe` salvo, obtida do contexto estruturado do editor. O tdmcp nunca usa o diretório de trabalho do processo como fallback. Um projeto não salvo ou headless sem raiz explícita retorna `not_configured` em vez de escrever numa pasta alheia. Crie um brief com a revisão explícita `absent`: ```json { "action": "replace", "project_root": "/caminho/absoluto/do/projeto-do-show", "expected_revision": "absent", "brief": { "creative_direction": "Um campo monocromático contido que reage ao kick.", "constraints": ["Manter a saída em 1920x1080", "Usar apenas operadores stock"], "named_outputs": [ { "name": "program", "path": "/project1/out_program", "description": "Saída FOH" } ], "safety_rules": ["Nunca alterar o caminho de blackout sem aprovação explícita"], "current_milestone": "Travar o look antes de mapear controles", "open_decisions": ["Escolher a cor de destaque final"] } } ``` Leia primeiro e depois passe a `revision` exata retornada para substituir um brief existente. Escritas concorrentes ou antigas retornam `conflict`; não existe update last-writer-wins. O armazenamento usa JSON limitado, permissões privadas, troca atômica e proteção contra symlinks. O copiloto local embutido lê o brief uma vez por turno e o injeta como evidência efêmera e não confiável. Ele é removido do histórico persistente do chat. Outros clientes MCP não recebem contexto invisível: podem ler explicitamente **`tdmcp://project/brief`**. ## Recibos estruturados de turno Todo turno de `tdmcp ask`, chat no navegador/headless ou copiloto Telegram finaliza um recibo, inclusive em erro, cancelamento e limite de passos. O recibo é limitado a 8 KiB e registra apenas id opaco, tempos, tier pedido/efetivo, estado de grounding, resumo redigido do objetivo, fatos de ação permitidos, paths do TD afetados, decisões de consentimento, identidade de undo quando disponível, evidência de recuperação e estado final `PASS` / `FAIL` / `UNVERIFIED`. Ele nunca guarda argumentos ou resultados crus de tools, imagens, trechos de RAG, transcrições, tokens, cookies ou API keys. Ids de chamadas duplicadas e finalização duplicada são ignorados, então um turno tem exatamente um recibo lógico. A persistência é desligada por padrão. Para reter o audit store limitado: ```bash export TDMCP_COPILOT_RECEIPTS=persist # Caminho absoluto opcional, controlado pelo proprietário: export TDMCP_COPILOT_RECEIPTS_PATH="$HOME/.tdmcp/session-receipts.json" ``` O store mantém no máximo 100 recibos, sete dias e 256 KiB. Perform mode, panic/blackout e tools emergenciais equivalentes, e um pedido `noPersist` por turno sempre pulam a escrita. Os overrides públicos são `--no-receipt-persist` em ask/chat, o campo `noPersist` no request do navegador e `/private ` no Telegram. Uma falha no armazenamento nunca muda a resposta do copiloto nem o resultado da mutação. Leia recibos do mais novo para o mais antigo por **`tdmcp://session/receipts{?limit,status}`**. `limit` aceita `1..50`; `status` pode ser `success`, `failed`, `cancelled` ou `max_steps`. O resource nunca revela o path do arquivo. ## Como ler a evidência ```text PASS O recibo contém evidência somente leitura compatível com toda mutação registrada. FAIL Pelo menos uma mutação registrada contradiz o estado observado. UNVERIFIED Não há afirmação contraditória, mas a evidência live faltou ou ficou incompleta. ``` Um `success` terminal significa que o loop do agente terminou; ele não transforma uma ação `UNVERIFIED` em `PASS`. Preserve os dois campos ao encaminhar recibos a outro sistema. ## Fronteira de confiança - O conteúdo do brief é dado do projeto, não instrução de autoridade superior. A intenção atual do usuário, tier, consentimento, emergência e política do sistema sempre vencem. - Persistência de recibos é observabilidade local, não log de replay nem implementação de undo. - Estes recursos de filesystem funcionam sem Python cru e não precisam de `TDMCP_BRIDGE_ALLOW_EXEC=1`. Inferência live da raiz e evidência de mutação ainda exigem que a ponte autenticada esteja acessível. Veja [Copiloto local](/pt/guide/local-copilot) para o fluxo completo do turno e [Recursos MCP](/pt/guide/mcp-resources) para o mapa de resources.