Faber FaberAG Engineering← Home

The AG Engineering plugin

Four skills that carry a job from the first takeoff to the final O&M manual — and catch the change orders that used to disappear into a text thread.

About 20 minutes to read | installs on your machine | works job by job
Start here

What this is

One plugin, four skills. They are packaged together because a job needs all of them, and an engineer who can draw a package but not produce the submittal for it is stuck halfway.

engineering-drawings

Mechanical details and full DDC packages — schematics, I/O wiring, panel layouts, points lists, sequences — with a readability audit that refuses to render a sheet you cannot read.

ag-mep-controls

Estimating, submittal markup and assembly, division-of-responsibility matrices, scope letters, RFIs, change orders, scheduling.

ag-project-flow

Where a job stands across nine stages, what carried forward from the last one, and every field report a tech makes.

context-map

Builds a routing index for a job folder so picking the job up cold is reading rather than guessing.

Start here

The problem it solves

AG loses change orders because a technician mentions a condition once, verbally, between two other tasks — and it never becomes paper.

That is not carelessness. A tech who says “there are more boxes up here than the print shows” has told the truth and moved on. The failure is that the sentence had nowhere to land. By the time anyone notices, it is unbilled work.

Every job now has an AG-JOB.md file that gives it somewhere to land: the tech's own words, who said them, when, and whether money is on the table. Even if nobody acts that day, the record exists — and a change order you can prove is a change order you can bill.

The rule underneath everything: capture is not judgment. A report that turns out to be nothing costs one line in a file. A report that turns out to be a $9,000 change order and was never written down costs $9,000.
Start here

Install it

Two commands, then restart Claude Code. You need access to the shared job folder before you start; the office has the exact path.

claude plugin marketplace add "<the 0-Engineering folder on the shared drive>"
claude plugin install ag-engineering@ag-engineering

Then three one-time setup steps

1. Python dependencies. Two skills declare their own; the other two need nothing.

pip install -r skills/engineering-drawings/scripts/requirements.txt
pip install -r skills/ag-mep-controls/scripts/requirements.txt

2. Your name on submittal covers. A submittal cover is a signed statement of who prepared the package, so it has to be you. Until you set these, covers print a visible placeholder rather than a silent blank.

setx AG_SUBMITTED_BY "Your Name"
setx AG_SUBMITTER_EMAIL "you@aberdeengroups.com"

3. The job book. The plugin looks for the shared Drive at its usual letter. If yours mounts somewhere else, say so once:

setx AG_JOBS_ROOT "<your path to the QUOTES folder>"
Open a new terminal after setx. The values do not reach a shell that was already running.
Start here

Prove it works

Do not skip this. If the Drive letter is wrong, everything else fails later and further from the cause.

python skills/ag-project-flow/scripts/job_manifest.py find "<part of the building name>"

You want a single job folder printed back. Jobs root not found means step 3 above. A list of candidates with ask which one means the name was ambiguous, which is the tool working correctly, not failing.

Then see the whole book at once:

python skills/ag-project-flow/scripts/job_manifest.py sweep

That prints every job with something waiting on a human, and counts the open change orders across all of them.

How a job runs

The nine stages

Every job moves through the same nine stages. The plugin knows which stage a job is in, what that stage produces, and which skill does the work.

1 Pursuit2 Estimate3 Proposal4 Award5 Submittal6 Engineering7 Field8 Checkout9 Closeout

Stage 4 is the pivot the whole job turns on. Before award, a scope movement is a re-bid. After it, the same movement is a change order you can bill. That is why the award date has to come off a contract, a PO or an LOI rather than being guessed — a date three weeks wrong misdates entitlement on every change that follows, and nobody catches it.

Advisory, never blocking

The plugin tells you what is incomplete and what normally comes next, then does what you asked. AG works ahead legitimately — early drawings to win a job, a fast-track NTP — and a tool that refuses gets worked around. Two things it will always say out loud, because both have cost real money: production drawings before award, and releasing to order before the submittal is approved.

How a job runs

AG-JOB.md

One file per job, sitting in the job folder next to the work it describes. Plain markdown — open it and read it.

The header

Job name and number, the PM, scope mode and contracting posture, the stage, the award date, and the counts carried forward — points, controllers, panels.

Field updates

What technicians reported, in their own words, with who said it and when. Append-only. Nobody edits or deletes.

Decisions

Anything needing a human answer. COR means money may be on the table, REVISION means an issued document has to change, RFI means a question for the design team.

Open items

Discrepancies recorded rather than resolved. If two sources disagree, both go here with their sources — silently picking one is how a wrong number survives.

It travels with the job. The manifest lives in the job folder on the shared Drive, not in a database, so any engineer who opens the folder sees it and nothing has to be running for it to work.
How a job runs

Day to day

Three commands cover most of what you need. Ask Claude in plain English and it will use them, but they are worth knowing.

Where is this job?

python skills/ag-project-flow/scripts/job_manifest.py status "<job folder>"

