Skip to main content

PRD-009 — Agent Knowledge-to-Capability Binding

1. Objetivo

O Agent Knowledge-to-Capability Binding cria uma camada formal de ligação entre:

  • conhecimento existente no HAG;
  • documentação TypeDoc/Docusaurus;
  • entidades do sistema;
  • Semantic IDs;
  • telas React;
  • campos e componentes da UI;
  • APIs Hono;
  • capabilities;
  • regras de negócio;
  • workflows;
  • políticas de segurança.

O objetivo é permitir que o agente consiga responder:

“O que é isso?”

e também:

“O que posso fazer com isso?”

sem misturar as duas coisas.


2. O problema de escala

Em um sistema SST grande, teremos potencialmente:

milhares de entidades
milhares de funções TypeScript
centenas de telas
milhares de campos
centenas de APIs
centenas de capabilities
milhares de regras

Não é viável criar manualmente:

prompt para entidade A
prompt para entidade B
prompt para entidade C
...

Precisamos de uma estrutura declarativa que permita ao agente descobrir automaticamente as relações.


3. Modelo conceitual

O núcleo será um Agent Knowledge Graph.

DOMAIN


ENTITY

┌───────────┼───────────┐
▼ ▼ ▼
UI KNOWLEDGE CAPABILITY
│ │ │
▼ ▼ ▼
SEMANTIC HAG POLICY


FIELD


BUSINESS RULE

Exemplo:

workPermit

relaciona-se com:

workPermit.details
workPermit.validity
workPermit.components
workPermit.risks
workPermit.approvals

E cada um desses elementos poderá apontar para:

documentation
capabilities
UI components
business rules
API operations

4. Princípio fundamental

Knowledge ≠ Capability

A documentação pode dizer:

“Uma permissão aprovada não pode ser editada.”

Isso é conhecimento.

A capability:

workPermit.update

define uma operação.

A Policy:

permit.status == APPROVED
→ DENY

define autorização.

Portanto:

Knowledge

Capability

Policy

Mas elas precisam estar relacionadas.


5. Semantic Resource

O elemento central do binding será um Semantic Resource.

interface SemanticResource {
id: string;

type:
| 'domain'
| 'entity'
| 'field'
| 'component'
| 'page'
| 'section'
| 'workflow'
| 'rule'
| 'api';

name: string;

labels: string[];

parentId?: string;

knowledgeRefs?: string[];

capabilityRefs?: string[];

policyRefs?: string[];

uiRefs?: string[];

apiRefs?: string[];

metadata?: Record<string, unknown>;
}

6. Exemplo

{
"id": "workPermit.validity",
"type": "field",
"name": "Validity",
"parentId": "workPermit",

"knowledgeRefs": [
"docs/work-permit/validity"
],

"capabilityRefs": [
"workPermit.updateValidity"
],

"policyRefs": [
"workPermit.validity.update"
],

"uiRefs": [
"ui.workPermit.validity"
]
}

Agora temos uma relação formal entre:

Campo

Documentação

Capability

Policy

UI

7. Knowledge Binding

O HAG existente já possui:

  • Markdown;
  • índices;
  • keywords;
  • Wikilinks;
  • BM25;
  • Vectorize.

Não devemos recriar isso.

O PRD-009 adicionará metadata semântica aos documentos.

Exemplo:

semanticId: workPermit.validity

type: field

entity: workPermit

relatedCapabilities:
- workPermit.updateValidity

relatedPolicies:
- workPermit.validity.update

8. Frontmatter

Os documentos Docusaurus poderão possuir metadata estruturada:

---
semanticId: workPermit.validity
entity: workPermit
type: field
capabilities:
- workPermit.updateValidity
policies:
- workPermit.validity.update
---

O importante é que essa informação seja gerada automaticamente quando possível.


9. Não duplicar conhecimento

O sistema não deve criar outra documentação paralela.

A fonte principal continua sendo:

Source Code

TypeDoc

Docusaurus

Markdown

HAG

O Agent Knowledge-to-Capability Binding adiciona apenas o grafo de relacionamento operacional.


10. Source Mapping

Cada elemento poderá apontar para a origem no código.

Exemplo:

workPermit.updateValidity

src/domain/workPermit/service.ts

