contact $ mail "your message"

// where the hours go

Agents get read access on day one. The engineering is deciding when they get to write.

STACK_01

Agentic AI, in production

Getting a model to answer is the easy bit. Once it can act, every tool needs a scope and something that can say no.

NOW Multi-agent ops assistant on Bedrock AgentCore: a supervisor routes work to three agents (runbook RAG, ITSM, Kubernetes) through an MCP gateway on read-only credentials. Every answer passes a grounding check, every run is traced in OpenTelemetry. NOW Incident investigation agent: on a page it pulls CloudWatch metrics and logs, X-Ray traces and recent deploys, then writes a root-cause hypothesis with evidence links into the ticket. Rollbacks wait for the on-call engineer. NOW Claims intake on Bedrock Data Automation: S3 upload, EventBridge, one blueprint per document type. Low-confidence fields go to human review before anything is written downstream.

the try panels below are working versions of these stacks, on a small model that runs on your device. optional, and nothing downloads until you press load.

tryclaims intakelocal model
tryincident investigationlocal model

                    
tryan agent on this site's toolstool calls · otel trace · local model
~/pocls -l[11]
current, earlier and own-time builds
nowpii gatewayveilllama.cpp on the box swaps names, addresses and keys for tokens before a prompt reaches a cloud model. if it can't mask, nothing is sent
nowci triagesiftregex cuts a CI log to the lines around the failure, the model sorts it and names the likely commit. drafts an issue, never merges
nowdrift to pranchorterraform plan finds console drift, CloudTrail says who and when, the agent opens a PR to codify or revert it. never runs apply
donedotnet8-port.NET Framework to .NET 8 with AWS Transform. the agent did the bulk rewrite, tests and a human review decided what merged
doneops-text-to-sqlquestions to SQL: schema retrieved first, read-only replica, row limit, query shown next to the result
doneitsm-triageServiceNow incidents matched to SOPs, fixes through Flow Designer and a MID Server, nothing runs until an engineer approves
donezero-egress-ragllama.cpp and a local vector index on one box, for data that cannot leave the network
# own time. own models, own endpoints, public challenges
labfine-tunequillQLoRA on Qwen2.5-1.5B with Unsloth for ticket categories and tool-call JSON. scored against the base model, served as GGUF on llama.cpp
labjailbreak labprygarak probes and PyRIT multi-turn attacks on my own models and guardrails. anything that gets through becomes a test case
labguardrail benchtripwireLlama Guard and Bedrock Guardrails scored on public jailbreak and benign sets: misses and false refusals
labinjection ctfflagrunpublic prompt-injection challenges, and bounty work only inside a published scope
STACK_02

The model layer

If retrieval is wrong, the answer is wrong, whatever the model. Most of my RAG time goes into chunking, reranking and checking answers against sources, not prompts.

RAGAgentic RAGEmbeddingsVector DBsBedrockRAG evalstructured output
ingest docs chunk embed index top-k serve query retrieve rerank grade answer
tryask this pagerag · local model
trytext-to-sqlstructured output · local model
incidents(id, opened, service, severity, team, status, mttr_min) · 18 rows · read-only
tryx-ray a replytoken probabilities · local model
STACK_03

Cloud & infra

Terraform and YAML in a repo, rebuildable without me. Agents start read-only and stay that way until someone signs off.

AWSTerraformKubernetesCI/CDSRELinuxOTEL

            
tryexplain a linelocal model
click any line in the log above
STACK_04

Breaking it first

I'd rather break it on purpose on a Tuesday afternoon than find out at 3am.

SLOsError budgetsAWS FISChaos MeshLitmusChaosMulti-region DRRoute 53 failover
next: pod-kill
trydraft the postmortemlocal model
inject chaos first. the draft is written from that run's log
STACK_05

Red team, on my own stuff

I try to break what I build, with permission and a ticket number. Quickest way to find where the trust boundary leaks.

ReconWeb ExploitationPrivilege EscalationThreat ModelingPrompt-injection defenseResponsible Disclosure
trust boundary attacker edge app agent data report
retrieved_doc.md
layer 5model judge, local
skills
~/skills
● production◐ shipping○ exploring
GenAI & Agentic RAG, Agentic RAG, Bedrock, AgentCore, Frameworks (Strands / LangGraph), MCP, A2A, Memory, Multi-agent, RAG eval, Observability, Tools, Embeddings, Guardrails & HITL, Context engineering, Governance
Cloud & Infra AWS, Kubernetes, Docker, CI/CD, Terraform, SRE, SLOs & error budgets, Disaster recovery, Chaos engineering, Linux, Ansible
Backend Python, Rust, Flask / FastAPI, Node.js, REST APIs, Webhooks, ServiceNow
Data & ML Ops Classical ML, MLOps, Vector at scale, Eval & observability, Data engineering
Frontend React / vanilla, Client crypto
career
git log --graph career
a91f3c2HEAD -> mainfeat: forward deployed, agentic ai2026

Forward deployed. I sit with whichever team has the problem and ship agents into their stack.

6d2e0b7refactor: cloud and devops2023

Went from fixing servers by hand to writing the Terraform and pipelines that build them.

1c4a9e5init: systems2019

Support and systems work. Lots of night shifts, lots of learning how things break.

Same job underneath, mostly. I just sit a lot closer to the problem now.

certs
AWSSOLUTIONS ARCHITECT · ASSOCIATE
AZUREDEVOPS ENGINEER
CLAUDECERTIFIED ARCHITECT · PROFESSIONAL
AGENTIC AIENGINEER · PROFESSIONAL
rules I try to keep
.sad7qrc
rebuild-from-fileerrorIf it can’t be rebuilt from a file, it doesn’t exist.
model-is-cheapwarnThe model is the easy part.
human-before-irreversibleerrorAnything irreversible waits for a human.
fix-like-the-exploiterrorWrite the fix as carefully as the exploit.
boring-over-clevererrorPick the boring tool you can see inside.
no-single-point-of-understandingerrorIf I’m the only one who understands it, it’s broken.
BACK