azukiazusa1/sapper-blog-app/en

Claude Code and agent skill by azukiazusa1/sapper-blog-app

Trust tier 3
  • community
Source check pending

Checking that the SKILL.md file is still in the repository.

Install

npx vskill@latest install azukiazusa1/sapper-blog-app/en

SKILL.md

Codex's Record & Replay is a feature that turns your actions on macOS into a reusable skill by demonstration. Record & Replay shines when a workflow is routine and you repeat it frequently, or when showing the actual steps is easier to understand than describing them in a prompt. Examples include filing expense reports, clocking in or entering work hours on an attendance app, and producing regular reports. By recording these actions as a skill and combining it with Computer Use, you can expect to hand tedious, repetitive chores off to AI. Record & Replay is especially well suited to workflows whose steps are stable and whose success criteria are clear.

In this article, I'll walk through actually trying out Record & Replay. This time, I'll use a fictional attendance app called "TimePort" running locally to record a clock-in and work-hour entry workflow, and show an example of reusing it as a skill.

Getting Started with Record & Replay

As a prerequisite for using Record & Replay, you need the Codex App (the desktop app). It is also currently available only on macOS. Install the Codex App from the link below.

https://developers.openai.com/codex/app

Once you've installed the Codex App, select "Plugins" from the sidebar. Type "Record" into the search box in the plugin list, and the Record & Replay plugin will appear. Click "Add plugin" to add the Record & Replay plugin.

[Image: untitled]

The plugin consists of the following two components.

  • The event-stream MCP server
  • The record-and-replay skill

The event-stream MCP server provides tools that record the user's actions and save them as JSON files. The record-and-replay skill actually calls the event-stream MCP server to record the user's actions, and provides the procedure for creating a skill based on the recorded content.

The event-stream MCP server records the user's actions by combining macOS's accessibility API with input event monitoring. It exposes the lifecycle of starting, checking the status of, and stopping a recording as the following three main tools. Recording is built on top of the Computer Use machinery, so just like Computer Use, recording requires accessibility and screen recording permissions.

  • event_stream_start: Starts recording the user's actions. Confirmation is requested before recording begins. Once recording has started, it waits until the user signals that they have finished. Recording can last up to 30 minutes.
  • event_stream_status: Checks the recording status and the paths to the generated metadata and event files.
  • event_stream_stop: Stops recording the user's actions and returns results such as the save location.

The actions that get recorded include the following.

  • Information about the apps and windows used
  • Mouse and keyboard actions and their target elements
  • Focused UI elements
  • Selected text
  • The accessibility tree and its changes

The recorded actions themselves are not returned directly as the MCP response; instead, they are saved as the following files. When the user finishes and event_stream_stop is called, the save paths are returned, so Codex reads those files to check their contents.

  • session.json: recording duration, end reason, and so on
  • events.jsonl: the actual action events

The contents of events.jsonl after recording an actual attendance-app session look like this.

