What inspired me

I kept wasting time on the same steps: clone a repo, read the README, guess install commands, fix missing env vars, retry when something breaks. I wanted a tool that actually runs those steps instead of only suggesting them.

I built this for the Google Cloud Rapid Agent Hackathon on the GitLab track. For GitLab repos, the agent reads files through GitLab MCP before cloning, so it has context from the start.

What I learned

  • Agents need a backup plan. Gemini ADK is great for multi-step work, but timeouts and quota limits happen. Pairing the agent with a simpler pipeline made runs more reliable.
  • MCP helps before clone. Reading README and package.json from GitLab first means fewer guesses later.
  • Secrets need a human step. The agent pauses and asks before writing .env files.
  • OAuth is easy to get wrong. GitLab login and listing repos use different scopes. I had to align the OAuth app settings, env vars, and sign-in flow.

How I built it

Lowkally has two parts on Google Cloud Run:

  • Agent (FastAPI + Google ADK): runs bootstraps, streams progress, stores history, handles login and saved sites
  • UI (Next.js): paste a repo URL, watch the run live, approve env values, save sites, compare two side by side

Typical flow:

  1. Sign in with GitHub, GitLab, or Google
  2. Paste a URL or pick a repo from your account
  3. For GitLab repos, GitLab MCP reads the repo tree and key files first
  4. The ADK agent clones, installs, starts, and tries to fix errors with tools
  5. If ADK times out or hits quota, a fallback pipeline finishes the job
  6. Gemini summarizes the README into a short insight card
  7. Save runs to your library and compare them later

Images are built with Docker, pushed through Cloud Build, and deployed to Cloud Run.

Challenges I faced

  • Cloud Run timeouts during long npm installs. I increased memory, extended timeouts, and tuned probes.
  • GitLab OAuth scopes. Login worked with read_user, but the repo list needed read_api. That took a few iterations.
  • Balancing demo and reliability. I kept ADK visible for the hackathon but added a pipeline fallback so runs still complete

Built With

Share this project:

Updates