updateValidity()

Isso cria uma cadeia:

UI

Semantic ID

Capability

Function

Documentation

11. TypeDoc Integration

Como o sistema já possui TypeDoc, o pipeline poderá extrair:

  • funções;
  • classes;
  • interfaces;
  • types;
  • parâmetros;
  • retornos;
  • comentários;
  • exemplos;
  • módulos;
  • relações.

Exemplo:

src/workPermit/updateValidity.ts


TypeDoc


workPermit.updateValidity

12. Capability ↔ Function Binding

Uma capability deverá poder apontar para uma implementação.

Exemplo:

id: workPermit.updateValidity

implementation:
module: workPermit
function: updateValidity

Mas o LLM não recebe esse detalhe como autorização.

A implementação continua encapsulada no Runtime.


13. Capability ↔ API Binding

Também podemos ter:

Capability

Service

Hono API

Exemplo:

id: workPermit.updateValidity

api:
service: workPermit
method: PATCH
route: /work-permits/:id/validity

Essa informação é infraestrutura interna.

O agente trabalha com:

workPermit.updateValidity

e não com:

PATCH /work-permits/...

14. UI Binding

A interface poderá declarar:

<ValidityField
semanticId="workPermit.validity"
/>

O Context Bridge então sabe:

workPermit.validity

e o Registry sabe:

workPermit.validity
├── documentation
├── capability
└── policy

15. React Semantic Components

Deveremos criar componentes/helpers para reduzir esforço dos desenvolvedores.

Por exemplo:

<AgentSemantic
id="workPermit.validity"
type="field"
>
<ValidityField />
</AgentSemantic>

ou:

useSemanticContext(
"workPermit.validity"
)

Isso permite que novas telas sejam automaticamente integradas ao agente.


16. Automatic Discovery

O objetivo final é minimizar configuração manual.

O pipeline poderá:

Source Code

AST Analysis

TypeDoc

Semantic Extraction

Capability Registry

UI Semantic Registry

Knowledge Graph

Assim, quando um desenvolvedor cria:

updateValidity()

o pipeline consegue detectar:


documentação

capability

entidade

17. Semantic Naming Convention

Precisamos de uma convenção rígida.

Formato:

domain.entity
domain.entity.property
domain.entity.action
domain.entity.collection
domain.entity.collection.action

Exemplos:

workPermit
workPermit.validity
workPermit.responsible
workPermit.components
workPermit.components.add
workPermit.components.remove
workPermit.approve

18. Semantic IDs são contratos

Uma vez publicado:

workPermit.validity

não devemos mudar arbitrariamente para:

porque esse ID poderá estar referenciado por:

  • documentação;
  • HAG;
  • UI;
  • capabilities;
  • policies;
  • analytics;
  • prompts;
  • testes;
  • histórico.

Mudanças deverão utilizar aliases ou migrações.


19. Aliases

Podemos suportar:

semanticId: workPermit.validity

aliases:
- permit.validity
- workPermit.validityPeriod

Isso melhora a resolução de linguagem natural.


20. Synonyms

Além de aliases técnicos:

validity
validade
prazo
período de validade
tempo válido

podem ser associados ao Semantic ID.

Isso alimenta o mecanismo de retrieval.


21. Entity Resolution

Quando o usuário diz:

“Abra a permissão do João.”

O sistema pode:

"permissão"

workPermit

"João"

employee

relationship:
workPermit.responsible

O Knowledge Graph ajuda a resolver:

employee → responsible → workPermit

22. Relationship Types

O grafo deverá suportar relações tipadas.

Exemplos:

CONTAINS
BELONGS_TO
RELATED_TO
DOCUMENTED_BY
IMPLEMENTED_BY
EXPOSED_BY
USES
REQUIRES
DEPENDS_ON
AUTHORIZED_BY
VALIDATED_BY
NAVIGATES_TO

23. Exemplo de Graph

workPermit

├── CONTAINS → workPermit.validity
│ │
│ ├── DOCUMENTED_BY → docs/validity
│ ├── UPDATED_BY → workPermit.updateValidity
│ └── PROTECTED_BY → validity.policy

├── CONTAINS → workPermit.components
│ │
│ ├── ADD → components.add
│ └── REMOVE → components.remove

