web-publish
Skill2 starsChanged 50 days agoMITView on GitHub
Insert, update or translate content inside a web admin panel using the `beam` CLI — posts, pages, products, custom fields, media uploads, on WordPress or any other CMS or back-office. Use it when the user asks to publish an article, load content, do data entry on a site, fill backoffice forms or translate pages.
4 other projects use a version of this.
Adopted by
Most recently taken up by
- VibeEngineering-LLC/agent-ops-doctrinetheir own version, first seen Sep 15, 2026
- anymasoft/1c-aitheir own version, first seen Jul 17, 2026
- Nikolay-Shirokov/cc-1c-skillstheir own version, first seen May 8, 2026
- Arman-Kudaibergenov/1c-ai-development-kittheir own version, first seen Mar 4, 2026
Other versions4 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 4
- Nikolay-Shirokov/cc-1c-skills★ 765same name
- Arman-Kudaibergenov/1c-ai-development-kit★ 163same name
- VibeEngineering-LLC/agent-ops-doctrine★ 1same name
- anymasoft/1c-ai★ 0same name
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 repositoryOne other file it gives its agents.
- beamSkill
The file
We split this skill into the rules it gives an agent
7 rules. About 0 are common, 2 are distinctive, and 5 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈2
Distinctive · estimate
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 26
Check the session: if a beam snap shows a login form, stop and ask the user to authenticate.
- Very specific: line 40
3. Prepare the content: If the text arrives as Markdown: beam-mdconv text.md --format gutenberg|html|text [--json].
- Very specific: line 57
6. Save and verify: Always save as a draft. Then read it back: beam fields --json and compare against the payload — a click on "Save" does …
- Distinctive: line 63
Draft by default: Never press "Publish", "Update" on already-live content, "Delete" or "Send" unless the user asked for it explicitly in …
- Very specific: line 71
On already-published content: run beam fields --json > backup.json first: it is the only undo you have.
- Very specific: line 76
Every site you work out goes into ~/.beam/adapters/<host>.json.
- Distinctive: line 123
No recipes exist for other CMSes yet: apply discovery and write the adapter.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
web-publish
Content work inside a web backoffice, driven by the HTML structure rather than
by screenshots. The tool is beam (see the beam skill for the commands): it
reads the page as text, writes into fields, uploads files, saves.
This skill is CMS-agnostic. WordPress is the only one with a verified recipe; for everything else, apply the discovery procedure and save an adapter, so the next time is immediate.
Before you start
beam ping— if it answersextension not connected, ask the user to click the Beam icon in Chrome.beam open <url>for the screen you need. It lives in Beam's own window, unfocused, and the same tab is reused — do not pass--newor--focus, and do not close it when you are done.beam use <id>only when the person already has the right tab open; it does not bring it forward. Beam refuses to write if that tab changes from outside: that is a guard, not an error to force past.- Check the session: if a
beam snapshows a login form, stop and ask the user to authenticate. Never enter credentials yourself.
The method, in six phases
1. Get oriented. beam info and beam snap --max 60 on the starting
screen. If the CMS keeps its editor inside an iframe (Gutenberg, most page
builders), beam frames reveals it and you work there with --frame <id>.
2. Map the fields. beam fields gives the label, name, id and selector of
every field. That is the map everything else is built on: prefer name= and
css=#id as targets, because they survive reloads; @n refs only last until
the next snap.
3. Prepare the content. If the text arrives as Markdown:
beam-mdconv text.md --format gutenberg|html|text [--json]. --json also
returns the title, the excerpt and the list of images referenced. Write the
payload to a JSON file instead of passing it inline: apostrophes in the copy
break the command line.
4. Preview, then write. beam set --dry @payload.json shows the diff field
by field. Actually look at it: that is when ambiguous labels surface. Then
beam set @payload.json.
5. Media. beam upload <file-input-target> <url> downloads a file and drops
it into the input the way a person would. It needs a reachable
input[type=file]: nearly every CMS has one in a "classic" upload page, often
simpler than the modern modal. When a dropzone is the only way in,
beam drop <zone> <file|url> drops the file onto it, as a desktop drag would.
Local files work too: beam upload <target> ./photo.jpg.
6. Save and verify. Always save as a draft. Then read it back:
beam fields --json and compare against the payload — a click on "Save" does
not prove the server accepted it. Check the status stayed what you wanted, too.
Rules
- Draft by default. Never press "Publish", "Update" on already-live content, "Delete" or "Send" unless the user asked for it explicitly in this conversation. If it is ambiguous, ask in one line.
- Verify after saving. A
beam textof the page after saving catches 403s, expired sessions and failed validation. If you read a server error (WAF, 403, 500), stop and report it: do not retry in a loop. - No credentials. Login, 2FA and CAPTCHAs are the user's job.
- One site at a time. Re-check
beam infobefore writing. - On already-published content run
beam fields --json > backup.jsonfirst: it is the only undo you have.
Adapters: learn a site once
Every site you work out goes into ~/.beam/adapters/<host>.json. At the start
of a job, check whether an adapter for that domain already exists: if it does,
you already have the selectors and the traps and you can skip discovery.
{
"host": "wordpress.test",
"cms": "WordPress 7.1 · block editor",
"note": "post-new.php is hijacked by the Aura builder: add ?aipb=skip",
"tasks": {
"post.create": {
"url": "https://wordpress.test/wp-admin/post-new.php?post_type=post&aipb=skip",
"prepare": ["Options → Code editor: the body is pasted as block markup"],
"fields": {
"title": "css=#inspector-textarea-control-0",
"body": "css=#post-content-0"
},
"media": {
"url": "https://wordpress.test/wp-admin/media-new.php?browser-uploader",
"input": "css=#async-upload",
"submit": "css=#html-upload"
},
"save_draft": "text=Save draft",
"verify": "https://wordpress.test/wp-admin/edit.php?post_type=post"
}
}
}The fields are free-form: they are notes for you, not a rigid schema. What
matters is that next time they are enough to act without exploring again. Update
the file when you find something has changed. There is a commented example in
examples/adapters/ in the Beam repo.
Working out a CMS you do not know
The full procedure is in references/discovery.md. In short: start from the
creation screen, beam frames for iframes, beam fields for the fields, look
for the "HTML/code" editor (it almost always exists and is far more reliable
than the visual one), find the save-as-draft button, do a full dry run on a test
item, and only then write the adapter.
Verified recipes
- WordPress (posts, pages, ACF, media, featured image, WPML):
references/wordpress.md.
No recipes exist for other CMSes yet: apply discovery and write the adapter. Do not invent selectors "typical" of a platform you have not inspected — read it.
Recurring traps
| symptom | cause | what to do |
everything reads (hidden) | the tab is not the selected one of its window | Beam's window already is; on a tab of theirs, beam focus only if they asked, or read with --hidden |
| the editor is missing from the snap | it is inside an iframe | beam frames, then --frame <id> |
| I write into the field but the app ignores it | a framework listening for its own events | beam fill already fires them; if that is not enough, find the code editor |
@n refs stop resolving | the page or iframe was recreated | run beam snap again, or use name=/css= |
| saving returns 403 | an application firewall on the server | stop: it is not a browser problem, it has to be fixed on the hosting |
| a long list "loses" items | a virtualized list | filter or search instead of scrolling |
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.