json
{"timestamp":"2026-06-21T02:04:08Z","kind":"mouse.click","app":{"name":"Google Chrome"},"window":{"title":"TimePort | 勤怠管理","url":"http://localhost:5173/"},"mouse":{"button":"left","target":{"role":"AXButton","title":"月次工数"}}}
{"timestamp":"2026-06-21T02:04:14Z","kind":"mouse.click","app":{"name":"Google Chrome"},"window":{"title":"TimePort | 勤怠管理","url":"http://localhost:5173/"},"mouse":{"button":"left","target":{"description":"6/15(月)の工数を入力","role":"AXCheckBox","subrole":"AXToggleButton"}}}
{"timestamp":"2026-06-21T02:04:15Z","kind":"selection.changed","app":{"name":"Google Chrome"},"window":{"title":"TimePort | 勤怠管理","url":"http://localhost:5173/"},"selection":{"selectedItems":[{"role":"AXMenuItem","title":"社内業務"}],"target":{"role":"AXMenu"}}}
{"timestamp":"2026-06-21T02:04:16Z","kind":"selection.changed","app":{"name":"Google Chrome"},"window":{"title":"TimePort | 勤怠管理","url":"http://localhost:5173/"},"selection":{"selectedItems":[{"role":"AXMenuItem","title":"Web刷新"}],"target":{"role":"AXMenu"}}}
{"timestamp":"2026-06-21T02:04:20Z","kind":"keyboard.text_input","app":{"name":"Google Chrome"},"window":{"title":"TimePort | 勤怠管理","url":"http://localhost:5173/"},"keyboard":{"target":{"role":"AXTextArea","title":"作業内容","value":"画面実装"}}}
{"timestamp":"2026-06-21T02:04:24Z","kind":"keyboard.text_input","app":{"name":"Google Chrome"},"window":{"title":"TimePort | 勤怠管理","url":"http://localhost:5173/"},"keyboard":{"target":{"role":"AXIncrementor","title":"時間(0.25時間単位)","value":"5"}}}
{"timestamp":"2026-06-21T02:04:24Z","kind":"mouse.click","app":{"name":"Google Chrome"},"window":{"title":"TimePort | 勤怠管理","url":"http://localhost:5173/"},"mouse":{"button":"left","target":{"role":"AXButton","title":"保存する"}}}
{"timestamp":"2026-06-21T02:04:27Z","kind":"selection.changed","app":{"name":"Google Chrome"},"window":{"title":"TimePort | 勤怠管理","url":"http://localhost:5173/"},"selection":{"selectedItems":[{"role":"AXMenuItem","title":"顧客サポート"}],"target":{"role":"AXMenu"}}}
{"timestamp":"2026-06-21T02:04:32Z","kind":"keyboard.text_input","app":{"name":"Google Chrome"},"window":{"title":"TimePort | 勤怠管理","url":"http://localhost:5173/"},"keyboard":{"target":{"role":"AXTextArea","title":"作業内容","value":"問い合わせ調査"}}}
{"timestamp":"2026-06-21T02:04:38Z","kind":"keyboard.text_input","app":{"name":"Google Chrome"},"window":{"title":"TimePort | 勤怠管理","url":"http://localhost:5173/"},"keyboard":{"target":{"role":"AXIncrementor","title":"時間(0.25時間単位)","value":"3"}}}
{"timestamp":"2026-06-21T02:04:38Z","kind":"mouse.click","app":{"name":"Google Chrome"},"window":{"title":"TimePort | 勤怠管理","url":"http://localhost:5173/"},"mouse":{"button":"left","target":{"role":"AXButton","title":"保存する"}}}

As an example, let's look at the event for selecting the date of a work-hour entry.

json
{
"timestamp": "2026-06-21T02:04:14Z",
"kind": "mouse.click",
"app": {
"name": "Google Chrome"
},
"window": {
"title": "TimePort | 勤怠管理",
"url": "http://localhost:5173/"
},
"mouse": {
"button": "left",
"target": {
"description": "6/15(月)の工数を入力",
"role": "AXCheckBox",
"subrole": "AXToggleButton"
}
}
}

kind is mouse.click, so we can tell the event was recorded as a mouse click. Since app.name is Google Chrome and window.title is TimePort | 勤怠管理, we can tell which app and which window the action took place in. The description of mouse.target, "6/15(月)の工数を入力" (Enter work hours for 6/15 (Mon)), indicates the purpose of the click. The role AXCheckBox and the subrole AXToggleButton indicate the kind of UI element under macOS's accessibility API. Because the action is stored as UI element information obtained from the accessibility API rather than as screen coordinates, the intent of the action can be understood and reproduced even if the screen layout changes.

The record-and-replay skill provides the procedure for creating a skill that reproduces a workflow based on recorded events like these. The full text of the skill is as follows.

<details> <summary>Contents of the record-and-replay skill</summary>

