Describe a network in plain language and watch the topology build itself — live, in your terminal.
A terminal agent for Cisco Packet Tracer. Talk to it on the left, see the network take shape on the right.
┌──────────────────────────────────┬──────────────────────────────┐
│ › crea 3 routers con OSPF y DHCP │ TOPOLOGÍA 8 equipos · 7 enl │
│ │ ▲ pt_export_topology │
│ ✓ pt_list_devices │ │
│ ✓ pt_full_build │ ◆ R1 10.0.0.1 192.168.0.1 │
│ ● pt_export_topology │ └ ▣ SW1 │
│ │ ├ ▪ PC1 192.168.0.3 │
│ Listo: 31/31 equipos verificados │ ├ ▪ SRV1 192.168.0.5 │
│ │ └ ◌ AP1 │
│ │ ◆ R2 10.0.0.2 192.168.1.1 │
└──────────────────────────────────┴──────────────────────────────┘
PacketSmith does not implement an agent. It wraps one you already have — Claude Code today, Codex and OpenCode next — and gives it a purpose-built interface for network labs.
The heavy lifting is done by MCP-Packet-Tracer, which is what actually drives Packet Tracer. PacketSmith is the terminal experience on top of it.
Why the topology is drawn instead of screenshotted: a rendered tree works in every
terminal, shows state a bitmap cannot (IPs, links, port status), and can be navigated. The
real Packet Tracer capture stays available through pt_screenshot.
Working today: the streaming engine, the split-screen TUI, and the topology tree built from live tool results. Not there yet: Codex/OpenCode adapters, multi-session, packaging.
- Bun ≥ 1.3
- Cisco Packet Tracer with the MCP-Packet-Tracer extension
claudeCLI, authenticated
bun install
bun run src/index.tsxOne MCP client at a time. The Packet Tracer MCP binds
127.0.0.1:54321and only one process can hold it. If Claude Code, Cursor or Claude Desktop is running with that MCP configured, close it first — otherwise everypt_*call answers "no está conectado".
The status bar can show how much of your Claude plan you have burned (5H ███████░ 84%).
That number is not in the CLI's output — it comes from Anthropic's own usage endpoint, which
needs the OAuth token the claude CLI already stored when you logged in.
So on first run PacketSmith reads it: from ~/.claude/.credentials.json, or from the macOS
Keychain, where macOS will ask your permission. Say no and nothing breaks — you keep the
window's countdown (5H ✓ 1h30), which comes from the stream and costs nothing.
The token is sent to api.anthropic.com and nowhere else. It is never stored, printed or
logged. To skip the lookup entirely:
PACKETSMITH_NO_QUOTA=1 bun run src/index.tsx| MCP-Packet-Tracer | PacketSmith | |
|---|---|---|
| How you use it | inside Claude Code, Cursor, Claude Desktop | its own terminal app |
| MCP setup required | yes | no |
| Interface | whatever your client gives you | split-screen with live topology |
| Pick your engine | no | Claude (Codex / OpenCode coming) |
| Best for | you already use an MCP client | you want something that just runs |
PacketSmith uses the MCP under the hood — it does not replace it. If you already live in Claude Code, the MCP alone is all you need.
PacketSmith ──spawn──> claude --output-format stream-json
│ (NDJSON, event by event)
├──> left panel: text + tool calls
└──> right panel: pt_* results → topology
│
claude ──stdio──> MCP-Packet-Tracer ──> Packet Tracer
Every engine translates its own output into a single AgentEvent union, so the UI never
knows which one is running. Adding an engine is one file plus one line —
see AGENTS.md.
MIT © Mats2208