| Bellacosa Mainframe e o funcionamento dos processos na ia |
☕ UM CAFÉ NO BELLACOSA MAINFRAME
📮 ALAN TURING E O JES2 DOS AGENTES — QUEM DECIDE QUANDO A INTELIGÊNCIA ARTIFICIAL COMEÇA A TRABALHAR?
JES2, filas, submissão, scheduling, dependências, execução assíncrona, checkpoints, restart, retry, idempotência, dead-letter queues, workflows, agentes de IA, COBOL, JCL, Db2, CICS, MQ — e o dia em que Alan Turing descobriu que uma inteligência artificial também pode passar a madrugada inteira esperando o predecessor terminar.
🎬 PRÓLOGO — O AGENTE ESTAVA PRONTO
Alan Turing chegou ao CPD às 05:47.
O café ainda estava sendo preparado.
O operador examinava algumas telas.
O jovem programador COBOL dormia sobre um manual.
E um pequeno robô permanecia parado diante da porta da sala de processamento.
Turing olhou para ele.
— Algum problema?
— Nenhum.
— Está quebrado?
— Não.
— Sem recursos?
— Temos recursos.
— RACF?
— Autorizado.
— WLM?
— Classe STANDARD. Capacidade disponível.
— Então por que não está trabalhando?
O robô respondeu:
— Estou esperando.
Turing levantou uma sobrancelha.
— Esperando o quê?
O robô mostrou seu workflow:
AGENT-MONTHLY-REPORT
STATUS........ WAITING
PREDECESSOR... AGENT-CLOSE-ACCOUNTING
SCHEDULE...... AFTER 06:00
INPUT......... MONTH-END-FILE
CHECKPOINT.... NONETuring sorriu.
— Finalmente.
O programador acordou.
— Finalmente o quê?
— Vocês descobriram que estar apto a executar não significa que chegou a hora de executar.
Ele apontou para o terminal.
— Abra o JES2.
🏛️ CAPÍTULO 1 — O COMPUTADOR PRECISA RECEBER TRABALHO
Para um iniciante, parece natural pensar:
PROGRAMA
↓
EXECUTAMas em ambientes corporativos existe algo antes disso.
Precisamos dizer ao sistema:
Existe trabalho para fazer.
No universo batch do mainframe, isso historicamente envolve o conceito de job.
Um job representa uma unidade de trabalho submetida ao sistema.
Por exemplo:
//PAYROLL JOB ...
//STEP01 EXEC PGM=READTIME
//STEP02 EXEC PGM=CALCPAY
//STEP03 EXEC PGM=REPORTVocê não precisa ficar sentado diante do terminal esperando cada instrução terminar.
O job pode ser submetido.
Depois o sistema administra sua execução.
Essa diferença parece pequena.
Mas é gigantesca.
Temos:
INTERATIVO
Humano solicita
Humano espera
Resultado retornae:
ASSÍNCRONO
Humano/sistema submete
Trabalho entra no ambiente
Humano pode ir embora
Sistema executa depois
Resultado fica disponívelAgentes de IA inevitavelmente entrarão profundamente nesse segundo mundo.
📮 CAPÍTULO 2 — JES2 NÃO É SIMPLESMENTE “UM PROGRAMA QUE RODA JCL”
Vamos corrigir uma simplificação comum.
JCL é a linguagem usada para descrever muitos jobs batch no z/OS.
JES2 — Job Entry Subsystem 2 — participa da administração desse trabalho.
Pense no fluxo conceitual:
SUBMISSÃO
↓
JES2
↓
ENTRADA / FILAS
↓
EXECUÇÃO
↓
OUTPUTO job entra.
Recebe identidade.
É colocado nas estruturas apropriadas.
Espera quando necessário.
Executa quando elegível e quando os recursos necessários estão disponíveis.
Produz output.
Pode ser acompanhado operacionalmente.
Perceba que isso já parece muito com aquilo que precisamos para agentes.
🤖 CAPÍTULO 3 — UM AGENTE TAMBÉM PODE SER SUBMETIDO
Imagine uma aplicação corporativa.
Alguém pede:
Analise os 82 mil contratos da empresa e gere um relatório.
Não faz sentido manter uma página aberta mostrando:
PROCESSANDO...durante seis horas.
Seria melhor transformar isso em uma unidade assíncrona:
SUBMIT AGENTEla recebe:
AGENT....... CONTRACT-ANALYSIS
RUN-ID...... A004821
OWNER....... LEGAL
CLASS....... BATCH
PRIORITY.... STANDARD
STATUS...... QUEUEDO usuário recebe:
Solicitação recebida.
RUN-ID: A004821E pode continuar trabalhando.
O agente executará quando apropriado.
Acabamos de separar:
SUBMETERde:
EXECUTAREssa separação é fundamental para sistemas escaláveis.
🪪 CAPÍTULO 4 — TODO TRABALHO PRECISA DE IDENTIDADE
No mainframe, quando submetemos um job, identidade importa.
Algo semelhante será indispensável para agentes.
Não basta:
AGENT-REPORTporque ele pode estar executando mil vezes.
Precisamos distinguir:
AGENT-REPORT
RUN A0001de:
AGENT-REPORT
RUN A0002Assim podemos perguntar:
Quem solicitou?
Quando?
Com quais parâmetros?
Qual versão?
Qual modelo?
Quais ferramentas?
Qual estado?
Qual resultado?Imagine:
AGENT....... REPORT
RUN-ID...... A000471
REQUESTER... VAGNER
SUBMITTED... 06:14:22
STATUS...... QUEUED
CLASS....... STANDARDO RUN-ID começa a desempenhar papel conceitualmente parecido com um JOBID.
Não são tecnicamente a mesma coisa.
Mas a ponte mental é excelente.
🚉 CAPÍTULO 5 — SUBMETIDO NÃO SIGNIFICA EXECUTANDO
Essa é uma das primeiras coisas que o programador batch aprende.
Você submete.
SUBE isso não significa:
CPU imediatamente!
O job pode estar aguardando.
Nos agentes:
SUBMITTED
↓
QUEUED
↓
ELIGIBLE
↓
STARTING
↓
RUNNING
↓
COMPLETEDOu:
RUNNING
↓
WAITINGOu:
RUNNING
↓
FAILEDOu:
RUNNING
↓
PAUSEDIsso nos leva a uma ideia essencial:
ESTADO.
O agente não está simplesmente:
ONou:
OFFEle percorre um ciclo de vida.
🚦 CAPÍTULO 6 — QUEM DECIDE QUANDO COMEÇA?
Agora chegamos à pergunta do milhão.
Temos:
500 agentes submetidosTodos autorizados.
Todos válidos.
Todos querem executar.
Quem começa?
Aqui entram várias dimensões.
prioridade
classe
horário
dependências
capacidade
recursos
quota
SLO
deadline
políticasNosso artigo anterior sobre WLM já discutiu:
Quem merece recursos?
Agora aparece uma pergunta anterior:
Quem está elegível para entrar em execução?
Isso é scheduling.
⏰ CAPÍTULO 7 — NEM TODO TRABALHO DEVE COMEÇAR AGORA
Imagine um agente:
AGENT-BACKUPEle poderia executar às 14:00.
Mas talvez seja melhor:
02:00Outro:
AGENT-DAILY-REPORTdeve começar:
AFTER 23:59Outro:
AGENT-MONTH-ENDsomente:
LAST BUSINESS DAYOutro:
AGENT-INVOICEdepois que:
SALES-CLOSEterminar.
Portanto scheduling não significa apenas:
RODE ÀS 18:00.Pode significar:
execute quando
tempo
+
dependências
+
recursos
+
políticas
forem satisfeitos🔗 CAPÍTULO 8 — DEPENDÊNCIAS: O AGENTE NÃO VIVE SOZINHO
Imagine este fluxo:
FECHA-VENDAS
↓
CONSOLIDA-DADOS
↓
GERA-RELATÓRIO
↓
VALIDA
↓
DISTRIBUIO terceiro não pode executar antes do segundo.
O segundo depende do primeiro.
Temos um workflow.
Em sistemas modernos isso frequentemente é representado como um grafo.
Por exemplo:
A
/ \
B C
\ /
D
|
EB e C podem executar depois de A.
D só pode executar quando ambos terminarem.
E depende de D.
Isso é um DAG quando o grafo é direcionado e não possui ciclos.
Directed Acyclic Graph.
Uma estrutura extremamente comum em orquestração de workflows.
🧙 CAPÍTULO 9 — O JCL JÁ ENSINAVA DEPENDÊNCIA DENTRO DO JOB
Considere:
//STEP01 EXEC PGM=EXTRACT
//STEP02 EXEC PGM=TRANSFORM
//STEP03 EXEC PGM=REPORTExiste uma ordem natural.
Mas também podemos condicionar execução.
Conceitualmente:
SE STEP01 FUNCIONOU
EXECUTA STEP02e depois:
SE STEP02 FUNCIONOU
EXECUTA STEP03Isso não é muito diferente da lógica de workflows modernos.
Podemos imaginar:
AGENT STEP 1
Extract data
AGENT STEP 2
Analyze data
AGENT STEP 3
Generate report
AGENT STEP 4
Human approval
AGENT STEP 5
Send reportDe repente o velho batch começa a parecer surpreendentemente moderno.
🔀 CAPÍTULO 10 — O AGENTE PODE ESCOLHER CAMINHOS
Aqui surge uma diferença interessante.
Um workflow tradicional pode ser relativamente previsível.
A → B → CUm agente pode decidir:
A
↓
Preciso de informação?
├── SIM → B → Search
└── NÃO → CDepois:
Resultado suficiente?
├── SIM → D
└── NÃO → Search novamenteIsso significa que o workflow pode ser parcialmente dinâmico.
Por isso precisamos distinguir:
ORQUESTRAÇÃOde:
RACIOCÍNIO DO AGENTEA infraestrutura pode impor limites.
O agente escolhe ações dentro desses limites.
🎼 CAPÍTULO 11 — ORQUESTRAÇÃO: O MAESTRO NÃO TOCA TODOS OS INSTRUMENTOS
Imagine uma orquestra.
O maestro não toca:
violino
piano
trompete
bateriasimultaneamente.
Ele coordena.
Um orquestrador de agentes pode coordenar:
AGENT-RESEARCH
AGENT-CODE
AGENT-SECURITY
AGENT-REVIEWPor exemplo:
RESEARCH
↓
CODE
↓
SECURITY
↓
REVIEWOu:
┌→ SECURITY ─┐
CODE ────────┤ ├→ REVIEW
└→ TEST ─────┘O orquestrador decide:
quando iniciar
quando esperar
quando repetir
quando falhar
quando cancelarIsso é muito diferente de simplesmente chamar um chatbot.
💥 CAPÍTULO 12 — E SE O AGENTE FALHAR NO PASSO 87?
Imagine:
100 passosO agente executa:
1
2
3
...
86
87E então:
💥Erro.
Temos duas possibilidades.
Estratégia A
VOLTA PARA O PASSO 1Parabéns.
Você acaba de desperdiçar horas e dinheiro.
Estratégia B
RESTART FROM CHECKPOINTAgora entramos em território extremamente familiar ao mainframe.
💾 CAPÍTULO 13 — CHECKPOINT: MARQUE ONDE CHEGOU
Checkpoint significa guardar estado suficiente para permitir continuação ou recuperação.
Imagine:
STEP 10
CHECKPOINT
STEP 20
CHECKPOINT
STEP 30
CHECKPOINTSe falhar no 27:
RESTART
FROM CHECKPOINT 20Em agentes:
CHECKPOINT
run_id=A004821
step=20
documents_processed=42000
cursor=42001
state=VALIDDepois de uma falha:
RESUME A004821O sistema sabe de onde continuar.
Isso pode economizar:
tempo
tokens
API calls
CPU
dinheiro♻️ CAPÍTULO 14 — RESTART NÃO É SIMPLESMENTE “RODE DE NOVO”
Aqui mora um monstro.
Imagine um agente fazendo:
STEP 1
Ler pedido
STEP 2
Cobrar cartão
STEP 3
Atualizar banco
STEP 4
Enviar e-mailEle cobra o cartão.
Depois cai.
Você simplesmente reinicia.
STEP 1
STEP 2Parabéns.
Você pode cobrar novamente.
Por isso precisamos falar de:
IDEMPOTÊNCIA.
🧮 CAPÍTULO 15 — IDEMPOTÊNCIA: EXECUTAR DUAS VEZES SEM FAZER BESTEIRA
Uma operação idempotente pode ser repetida sem alterar o resultado além do efeito pretendido.
Exemplo simples:
SET STATUS = 'PAID'Executar duas vezes continua deixando:
STATUS = PAIDMas:
ADD 100 TO BALANCEexecutado duas vezes produz efeito duplicado.
Em integrações modernas podemos usar:
IDEMPOTENCY-KEYPor exemplo:
PAYMENT-ID = 918273Antes de processar:
Já processei PAYMENT-ID 918273?Se sim:
NÃO REPETIR.Para agentes com capacidade de executar ações externas, isso é fundamental.
📨 CAPÍTULO 16 — MENSAGEM TAMBÉM PODE SER TRABALHO
Agora entre no mundo da mensageria.
Um sistema coloca:
MESSAGEem uma fila.
Outro sistema consome.
PRODUCER
↓
QUEUE
↓
CONSUMERO produtor não precisa esperar o consumidor terminar.
Isso permite desacoplamento.
MQ já ensina essa filosofia há décadas.
E agentes podem funcionar da mesma maneira.
USER
↓
TASK QUEUE
↓
AGENT WORKER
↓
RESULT QUEUEIsso é especialmente útil para processamento assíncrono.
☠️ CAPÍTULO 17 — DEAD-LETTER QUEUE: O CEMITÉRIO DAS MENSAGENS PROBLEMÁTICAS
Imagine uma tarefa que sempre falha.
TRY 1 → FAIL
TRY 2 → FAIL
TRY 3 → FAIL
TRY 4 → FAILNão podemos repetir eternamente.
Senão criamos:
RETRY
RETRY
RETRY
RETRY
RETRYaté o Sol explodir.
Depois de determinado limite:
MOVE TO DLQDLQ:
DEAD-LETTER QUEUE.
É uma fila para mensagens ou tarefas que não puderam ser processadas normalmente.
Agora alguém pode investigar.
RUN-ID...... A004821
ERROR....... INVALID DOCUMENT
RETRIES..... 5
STATUS...... DEAD-LETTERIsso é muito melhor que perder silenciosamente a tarefa.
🔥 CAPÍTULO 18 — RETRY PRECISA TER CÉREBRO
Já discutimos retry storm no WLM dos agentes.
Aqui ele volta.
Nunca pense:
FAIL
↓
RETRY IMMEDIATELY FOREVERPrefira políticas.
TRY 1
↓
WAIT 1s
TRY 2
↓
WAIT 2s
TRY 3
↓
WAIT 4s
TRY 4
↓
WAIT 8sIsso é exponential backoff.
Acrescente jitter para evitar milhares de agentes retornando exatamente no mesmo instante.
E estabeleça:
MAX-RETRIESDepois disso:
FAIL
ESCALATE
DLQMáquinas precisam saber desistir.
🧠 CAPÍTULO 19 — “ESPERANDO” PRECISA EXPLICAR O MOTIVO
No nosso SDSF dos agentes, aprendemos que:
WAITINGé pouco informativo.
Agora podemos ser específicos:
WAITING_TIMEWAITING_PREDECESSORWAITING_RESOURCEWAITING_APPROVALWAITING_RATE_LIMITWAITING_RETRYWAITING_EVENTVeja a diferença.
Antes:
AGENT REPORT
WAITINGAgora:
AGENT REPORT
WAITING_PREDECESSOR
PREDECESSOR:
AGENT ACCOUNTING-CLOSE
SINCE:
05:47:12O operador finalmente sabe por que o robô está sentado tomando café.
📅 CAPÍTULO 20 — EVENTO PODE SER MAIS IMPORTANTE QUE HORÁRIO
Nem todo processamento deveria ser:
EXECUTE 22:00Talvez devesse ocorrer quando:
arquivo chegouou:
mensagem apareceuou:
pedido foi aprovadoou:
saldo caiu abaixo do limiteTemos:
TIME-DRIVENversus:
EVENT-DRIVENUm agente moderno pode acordar porque:
EVENT
↓
TRIGGER
↓
AGENT RUNExemplo:
NEW CONTRACT UPLOADED
↓
AGENT-CONTRACT-REVIEWIsso evita polling desnecessário.
💤 CAPÍTULO 21 — AGENTE PARADO NÃO PRECISA CONSUMIR UMA THREAD ETERNAMENTE
Imagine um workflow esperando aprovação humana por três dias.
Seria absurdo manter:
process
thread
connection
memorypresos durante três dias.
Melhor persistir o estado:
RUN-ID........ A00123
STATE......... WAITING_APPROVAL
CHECKPOINT.... SAVEDE liberar recursos.
Quando a aprovação chegar:
EVENT APPROVEDo workflow é retomado.
Essa é uma característica importante de sistemas assíncronos duráveis.
Esperar não deveria necessariamente significar ficar executando enquanto espera.
🏷️ CAPÍTULO 22 — O JES2 DOS AGENTES PRECISA DE UMA FILA VISÍVEL
Vamos imaginar nosso painel.
AI JOB ENTRY SYSTEM
────────────────────────────────────────────────────────
RUN-ID AGENT CLASS STATE
A00471 FRAUD CRITICAL EXEC
A00472 REPORT STANDARD INPUT
A00473 ARCHIVE BACKGROUND QUEUED
A00474 CONTRACT BATCH EXEC
A00475 MONTH-END BATCH WAIT-PRED
A00476 SUPPORT INTERACT WAIT-RETRYSelecionamos:
A00475E vemos:
AGENT........ MONTH-END
OWNER........ FINANCE
SUBMITTED.... 05:41:22
CLASS........ BATCH
STATUS....... WAITING_PREDECESSOR
PREDECESSOR:
ACCOUNTING-CLOSE
SCHEDULE:
AFTER 06:00
CHECKPOINT:
NONE
RETRIES:
0Agora temos algo operacionalmente útil.
🧙 CAPÍTULO 23 — TURING DESENHA O CICLO DO TRABALHO
Turing pega o giz.
Escreve:
CRIAR
↓
SUBMETER
↓
CLASSIFICAR
↓
COLOCAR NA FILA
↓
VERIFICAR ELEGIBILIDADE
↓
AGENDAR
↓
EXECUTAR
↓
CHECKPOINT
↓
CONCLUIRMas adiciona:
┌──── FAIL ────┐
↓ │
RETRY │
↓ │
CHECKPOINT? │
↙ ↘ │
SIM NÃO │
↓ ↓ │
RESUME RESTART │
│ │ │
└───────────┴────────┘E depois:
MAX RETRIES EXCEEDED
↓
DLQ
↓
HUMAN / AUTOMATED REVIEWO jovem COBOL observa.
— Isso está começando a parecer um sistema operacional para robôs.
Turing responde:
— Exatamente.
🏰 CAPÍTULO 24 — JES2 E WLM NÃO RESPONDEM À MESMA PERGUNTA
Aqui precisamos evitar outra simplificação.
Não diga:
JES2 = WLMSão papéis diferentes.
Pedagogicamente podemos pensar:
JES2
Ajuda a administrar a entrada e o fluxo de jobs.
Pergunta:
Que trabalho existe e onde ele está no ciclo?
WLM
Gerencia workloads segundo objetivos e políticas de serviço.
Pergunta:
Como devemos administrar recursos para cumprir objetivos?
No nosso mundo dos agentes:
JES2 DOS AGENTES
↓
submissão
fila
elegibilidade
scheduling
output
estadoenquanto:
WLM DOS AGENTES
↓
classe
objetivo
prioridade
capacidade
concorrência
throttlingOs dois trabalham juntos.
🔐 CAPÍTULO 25 — E O RACF?
Também continua lá.
Antes de executar:
AGENT wants TOOL-Xprecisamos saber:
AUTHORIZED?Portanto nossa arquitetura começa a ficar interessante:
TASK
↓
JES2
↓
ELIGIBLE?
↓
WLM
↓
RESOURCE?
↓
RACF
↓
AUTHORIZED?
↓
EXECUTENão interprete literalmente essa ordem como arquitetura interna do z/OS.
Estamos construindo uma analogia didática.
Mas ela é poderosa.
Cada componente responde a uma pergunta diferente.
🛑 CAPÍTULO 26 — E O PF3?
O agente começou.
Depois percebemos:
ELE ESTÁ FAZENDO BESTEIRA.Precisamos:
PAUSE
CANCEL
STOPNosso PF3 conceitual.
Portanto:
JES2
Quem entra?
WLM
Quem recebe recursos?
RACF
Quem pode fazer?
SDSF
O que está fazendo?
PF3
Posso parar?
MAXCC
Funcionou?Estamos montando uma espécie de mainframe mental para governança de agentes.
🔄 CAPÍTULO 27 — O CHECKPOINT DOS AGENTES NÃO É APENAS UM NÚMERO
Em agentes complexos, talvez precisemos guardar:
workflow state
completed steps
pending steps
tool results
references
cursor
approvals
business identifiers
retry countMas cuidado.
Não precisamos necessariamente persistir tudo que passou pela “cabeça” do modelo.
Devemos persistir estado operacional necessário para retomar a execução.
Essa distinção importa.
O objetivo é:
RESUMABILITYnão:
GRAVAR CADA PENSAMENTO PARA SEMPREAlém de desnecessário, isso pode criar problemas de privacidade, segurança e custo.
📦 CAPÍTULO 28 — OUTPUT TAMBÉM PRECISA DE CICLO DE VIDA
O agente terminou.
Excelente.
E agora?
Resultado:
REPORT.PDFou:
JSONou:
DATABASE UPDATEou:
MESSAGEou:
EMAIL DRAFTPrecisamos registrar:
onde está
quem pode acessar
quanto tempo guardar
qual versão
qual execução produziuNo batch tradicional, output sempre foi parte importante da operação.
Nos agentes também será.
Uma resposta na tela não é suficiente para workflows empresariais.
Precisamos de proveniência.
🔎 CAPÍTULO 29 — PROVENIÊNCIA: QUEM PRODUZIU ISSO?
Imagine encontrar:
RELATORIO-FINAL.PDFPerguntas:
Qual agente gerou?
Qual execução?
Qual modelo?
Quais documentos foram usados?
Qual versão do workflow?
Quem solicitou?
Quem aprovou?
Quando?Podemos guardar:
OUTPUT-ID..... O88271
RUN-ID........ A004821
AGENT......... CONTRACT-ANALYSIS
VERSION....... 3.8
CREATED....... 14:22:01
APPROVED-BY... USER72Isso conecta:
OUTPUTà:
EXECUÇÃOe à:
AUDITORIA.⚠️ CAPÍTULO 30 — EXACTLY ONCE É MAIS DIFÍCIL DO QUE PARECE
Em sistemas distribuídos, uma pergunta aparentemente simples:
Essa tarefa executou exatamente uma vez?
pode se tornar surpreendentemente difícil.
Imagine:
AGENT
↓
API
↓
ACTION EXECUTEDMas a resposta da API se perde.
O agente pensa:
Falhou.
E repete.
Só que a primeira operação tinha funcionado.
Temos:
DUPLICATE ACTIONPor isso sistemas robustos combinam estratégias como:
idempotency keys
deduplication
transactional boundaries
persistent state
acknowledgementsO importante para o COBOL iniciante é compreender:
retry não é inocente.
Sempre pergunte:
O que acontece se este passo executar duas vezes?
Essa pergunta vale ouro.
🧰 CAPÍTULO 31 — CHECKLIST PARA PROJETAR UM AGENTE ASSÍNCRONO
Antes de colocar um agente em produção, pergunte:
1. Como ele é submetido?
API?
evento?
horário?
mensagem?
humano?2. Como recebe identidade?
RUN-ID?
CORRELATION-ID?3. Qual fila recebe?
CRITICAL?
STANDARD?
BACKGROUND?4. Quando fica elegível?
horário?
evento?
predecessor?5. Quais dependências existem?
A → B → C?6. Como detectamos falha?
timeout?
return status?
business validation?7. Pode tentar novamente?
MAX-RETRIES?
BACKOFF?8. A operação é idempotente?
Essa pergunta merece ser repetida.
9. Existe checkpoint?
RESUME FROM WHERE?10. O que acontece depois das tentativas?
DLQ?
ESCALATION?
HUMAN REVIEW?11. Onde fica o output?
arquivo?
banco?
fila?
objeto?12. Como auditamos?
quem?
quando?
o quê?
resultado?Se você consegue responder essas perguntas, já está pensando muito além de:
“Vou fazer um chatbot.”
🥚 EASTER EGG — O JOB QUE ESPEROU 27 ANOS
São 03:14.
O operador percebe algo estranho.
RUN-ID..... A000001
STATE...... WAITING_PREDECESSOR
AGE........ 27 YEARSTuring olha.
— Vinte e sete anos?
O operador confirma.
— Qual predecessor?
Abrem os detalhes:
PREDECESSOR:
Y2K-FINAL-CLEANUPSilêncio.
O jovem COBOL pergunta:
— E esse predecessor?
O operador procura.
NOT FOUNDTuring olha para o pequeno robô.
— Quem criou isso?
— Um consultor.
— Onde está?
— Aposentado.
— Documentação?
— Não encontramos.
O programador COBOL fecha os olhos.
Do fundo do CPD vem a voz ancestral:
Conhecimento tribal...
O administrador do JES2 toma um gole de café.
— Cancela?
Turing responde:
— Não.
— Por quê?
— Primeiro descubra o que ele faria se finalmente executasse.
Excelente conselho para qualquer sistema legado.
🧠 CAPÍTULO 32 — O PROGRAMADOR COBOL JÁ TEM VANTAGEM CONCEITUAL
Talvez um jovem desenvolvedor veja:
workflow orchestration
async processing
job scheduling
queues
retries
checkpointscomo ideias modernas.
O programador mainframe olha e pensa:
Já vi parentes dessas criaturas.
Batch ensinou:
trabalho pode esperarJCL ensinou:
trabalho possui etapasJES ensinou:
trabalho precisa entrar e ser administradoSDSF ensinou:
execução precisa ser visívelRACF ensinou:
execução precisa de autoridadeWLM ensinou:
recursos precisam de políticaRestart ensinou:
falha não deveria obrigar tudo a começar novamenteMensageria ensinou:
produtor e consumidor não precisam trabalhar simultaneamenteOs agentes estão adicionando uma coisa extraordinária:
DECISÃO DINÂMICAMas eles não apagaram os problemas antigos.
Pelo contrário.
Tornaram alguns deles ainda mais importantes.
🏗️ CAPÍTULO 33 — NOSSO “SISTEMA OPERACIONAL DOS AGENTES”
Agora conseguimos desenhar a arquitetura completa desta série.
USUÁRIO / EVENTO
│
▼
┌───────────┐
│ SUBMISSÃO │
└─────┬─────┘
│
▼
┌─────────────────┐
│ JES2 DOS AGENTES│
│ filas/schedule │
└────────┬────────┘
│
▼
┌────────────┐
│ WLM │
│ prioridade │
└─────┬──────┘
│
▼
┌────────────┐
│ RACF │
│ autoridade │
└─────┬──────┘
│
▼
┌───────┐
│ AGENTE│
└───┬───┘
│
┌───────────┼────────────┐
▼ ▼ ▼
LLM APIs TOOLS
│ │ │
└───────────┼────────────┘
│
▼
SISTEMASEm volta:
SDSF
↓
OBSERVABILIDADE
PF3
↓
INTERRUPÇÃO
CHECKPOINT
↓
RECUPERAÇÃO
MAXCC
↓
RESULTADO
AUDIT
↓
EVIDÊNCIAAgora temos algo muito maior que um chatbot.
Temos uma plataforma operacional para trabalho autônomo.
☕ EPÍLOGO — INTELIGÊNCIA TAMBÉM PRECISA DE UM SCHEDULER
Às 06:01 o painel finalmente mudou.
AGENT-MONTHLY-REPORT
STATUS........ ELIGIBLE
PREDECESSOR... COMPLETE
SCHEDULE...... SATISFIED
RESOURCE...... AVAILABLE
AUTHORIZATION. OKDepois:
STATUS........ EXECUTINGO pequeno robô levantou da cadeira.
— Finalmente!
Turing sorriu.
— Você estava esperando há quanto tempo?
— Quatorze minutos.
— E morreu?
— Não.
— Perdeu inteligência?
— Não.
— O relatório deixou de ser importante?
— Não.
— Então esperar foi um problema?
O robô pensou.
— Não.
Turing apontou para o CPD.
Outros agentes estavam:
QUEUED
WAITING_EVENT
WAITING_PREDECESSOR
WAITING_APPROVAL
EXECUTING
RETRYING
COMPLETEDNenhum precisava ocupar todos os recursos simplesmente porque existia.
Esse talvez seja um dos maiores erros que cometeremos ao imaginar agentes de IA:
confundir autonomia com execução permanente.
Um agente autônomo não precisa ficar acordado 24 horas consumindo recursos.
Pode existir como estado persistente.
Pode dormir.
Pode esperar.
Pode acordar quando chega um evento.
Pode continuar de um checkpoint.
Pode aguardar outro processo.
Pode receber uma tarefa e executá-la horas depois.
Pode falhar e ser reiniciado.
Pode ultrapassar o limite de retries e ser enviado para investigação.
Pode terminar e deixar evidências.
É exatamente aí que a inteligência artificial deixa de parecer um brinquedo conversacional e começa a se comportar como workload empresarial.
Turing pega o giz pela última vez.
Escreve:
RACF
QUEM PODE?Depois:
PF3
POSSO PARAR?Depois:
SDSF
O QUE ESTÁ FAZENDO?Depois:
MAXCC
FUNCIONOU?Depois:
WLM
QUEM RECEBE RECURSOS?Finalmente:
JES2
QUEM COMEÇA — E QUANDO?O programador COBOL observa o quadro.
— Professor, cada tecnologia moderna de agentes parece estar reinventando alguma coisa que o CPD já precisava resolver.
Turing toma um gole de café.
— Não exatamente.
— Não?
— Estamos aumentando drasticamente o poder do trabalhador.
Ele aponta para o robô.
— Mas os problemas de administrar trabalho continuam existindo.
Essa talvez seja a chave.
O agente pode entender linguagem natural.
Pode planejar.
Pode escolher ferramentas.
Pode consultar documentos.
Pode executar APIs.
Pode escrever código.
Pode conversar com outros agentes.
Mas alguém ainda precisa decidir:
quando ele acorda,
quando começa,
do que depende,
quanto pode repetir,
onde salva seu estado,
como continua depois de uma falha,
o que acontece quando não consegue terminar,
e quem consegue descobrir onde diabos ele foi parar.
Inteligência não elimina engenharia operacional.
Na verdade, quanto maior a autonomia...
mais importante ela se torna.
No canto da tela:
AGENT-MONTHLY-REPORT
STEP.......... 4/12
STATUS........ EXECUTING
CHECKPOINT.... CP003
MAX-RETRIES... 3
TRACE......... 7F82A91CTuring observa.
— Agora sim.
O jovem COBOL pergunta:
— Agora podemos ir tomar café?
Turing aponta para outro painel:
AGENT-PAYROLL
STATE: WAITING_PREDECESSOR
PREDECESSOR:
AGENT-MONTHLY-REPORT— Depois que o predecessor terminar.
O programador olha para o robô.
O robô olha para o programador.
Ambos puxam uma cadeira.
READY
E a fila continuava andando.
Sem comentários:
Enviar um comentário