AI Explorer 🦭

Personal blog on AI, ML, agents, LLMs, and agentic software development.

OpenAI, Hugging Face, and reward hacking as a security incident

OpenAI was evaluating a frontier model on cyber-security tasks inside ExploitGym, a sandboxed benchmark — informally, a “cyber gym.” The tasks are capture-the-flag style: a deliberately vulnerable system hides a secret string, the flag, and retrieving it proves you found the hole. The intended loop: 1 2 3 4 5 6 7 Find a vulnerability ↓ Exploit it ↓ Read the flag ↓ Return the flag Returning the flag is what earns the reward. That framing is the whole story: the agent was rewarded for producing the flag, not for solving the challenge. ...

August 21, 2026 · 2 min · Amir Hadifar

Organize your skills

A single SKILL.md file is enough for personal use, but it doesn’t scale once you want to version it, bundle it with agents and hooks, or share it with teammates. This post covers how to package skills into a plugin and distribute that plugin through a marketplace. You probably don’t need plugins for a personal project or a quick one-off customization. You do need them once you want to share with teammates, distribute to a community, cut versioned releases, or reuse the same setup across projects. ...

August 20, 2026 · 3 min · Amir Hadifar

superset.sh: IDE to run parallel coding agents

superset.sh is a desktop app for running several AI coding agents at once, each in its own isolated workspace. It covers the same ground as Conductor, but also runs on Linux (Conductor is Mac-only as of August 2026). What it does Like other agentic IDEs, superset.sh is built around a few features specifically for modern agentic coding: Run multiple agents simultaneously Isolate each task in its own git worktree so agents don’t interfere with each other Monitor all agents from one place and get notified when they need attention Switch between LLM providers (Claude, Codex, and others) per task Why worktrees, not branches The core concept behind superset.sh — and tools like it — is the git worktree: a separate directory with its own files and branch, sharing the same repository history and remote as your main checkout. ...

August 12, 2026 · 3 min · Amir Hadifar

TDD for agents

Many agentic workflows converge on the same shape: write a Markdown file at the root of your repo, point your agent at it, and let it loop until it meets a stated goal. Test-driven development is a natural fit for that shape — the tests are the goal, and “all tests green” is an unambiguous exit condition the agent can check without you. The basic loop In this paradigm you ask the agent to write tests first. You review them (or have another agent review them), then ask the agent to implement the feature until every test passes. You revise the tests a little, the agent revises the code a little, and when everything is green you move to the next feature — with a fully testable one behind you. ...

August 6, 2026 · 3 min · Amir Hadifar

goose: open-source AI agent harness

goose is an open-source AI agent that wraps an LLM in a loop of tool calls, so the model can actually do things rather than only describe them. Its own docs put it this way: goose, an open source AI Agent, builds upon the basic interaction framework of Large Language Models (LLMs), which primarily functions as a text-based conversational interface. It processes text input and generates text output. This “text in, text out” approach is enhanced with tool integrations, which allows the AI agent to complete tasks, creating goose. ...

August 3, 2026 · 3 min · Amir Hadifar

Autonomous Kaggling

I recently started a Kaggle competition and decided to apply autoresearch to it: an agent that loops forever to ace the leaderboard. The Kaggle problem is student health risk prediction: categorize records into three classes (unhealthy, at-risk, fit) from categorical features like sleep_duration, gender, and water_intake. I based my problem.md on autoresearch’s description with small modifications; it’s in hadifar/autonomous-kaggling, along with the full run. The commit history on the shr-v1 branch shows what ideas the agent applied and where each one landed, and results.csv in the root tracks the scores. ...

July 31, 2026 · 4 min · Amir Hadifar

Gstack: AI engineering workflow

This post explains the AI coding workflow of Y Combinator’s CEO — how he uses GStack for ideation, building, and deployment. What is gstack gstack is a collection of SKILL.md files that give your AI agents personas for different stages of the software/product development life cycle. A normal software sprint runs through roughly these stages: 1 think → plan → design → build → review → test → ship In gstack, there is a SKILL.md file (often several) for each of these stages. You invoke them to guide your agents toward the goal (generating code, a specification, ideation, etc.). ...

July 31, 2026 · 3 min · Amir Hadifar

What is a Skill?

A skill is a Markdown file an agent loads on demand to learn how to handle a particular kind of request. It’s useful when you have a repetitive task and don’t want to re-prompt your agent each time. Think of it as the utility function of prompting: instead of duplicating the same instructions in every conversation, you write them once and reuse them. Skills are more general than that, of course — their behaviour adapts to the request in a way a single utility function doesn’t. ...

July 31, 2026 · 5 min · Amir Hadifar

The Modern Software Developer course

The Modern Software Developer is a Stanford course (CS146S) that covers most of what you need to know about agentic coding — prompting techniques, AI IDEs, patterns, and more. Why it’s worth it I highly recommend this course: it covers the foundations you need, from the ground up. It starts by introducing LLMs and different prompting strategies — K-shot, chain-of-thought, self-critique, and others — before moving on to the tooling and patterns of agentic coding. ...

July 20, 2026 · 1 min · Amir Hadifar

What is MCP (Model Context Protocol)?

This section briefly explains what MCP is and why it’s useful. Before describing MCP, it helps to understand tool-calling first — MCP is built on top of it. Tool-calling Tool-calling is a capability that lets an AI model (like an LLM) interact with the outside world by invoking external functions or APIs. Here’s a simple example of tool-calling in Python with two tools, bash_tool and web_search: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 # mock tools def bash_tool(command: str) -> str: """Run a shell command and return its output.""" return "index.html main.py styles.css README.md" if command == "ls" else "Done" def web_search(query: str) -> str: """Search the web and return the results.""" return f"Search results for '{query}': Found documentation." tools = {"bash_tool": bash_tool, "web_search": web_search} # Simulates the AI picking a tool based on keywords def mock_llm(query): if "file" in query or "list" in query: return {"tool": "bash_tool", "arguments": {"command": "ls"}} return {"tool": "web_search", "arguments": {"query": query}} while True: user_query = input("User: > ") if user_query.lower() in ["exit", "quit"]: print("Goodbye!") break # Step 1: Get tool choice from LLM decision = mock_llm(user_query) tool_name, args = decision["tool"], decision["arguments"] print(f"AI wants to call: {tool_name}({args})") # Step 2 & 3: execute the tool and print the output tool_output = tools[tool_name](**args) print(f"Tool Output: {tool_output}\n") That’s tool-calling in a nutshell: the model picks a tool (e.g. web_search or bash_tool) and supplies the right arguments (e.g. query: "who won the 2022 World Cup"), the tool or API is executed — locally or remotely — and the model reads back the result. ...

July 20, 2026 · 7 min · Amir Hadifar