agentleFS
darksnsdarksns/beam/skills/web-publish/SKILL.md

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

  • Other versions4 projects use a version of this.

    Word for word · 0

    None found.

    Edited · 0

    None found.

    Wrote their own version · 4

    1. Nikolay-Shirokov/cc-1c-skills★ 765same name
    2. Arman-Kudaibergenov/1c-ai-development-kit★ 163same name
    3. VibeEngineering-LLC/agent-ops-doctrine★ 1same name
    4. 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.

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
  1. Very specific:

    Check the session: if a beam snap shows a login form, stop and ask the user to authenticate.

    line 26
  2. Very specific:

    3. Prepare the content: If the text arrives as Markdown: beam-mdconv text.md --format gutenberg|html|text [--json].

    line 40
  3. Very specific:

    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 …

    line 57
  4. Distinctive:

    Draft by default: Never press "Publish", "Update" on already-live content, "Delete" or "Send" unless the user asked for it explicitly in …

    line 63
  5. Very specific:

    On already-published content: run beam fields --json > backup.json first: it is the only undo you have.

    line 71
  6. Very specific:

    Every site you work out goes into ~/.beam/adapters/<host>.json.

    line 76
  7. Distinctive:

    No recipes exist for other CMSes yet: apply discovery and write the adapter.

    line 123

≈ “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.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

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

  1. beam ping — if it answers extension not connected, ask the user to click the Beam icon in Chrome.
  2. 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 --new or --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.
  3. Check the session: if a beam snap shows 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 text of 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 info before writing.
  • On already-published content run beam fields --json > backup.json first: 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

symptomcausewhat to do
everything reads (hidden)the tab is not the selected one of its windowBeam'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 snapit is inside an iframebeam frames, then --frame <id>
I write into the field but the app ignores ita framework listening for its own eventsbeam fill already fires them; if that is not enough, find the code editor
@n refs stop resolvingthe page or iframe was recreatedrun beam snap again, or use name=/css=
saving returns 403an application firewall on the serverstop: it is not a browser problem, it has to be fixed on the hosting
a long list "loses" itemsa virtualized listfilter or search instead of scrolling

Download now (ZIP)

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
What did you use it for? e.g. Reviewing pull requests in a Rails app

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.