A candid story about building iteratively with Claude Code and ending up on the HackerOne VDP leaderboard for Germany.
* VDP = Vulnerability Disclosure Program
25 years of consulting for enterprise to Fortune 500. On-prem, cloud, AI, security, and development — paid projects in 30+ languages before AI came around.
Sole IT Engineer next to the CEO. Re-developed the platform from 2014–2019 serving 30M+ monthly users, then exited to eBay.
Tasked to fix a critical performance bottleneck. Found a $2M+ accounting error while rewriting the system. Cut monthly job runtime from 2+ hours to 5 minutes.
Rebuilt flash-sale push notification infra for the largest fashion retailer in the US. 10M+ concurrent pushes, delivery cut from 2 days to under 10 minutes.
If you recognize my lastname, it's probably because my grandfather invented the BobbyCar and was the founder of BIG Spielwaren.
State, orchestration, findings, submissions, operator UI.
Full session prompts: exploit-web-attacking, recon-subdomain-discovery, audit-finding-verification, …
Reusable techniques: subdomain-takeover-detection, nuclei-scanning, playwright, sqlmap, …
A shared `bounty-cli` standardizes every host run.
Deterministic infra, reproducible deploys, auditable config.
Every risky phase emits an artifact that must pass a gate.
Central server first. One source of truth.
Good for early iteration. Bad for token and context efficiency. Replaced with a shared Go CLI.
Parallel campaigns across architectures: Linux for web & Android, macOS for BinDiff fuzzing, iOS firmware diffing & Simulator app testing.
Agents own the session identity. Skills are composable tools agents invoke. Clear contract between the two.
Model → tool schema → inference → tool call → result → inference → …
High token cost per stepPrompt → agent runs locally → skills execute in-process → results to server
Tokens only for reasoning_sip._tcp.opera.com. 86400 IN SRV 0 0 5060 e1.viju.vc.
_sips._tcp.opera.com. 86400 IN SRV 0 0 5061 e1.viju.vc.
e1.viju.vc — a domain that no longer existed.
viju.vc.
viju.vc manually, pointed e1.viju.vc at my infrastructure, and confirmed the takeover.
Project rules, coding conventions, architecture overview. Loaded automatically every session.
Learnings from past sessions. Mistakes, patterns, decisions the agent shouldn't repeat or forget.
The specific task. Short, precise, assumes the agent already knows the context from the layers above.
Scope limits hallucination. Smaller context = better output.
“You are done when X passes.” Define success criteria upfront.
CLAUDE.md documents project rules. Memory retains learnings across sessions.
Split independent work across agents. Recombine only validated outputs.
Map the surface and emit concrete candidate artifacts.
Probe inside a bounded role with explicit success criteria.
Reject weak artifacts before they contaminate later phases.
Chain only validated pieces into a higher-value outcome.
Update prompts, routing rules, and profiles from misses.
“Investigate this repo. How is it built? What framework, what output? Create an initial git commit if there isn't one.”
“Build a GitLab CI/CD pipeline with AutoDevops for Kubernetes deployment. Look at similar projects for reference.”
“Set up GitHub Actions to build a Docker image and deploy to Kubernetes. Look at similar projects for reference.”
“Commit, push, and check the pipeline status. If it fails, read the logs and fix it. Repeat until the pipeline is green.”
Build passes → image pushed → deploy triggered → pods running. Each stage gates the next.
curl https://your-domain.com returns 200. If not, iterate. You are done when the site is live.
“Explore our current setup in read-only mode on this Kubernetes cluster, then do a full backup.”
“Research the best upgrade path. Do not skip intermediary steps. Verify dependencies and requirements for the new versions.”
“Start the upgrade procedure. You are done when all services that are currently running and up are successfully upgraded and responding.”
Each intermediary version (v15 → v16 → v17 → v18) is a validated artifact. PostgreSQL migrated in lockstep. Only proceed when the previous hop is healthy.
Failures at any hop feed back into the next attempt. The agent retries with context, not from scratch.
Security is the example. The architecture is the reusable asset.