Stakeholder Comms
andreaskelm/pm-brain
Write, tighten, or review written stakeholder communication: one-pagers, exec summaries, decision docs, status updates, newsletters, sprint summaries and sprint review updates, meeting agendas…
Write and edit documents in Herald Docs, the word processor in Herald OS - letters, cover letters, CVs, reports, memos, meeting notes, proposals, essays and newsletters drafted from a brief or a…
$ npx skills add iamlukethedev/Herald-OS --skill herald-docs -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install iamlukethedev/Herald-OS herald-docs --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/iamlukethedev/Herald-OS.git skills-src && mkdir -p .claude/skills && cp -r skills-src/plugins/herald-os-bridge/skills/herald-docs .claude/skills/herald-docs && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "herald-docs" agent skill from https://github.com/iamlukethedev/Herald-OS/tree/main/plugins/herald-os-bridge/skills/herald-docs into .claude/skills/herald-docs/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "herald-docs", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/iamlukethedev/Herald-OS/tree/main/plugins/herald-os-bridge/skills/herald-docsType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add iamlukethedev/Herald-OS --skill herald-docs -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install iamlukethedev/Herald-OS herald-docs --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/iamlukethedev/Herald-OS.git skills-src && mkdir -p .agents/skills && cp -r skills-src/plugins/herald-os-bridge/skills/herald-docs .agents/skills/herald-docs && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "herald-docs" agent skill from https://github.com/iamlukethedev/Herald-OS/tree/main/plugins/herald-os-bridge/skills/herald-docs into .agents/skills/herald-docs/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "herald-docs", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add iamlukethedev/Herald-OS --skill herald-docs -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install iamlukethedev/Herald-OS herald-docs --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/iamlukethedev/Herald-OS.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/plugins/herald-os-bridge/skills/herald-docs .cursor/skills/herald-docs && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "herald-docs" agent skill from https://github.com/iamlukethedev/Herald-OS/tree/main/plugins/herald-os-bridge/skills/herald-docs into .cursor/skills/herald-docs/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "herald-docs", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/iamlukethedev/Herald-OS.git --path plugins/herald-os-bridge/skills/herald-docs--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add iamlukethedev/Herald-OS --skill herald-docs -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install iamlukethedev/Herald-OS herald-docs --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/iamlukethedev/Herald-OS.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/plugins/herald-os-bridge/skills/herald-docs .gemini/skills/herald-docs && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "herald-docs" agent skill from https://github.com/iamlukethedev/Herald-OS/tree/main/plugins/herald-os-bridge/skills/herald-docs into .gemini/skills/herald-docs/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "herald-docs", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install iamlukethedev/Herald-OS herald-docsInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add iamlukethedev/Herald-OS --skill herald-docs -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/iamlukethedev/Herald-OS.git skills-src && mkdir -p .github/skills && cp -r skills-src/plugins/herald-os-bridge/skills/herald-docs .github/skills/herald-docs && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "herald-docs" agent skill from https://github.com/iamlukethedev/Herald-OS/tree/main/plugins/herald-os-bridge/skills/herald-docs into .github/skills/herald-docs/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "herald-docs", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add iamlukethedev/Herald-OS --skill herald-docs -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install iamlukethedev/Herald-OS herald-docs --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/iamlukethedev/Herald-OS.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/plugins/herald-os-bridge/skills/herald-docs .opencode/skills/herald-docs && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "herald-docs" agent skill from https://github.com/iamlukethedev/Herald-OS/tree/main/plugins/herald-os-bridge/skills/herald-docs into .opencode/skills/herald-docs/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "herald-docs", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
herald-docsWrite and edit documents in Herald Docs, the word processor in Herald OS - letters, cover letters, CVs, reports, memos, meeting notes, proposals, essays and newsletters drafted from a brief or a…
Herald Docs is an agent skill from iamlukethedev/Herald-OS. Write and edit documents in Herald Docs, the word processor in Herald OS - letters, cover letters, CVs, reports, memos, meeting notes, proposals, essays and newsletters drafted from a brief or a template, rewrites of the text Herald marked for a request (shorter, longer, another tone, another language, spelling and grammar), reviews that comment on clarity, grammar and tone, summaries, formatting and paragraph styles, find and replace, tables, pictures, a Herald Sheets range as a table in a report, headers and…
Its SKILL.md is about 6k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Documents & Office, covering Resume and CV writing, Newsletters and Proposals and quotes. The repository describes itself as: An agent-native operating system, with Hermes Agent as the interface. Independent project, not affiliated with Nous Research. The licence is MIT.
5 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 1b35085. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md.
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Herald Docs loads about 6k tokens when it runs. Until then it costs about 201 tokens; SKILL.md has 3,273 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from iamlukethedev/Herald-OS at commit 1b35085, republished under its MIT licence (© iamlukethedev). 3,273 words, ~5,966 tokens.
.claude/skills/herald-docs/SKILL.md (or your agent's skills folder).Herald Docs is the word processor built into Herald OS. It opens and saves Word documents
(.docx), Markdown (.md) and text files (.txt), and the person watches every change land in
the Docs window. Use the docs tool whenever they want a document written or changed: "write a
cover letter for this job", "make this paragraph friendlier", "turn my notes into a report", "put
the budget table in the report", "fix the typos", "add page numbers", "review this", "export it as
a PDF". Code, configuration and other plain files are for your file tools; reading a PDF is
system_documents.
docs action=list shows what is open in Herald Docs: each document's
name, path, unsaved edits, the one in front (active) and the text selected in it.
docs action=list_all adds what is open in Herald Sheets and Slides, and os_ui action=state
carries the same list as office. "This document" is the one in front. Name a document by its
file (document="~/Documents/Report.docx") or by its tab (document="Untitled 2"); left out,
a call works on the one in front.docs action=read gives the outline, the word count, the page and
the content as Markdown. On a long document read part=outline first, then a section at a
time (heading="Findings", or heading=3 for the third heading); content is cut at maxChars
(20000). part=comments, notes, headers (headers and footers), sections or tocs
(tables of contents) gives those, and the other reads say which of them the document has.
docs action=find text="deadline" lists each place a phrase appears, with the words around it
and the heading it is under.content is Markdown: # headings, **bold**, *italic*, lists, - [ ]
task lists, tables, links, > quotes, code, and pictures from files
(). at says where it goes: end (the default),
start, selection (in place of what is selected, or at the caret), marked (in place of
the text marked for the request), after (under the paragraph the marked text is in, or the
selection when nothing is marked), or
heading with heading= and mode=append (the end of its section, the default), prepend
(right under the heading) or replace (the section's text, keeping the heading). One paragraph
written at the selection joins its line of text. selection, marked and after need the
document open in its window; a file on disk takes end, start or a heading.docs action=undo, with steps=3 for several). Land a whole change in one call. Several
changes, in one place or all over the document, go in one docs action=edit (below), never a
string of small calls.docs action=read heading="Summary") before you say it is done, and say what changed, not how.An open document changes in its window, where the person sees it. A file that is not open is
read, changed and written straight back to disk: the person is asked first every time, Herald
backs the original up the first time it writes over it, and it refuses when the file holds
something it cannot keep (see the end). Then open it (docs action=open path="~/Documents/Report.docx"; the answer gives its outline and lists what Herald shows
differently from the file) and work in the window, where the person saves when they are happy.
[phone number]), and you say which ones are left to fill.docs action=new name="Cover letter - Product designer" content="Dear Hiring Manager,\n\nI am writing to apply for the Product Designer role at Acme, which I saw on your careers page. ...\n\nKind regards,\n\n[Your name]"docs action=list_templates lists Herald Docs' own, each with what it holds (blank,
letter, cover-letter, cv, report, memo, meeting-notes, essay,
project-proposal, newsletter, invoice, thank-you-note and recipe), and the ones the
person saved. docs action=new template=report name="Q3 report" starts one with its sample
text, for the person to fill in, or for you to replace section by section after a read.docs action=new template=cover-letter content="..."
keeps the template's page, styles, headers and footers and puts your content in place of all
its sample text, so write the whole document, title and headings included. A header or footer
may still hold sample words (a report's header says "Report Title"): read part=headers and
set them (below). A template the person saved goes by its name, and resume, proposal or
meeting notes work too.size=a4 (letter, legal or a5) picks the paper of a new document; left out, the
locale's.path saves the new document at once (path="~/Documents/Q3 report.docx"), never over a file
that exists: give it only when the person said where. Otherwise the document stays unsaved
until they save it or ask you to.When the person asks Hermes about text they selected in Herald Docs, Herald marks that text (it
stays tinted while you work) and the request says text is marked for it. docs action=read part=selection gives it as marked, and what is selected now as selection. When nothing was
selected, the caret's place is marked instead, and at=marked writes there.
at=marked. It replaces exactly the marked text as one step, even when the
person has clicked elsewhere since. Keep its language (unless asked to translate), its
formatting (bold, links, lists, headings), and the facts, names and numbers in it; change only
what was asked.at=after, which is under the marked text's paragraph even
when the person has clicked elsewhere since. A question gets its answer in your reply.part=selection and write at=selection. With nothing selected, find the part by its words
(find) or ask which part they mean.docs action=read part=selection
docs action=write at=marked content="Thank you for your patience while we looked into this. ..."
docs action=write at=after content="**In short:** the supplier missed two deadlines and has offered a 10% credit."Write structure in Markdown as you write; use format for what Markdown cannot say. at picks
what it applies to: selection (the default), marked, all, heading (the heading line),
section (a heading and its section, with heading=) or text (every place text= appears;
caseSensitive, wholeWord or regex narrow it).
style= normal, title, subtitle, heading1 to heading6, quote or
code.bold, italic, underline and strike (true or false), color and highlight (any
CSS colour; none takes one off), font, size in points ("0" goes back to the style's),
link (a web address, or none), and clear=true to clear the formatting first.align=left, center, right or justify; lineSpacing=1.15 (1, 1.15, 1.5, 2).docs action=page size=a4 orientation=portrait margins="2cm"; more under Sections
and page setup.docs action=format at=text text="Herald OS" bold=true color="#1f6feb"
docs action=format at=section heading="Appendix" size="10"
docs action=format at=all font="Georgia" lineSpacing=1.15Find and replace keeps the formatting where each match starts: docs action=replace find="Acme Ltd" replacement="Acme Group" wholeWord=true changes every match (all=false only the first),
and leaving replacement out deletes the matches.
content, or docs action=table cells=[["Item", "Cost"], ["Flights", "$1,240"], ["Hotel", "$860"]] at=after. The first row is the header unless
header=false; rows=4 cols=3 makes an empty one. Its columns share the text width.docs action=image source="~/Pictures/team.jpg" alt="The team at the offsite" width=480 at=after, or
 in Markdown. It is never wider than the text.docs action=insert_range workbook="~/Documents/Budget.xlsx" range="A1:D12" at=heading heading="Costs" puts the range in as a table, as its cells show
(formatted numbers and dates). Without range it takes the workbook's selection, or else the
cells that hold something.docs action=set_footer content="Page {page} of {pages}" align=center numbers every page at its
foot, and set_header writes the top of the page the same way. content is Markdown, a line or
a few, and replaces what the header or footer said: {page} is the page number, {pages} the
page count, and {date} and {time} are today's ({date:d MMMM yyyy} with a picture of your
own), kept up to date as the pages change. align is left, center or right.
kind=first writes the first page's own and kind=even the even pages' own (the default ones
then go on odd pages), and turns that option on. set_header_options differentFirst=true alone
gives a title page no header or footer; false turns it off again, and differentOddEven
works the same way.clear_header and clear_footer take one kind away (kind=first), or every one when kind
is left out, and ask the person first.docs action=read part=headers shows what each one says, with {page} and {pages} where
those fields are. A document has one set, shown in every section.docs action=insert_field field=date format="d MMMM yyyy" quote="Dated:" puts today's date right
after those words (field=page, pageOfPages for "Page 2 of 9", pages, date or time).
Without quote it goes at the caret (at=selection), in place of the marked text, or on a
line of its own at the end or where heading says.docs action=set_header content="**Acme** · Q3 report" align=right
docs action=set_footer content="Page {page} of {pages}" align=center
docs action=set_header_options differentFirst=truedocs action=insert_note quote="grew by a third" content="Office for National Statistics, 2025."
puts a footnote's number right after those words and the note at the foot of the page;
kind=endnote puts the note at the end of the document instead. Notes are numbered in the order
they come. Without quote the number goes at the caret or the marked text, or at the end of the
text where at and heading say. docs action=list_notes (or read part=notes) lists them by
name ("footnote 2", "endnote 1"), with what each says and the words its number follows;
set_note note="footnote 2" content="..." changes one, and remove_note note="footnote 2" takes
it and its number out (the rest are numbered again), asking the person first. Markdown written
with write can hold footnotes too (grew by a third[^1], and a line [^1]: The source.).
docs action=page sets the paper, orientation and margins: size=a4 (letter, legal, a5,
or width by height like "8.5x11in"), orientation=landscape, margins="2cm" for all four or
top, right, bottom and left for one side each, and headerDistance and footerDistance
for how far the header and footer sit from the edges. Lengths are points, or "1in", "2cm",
"20mm".
A section break starts pages that can have a setup of their own: landscape pages for a wide
table, an appendix with other margins. docs action=insert_section_break quote="Appendix" orientation=landscape starts a new section on a new page after the paragraph with those words
(kind=continuous keeps it on the same page, and oddPage or evenPage starts the next odd or
even page), with the page you give it, or else the page of the section it is in. For one wide
table, break before it with orientation=landscape and after it with orientation=portrait.
docs action=list_sections (or read part=sections) lists the sections in order, each with
its number, how it starts, its page and its first words.page without section changes the document's page (the first section's, and that of the
sections that keep it); page section=2 margins="1in" changes one section's alone, and
section=all every section's.remove_section_break section=3 joins section 3 to the one before it, whose page it takes, and
asks the person first.docs action=insert_toc quote="Q3 report" levels=3 puts a table of contents after the title (the
paragraph with those words), listing Heading 1 to Heading 3 with the page each is on, under the
title "Contents" (title="In this report", or title=none for no title). Without a place it goes
at the start, and heading="Summary" mode=before puts it right before a heading. Its entries
follow the headings as they change; after headings change or text moves to other pages,
update_tocs brings its page numbers up to date. set_toc levels=2 (or title) changes one
(toc=2 for the second), remove_toc takes one out and asks first, and read part=tocs lists
them.
docs action=read part=comments (or list_comments, with heading= for one section) gives each
comment's id, author, date, what it says, the words it is on (quote), the heading it is under,
whether it is resolved, and its replies.
add_comment quote="grew by a third" text="Against which year?" comments on those words
(all=true on every place they appear); heading="Summary" comments on a heading's line, and
at=selection or at=marked on what is selected or marked in an open document. The answer
gives the new comment's id.reply_to_comment comment=<id> text="..." answers a comment, edit_comment changes what a
comment or a reply says, resolve_comment comment=<id> marks it resolved (resolved=false
opens it again), and delete_comment comment=<id> deletes a comment with its replies (a reply's
id deletes only that reply; all=true every comment in the document), asking the person first.edit, and in the same batch
reply to or resolve each one you dealt with ({"op": "resolveComment", "comment": "c3"})."Review this", "check the grammar", "is the tone right", "proofread my essay": a review comments on the text and leaves it as it is. Asking to fix or rewrite it is a rewrite (see Marked and selected text).
docs action=read; when it comes back cut short, a section at
a time with heading=), so every comment rests on text you have read. When the read says it
has comments already, read them (part=comments) and repeat none. When text is marked for
the request, review only that (part=selection).add_comments call with every comment, so the review lands as one step the person
can undo. Each comment goes on an exact quote of a short passage: a few words copied from one
paragraph, without Markdown marks, enough to tell the place apart (a comment goes on the first
match of its quote). Each says its kind and the fix: Clarity (vague, wordy or hard to follow),
Grammar (spelling, grammar and punctuation) or Tone (what does not suit the readers). Comment
only where a change would help, in the document's language, and keep to what was asked: a
grammar check is about grammar. When nothing needs a comment, make no call and say so.edit and resolve the comments you dealt with.docs action=add_comments comments=[
{"text": "Grammar: 'affect' is the verb. Suggest: 'a big effect on sales'.", "quote": "a big affect on sales"},
{"text": "Clarity: who decided? Suggest: name the team.", "quote": "it was decided"},
{"text": "Tone: too casual for a client report. Suggest: 'We expect'.", "quote": "We reckon"}
]The answer counts the comments added and lists any whose quote was not found (missing): make
no second call for those, and say how many did not land. "all": true puts one comment on every
place a slip repeats, and an item with heading in place of quote comments on a whole section.
"How long is it", "how long will it take to read", "is it easy to read": docs action=statistics
gives the words, characters (with and without spaces), paragraphs, sentences, words per sentence,
reading and speaking time, reading ease (Flesch, 0 to 100, higher is easier, with what it means),
the US school grade (Flesch-Kincaid), and the pages of an open document. heading= gives one
section's and selection=true the selection's. They count the body, not notes, comments, headers
or footers. Answer with the numbers asked for, in a sentence.
docs action=edit edits=[...] makes every change in order as ONE step to undo, each one seeing
the document as the ones before left it. The ops: write (content, format, at, heading, mode),
replace (find, replacement, all, caseSensitive, wholeWord, regex), format (the format
arguments), table (cells, or rows and cols, header, at, heading, mode), image (source, alt,
at, heading, mode), pageBreak (at, heading, mode) and page (the page arguments); and
setHeader, setFooter, clearHeader, clearFooter, setHeaderOptions, insertField,
insertNote, setNote, removeNote, insertSectionBreak, removeSectionBreak, addComment,
addComments, replyToComment, editComment, resolveComment, deleteComment, insertToc,
setToc, updateTocs and removeToc, each with the arguments of the action of the same words.
A batch that takes something away (a header, a note, a comment, a table of contents) asks the
person first, as that action does alone.
docs action=edit document="Report.docx" edits=[
{"op": "write", "at": "start", "content": "## Summary\n\nSales rose 12% on last year, ..."},
{"op": "replace", "find": "DRAFT - ", "replacement": ""},
{"op": "format", "at": "heading", "heading": "Summary", "color": "#1f6feb"},
{"op": "pageBreak", "at": "heading", "heading": "Appendix", "mode": "prepend"},
{"op": "setFooter", "content": "Page {page} of {pages}", "align": "center"}
]Use it for "fix the typos" (one replace per mistake, with wholeWord=true, so the formatting
stays), "make every heading blue" (one format per heading in the outline), "update the dates
everywhere", "add page numbers and a table of contents" (a setFooter and an insertToc), and
for filling in a template section by section (write with at=heading mode=replace for each
one).
"Put the budget in the report and say what it shows": docs action=list_all finds both (or use
their paths), sheets action=read workbook="Budget.xlsx" gives the headers and figures, then
make one call to the report. When it needs only the table, that is docs action=insert_range.
When it needs words around the figures too, make one docs action=edit with a write for the
words and a table whose cells are the range as it shows (the read's text when it has one,
else its values). Quote totals exactly as the sheet shows them, and keep one call per document
so each one is a single step to undo.
docs action=save. Saving over the document's own file asks the person every time;
the first time Herald writes over a file it shows what it cannot keep, and the original goes to
Herald's Office backups. If they keep the file as it was, say so and leave it there.docs action=save to="~/Documents/Cover letter.docx". The extension picks the format: .docx, .md or .txt. A file that exists is
replaced only with overwrite=true, which asks the person first.docs action=export_pdf writes a new PDF in ~/Documents, laid out as it prints, or
to="~/Desktop/Report.pdf". Say where it went.Tracked changes (shown accepted, and saved accepted), text in columns (shown and saved in one column), headers and footers of their own in later sections (the first section's show on every page), page numbering that starts again in a section, equations (shown as plain text), shapes other than pictures and text boxes, and embedded objects (shown as their pictures and not kept). Opening a file lists the ones it has. Say so plainly when a request needs one, and offer what works instead: a comment with the new wording in place of a tracked change, one column in place of several.
© iamlukethedev, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in plugins/herald-os-bridge/skills/herald-docs of iamlukethedev/Herald-OS.
Open the folder on GitHubat commit 1b35085
Herald Docs next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Herald Docs this skilliamlukethedev/Herald-OS | 365 | — | ~6k | Automated safety check: Pass | MIT | |
| Stakeholder Commsandreaskelm/pm-brain | 234 | — | ~2.8k | Automated safety check: Pass | Custom licence | |
| Competitor Content Trackergooseworks-ai/goose-skills | 1.2k | 1 repos | ~1.4k | Automated safety check: Pass | MIT | |
| Human Reviewpetergyang/human-review | 1.4k | — | ~2.1k | Automated safety check: Pass | MIT | |
| Resume CrafterLi-Baichuan-James/cv-skill | 153 | — | ~2.2k | Automated safety check: Pass | MIT | |
| Upwork Proposal Writerabullaisi/upwork-skills | 114 | 1 repos | ~3k | Automated safety check: Pass | MIT |
andreaskelm/pm-brain
Write, tighten, or review written stakeholder communication: one-pagers, exec summaries, decision docs, status updates, newsletters, sprint summaries and sprint review updates, meeting agendas…
gooseworks-ai/goose-skills
Monitor competitor content across blogs, LinkedIn, and Twitter/X on a recurring basis.
petergyang/human-review
Open an HTML file, Markdown file, or localhost page in the browser so the user can edit text directly and leave comments on specific parts, then send all edits and comments back to you.
Li-Baichuan-James/cv-skill
A skill your agent uses when creating, rewriting, or converting a source-backed 1-2 page resume from chat, documents, PDFs, images, or mixed artifacts.
abullaisi/upwork-skills
Draft or review an Upwork proposal (cover letter) using the five-move method extracted from a Top Rated Plus freelancer's winning proposals, corrected for the AI era.
jamditis/claude-skills-journalism
Creates print-ready HTML that exports to PDF. An agent skill from jamditis/claude-skills-journalism.
iamlukethedev/Herald-OS
Change Herald OS itself - make and switch themes, fonts and the wallpaper, widgets, the menu bar, control-menu entries, branding, keybindings, settings, routines and hooks
iamlukethedev/Herald-OS
Work in Herald Sheets, the spreadsheet in Herald OS - read workbooks, write values and formulas (a formula from a description, explaining one, filling it down), fill a column from examples, clean…
iamlukethedev/Herald-OS
Make and change presentations in Herald Slides, the presentation editor in Herald OS - a deck from a topic (an outline first, a title slide, one idea a slide, short bullets, speaker notes, a closing…
iamlukethedev/Herald-OS
Make and edit pictures in Herald Canvas, the layered image editor in Herald OS - posters, banners, thumbnails, collages and photo fixes through the canvas tool, with editable text and shape layers…
iamlukethedev/Herald-OS
Explain why a program crashed from its crash report or core dump, and whether it is worth reporting
iamlukethedev/Herald-OS
Find documents such as invoices among badly named files, read them, name them clearly and file them where the person keeps them, with a plan they approve and an undo
Write and edit documents in Herald Docs, the word processor in Herald OS - letters, cover letters, CVs, reports, memos, meeting notes, proposals, essays and newsletters drafted from a brief or a…. Herald Docs is an agent skill from iamlukethedev/Herald-OS.
Herald Docs fits situations like: tasks that involve Resume and CV writing; tasks that involve Newsletters; tasks that involve Proposals and quotes.
Run `npx skills add iamlukethedev/Herald-OS --skill herald-docs -a claude-code`. Or copy the skill folder (plugins/herald-os-bridge/skills/herald-docs in iamlukethedev/Herald-OS) into .claude/skills/herald-docs in your project. Claude Code loads it when a task matches its description.
Run `npx skills add iamlukethedev/Herald-OS --skill herald-docs -a codex`. Or copy the skill folder (plugins/herald-os-bridge/skills/herald-docs in iamlukethedev/Herald-OS) into .agents/skills/herald-docs in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add iamlukethedev/Herald-OS --skill herald-docs -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/herald-docs, .gemini/skills/herald-docs, .github/skills/herald-docs and .opencode/skills/herald-docs in your project.
SKILL.md names no scripts, command-line tools or credentials: Herald Docs is instructions for the agent only.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Herald Docs is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 6k tokens (SKILL.md is roughly 24k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Herald Docs: Stakeholder Comms (andreaskelm/pm-brain, 234 stars), Competitor Content Tracker (gooseworks-ai/goose-skills, 1.2k stars), Human Review (petergyang/human-review, 1.4k stars) and Resume Crafter (Li-Baichuan-James/cv-skill, 153 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
iamlukethedev (a GitHub user) maintains it in iamlukethedev/Herald-OS, which has 365 GitHub stars. The repository holds 8 skills in this directory. The repository was last updated on October 9, 2026.
Source: iamlukethedev/Herald-OS on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.