projects
Skill0 starsChanged 22 days agoMITView on GitHub
Set up and run an Australian builder's or trade's jobs as projects, and take in their paperwork. Keeps the project register (job numbers, names, tags, status) and a standard folder per job, and works through the inbox of screenshots, photos and PDFs (supplier and subbie invoices, bank payment screenshots, remittances, delivery dockets, timesheets, payment claims), matching each to its project, reading it, checking it and filing it. Use when someone starts a new job, asks what jobs they have, wants to tag or label a job, sends or drops in an invoice, receipt, bill, screenshot, photo or PDF for a job, says "add this to the Banksia job", "I paid this", "here's the docket", or asks what's waiting in the inbox.
- Installs packages
16 other projects use a version of this.
Adopted by
Most recently taken up by
- artivilla/agent-skillstheir own version, first seen Nov 8, 2026
- yourbeckett/beckett-for-claudetheir own version, first seen Nov 1, 2026
- Melvynx/ai-maxxing-skillstheir own version, first seen Nov 1, 2026
- vijaysuperpositionist/skillstheir own version, first seen Nov 1, 2026
- zommuter/dotclaude-skillstheir own version, first seen Oct 28, 2026
- jaredhhawk/claude-skillstheir own version, first seen Oct 25, 2026
Used with
Projects with it also use tasks and status.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
genomewalkerSkilltasks
Browse and resume tasks, threads, and background jobs across sessions
Also in 3 projects that use this
AnthropicSkillstatus
Case status summary by audience — client-facing (plain language), internal (for the professor), or court-ready (formal caption format per local rules). Same facts, different framing and depth. Use when a student needs to update the client, brief the professor, or prepare a court status report.
Also in 4 projects that use this
Other versions16 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 16
- me2resh/apexyard★ 542same name
- pantalytics/odoo-mcp-pro★ 91same name
- Melvynx/ai-maxxing-skills★ 32same name
- launchdarkly/ai-tooling★ 29same name
- urav06/claudestrophobic★ 10same name
- sensei-hacker/inav-claude★ 6same name
- The-Utopia-Studio/skills★ 6same name
- zommuter/dotclaude-skills★ 4same name
- SprintsAI/lightsprint-claude-code-plugin★ 2same name
- TheKREATORS/my-claude-skills★ 1same name
6 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository15 other files it gives its agents.
- AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- accountsSkill
- claimsSkill
- contractsSkill
- estimatingSkill
- financialsSkill
- handoverSkill
- materialsSkill
- nccSkill
- noticesSkill
- safetySkill
- siteSkill
- startSkill
- variationsSkill
The file
We split this skill into the rules it gives an agent
10 rules. 0 are common, 5 are distinctive, and 5 are very specific to this project.
0
Common
Most of the 14 edited versions we read keep these.
5
Distinctive
This author's own choices. Worth a look.
5
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 21
Run commands from the user's jobs folder (the current working directory, where projects.yaml lives).
- Distinctive: line 52
Ask for the job number (their own numbering), a short name, the site address, the client, and two or three tags they'd naturally call it …
- Very specific: line 62
If there's no projects.yaml yet, create one with accounts: accounts.yaml and projects: [] first.
- Distinctive: line 70
Start with what's waiting:
- Very specific: line 81
Which project: If the inbox didn't settle it, run match --text with the site address, client, order number or anything else on it.
- Very specific: line 97
Write what you read to a JSON file in the shape of $ABB/examples/inbox_entry_example.json:
- Distinctive: line 105
Check it, then show the user one line: supplier, number, date, total inc GST, project, account, and every warning in plain words.
- Distinctive: line 113
Warnings go to the user: no ABN (check ABN Lookup; without one they may have to withhold 47%), not a tax invoice (no GST credit without …
- Very specific: line 116
When they say yes, run it again with --yes.
- Distinctive: line 125
Read the amount, date, payee and reference off the screenshot.
“Common” is measured: kept by at least 6 in 10 of the 14 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Projects
You keep the builder's jobs organised and turn the paper that arrives for each one into data, without them typing it in. Nothing is written until they say yes.
Where things are
The brain (this repository) is at ${CLAUDE_PLUGIN_ROOT}. If that shows
literally as ${CLAUDE_PLUGIN_ROOT}, you are working in a clone instead: the
brain is the repository root, two levels up from this skill's folder. $ABB
below means the brain's folder: write it out as the real path in every
command. Paths starting brain/, templates/, tools/ and examples/ are
inside it.
Run commands from the user's jobs folder (the current working directory,
where projects.yaml lives). Never write into the brain's folder: an
installed plugin's folder is replaced on every update.
- Tool:
tools/projects.py(new, list, tag, inbox, match, add, pay, file) - Knowledge:
brain/contracts/accounts_and_tax.md(tax invoices, GST, coding),brain/contracts/security_of_payment.md(payment claims) - Examples:
examples/projects_example.yaml,examples/inbox/(a sample invoice PDF and a bank screenshot),examples/inbox_entry_example.json(what you read off the invoice)
For python3, use ${CLAUDE_PLUGIN_DATA}/venv/bin/python if it exists (the
plugin's setup hook creates it). Otherwise, if
python3 -c "import docx, openpyxl, yaml" fails, run
python3 -m pip install -r $ABB/requirements.txt first.
The layout
projects.yaml the register: every job, its tags, its folder; plus accounts: (the account mapping)
accounts.yaml account mapping (see the accounts skill)
inbox/ shared inbox: drop anything; a subfolder named for a job or tag (inbox/banksia/) labels it
SB-2027-014_Banksia_St_extension/
project.yaml ledger.yaml timesheets.csv
inbox/ this job's inbox: anything here is already labelled
processed/ what you've read, filed and renamed (BILL_..., PAY_..., Delivery_docket_...)
out/ documents the other skills generate for this jobThe same folder works inside Dropbox, Google Drive or OneDrive, so the builder can drop a photo in from their phone.
New job
Ask for the job number (their own numbering), a short name, the site address, the client, and two or three tags they'd naturally call it ("banksia", the client's surname, the street). Then:
python3 $ABB/tools/projects.py new projects.yaml --job SB-2027-014 --name "Banksia St extension" \
--tags banksia,citizen --address "42 Banksia St, Merewether NSW 2291" --client "Jo and Sam Citizen" \
--start-date 03/08/2026 --project-type extension --state NSWIf there's no projects.yaml yet, create one with accounts: accounts.yaml
and projects: [] first. Fill the rest of the new project.yaml with the
contracts skill when the contract is signed. tag adds or removes labels
(--add "Jo Citizen" --remove old); add status: complete and pc_date
to the register entry when the job finishes, so it counts in the averages.
The inbox
Start with what's waiting:
python3 $ABB/tools/projects.py inbox projects.yamlEach item comes with a kind guess, a suggested project (from its folder, its name, or for a typed PDF the text inside it) and the PDF's text when it has any. For each item:
- Read it. Open the file yourself: PDFs and images (screenshots, phone photos) can be read directly. If a photo is blurry, cut off or handwritten and you can't read a figure with confidence, ask; never guess a number.
- Which project. If the inbox didn't settle it, run
match --textwith the site address, client, order number or anything else on it. If that's still ambiguous, ask the user with the likely candidates. A job's own inbox is never ambiguous. - What it is, and where it goes:
| It's a... | Do this |
| Supplier or subbie invoice / bill (or credit note) | Read it into an entry (below) and add it |
| Payment screenshot, remittance or receipt | pay against the invoice or bill it settles |
| Subbie payment claim under the security of payment act | add it as a bill only if the user accepts it; if not, the claims skill drafts a Payment Schedule now: the deadline is short |
| Delivery docket | file it ("Delivery docket"), and update the Material Order Tracker (site skill) |
| Timesheet photo | Add the rows to the job's timesheets.csv, then file it ("Timesheet") |
| Site photo | file it ("Site photo") and offer a site diary entry (site skill) |
| Quote from a supplier or subbie | file it ("Quote"); the estimating skill can compare quotes |
| Anything else | file it with a plain label, or leave it and ask |
Invoices and bills
Write what you read to a JSON file in the shape of
$ABB/examples/inbox_entry_example.json:
type(bill, orsupplier_creditfor a credit note;invoiceonly for a copy of the user's own sales invoice),number,date,due,contact(name, ABN, address)lines: description,amountex GST (oramount_incif the document only shows GST-inclusive lines),account(a role from the account mapping: subcontractors, materials, plant_hire...) andtax(gst, orgst_freefor a GST-free line). Pick the role from what was supplied and who supplied it; a supplier's earlier bills in the ledger are the best guide. Labour and materials from a subbie issubcontractors; supply only ismaterialsstated: the subtotal, GST and total exactly as printed, so the arithmetic can be checkedis_tax_invoice(does it say "tax invoice") andbuyer_named(is the user's business named on it)
Check it, then show the user one line: supplier, number, date, total inc GST, project, account, and every warning in plain words.
python3 $ABB/tools/projects.py add projects.yaml SB-2027-014 --entry out/inbox/CCP-2207.json --file inbox/Coastal_Concrete_Pumping_invoice.pdf- Errors stop it: a total that doesn't add up means you misread a line (look again: freight, a discount, a GST-free line); a duplicate means it's already in a ledger, in any project.
- Warnings go to the user: no ABN (check ABN Lookup; without one they may have to withhold 47%), not a tax invoice (no GST credit without one), $1,000+ without their business named, possible duplicate, odd dates.
- A supplier or subbie you haven't seen before (no earlier bill from that ABN in any ledger): offer to check their ABN on ABN Lookup (
$ABB/brain/playbooks/checking_registers.md), and for a subbie whose trade is licensed in that state, their licence too. Say what it showed in the same one line: active or cancelled, the registered name, and whether they're registered for GST. GST charged by a business that isn't registered for it can't be claimed back: tell the user before they add it.
When they say yes, run it again with --yes. Materials lines on a bill are also noted in materials_log.csv (the product, supplier and job, never the price), which the materials skill uses to learn what the user buys. The bill goes into the job's
ledger and the file moves to processed/ as BILL_<supplier>_<number>,
linked from the ledger entry and the dashboard.
Several invoices at once: check them all, show one table, and add the ones the user approves.
Payments
Read the amount, date, payee and reference off the screenshot. Find the invoice or bill it pays (the reference usually is the number; otherwise the payee and amount):
python3 $ABB/tools/projects.py pay projects.yaml SB-2027-014 --number CCP-2207 --date 16/10/2026 --amount 1127.50 --file inbox/IMG_4417.pngIt refuses a payment for more than is owing and flags part payments. Add
--yes once the user confirms. Money received from a client works the same
way against the sales invoice.
After the inbox
- Tell the user what was added, filed or left (and why), per project.
- The accounts skill takes it from there: the dashboard (
tools/dashboard.py projects.yaml), import files for Xero, MYOB or QuickBooks, BAS and TPAR. listshows every project with its tags and how much is still waiting in its inbox.- Rebuild the home page (
python3 $ABB/tools/home.py projects.yaml) sohome.htmlshows what changed.
Your own format
Without Claude Code (for example in Claude.ai), the user uploads the screenshot or PDF into the chat. Read it the same way, do the same checks by hand (the lines add up to the stated total, GST is 10% of the taxable lines, ABN present, tax invoice wording, not already recorded), and give them the entry as a table or as YAML for their ledger. Say the checks weren't run by the tool.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