`markdown
---
name: record-and-replay
description: Record the user's actions on their Mac with Record & Replay, and turn it into a reusable Codex skill from the captured event stream.
---
# Record & Replay
Record & Replay lets Codex learn a user-demonstrated macOS workflow and turn it into a reusable skill. Use it when the user asks you to watch them perform a task, record a workflow, or create or refine a skill from their demonstration.
## Recording Workflow
- Use `event_stream_start` only when the user is ready to begin recording.
- Starting asks the user to confirm before capture begins.
- After `event_stream_start` succeeds, do not sleep, poll, or wait in a loop for the user to finish. End your turn and ask the user to tell you when they are done recording and tell them what the time limit is on recording.
- Use `event_stream_status` only when the user asks for status or returns after recording; do not use it to poll while waiting.
- Use `event_stream_stop` when recording is complete.
- When the user says they are done recording, read the returned `metadataPath` and `eventsPath` from disk with normal filesystem tools and inspect the captured events before responding.
- When the user says they cancelled recording, do not call `event_stream_stop` again or attempt to use the event stream. You may read `session.json` if needed to confirm that its `endReason` is `recording_controls_cancelled`; acknowledge the cancellation without creating or updating a skill.
- If the recording contains enough information to identify a reusable workflow, create or refine a skill for that workflow. Do this by default even if the user did not explicitly ask for a skill, and do not stop after providing a summary, replay plan, runbook, or suggestion to create one.
- If the recording does not contain enough information to identify the reusable workflow or create a useful skill, do not guess. Explain what is unclear and ask the user for the missing information needed to create the skill.
- The MCP server does not expose event-stream contents directly.
## Concurrent Recording
Record & Replay supports one active recording at a time. If `event_stream_start` reports an active recording, do not restart it. Explain that another recording is already in progress and ask whether the user wants to use that active recording or wait until it is stopped.
## Interpreting Events
- Treat `events.jsonl` as the primary evidence. `session.json` gives paths and session timing only.
- Each event has app/window attribution when available. Use those fields to understand where the event happened; AX payloads may be full trees or diffs for the relevant window.
- AX diff payloads use compact render syntax with ~, +, and - representing changed, added, and removed elements, respectively.
- Pay special attention to selection events, selected text, focused elements, and mouse & keyboard targets. If the user asks a question or refers to the content they are looking at on-screen, selected/focused/targeted content is often the best clue, though visible surrounding UI can also matter.
- Do not include sensitive information from recorded events in summaries or generated skills. Treat passwords, OTPs, API keys, SSNs/passports, financial account/card numbers, and private personal, medical, legal, or HR details as sensitive; use placeholders or generic descriptions when the workflow shape needs to mention them.
## Creating Skills
Before creating or refining a skill, read and follow the `skill-creator` skill for guidance on structure, reusable resources, and validation.
Create or refine an actual discoverable skill, not only a standalone Markdown runbook or replay-plan draft. Complete the skill-creator workflow, including validation, before reporting that the skill was created.

This is the start of the file. Read the full SKILL.md on GitHub.

Security

  • Security scanPassed, 95 of 100Pattern checks on the skill's files.
  • Model reviewPassed

Quality evaluation

  • Task evaluationNot runNo evaluation yet. Run one in Skill Studio.

Source

Popularity

7-day trend score
5

Not refreshed yet.

Works with

Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.

  • Claude Code
  • Cursor
  • GitHub Copilot
  • Windsurf
  • Codex
  • Gemini CLI
  • Cline
  • Amp
  • Roo Code
  • Goose
  • Continue
  • Kilo Code
  • Junie
  • Trae
  • OpenHands
  • Qwen Code
  • AI Agent
  • Tabnine Chat
  • Sourcegraph Cody
  • Amazon Q
  • Firebase Genkit
  • Sweep
  • Devin
  • Phind
  • Mentat
  • Claude Desktop
  • Aider
  • GPT Pilot
  • Plandex
  • bolt.new
  • v0
  • Replit Agent
  • Anse
  • TypingMind
  • BetterChatGPT
  • LibreChat
  • Warp AI
  • Pieces
  • Fig AI
Embed badge
vskill VERIFIED badge
[![vskill VERIFIED](https://verified-skill.com/api/v1/skills/azukiazusa1/sapper-blog-app/en/badge)](https://verified-skill.com/skills/azukiazusa1/sapper-blog-app/en)

Something wrong with this skill or its page? Tell us.