AI-powered telecom construction toolkit
Work packages · BOMs · Grounding plans · Crew estimates · Closeout docs
— all generated from real carrier standards and validated equipment catalogs.
TowerForge is a production-grade AI toolkit for wireless infrastructure construction. Give it a scope of work and it generates structured, construction-ready documents that a tower crew can actually work from — not summaries or generic advice.
Built by Adam Normandin — a senior telecom construction PM's knowledge, encoded into tools.
| Deliverable | Description |
|---|---|
| Work Packages | 10-section construction docs: scope, assumptions, sequence, BOM, crew, QC, safety, failure points, optimizations, next actions |
| Bill of Materials | Structured BOM tables with real, validated part numbers — no SKU hallucination |
| Grounding Plans | Bond schedules per ATIS-0600334, Motorola R56, TIA-607-C |
| Crew Estimates | Role-by-role crew plans with certifications, headcount, and duration |
| Sequence of Work | Phased construction sequences with inline safety notes |
| Closeout Checklists | Carrier-specific closeout packages (CIQ, MOD, ROWP) |
| Punchlist Prediction | Proactive identification of common failure points before they happen |
| Carrier | Standards | Closeout Format |
|---|---|---|
| T-Mobile | PIM ≤ -150 dBc, VSWR ≤ 1.3:1, ground ≤ 5Ω | CIQ package |
| AT&T | PIM ≤ -153 dBc, VSWR ≤ 1.25:1, WLCP governed | MOD package |
| Verizon | PIM ≤ -150 dBc (C-band: -145), VSWR ≤ 1.3:1 | ROWP package |
| DISH/EchoStar | Open RAN architecture, return loss ≥ 18 dB | O-RAN spec |
Real part numbers from:
- Ericsson — AIR 6449, Radio 4415, Baseband 6630, PSU-AC 8200
- Nokia — AirScale AAHF, AAHG, AAIB, BTS
- Samsung — MT6402, MT6401, low-band RU
- CommScope/Andrew — Antennas, cables, connectors, ground kits, hangers
towerforge/
├── sdk/ # TypeScript SDK — the engine
│ ├── src/
│ │ ├── tools/ # 7 public API functions
│ │ ├── engine/ # Structured output builders
│ │ ├── profiles/ # Carrier + OEM profiles
│ │ ├── schemas/ # Material index, Zod schemas
│ │ ├── data/ # Data loaders (CSV, PDF, XLSX)
│ │ ├── validation/ # BOM rules, part number enforcement
│ │ ├── compiler/ # Structured → markdown compiler
│ │ └── utils/ # Tags, hashing, normalization
│ └── tests/ # 8 acceptance test suites
├── skills/ # AI bot skills (pi, Claude, Vercel AI SDK)
│ ├── telecom-construction/ # Core skill with 4 tools
│ └── web-search/ # Gemini-powered web search
├── templates/ # Deployment scaffolding
│ ├── SOUL.md # Bot personality
│ ├── AGENTS.md # Agent instructions
│ └── USER.md # Client profile template
└── docs/ # Carrier standards reference
npm install
npm run buildimport { telecomWorkPackage } from "towerforge";
const wp = telecomWorkPackage({
scope_text: "Add 3 sectors of Ericsson AIR 6449 on 150' monopole",
site_context: { carrier: "T-Mobile", tower_type: "monopole" }
});
console.log(wp.work_package_markdown);
// → Full 10-section construction documentimport { streamText } from "ai";
import { telecomTools } from "./skills/telecom-construction/tools";
import { webSearchTool } from "./skills/web-search/tools";
import { TELECOM_PROMPT } from "./skills/telecom-construction/prompt";
const result = await streamText({
model: gemini("gemini-2.5-flash"),
system: TELECOM_PROMPT,
tools: { ...telecomTools, ...webSearchTool },
messages,
maxSteps: 5,
});cp templates/ my-client-workspace/
# Customize SOUL.md and USER.md
# Configure projects.json to point at workspace
# Start with PM2| Function | Input | Output |
|---|---|---|
telecomWorkPackage |
Scope text + site context + files | 10-section work package + BOM + assumptions + risks |
telecomBomFromScope |
Normalized scope + files | BOM rows + unresolved items |
telecomGroundingPlan |
Tower type + scope tags + context | Grounding plan + bond schedule + test requirements |
telecomSequenceOfWork |
Tower type + scope tags + site | Phased construction sequence |
telecomCloseoutChecklist |
Tower type + scope tags + carrier | Closeout checklist by category |
telecomLaborAndEquipment |
Tower type + scope tags + site | Crew plan + equipment list + duration |
telecomPunchlistPredictor |
Tower type + scope tags + carrier | Predicted punchlist items with likelihood |
telecomExtractScopeFromFiles |
File references | Normalized scope from takeoffs/drawings |
TowerForge's validation engine enforces strict part number integrity:
// With strict mode enabled (default):
// - Every part number is validated against the catalog
// - Unknown PNs are marked "TBD — verify with distributor"
// - PN-like strings in notes/spec are detected and flagged
// - Source tracking: takeoff | dataset | oem_pdf | drawing | tbdThis prevents the #1 failure mode of AI-generated construction docs: hallucinated part numbers that don't exist.
npm test # All tests
npm run test:acceptance # Acceptance tests only8 acceptance test suites covering BOM no-hallucination, work package structure, grounding plans, carrier/OEM profiles, takeoff ingestion, validation rules, extensions, and integration.
See CONTRIBUTING.md for development setup and guidelines.
MIT — see LICENSE for details.
Built by Adam Normandin