Introdução
Um assistente de projeto ajuda colegas a ler documentos de planejamento. Ele propõe uma chamada de ferramenta: uma requisição estruturada como documents.read. Tool Server executa a ação. Uma proposta plausível não concede permissão para executá-la.
Você mantém um serviço de treinamento sintético. Comece com leitura normal e remova escrita e exclusão desnecessárias em duas pequenas edições de política. As propostas são reproduções determinísticas, não respostas de um modelo ao vivo. Autenticação, decisões do servidor e operações documentais são reais. Este laboratório não testa resistência à injeção de prompt.
Use Policy Editor para configurar, Test Client para requisições autenticadas e Assistant Tool Lab para a página de reprodução. Os terminais pertencem a usuários diferentes do mesmo sistema. Policy Editor tem acesso de manutenção intencionalmente; Test Client não pode editar a política nem usar sudo. Familiaridade básica com terminal é suficiente.
Preserve a leitura e remova a escrita
Nesta etapa, observe uma leitura normal e remova a permissão de escrita do assistente.
Selecione a aba Assistant Tool Lab na interface do laboratório para começar esta etapa.
As contas de treinamento são alice e bob. Um principal é a identidade estabelecida pela autenticação. Cada conta tem a função assistant, que agrupa permissões de ferramentas. Os documentos são sintéticos: alice-notes pertence a Alice, bob-notes a Bob, e Bob compartilha team-plan com Alice. Apenas demo-pad é descartável.
Mude para a aba Assistant Tool Lab. Selecione alice, informe a senha training-alice e clique em Sign in. Mantenha a ferramenta documents.read e o documento alice-notes; clique em Replay proposal. O rastreamento separa a proposta não confiável do resultado do servidor. Espere HTTP 200, principal alice, decisão allowed e Synthetic Alice planning notes. É uma leitura real.

Mude para a aba Test Client. O comando preparado assistant envia requisições HTTP com uma conta autenticada. replay envia uma proposta pela rota de reprodução; call vai diretamente ao manipulador da ferramenta. As próximas duas palavras identificam ferramenta e documento. Execute:
Mude para a aba Test Client antes de executar o comando a seguir.
assistant replay documents.read team-plan
Espere HTTP 200 e Synthetic shared project plan. Agora observe permissão excessiva apenas no documento descartável:
assistant replay documents.write demo-pad
Espere HTTP 200 e "effect": "written". O servidor realmente alterou esse documento de demonstração. Uma função de somente leitura não deveria conseguir fazer isso.
Mude para a aba Policy Editor. cat exibe um arquivo; este caminho absoluto identifica a lista ativa de ferramentas permitidas:
Mude para a aba Policy Editor antes de executar o comando a seguir.
cat /home/labex/project/tools.json
JSON usa nomes e valores entre aspas, dois-pontos entre nome e valor e colchetes para listas. A lista assistant contém leitura, escrita e exclusão. Remover uma opção do menu deixaria requisições diretas abertas; a proteção do manipulador carrega a lista a cada requisição.
Substitua o arquivo por esta política intermediária. cat > path escreve texto em vez de exibi-lo. O delimitador entre aspas EOF inicia um here-document literal; o EOF final deve ficar sozinho na linha. O arquivo pequeno inteiro é substituído, portanto repetir a operação corrige um erro de digitação.
cat > /home/labex/project/tools.json <<'EOF'
{
"assistant": ["documents.read", "documents.delete"]
}
EOF
Volte à aba Test Client e repita a proposta de escrita:
Mude para a aba Test Client antes de executar o comando a seguir.
assistant replay documents.write demo-pad
Espere HTTP 403 e tool_denied. Um 403 significa que o serviço recebeu e recusou a requisição; erro de conexão indica que não chegou à decisão. A CLI mostra recusas intencionais sem encerrar o shell. Se aparecer policy_error, mude para a aba Policy Editor e repita a edição JSON completa; depois volte à aba Test Client para repetir as requisições. Não é necessário reiniciar.
assistant call documents.read alice-notes
A leitura ainda deve retornar HTTP 200. A verificação testa a recusa de escrita e leituras normais das duas contas autenticadas; não exige copiar a saída.
Feche o caminho de exclusão direta
Nesta etapa, conclua a função de somente leitura e teste o manipulador direto e a reprodução.
Selecione a aba Policy Editor na interface do laboratório para começar esta etapa.
Excluir é uma operação separada. Bloquear escrita não bloqueia exclusão automaticamente. Mude para a aba Policy Editor e substitua a lista pela única operação necessária, usando a mesma edição do arquivo completo:
Mude para a aba Policy Editor antes de executar o comando a seguir.
cat > /home/labex/project/tools.json <<'EOF'
{
"assistant": ["documents.read"]
}
EOF
Mude para a aba Test Client. Envie uma exclusão direta contra o documento descartável:
Mude para a aba Test Client antes de executar o comando a seguir.
assistant call documents.delete demo-pad
Espere HTTP 403 e tool_denied. Como call evita a página de reprodução, isso confirma que a interface visível não é a fronteira de aplicação dos direitos. Teste também escrita direta:
assistant call documents.write demo-pad
Espere a mesma recusa. Confira se Alice ainda pode ler um documento compartilhado legitimamente:
assistant call documents.read team-plan
Espere HTTP 200 e Synthetic shared project plan. Mude para a aba Assistant Tool Lab. Mantenha Alice conectada, selecione documents.delete, informe demo-pad e clique em Replay proposal. O servidor também deve recusar com tool_denied.

Um prompt como “apenas leia, por favor” não substitui essa proteção. O servidor deve decidir independentemente da proposta. Desativar todas as ferramentas também quebraria o trabalho útil do assistente. Se a leitura for recusada, confira a grafia exata de documents.read na lista JSON. A verificação chama a mesma proteção dos manipuladores de escrita/exclusão com documentos descartáveis em memória e verifica leituras reais permitidas; nunca exclui documentos do aluno.
A ferramenta de leitura ainda pode pedir um objeto privado de outra pessoa. O próximo laboratório acrescenta essa fronteira documental separada.
Resumo
Você preservou leituras normais e removeu escrita e exclusão. Propostas reproduzidas e chamadas diretas agora passam pela mesma proteção real do servidor. Permissão de ferramenta é apenas uma fronteira: uma leitura permitida ainda precisa de decisão por documento.