Stage, PM, what carried forward, what is incomplete for this stage, what comes next, and every open decision.

Which folder is it, out of hundreds?

python skills/ag-project-flow/scripts/job_manifest.py find "<what the tech called it>"

The job book is hundreds of folders named by hand over many years, where two spellings of one address are the same building and two others on the same street are not. Search by AG job number when you have it — it is the most precise thing you can give it.

What needs me, across everything?

python skills/ag-project-flow/scripts/job_manifest.py sweep

Every job with an untriaged report or an open decision, and the total open change orders. This is the one to run on a Monday.

The field loop

EVA and your techs

Technicians do not touch any of this. They message EVA on Telegram the way they always have, and EVA writes what they said into the job file.

Tech reportsEVA captures verbatimAG-JOB.mdPM decidestech told

EVA records the tech's exact words, never a tidied-up summary. “More boxes up here than the print shows” is evidence. “Point count discrepancy noted” is not, and six months from now in an argument with a GC only the first one is worth anything.

She does not decide whether something is a change order — that needs the drawings, the estimate and the contract, none of which she has. She captures, flags the urgent ones, and notifies the PM named on the job.

The field loop

What gets escalated immediately

Most reports can wait for review. These cannot, because a clock starts the moment the tech hears them — most subcontracts require written notice within 7 to 10 days of the event, not of when someone got round to filing it.

  • Anyone telling AG to “just go ahead.” A verbal directive from a GC, CM, owner or engineer. The most expensive item on this page: we'll paper it later is unenforceable in most subcontracts. Before the work is a signed field ticket; after it is a collection problem.
  • A tech directed to do something outside AG's scope — picking up another trade's work, running power, mounting someone else's equipment.
  • Standby, an extra trip, or being locked out. Time AG is spending and not billing.
  • Anything involving safety or damage.
AG's own mistakes are not change orders. If a tech reports that we wired something wrong and redid it, that gets recorded so the cost is visible internally — and never routed up to a GC.
The field loop

Who does what

You

Read any manifest, run find, status and sweep, record what you learn, raise decisions, update counts as the drawn package establishes them.

EVA

Captures field reports verbatim, escalates the urgent ones, records the PM's answer, backfills a job number from Workflo. She does not create jobs.

The office

Onboards a job. Stage, posture, scope mode and award date are judgment calls made against contract paperwork, and a job set up wrong is worse than one not set up yet.

Nobody

Edits AG-JOB.md by hand. It looks like it works and silently breaks the change-order counting. Use the commands.

If find reports a job as (no AG-JOB.md yet), ask the office to onboard it rather than creating one yourself.

The other skills

Drawings

Ask for a detail or a DDC package in plain English. The skill activates on its own — you do not invoke it by hand.

Output is a native editable drawing model per sheet, with PDFs rendered when you ask for a print. Every sheet passes a deterministic readability audit before it renders: struck-through text, labels running off their boxes, balloons landing on other text, and symbols with pipes that connect to nothing all fail the gate. A sheet that cannot be read does not ship.

To watch it work end to end, render the bundled sample:

python skills/engineering-drawings/examples/example_package.py
Branding is automatic. The AG mark, company name, address and phone live in one place in the plugin and flow into every title block and submittal cover. Nothing to configure.
The other skills

Submittals and estimating

The ag-mep-controls skill covers the commercial side: point-count estimating, submittal markup and package assembly with real PDF annotations, division-of-responsibility matrices, scope letters, RFIs, change orders and scheduling.

Submittal assembly resolves cut sheets out of the shared cut-sheet library, which is why Drive access matters beyond the job book.

Change orders have their own reference. When a field report turns out to be money, the skill routes to the eight controls-specific COR triggers — point-count growth, sequence changes after approval, panel count changes, third-party integration surprises, scope the DOR gave to someone else, delay and re-mobilisation, and standby time.
The other skills

Context maps

A CONTEXT_MAP.md is a routing index for a job folder: where the drawings live, which specs matter, what the phasing plan is, where the correspondence sits. It does a different job from AG-JOB.md and both belong in a job folder.

The manifest says where the job stands. The map says where everything is. The difference shows on a live job: the ones that already had a context map were the ones we could onboard by reading rather than guessing.

When it misbehaves

Troubleshooting

An update did not arrive

A restart does not refresh a marketplace. This is the one that costs an afternoon:

claude plugin marketplace update ag-engineering
claude plugin update ag-engineering

Jobs root not found

The Drive is not where the plugin expected it. Set AG_JOBS_ROOT to your own path and open a new terminal.

find asks which job when you meant one of them

Working as intended — two real jobs matched. Give it the AG job number instead, or a longer name. It refuses to guess because a report filed against the wrong job is worse than one filed late.

ModuleNotFoundError

A dependency is missing. Run both requirements.txt installs from the install section; the error names the file to use.

A decision shows COR with a question mark

The type was guessed from the wording because the entry was written by hand instead of through the tools. The money is still counted, but the guess can be wrong — tell the office so the entry can be raised properly.