Thread Truncated (Cap Enforced)
Only the first 20 tweets are unrolled into slides to ensure reliable PDF exporting and high server performance.
Canvas & Ratio
Choose your destination platform format
Layout Template
Choose a content structure for your slides
Preset Themes
Typography & Sizing
Brand Kit Customization
AGENCYConfigure brand assets for headers & footers
Outro Slide CTA
Customize your closing call-to-action slide
Background Pattern
Build Your Carousel
Drag and drop any post card below onto a slide, or use the quick buttons to insert content/images instantly!

<b>Everyone is building with agents.</b>


Almost nobody talks about what is actually inside one.

Not the model. The harness around it.

I spent the last few months building one from scratch in Python every component, no framework shortcuts. A streamed agent loop, typed tool calls, approval gates, prompt-injection boundaries, context compaction, MCP integration, subagents, persistence, and a full test suite.

The project is called <b>AgentForge</b>.

It is open source, installable, and running right now on my machine.

→ GitHub: <a target="_blank" href="https://github.com/MohitGoyal09/AgentForge" color="blue">MohitGoyal09/AgentForge</a> → PyPI: <a target="_blank" href="https://pypi.org/project/agentforge-harness/" color="blue">agentforge-harness</a> → Install: pip install agentforge-harness

<b>This article is not a launch post.</b>

It is everything building AgentForge taught me about what agents actually are and why using frameworks without building one first leaves a dangerous gap in your understanding.

The core lesson came early and changed everything after it:

An agent is not a model. An agent is a runtime that controls how a model sees, acts, retries, remembers, and stops.

The model is maybe 20% of the engineering.

The other 80% is what wraps it: the action space, the approval policy, the observation format, the context budget, the recovery paths, the persistence layer.

I built all of it. Here is what each part taught me.

---

## The Whole Harness In One Table



This is what I ended up building, and what each part taught me:

<pre><code lang="">| Component | File | What It Taught Me | | --- | --- | --- | | Session runtime | `agentforge_harness/agent/session.py` | Chat history is not enough. An agent needs a real runtime container. | | Agent loop | `agentforge_harness/agent/agent.py` | The loop is a control system, not a `while tool_calls` toy. | | Provider adapter | `agentforge_harness/client/llm_client.py` | Normalize model providers at the edge. | | Tool contract | `agentforge_harness/tools/base.py` | Tool output quality controls recovery quality. | | Tool registry | `agentforge_harness/tools/registry.py` | Every action should pass through validation, policy, cleanup, and hooks. | | File tools | `agentforge_harness/tools/builtin/` | Small metadata details change model behavior. | | Approval layer | `agentforge_harness/safety/approval.py` | Safety has to be enforced outside the prompt. | | Prompt-injection boundary | `agentforge_harness/safety/prompt_injection.py` | Tool output is data, not instruction. | | Context manager | `agentforge_harness/context/manager.py` | Forgetting is an engineering problem. | | Skills | `agentforge_harness/skills/manager.py` | Load guidance when needed, not all the time. | | MCP | `agentforge_harness/tools/mcp/mcp_manager.py` | External tools need namespacing and trust boundaries. | | Subagents | `agentforge_harness/tools/subagents.py` | Delegation should start bounded and scoped. | | Persistence | `agentforge_harness/agent/persistence.py` | If you cannot inspect the run, you cannot improve the agent. |</code></pre>

This table is the real article.