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 <raiz-do-projeto>/.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:
project_rootabsoluto passado à tool.TDMCP_PROJECT_ROOT.- A pasta do
.toesalvo, 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:
{
"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:
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 <prompt> 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
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 para o fluxo completo do turno e Recursos MCP para o mapa de resources.