Project-based email newsletter writing: keep per-project context (brand voice, goals, reference links, reusable 'fill' items like promo codes) and have newsletters written cheaply, with mechanical quality gates and self-review, grounded in that context. Read/edit full newsletters in the panel — chat never touches full bodies.
What this app can do
27 tools registered
Create Project10 tok
Create a new newsletter project — a container for one brand's context: goals, brand voice, keywords, useful links, socials, MailerLite targeting label. Use for: add a new newsletter project.
List Projects10 tok
List all newsletter projects — id, name, keywords, goals. Use for: list my newsletter projects, what newsletter projects do I have.
Update Project Context15 tok
Update a newsletter project's context — any of: name, description, brand voice, goals, keywords, useful links, social links, MailerLite targeting label/group ids. Only send fields that changed. Use for: add keywords to newsletter project, update brand voice, set MailerLite targeting.
Delete Project10 tok
Permanently delete a newsletter project and ALL its newsletters, fill categories and fill items. Use for: delete this newsletter project, remove newsletter site.
Open ProjectFree
PANEL-ONLY: switch the currently-open project (sidebar detail + workspace board). Not for chat use — this is pure UI navigation state, nothing about the project itself changes.
Add Reference Link10 tok
Add ONE internal page of THIS project's own site as a reference link the newsletter writer may link to, with a short description of what that page is about. The writer uses the description to weave a natural, in-sentence anchor. Use for: add an internal link for the newsletter writer.
List Reference Links10 tok
List the internal reference links saved on a newsletter project. Use for: list reference links, what internal links can the newsletter writer use.
Remove Reference Link10 tok
Remove ONE internal reference link from a newsletter project by its URL. Use for: remove a reference link.
Create Fill Category15 tok
Add a named 'stock' category (e.g. promo codes, priority links, topics to cover) to a newsletter project. Capped per project — ask the user proactively which categories they want. Use for: create a fill category, add a promo-code slot.
List Fill Categories10 tok
List the fill categories (promo codes, links, topics, etc.) on a newsletter project. Use for: list fill categories.
Delete Fill Category10 tok
Permanently delete a fill category and all its items. Use for: delete this fill category.
Create Fill Item15 tok
Add one value (a promo code, a specific link, a topic) to a fill category. The generation pipeline rotates through items least-used-first. Use for: add an item to the category, add a value to fill category.
List Fill Items10 tok
List the items in a fill category, least-used-first. Use for: list fill items.
Update Fill Item15 tok
Change a fill item's value/note, or retire it (is_active=false) without deleting its usage history — e.g. an expired promo code. Use for: retire this promo code, deactivate fill item.
Delete Fill Item10 tok
Permanently delete one fill item. Use for: delete this fill item.
Create Newsletter15 tok
Create a new newsletter shell under a project — just a placeholder, no content yet. Does not call any AI. Follow up with generate_newsletter to actually write it. Use for: add a newsletter idea, start a new email draft.
List Newsletters10 tok
List newsletters (metadata only — id, subject, status, word count, quality flags — never the full body). Optionally filter by project or status. Use for: list newsletters, what's in review, show idea/writing/review/scheduled/sent newsletters.
Update Newsletter Status10 tok
Move a newsletter to a new status: idea, writing, review, scheduled, sent. Use for: move this newsletter to review/scheduled.
Update Newsletter Meta10 tok
Fix a newsletter's subject and/or preheader without touching the body. Use for: change the subject line.
Update Newsletter Section10 tok
PANEL-ONLY: directly overwrite one block's fields with EXACT values — a raw manual save, NOT an AI writing step (it skips the judge entirely). Not for chat use — Webbee should use generate_newsletter or patch_newsletter to write content.
Save Full Newsletter10 tok
PANEL-ONLY: replace the entire newsletter from the panel's single merged editor. The leading <h1> is the subject; everything after it splits into {heading, content} sections at heading boundaries (see richtext.py). Persists BOTH the subject and the body in one save — this is the one path that lets the subject or a section be edited/added/removed/reordered by editing the document directly. Not for chat use — Webbee should use generate_newsletter or patch_newsletter to write content.
Read Full Newsletter30 tok
Read the ENTIRE newsletter body as editable Markdown (# subject, ## section headings, body in light markdown). Returns the full text to chat on purpose — call this before editing so you work from the real current text, never from memory. (To hand a newsletter to another app like MailerLite/Mail/Notes, use export_newsletter_text instead — sending raw Markdown produces literal '**'/'##' characters in the recipient's inbox.) Use for: read the whole newsletter.
Export Newsletter Text100 tok
Get the FULL newsletter body — both as HTML (`html`: <h2>/<strong>/<ul> markup, no literal Markdown syntax) and plain text (`text`) — so it can be handed to another extension: MailerLite (create/update a campaign), Mail's send()/reply() (is_html=true), or Notes. ONLY call this when the user explicitly asks to send/export/copy the newsletter somewhere. Never call this for routine status checks or listing — use list_newsletters for those, which stays cheap on purpose.
Edit Full Newsletter40 tok
Replace the ENTIRE newsletter with your edited version as Markdown (# subject, ## headings, body). Stores EXACTLY what you submit — nothing is re-generated — so first read_full_newsletter, change only what's needed, and resend the COMPLETE text with every unchanged part preserved verbatim. For a small targeted change prefer patch_newsletter. Use for: edit the newsletter.
Delete Newsletter10 tok
Permanently delete a newsletter. Use for: delete this newsletter.
Generate Newsletter400 tok
Start writing a newsletter's first draft using the project's context (brand voice, goals, fill categories) plus a topic/goal brief and any real source facts (from web search or other extensions, e.g. an Article Writer article or Matomo/GSC data) the draft's claims must be grounded in. Runs in the background — it does not block. To see when it's done, call list_newsletters(status='review') a bit later: a newsletter's status lands on 'review' the moment its draft is ready, so that one call shows everything that finished — no job_id tracking needed. Use for: write the newsletter, draft this email.
Patch Newsletter30 tok
Rewrite ONE block of a newsletter by natural-language instruction (e.g. 'rewrite the block about the promo to be more urgent', 'shorten the intro'). Locates the block automatically (heading/keyword match) and returns a short preview — never the full body. Use for: shorten this newsletter's intro, make the CTA punchier.