└── WORKFLOW → workPermit.approval

24. Knowledge Graph Expansion

Isso também melhora o retrieval.

Usuário:

“Posso alterar isso?”

Se:

focus = workPermit.validity

o agente pode navegar:

validity

updateValidity

policy

business rules

workflow state

Em vez de fazer uma busca genérica.


25. Capability Discovery

O Planner poderá perguntar ao Registry:

"What capabilities are relevant to workPermit.validity?"

Resposta:

[
"workPermit.read",
"workPermit.updateValidity"
]

O Planner não precisa conhecer previamente todas as capabilities.


26. Knowledge-Driven Planning

Agora o conhecimento pode ajudar a construir o plano.

Exemplo:

“Duplique essa permissão.”

O Knowledge Graph pode indicar:

workPermit.clone

não existe.

Mas existem:

workPermit.read
workPermit.create
workPermit.components.list
workPermit.components.add

E a documentação informa:

Componentes permitidos podem ser copiados entre permissões.

O Planner pode então construir:

READ

CREATE

COPY COMPONENTS

27. Knowledge Confidence

Nem todo binding terá a mesma confiabilidade.

Classificação:

SYSTEM_GENERATED
VERIFIED
MANUAL
INFERRED
DRAFT
DEPRECATED

Exemplo:

Capability → Function

detectado diretamente pelo código:

SYSTEM_GENERATED

Enquanto:

Capability → Documentation

inferido semanticamente:

INFERRED

28. Binding Validation

O pipeline deverá detectar inconsistências.

Exemplo:

UI references:
workPermit.updateValidity

mas Registry não possui a capability.

Resultado:

BROKEN_BINDING

Outro caso:

Capability:
workPermit.updateValidity

Documentation:
missing

Resultado:

MISSING_DOCUMENTATION

29. Quality Gate

O build do sistema deverá poder falhar quando houver inconsistências críticas.

Exemplo:

❌ Semantic ID duplicated
❌ Capability without implementation
❌ UI references unknown capability
❌ Policy references unknown capability

Isso evita que o agente opere sobre uma arquitetura inconsistente.


30. Agent Manifest

O pipeline deverá produzir um artefato versionado:

agent-manifest.json

Exemplo:

{
"version": "2026.09.01",

"entities": 842,

"semanticResources": 12640,

"capabilities": 731,

"policies": 514,

"bindings": 28391,

"knowledgeVersion": "kb-2026-09-01"
}

Esse manifest permite ao Runtime saber exatamente qual conjunto está ativo.


31. Versionamento

Todos os artefatos devem possuir uma versão compatível:

Knowledge Version
Capability Version
Policy Version
UI Semantic Version
Agent Manifest Version

O Agent Runtime deverá conhecer a combinação ativa.

Exemplo:

Agent Manifest
2026.09.01

Knowledge
kb-428

Capabilities
cap-91

Policies
policy-33

32. Atomic Deployment

Não devemos atualizar:

Knowledge

sem garantir compatibilidade com:

Capabilities
Policies
Semantic Registry

O deployment deverá publicar uma nova versão do conjunto.

Conceito:

Bundle v41
├── knowledge
├── semantic graph
├── capabilities metadata
└── policy references

Depois:

ACTIVE_VERSION = v41

33. Backward Compatibility

Uma execução já iniciada deve continuar usando o manifest com que foi criada.

Exemplo:

Execution E123
manifest = v40

Mesmo que:

production = v41

E123 não deve subitamente mudar de comportamento.


34. Agent Registry API

Deveremos expor uma interface interna:

interface AgentRegistry {
getResource(id: string): SemanticResource | null;

findResources(query: RegistryQuery): SemanticResource[];

getCapabilities(resourceId: string): CapabilityRef[];

getPolicies(resourceId: string): PolicyRef[];

getKnowledgeRefs(resourceId: string): KnowledgeRef[];

getUIRefs(resourceId: string): UIRef[];
}

35. Fast Lookup

O Registry deverá ser otimizado para acesso direto.

Exemplo:

workPermit.validity

→ O(1), idealmente.

Não queremos executar BM25 para descobrir que capability pertence a um campo já conhecido.

