pennyblack
A physical letter, posted from the terminal
Hand it a PDF and it comes out of a Royal Mail letterbox: printed in the UK, posted first or second class, Signed For, Tracked 24 or 48, or Special Delivery. A copy of each letter as printed is kept in your repository, and where the service has a tracking number, status adds it once Royal Mail issues it. Every send spends money and puts paper in the post, which is why drafting and sending are separate commands and there is deliberately no option that does both.
Install pennyblack
Add the DBHQ marketplace, once
/plugin marketplace add dbhq-uk/marketplaceInstall the skill
/plugin install pennyblack@dbhq
Both commands work in Claude Code and in Codex. The marketplace is a public repository you can read first: dbhq-uk/marketplace (external site)
What it is good at
Costing the letter before anything is printed
draft checks the PDF and the address, uploads it, returns the real price for the service you asked for, saves a preview of the letter as it will be printed, and posts nothing. Only send commits it, by draft id, and with --expect-cost it refuses if the price is not the one you approved. There is no one-shot command, and tests at the command line and in the provider hold it that way.
Rehearsing the whole thing for nothing
Every draft is a test draft until you pass --live, so the wiring can be rehearsed end to end for nothing. A test send is marked as not posted and is kept in its own file, apart from the letters that went, and a live draft costs nothing either until send.
Posting the document you actually wrote
It never converts, typesets or reflows your PDF. Unless you ask for a letterhead, the provider adds only the address on page 1, where the envelope window falls, and a small code string down the left margin, so what you see in the saved preview is what comes out of the envelope. A markdown renderer existed for one day and was removed, because a tool that reflows a document can change what it says on the page.
Telling you what a signature actually proves
For a court document served by post under CPR 6.26, Signed For proves no more than first class: it is deemed served on the second business day whether or not anyone signed, and what a court wants certified is the date of posting. The skill says so rather than quietly charging more than twice the price of first class. That point is for court documents only: where a lease, a contract or a statute names the delivery method, it sends you to that clause and uses the method it names.
Keeping a record of what was sent
Every confirmed send is written to .pennyblack/ in your git repository with its cost, its service and a copy of the letter as it was printed. status adds the posting date, the tracking number once Royal Mail issues it and any return, so the question "did that go, and when" has an answer months later. send refuses to write that record into a repository GitHub reports as public.
What it does not do
It cannot unsend a letter once it is printed
Physical post cannot be recalled once it is printed, and every send costs money, which is the whole reason for the two-command shape. Until printing starts, cancel recalls each letter still waiting to print and the provider refunds it. Printing usually starts the same day, so that window can be a few hours.
It does not convert your document
There is no markdown, HTML or Word path, and draft refuses a file that is not really a PDF or is encrypted. The provider adds only the address on page 1 and a small code string down the left margin, so the letter in the preview is the letter that arrives.
United Kingdom delivery, through one provider
It posts through Intelliprint and Royal Mail. Everything vendor-specific is confined to a single provider module, and a second provider is documented as a fallback but not built, so there is no multi-provider routing and no international service selection. It does not do bulk mail either: a draft with more than five recipients is refused unless you raise the cap.
It is not affiliated with Royal Mail or the printer
Royal Mail and the service names are their owners' trademarks. The skill buys a published service through an API like any other customer, and prices are the provider's rather than DBHQ's.
It gives postage facts, not legal advice
Whether a letter was validly served is a legal question, and it does not answer it. Where a lease, a contract, a court order or a statute names the delivery method, it sends you to that clause and uses the method it names. It gives no certificate of posting either: the print house hands the letter to Royal Mail rather than a Post Office counter.
Read it before you install it
Every line is public and MIT licensed. The README is the long version of this page, including the parts that are still rough.