X Post Publisher
JimLiu/baoyu-skills
Publishes text posts, images, videos, quote posts and long-form X Articles written in Markdown through a real Chrome browser.
Record a real agent-browser screencast of one eva feature being used end to end, convert it to an X-ready mp4, and write a tweet for it.
$ npx skills add vvedantb/eva --skill eva-feature-demo -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install vvedantb/eva eva-feature-demo --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/vvedantb/eva.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/eva-feature-demo .claude/skills/eva-feature-demo && 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 "eva-feature-demo" agent skill from https://github.com/vvedantb/eva/tree/main/.claude/skills/eva-feature-demo into .claude/skills/eva-feature-demo/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "eva-feature-demo", 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/vvedantb/eva/tree/main/.claude/skills/eva-feature-demoType 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 vvedantb/eva --skill eva-feature-demo -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install vvedantb/eva eva-feature-demo --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/vvedantb/eva.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/eva-feature-demo .agents/skills/eva-feature-demo && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "eva-feature-demo" agent skill from https://github.com/vvedantb/eva/tree/main/.claude/skills/eva-feature-demo into .agents/skills/eva-feature-demo/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "eva-feature-demo", 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 vvedantb/eva --skill eva-feature-demo -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install vvedantb/eva eva-feature-demo --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/vvedantb/eva.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/eva-feature-demo .cursor/skills/eva-feature-demo && 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 "eva-feature-demo" agent skill from https://github.com/vvedantb/eva/tree/main/.claude/skills/eva-feature-demo into .cursor/skills/eva-feature-demo/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "eva-feature-demo", 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/vvedantb/eva.git --path .claude/skills/eva-feature-demo--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 vvedantb/eva --skill eva-feature-demo -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install vvedantb/eva eva-feature-demo --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/vvedantb/eva.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/eva-feature-demo .gemini/skills/eva-feature-demo && 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 "eva-feature-demo" agent skill from https://github.com/vvedantb/eva/tree/main/.claude/skills/eva-feature-demo into .gemini/skills/eva-feature-demo/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "eva-feature-demo", 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 vvedantb/eva eva-feature-demoInstalls 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 vvedantb/eva --skill eva-feature-demo -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/vvedantb/eva.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/eva-feature-demo .github/skills/eva-feature-demo && 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 "eva-feature-demo" agent skill from https://github.com/vvedantb/eva/tree/main/.claude/skills/eva-feature-demo into .github/skills/eva-feature-demo/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "eva-feature-demo", 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 vvedantb/eva --skill eva-feature-demo -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install vvedantb/eva eva-feature-demo --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/vvedantb/eva.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/eva-feature-demo .opencode/skills/eva-feature-demo && 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 "eva-feature-demo" agent skill from https://github.com/vvedantb/eva/tree/main/.claude/skills/eva-feature-demo into .opencode/skills/eva-feature-demo/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "eva-feature-demo", 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.
eva-feature-demoRecord a real agent-browser screencast of one eva feature being used end to end, convert it to an X-ready mp4, and write a tweet for it.
Eva Feature Demo is an agent skill from vvedantb/eva. Record a real agent-browser screencast of one eva feature being used end to end, convert it to an X-ready mp4, and write a tweet for it. Use when the user wants a screen recording / screengrab video / GIF-style demo of a new feature — "record me using X", "make a video of this feature", "screencast the new flow". This is RAW footage of a real flow, no music and no editing. NOT for polished multi-scene launch videos with captions and a score — that is eva-launch-video.
Its SKILL.md is about 3.3k tokens, which your agent loads only when the skill is triggered. The skill folder holds 7 other files, including scripts and reference files (for example `references/render-pass.md`, `scripts/frames.sh` and `scripts/to-mp4.sh`).
It sits in Productivity & Automation, covering Browser automation and Social media posts. The repository describes itself as: Orchestrate sandboxed agents that run in the cloud while you work. The licence is MIT.
10 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 1c4532e. 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.
Ships 2 files in scripts/ (Shell), which the agent can run.
Shell commands in SKILL.md call:
bashnodepnpmgitnpxFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use pnpm, git and npx, which can reach the network depending on how they are called.
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.
Eva Feature Demo loads about 3.3k tokens when it runs, and up to ~3.8k if it reads all its reference files. Until then it costs about 122 tokens; SKILL.md has 1,612 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); the scripts in this folder are not scanned.
The full file from vvedantb/eva at commit 1c4532e, republished under its MIT licence (© vvedantb). 1,612 words, ~3,259 tokens.
.claude/skills/eva-feature-demo/SKILL.md (or your agent's skills folder). This skill also uses 4 other files; get the full folder from GitHub.One unbroken recording of one feature actually working, plus a tweet. The value is that it is real: real app, real data, real latency. No cuts, no music, no marketing captions.
Output — post the zoom cut. All at the repo root, already gitignored:
| File | What it is |
|---|---|
recordings/<slug>.webm | raw take from agent-browser |
recordings/<slug>.actions.json | action log (when/where each click and typing burst happened) |
recordings/<slug>-zoom.mp4 | the artefact — camera, cursor, click rings, keystroke captions |
recordings/<slug>.mp4 | plain straight conversion; fallback if the zoom looks wrong |
The render pass is the point of this skill. A raw agent-browser capture has no mouse cursor and
no visible typing — Playwright draws no pointer, and fill puts a whole sentence on screen in one
frame. Watched flat, the demo is a series of unexplained jumps. The render pass adds back exactly the
four things the capture cannot record, and nothing else:
| Added | Because |
|---|---|
| Camera zoom | pushes in on the target just before the action, back out to full frame after |
| Synthetic cursor | a real pointer, gliding target to target, dipping on each click |
| Click ring | a click has no visual effect of its own |
| Keystroke caption | types the text out at ~20 chars/sec, so keystrokes are readable |
All four come from the same action log, so the take script is the only place you describe the flow.
The zoom is the opposite rule from eva-launch-video, which is locked at zero zoom. There the
shots are static screenshots and any zoom hides UI. Here the zoom is motivated by an action and
always returns to the full frame, so nothing is permanently hidden.
Script the whole flow to a bash file first, then record it. Never drive a recording
interactively — a stale ref or a mistyped step lands in the take and you start over. Write the
sequence, dry-run it with recording off, then run once. Start from templates/screencast.sh.
1280×720 viewport. agent-browser records at viewport size, so this is also the video size — exactly 16:9, no crop on X.
Set viewport, theme, and overlay-hiding BEFORE record start. Anything after the recorder is
running is in the video, including the overlay-hiding flash. Collapse the sidebar here too — it
eats ~250px of the frame and is never the feature:
agent-browser eval "document.querySelector('button[aria-label=\"Hide sidebar\"]')?.click()"The collapsed state persists across navigation, so one click before record start covers the
whole take.
15–40 seconds. Long enough to show one thing land, short enough to loop. One feature per recording. If the flow needs 60s, it is two recordings or the wrong flow.
Pace for a human, not a test runner. wait 800–1200 after every visible action, wait 1500
on the final state so the loop doesn't snap back before the payoff registers. Un-paced automation
looks like a glitch, not a demo.
Drive every action through tap / say / go. These template helpers are the only source of
the action log. A hand-written agent-browser click or fill produces no cursor movement, no
zoom, no click ring, and no caption — the render pass is blind to it. If a step needs raw
agent-browser, call mark yourself right before it. Also:
scrollintoview before clicking below the fold — an off-screen click reads as a random jump.
tap does this for you.Let say finish. It waits out the caption (len × 50ms + 1400) because the caption is drawn
over the footage that follows — end the recording early and the caption gets cut off mid-sentence.
Don't shorten those waits to hit a duration target; drop a step instead.
Never submit. Type only. Fill inputs, open pickers, stage the state — then stop. No Enter in a
composer, no send arrow, Create, Save, Run, or Start, and never kick off a real session or agent
run, not even for a demo. Submitting mutates the user's real workspace and burns real compute; the
staged state is the whole deliverable. Enter is allowed only where it commits to the field itself
and nothing else (accepting an @-mention from an open picker) — otherwise click the picker row.
Real footage, finished states. Don't wait on live agent runs inside a recording (sandboxes are stopped, runs are slow and flaky). Record already-completed work, or a flow that resolves locally. If a step needs a running sandbox and there isn't one, redesign the flow.
Confidentiality. Own repo vvedantb/eva only. Never client repos (evalucom/carepulse,
eprocurement) or the "Codebases" home listing them. This matters more than for a still — the
recording passes through sidebars, lists, and modals you didn't plan to feature. Watch what
scrolls past. Never raise personal-data concerns about names or emails on screen — Settings →
Experimental has a blur-PID toggle that blurs every [data-pii] element, so this is handled in
the product. Turn it on if a recording will pass through a lot of member lists.
Pin down the feature and the flow. Name the 3–5 concrete steps: start state → actions →
payoff state. Write them out before touching the browser. git log --oneline -15 or
internal/changelog/ (newest month file) if the user hasn't said which feature.
Set up the browser (.claude/skills/eva-launch-video/references/capture-workflow.md §1–2):
pnpm dev # from repo root → localhost:5173
agent-browser close
agent-browser open "http://localhost:5173/?agent=true" # ?agent=true — boolean, not /?agent
agent-browser set viewport 1280 720
agent-browser set media dark
agent-browser open "http://localhost:5173/?agent=true"
agent-browser wait --load networkidle && agent-browser wait 5000Write the take script. Copy templates/screencast.sh to the scratchpad, fill in the flow.
Resolve refs while writing it (agent-browser snapshot -i at each stage) — but re-snapshot inside
the script too, because refs don't survive navigation.
Dry run with recording off. RECORD=0. Fix every failed step. Watch for steps that succeed
but look wrong (a click landing while a skeleton is up).
Record the take. RECORD=1. The script stops the recorder in a trap so a mid-flow failure
still saves the partial file. Re-take with a fresh run — record restart also works.
Render the zoom pass. Reads the action log, so it needs no arguments beyond the slug:
cd video && node scripts/render-screencast.mjs <slug> # → recordings/<slug>-zoom.mp4It validates the log, stages the webm under video/public/recordings/, reads the real duration off
the file, and renders the FeatureScreencast composition. Output is h264 / yuv420p / faststart /
silent — exactly what X wants. --zoom=1.4 for a gentler push (default 1.55; above ~1.7 the
surrounding UI stops being readable).
Plain conversion with no camera move, if the zoom fights the flow:
bash .claude/skills/eva-feature-demo/scripts/to-mp4.sh <slug>QA by reading frames. You can't watch video. Read the action log first, then pull a still at each action time (a zoom peak) plus one between two actions (should be full-frame, no zoom):
cat recordings/<slug>.actions.json
bash .claude/skills/eva-feature-demo/scripts/frames.sh <slug>-zoom 3 6.4 11.5 15.9Check: cursor sitting on the element being acted on (not adrift); click ring on the button, not near it; keystroke caption mid-type, legible, not covering the thing it describes; zoom landing centred and staying inside the frame; the between-action frame fully zoomed out; overlays gone; no skeletons/spinners caught mid-flow; payoff state legible and holding; nothing confidential scrolled past; all four edges intact. Reshoot on any failure — it's a 2-minute loop.
Write the tweet. Invoke the eva-tweet skill. The video carries the proof; the tweet states
what now exists — hook, optional positioning fragment, → list, optional close. Don't narrate the
video ("watch as I…") and don't reference it at all.
Hand over. The -zoom.mp4 path as a markdown link, duration, the tweet in a fenced block, and
anything in frame worth a second look before posting.
| Need | Command |
|---|---|
| Take template | .claude/skills/eva-feature-demo/templates/screencast.sh |
| Dry run / record | RECORD=0 bash take.sh · RECORD=1 bash take.sh |
| Zoom pass (post this) | cd video && node scripts/render-screencast.mjs <slug> [--zoom=1.55] |
| webm → plain mp4 | bash .claude/skills/eva-feature-demo/scripts/to-mp4.sh <slug> |
| Stills at seconds | bash .claude/skills/eva-feature-demo/scripts/frames.sh <slug>-zoom 1 5 9 |
| Verify the mp4 | node video/scripts/check-audio.mjs <abs-path-to-mp4> |
| Inspect any media file | cd video && npx remotion ffmpeg -i <file> |
The defaults are right for a normal take. To change the motion — zoom amount, cursor timing, caption
speed, how segments merge — read references/render-pass.md, which covers the action log format,
video/src/screencast/zoom.ts, and the composition.
/?agent=true — /?agent throws a zod SearchParamError. If it hangs on
"Signing in…" and the console says You're already signed in, navigate straight to the target.--disable-filters. Most -vf filters (including fps)
error with "No option name near…". Extract stills by seeking instead: -ss <sec> -frames:v 1.
frames.sh already does it this way.<html>, not <body>. Hiding
#react-scan-root alone is not enough: the component outlines and labels are drawn on a bare
html > canvas with no id or class, and that is the one that wrecks a take. Kill all three
(#react-scan-root, html > canvas, [data-agentation-root]) with inline
display:none !important — a stylesheet loses to their inline styles. The template's hide_overlays
does it, and go re-runs it because a page load remounts them.--props as inline JSON on Windows. The shell strips the quotes and Remotion fails
with "neither valid JSON nor a file path". render-screencast.mjs writes a props file.@e1) invalidate on any DOM change. Re-snapshot inside the script after each navigation,
never reuse a ref across a page change.say records the literal text, so it ends up burned into the video as a caption. Never type
anything into a demo you wouldn't post.© vvedantb, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 4 other files (scripts, references) in .claude/skills/eva-feature-demo of vvedantb/eva.
Open the folder on GitHubat commit 1c4532e
Eva Feature Demo 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 |
|---|---|---|---|---|---|---|
| Eva Feature Demo this skillvvedantb/eva | 101 | — | ~3.3k | Automated safety check: Pass | MIT | |
| X Post PublisherJimLiu/baoyu-skills | 27k | 1 repos | ~4.4k | Automated safety check: Warn | MIT | |
| Neo4ier/neo | 756 | — | ~1.8k | Automated safety check: Pass | None | |
| Reddit Comment Automationrokpiy/auto-commenter | 585 | — | ~2.1k | Automated safety check: Pass | MIT | |
| Post to WeiboJimLiu/baoyu-skills | 27k | 1 repos | ~1.4k | Automated safety check: Warn | MIT | |
| X Publishaiskillstore/marketplace | 433 | — | ~1.3k | Automated safety check: Pass | None |
JimLiu/baoyu-skills
Publishes text posts, images, videos, quote posts and long-form X Articles written in Markdown through a real Chrome browser.
4ier/neo
Browse websites, read web pages, interact with web apps, call website APIs, and automate web tasks.
rokpiy/auto-commenter
Drafts, reviews, posts, and tracks Reddit comments for chosen subreddits end to end, using Playwright MCP to read and interact with the live page.
JimLiu/baoyu-skills
Publish text, image and video posts or long-form Markdown headline articles to Weibo through a real Chrome session, with the final review left to you.
aiskillstore/marketplace
Publish tweets and threads to X (Twitter) draft using browser automation.
quran/quran.com-frontend-next
Automates browser interactions for web testing, form filling, screenshots, and data extraction.
vvedantb/eva
Turn the current project website into a short, polished, shareable launch video using Hyperframes.
vvedantb/eva
Build an animation from scratch, making the decisions in the order that determines whether it feels right — should it animate at all, what purpose, which tool, which properties, which curve and…
vvedantb/eva
Design and build Convex components with clear boundaries, isolated state, and app-facing wrappers.
vvedantb/eva
Grab a single clean HD screenshot of a new eva feature from the real running app (Playwright at deviceScaleFactor 2, 1280 layout captured crisp at 2560×1440, dev overlays hidden) and write a tweet…
vvedantb/eva
A skill your agent uses when multiple workflows duplicate the same operational logic, when deciding what belongs in actions vs shared services, or when refactoring repeated operational blocks across…
vvedantb/eva
Produce polished, mobile-friendly product demo videos of the eva app with Remotion — 1280×720, snappy beat-synced hard cuts, lo-fi music that swells on every cut, and footage captured from the REAL…
Categories
Record a real agent-browser screencast of one eva feature being used end to end, convert it to an X-ready mp4, and write a tweet for it. Eva Feature Demo is an agent skill from vvedantb/eva. Record a real agent-browser screencast of one eva feature being used end to end, convert it to an X-ready mp4, and write a tweet for it.
Eva Feature Demo fits situations like: the user wants a screen recording / screengrab video / GIF-style demo of a new feature — record me using X; make a video of this feature; screencast the new flow.
Run `npx skills add vvedantb/eva --skill eva-feature-demo -a claude-code`. Or copy the skill folder (.claude/skills/eva-feature-demo in vvedantb/eva) into .claude/skills/eva-feature-demo in your project. Claude Code loads it when a task matches its description.
Run `npx skills add vvedantb/eva --skill eva-feature-demo -a codex`. Or copy the skill folder (.claude/skills/eva-feature-demo in vvedantb/eva) into .agents/skills/eva-feature-demo 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 vvedantb/eva --skill eva-feature-demo -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/eva-feature-demo, .gemini/skills/eva-feature-demo, .github/skills/eva-feature-demo and .opencode/skills/eva-feature-demo in your project.
Going by SKILL.md and its folder, Eva Feature Demo needs a shell for the scripts in its folder and the command-line tools its instructions call (bash, node, pnpm, git and npx). Our summary lists: Node.js; A Bash shell.
SKILL.md contains no URLs. Its commands use git and npx, which can reach the network depending on how they are called. 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. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Eva Feature Demo is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.3k tokens (SKILL.md is roughly 13k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 563 tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Eva Feature Demo: X Post Publisher (JimLiu/baoyu-skills, 27k stars), Neo (4ier/neo, 756 stars), Reddit Comment Automation (rokpiy/auto-commenter, 585 stars) and Post to Weibo (JimLiu/baoyu-skills, 27k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
vvedantb (a GitHub user) maintains it in vvedantb/eva, which has 101 GitHub stars. The repository holds 25 skills in this directory. The repository was last updated on October 10, 2026.
Source: vvedantb/eva on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.