A sequência deve ser:

Semantic ID

Registry lookup

Capabilities

36. Hybrid Resolution

Quando o Semantic ID não for conhecido:

Natural Language

Exact

Alias

Keyword

BM25

Graph

Vectorize

LLM

Isso aproveita toda a infraestrutura já existente.


37. HAG como Knowledge Layer

O HAG continuará responsável por:

"What does this mean?"
"What are the rules?"
"How does this work?"
"What is related?"

O Registry será responsável por:

"What exists?"
"What can I do?"
"Which capability?"
"Which UI?"
"Which policy?"

Essa divisão evita sobrecarga do HAG.


38. Capability Registry como Action Layer

Portanto:

HAG
= knowledge

Registry
= discoverability

Capability
= action

Policy
= authorization

Runtime
= execution

Essa separação deverá permanecer uma regra arquitetural.


39. Exemplo de pergunta

Usuário:

“Como funciona a validade dessa permissão?”

Fluxo:

Context

workPermit.validity

Registry

Knowledge refs

HAG

Answer

40. Exemplo de comando

Usuário:

“Coloque a validade para 30 dias.”

Fluxo:

Context

workPermit.validity

Registry

workPermit.updateValidity

Intent

Planner

Policy

Execution

41. Exemplo de comando ambíguo

Usuário:

“Altere isso.”

Context:

page = workPermit
selection = WP-10231
focus = components

Registry pode identificar:

workPermit.components

mas não sabe qual alteração.

Resultado:

“Posso alterar os componentes da permissão WP-10231. O que você deseja modificar?”

Isso é muito melhor que executar uma ação arbitrária.


42. Automatic Documentation Coverage

O sistema poderá criar um relatório:

Entities: 842
Documented: 821
Capabilities: 731
Bound capabilities: 724
Missing bindings: 7
Broken references: 3

Isso transforma o Agent Registry também em ferramenta de governança arquitetural.


43. Developer Experience

Idealmente, para criar uma nova funcionalidade o desenvolvedor fará:

1. Implementar função
2. Documentar função
3. Definir capability
4. Adicionar semanticId
5. Declarar policy

O pipeline fará:

TypeDoc

Semantic extraction

Binding validation

Agent manifest

44. Primeiro Vertical Slice

Novamente:

workPermit

Implementar bindings para:

workPermit
workPermit.details
workPermit.validity
workPermit.components
workPermit.approvals

Capabilities:

workPermit.read
workPermit.create
workPermit.update
workPermit.updateValidity
workPermit.components.list
workPermit.components.add
workPermit.components.remove

Policies correspondentes.


45. Critérios de Aceitação

AC-01

Todo Semantic Resource deverá possuir ID estável.

AC-02

O Registry deverá relacionar recursos às capabilities.

AC-03

O Registry deverá relacionar recursos ao HAG.

AC-04

O Registry deverá relacionar recursos à UI quando aplicável.

AC-05

Capabilities deverão poder ser descobertas através de Semantic ID.

AC-06

Aliases e sinônimos deverão ser suportados.

AC-07

Bindings quebrados deverão ser detectados durante o build.

AC-08

O Agent Manifest deverá ser versionado.

AC-09

Execuções existentes deverão permanecer vinculadas à versão utilizada na criação.

AC-10

O Registry deverá permitir lookup determinístico de baixa latência.

AC-11

O LLM não poderá modificar bindings.

AC-12

Knowledge, Capability e Policy deverão permanecer conceitos independentes.

Evidência de implementação e produção — 2026-09-05

O registry semântico relaciona recursos estáveis de UI, conhecimento e capabilities declaradas; discovery é determinístico por Semantic ID. O validador de build cria manifest v1 e interrompe a publicação para Semantic ID duplicado/desconhecido, capability ausente/inativa ou incompatibilidade entre documento e capability. Bindings são dados declarativos não mutáveis pelo LLM, enquanto Knowledge, Capability e Policy permanecem separados.

Em 2026-09-04, o registry passou a resolver aliases técnicos e sinônimos normalizados de forma determinística para o mesmo nó canônico, sem alterar capability, policy ou binding. workPermit.validity aceita permit.validity, workPermit.validityPeriod e sinônimos de validade; colisões no namespace fechado são rejeitadas no registro.

