Pular para o conteúdo principal

Architecture Specification Language

O harness de system design para seus agentes.

Agentes escrevem código mais rápido do que qualquer pessoa consegue revisar o design. O ASL entrega a sua arquitetura como contexto estruturado e traz um compilador que valida cada mudança sem gastar um único token.

0tokens para validar
100%Determinístico
DeclarativoDescreva em YAML, como no Kubernetes
ExtensívelCom os seus próprios schemas e policies
PortátilCLI, Go, navegador e Python

Seus agentes pagam para interpretar a arquitetura. Toda vez.

Diagrama é feito para gente ler. Entregar um a um modelo transforma cada tarefa em um exercício de interpretação.

Ler um draw.io queima tokens

O arquivo é um XML enorme, cheio de coordenadas, estilos e ids gerados. O agente gasta tokens para reconstruir um grafo que nunca foi guardado como grafo.

Screenshots custam mais e alucinam mais

Tokens de imagem e, depois, a inferência do que cada seta quer dizer. É push ou polling? Síncrono ou assíncrono? O modelo alucina uma resposta.

O mesmo diagrama gera um design diferente a cada execução

A interpretação é probabilística. Duas sessões leem a mesma imagem e constroem sistemas diferentes.

Ninguém avisa ao agente que ele errou

Não existe ciclo de feedback para um design. Dependências soltas e contratos quebrados só aparecem em produção, nunca no prompt.

Um harness de system design.

Contexto para ler, guardrails para respeitar e feedback para corrigir. Validar é rodar um programa, não escrever um prompt: não custa nada e dá o mesmo resultado em toda execução.

  1. 01

    Contexto

    O agente lê a arquitetura como dado tipado. Sem decifrar desenho, sem alucinar o que uma seta quer dizer.

  2. 02

    Guardrails

    Suas regras viram policies que toda mudança precisa cumprir: ownership, dependências permitidas, nomenclatura, tudo que o CEL consegue expressar.

  3. 03

    Feedback

    O asl compila a mudança e devolve poucas linhas de diagnóstico. O agente corrige sozinho, e o CI barra o merge quando o exit code é 1.

Você define o que é antipadrão no seu contexto.

Várias aplicações escrevendo no mesmo banco de dados pode ser aceitável em uma empresa e um erro na sua. Escreva essa regra uma única vez e toda arquitetura proposta por um agente será verificada contra ela, antes de qualquer linha de código.

01O agente propõe

O billing-service precisa registrar dados de crédito, e gravar direto no credit-db é o caminho mais rápido para entregar a funcionalidade.

agent proposal · architecture/credit.asl.yaml
apiVersion: asl/v1
kind: Application
metadata:
name: credit-service
spec:
providers:
aws: EKS
language: Go
---
apiVersion: asl/v1
kind: Application
metadata:
name: billing-service
spec:
providers:
aws: EKS
language: Go
---
apiVersion: asl/v1
kind: Database
metadata:
name: credit-db
spec:
providers:
aws: RDSPostgreSQL
---
apiVersion: asl/v1
kind: Relationship
metadata:
name: credit-db-edges
spec:
edges:
- from:
kind: Application
name: credit-service
to:
kind: Database
name: credit-db
type: writes
- from:
kind: Application
name: billing-service
to:
kind: Database
name: credit-db
type: writes

02Seu contexto diz não

Uma CustomPolicy, versionada com o código: um banco de dados tem um único escritor.

policies/single-writer.asl.yaml
apiVersion: asl/v1
kind: CustomPolicy
metadata:
name: single-writer
namespace: acme
spec:
severity: error
selector:
kind: Database
assertions:
# only one application may write to this database
- expression: to(manifest, 'writes').size() <= 1
message: Only one application may write to database

03O compilador responde

Sem chamada a modelo nenhum. O agente lê poucas linhas, dá ao billing-service um banco só dele e roda de novo.

$ asl ./architecture --policies-bundle-path ./policies
error: Only one application may write to database
--> architecture/credit.asl.yaml:18
policy: acme.single-writer

error: could not compile due to 1 previous error (6.6ms)

O ASL não é diagrama como código.

Não desenhe a arquitetura. Especifique.

Diagramas, draw.io, diagrama como código
ASL
Só se preocupa com o desenho gerado
Se preocupa com a arquitetura em si
Uma seta significa o que cada leitor entender
Todo relacionamento é tipado: reads, writes, calls
Um arquivo draw.io tem milhares de tokens de coordenadas e estilos para ler
Dado estruturado que o agente lê direto
Passa mesmo com uma conexão solta
Uma referência solta quebra o build
Não expressa regra nenhuma
Regras são policies que rodam a cada commit
Ler a comparação completa

Um único compilador. Use onde você já trabalha.

As mesmas checagens e o mesmo resultado no seu pipeline, nas suas ferramentas, no navegador e nos seus scripts.

No seu pipeline

Rode a cada pull request. Uma arquitetura que viola uma regra derruba o build antes de ser integrada.

Nas suas ferramentas

Integre a checagem ao portal ou à plataforma interna que o seu time já usa. A arquitetura é validada ali mesmo, sem ninguém sair da ferramenta.

Em um editor de diagramas

Alimente um editor de diagramas: a pessoa desenha no canvas e o ASL valida a arquitetura por trás, ao vivo e sem servidor.

Em Python

Rode as mesmas checagens em scripts e notebooks, junto das suas ferramentas de dados e IA.

Dê aos seus agentes um design que eles consigam ler.

Escreva a regra uma vez. Toda proposta de um agente passa por ela antes de virar código.