Skip to content
View tiagovilasboas's full-sized avatar

Block or report tiagovilasboas

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
tiagovilasboas/README.md

Tiago Vilas Boas (Montanha) 🛵

Staff Engineer · Agentic AI · AppSec · Observability

LinkedIn DEV.to Sponsor

I build the conditions for squads to make good decisions without depending on my memory.

I lead AI enablement across squads. I've worked in tech since 2006 and today apply Harness Engineering, Agentic AI and AppSec: architecture before code, scoped agents, a human in the loop, and evidence you can reproduce.

🔧 Building now: Downshift

Downshift

Right model for every subagent. No LLM in the loop.

A single Go binary that sits in your coding agent's hooks, scores each delegated task and picks the model and effort. Unsure? The spawn keeps the model it asked for.

$ downshift try "rename the userId variable"
→ small: opus → haiku (~75% cheaper) (est., list prices)
why: trivial task, no risk, confident
curl -fsSL https://raw.githubusercontent.com/tiagovilasboas/downshift/main/install.sh | sh && downshift setup
  • Deterministic model routing: mechanical work (renames, test runs, listings) is downshifted; auth, payment and secrets keep risk floors.
  • Cache hygiene (cache-tax): prices a cold prompt cache before you pay for it.
  • Code intelligence (opt-in): reverse call graph and only the relevant symbols packed under a byte cap.
  • Output compaction: noisy terminal output is compacted; errors, diffs and stack traces stay verbatim.

Works with Claude Code, Cursor, Codex and OpenCode. Fail-open: any doubt or error leaves the spawn untouched. Prompts never leave memory.

Honest numbers: up to ~12% list-price saving on mechanical delegated work in a controlled A/B, nothing attributable on natural use yet. Every claim has a rung on the evidence ladder.

Website Release Build Stars License

🌐 Website · Try it · Architecture · Discussions · ⭐ Star it

Impact

📌 Other projects

antigravity-operator
Outer harness for coding agents on Google AI Pro: scoped, evidence-backed, recoverable sessions.
Go stars
sentry-golden-path
Staff guide to the Sentry golden path: errors, tracing, releases, alerts and AI/LLM monitoring.
JavaScript stars
ai-code-review
Agentic code review toolkit: skills, runbooks and AppSec guardrails for PR pipelines.
JavaScript stars
dev-to-mcp
MCP server for the Forem/DEV.to API in a single binary. Go + stdio, no cold start.
Go stars
react-layered-boilerplate
Production-ready React + Vite starter with strict layering, TypeScript, tests and CI.
TypeScript stars
montanha-zero-day
Platformer game as an offline PWA on your phone (play).
JavaScript stars

Start here

Resource What's inside
agyo: architecture Where the Go runtime sits between the agent and the OS, and where session state is written
ai-code-review: runbooks A PR review in about 15 minutes: one skill per pass, a HIGH AuthZ/IDOR or CRITICAL secret becomes BLOCK, findings without path:line are dropped

Contributions

I send small, tested fixes to projects I use. Some examples:

  • lefthook #1566: fail_on_changes no longer breaks the hook when a submodule is staged.
  • goose #12629: first-time CLI configure asks for the goose mode and saves it.
  • laya #968: fine-tune warns when predictions collapse to the class prior.
  • openai-agents-python #4961: the session history limit is no longer sent as the Conversations API page size.
  • rspack #15900: lightningcss-loader stops mutating user options, so child compilers build again.
  • gosec #1760: G102 now flags binding to the IPv6 unspecified address.
  • nanostores #437: listenKeys fires for deep keys changed through a parent key.
  • OmniRoute #15800: flags combo steps pinned to models that disappeared from the synced catalog.
  • OmniRoute #15925: optional cleanup of those steps after a model sync.
  • OmniRoute #17101: cleanup of a locked snapshot is retried instead of crashing the background task.
  • TanStack Query #11679: queued scoped mutations start again while the window is unfocused.

Education

Contact

Pinned Loading

  1. downshift downshift Public

    Deterministic model router and code-intelligence layer for coding agents. Right-sizes subagent models, packs only relevant code context, flags wasted prompt cache. Fail-open hooks for Claude Code, …

    Go 6

  2. antigravity-operator antigravity-operator Public

    Outer harness for AI coding agents on Google AI Pro — keeps sessions scoped, evidence-backed, and recoverable

    Go 2 2

  3. sentry-golden-path sentry-golden-path Public

    Staff guide to Sentry golden path — errors, tracing, releases, alerts, AI/LLM monitoring — implementation best practices.

    JavaScript 1

  4. ai-code-review ai-code-review Public

    Agentic code review toolkit: skills, runbooks, and AppSec guardrails for PR pipelines

    JavaScript

  5. dev-to-mcp dev-to-mcp Public

    DEV.to MCP Server — fast, single-binary Model Context Protocol server for the Forem/DEV.to API. Go + stdio, no cold starts.

    Go 2

  6. react-layered-boilerplate react-layered-boilerplate Public

    Production-ready React + Vite starter with strict layering, TypeScript, tests, and CI

    TypeScript 9 1