Em 2026-09-04, cada nó do registry pode declarar sourceRefs relativos e validados para apps/, packages/, docs/ ou scripts/; sourceMappings() os exporta em ordem determinística e somente como metadados imutáveis, sem conceder autoridade de runtime. O domínio Work Permit já aponta para apps/web/src/pages/work-permits.tsx, inclusive para o campo de validade. O teste focado do registry (5 casos) e o typecheck do pacote Agent passaram.

Em 2026-09-05, os contratos de intent, preview e orquestração passaram com 53 testes em 6 arquivos; registry, binding validator e router passaram com mais 21 testes em 3 arquivos, e o typecheck do Agent passou. A validação atual confirma IDs/aliases estáveis, lookup determinístico, bindings UI-HAG-capability, isolamento conceitual de policy, falha de build para binding inválido e previews não executáveis. A publicação atual do Worker mantém esses contratos em produção. Extração TypeDoc por símbolo/linha e expansão para novos domínios continuam melhorias de cobertura, sem alterar o contrato certificado do vertical Work Permit.

Em 2026-09-06, a regressão dos contratos atuais de registry, binding validator e router passou com 24 testes, e o typecheck do Agent passou novamente. O health público do Worker confirmou o runtime e seus bindings. A evidência mantém o recorte PARTIAL: sourceRefs declarativos não substituem extração automática por símbolo/linha do TypeDoc, e o domínio Work Permit ainda não representa a adoção em todos os domínios.


46. Arquitetura após PRD-009

Agora a arquitetura fica muito mais interessante:

┌───────────────┐
│ React UI │
└───────┬───────┘

Semantic Context


┌─────────────────┐
│ Context Bridge │
└────────┬────────┘


┌─────────────────┐
│ Intent Engine │
└────────┬────────┘

┌────────────┴────────────┐
│ │
▼ ▼
Knowledge Router Agent Registry
│ │
┌─────┴─────┐ ┌─────┼──────┐
▼ ▼ ▼ ▼ ▼
HAG BM25 UI Capability Policy
│ │ │
└─────┬─────┘ │
│ │
└──────────┬────────────┘

Agent Planner


Execution Plan


Policy Engine


Execution Runtime


Hono APIs


Application


Verification


React UI

47. O salto arquitetural produzido pelo PRD-009

Até aqui, o agente poderia ser inteligente, mas ainda dependeria de bastante configuração manual.

Com o PRD-009 começamos a construir algo diferente:

um sistema no qual o próprio software consegue descrever para o agente a sua estrutura operacional.

Isso abre caminho para escalar o Agentic Work para o sistema inteiro.

E há uma consequência ainda mais importante.

Se temos:

Source Code

TypeDoc

Semantic IDs

Knowledge

Capabilities

Policies

Agent Manifest

podemos fazer o agente entender uma nova funcionalidade assim que ela for corretamente registrada no pipeline, sem precisar modificar o “cérebro” do agente.


PRD-010 — Agentic Conversation Runtime

O próximo estágio deverá tratar de uma peça que ainda não formalizamos: a conversa como uma máquina de estados operacional.

Não será simplesmente um chat com histórico.

Precisaremos definir:

Conversation

├── Intent
├── Context
├── Pending Clarification
├── Pending Confirmation
├── Execution
├── Execution Result
├── Follow-up Intent
└── Conversation State

Isso permitirá interações naturais como:

Usuário: “Abra a permissão 123.”

Agente: “Abri.”

Usuário: “Agora vá para os componentes.”

Agente: “Abri a aba Componentes.”

Usuário: “Adicione o componente de trabalho em altura.”

Agente: “Encontrei o componente. Deseja adicioná-lo?”

Usuário: “Sim.”

Agente: “Adicionado.”

E depois:

Usuário: “Explique esse componente.”

Sem o usuário precisar repetir qual permissão, qual aba ou qual componente.

O PRD-010 vai definir justamente essa continuidade operacional, incluindo resolução de referências, estado conversacional, follow-up intents, correções do usuário, cancelamento de planos, “desfaça”, “não era isso”, retomada após erro e, principalmente, como impedir que o contexto de uma conversa antiga contamine uma nova operação.