Skip to content
Agentmart
Submit a tool

run-newsroom

Run, drive, test and screenshot the newsroom mods (prose-lint) inside a real Claude Code session.

Skill by andrezzoid

IndexedMIT
Write a review

Install

Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.

npx agentmarket install skill/andrezzoid-run-newsroom

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Run, drive, test and screenshot the newsroom mods (prose-lint) inside a real Claude Code session. Use when asked to run or start prose-lint, see its alerts under a Write or Edit, check the strikethrough of fixed alerts, run /prose-lint or /prose-lint stats, or confirm a change to mods/prose-lint works in the real app, beyond the tests.

Use cases: testing, writing, agent-building

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.

Tools
No tools found
Secrets
None asked for
Install scripts
None found
Runs as
Python package

Network hosts it talks to 1

  • codeload.github.com · found in install command

Files it touches

  • ~/.claude/skills/run-newsroom

What's inside

Skill name
run-newsroom
Description
Run, drive, test and screenshot the newsroom mods (prose-lint) inside a real Claude Code session. Use when asked to run or start prose-lint, see its alerts under a Write or Edit, check the strikethrough of fixed alerts, run /prose-lint or /prose-lint stats, or confirm a change to mods/prose-lint works in the real app, beyond the tests.
License
MIT
Instructions
137 lines in SKILL.md · view on GitHub

Before installing

  • Ships executable scripts

Files (20)

  • SKILL.md
  • driver.py
  • LICENSE · vendor/pyte/
  • __init__.py · vendor/pyte/
  • __main__.py · vendor/pyte/
  • charsets.py · vendor/pyte/
  • control.py · vendor/pyte/
  • escape.py · vendor/pyte/
  • graphics.py · vendor/pyte/
  • modes.py · vendor/pyte/
  • py.typed · vendor/pyte/
  • screens.py · vendor/pyte/
  • streams.py · vendor/pyte/
  • LICENSE · vendor/wcwidth/
  • __init__.py · vendor/wcwidth/
  • table_vs16.py · vendor/wcwidth/
  • table_wide.py · vendor/wcwidth/
  • table_zero.py · vendor/wcwidth/
  • unicode_versions.py · vendor/wcwidth/
  • wcwidth.py · vendor/wcwidth/

SKILL.md (first lines)

newsroom is a Claude Code plugin marketplace. Its one mod, prose-lint, runs
inside Claude Code, so "running the app" means starting `claude` with
`--plugin-dir mods/prose-lint`. Use one of two handles: `claude -p` for the
slash commands and for the note Claude reads after a Write, or
`.claude/skills/run-newsroom/driver.py` for the transcript row the terminal
draws under the diff. Paths are relative to the repo root.

## Prerequisites

Vale on `PATH` (3.24.0 verified) and `claude` logged in (v2.1.295 verified).
The driver runs on any `python3`: its pyte and wcwidth sit in `vendor/`.

## Run (agent path): headless, for the commands and Claude's note

Every run loads this checkout's prose-lint in place of any installed copy.
Work in a scratch folder, so the mod reads no `.vale.ini` from this repo:

```bash
REPO=$(git rev-parse --show-toplevel)
mkdir -p "$TMPDIR/pl" && cd "$TMPDIR/pl"
printf 'This tool really serves as a bridge \xe2\x80\x94 it is crucial.\n' > sample.md
claude -p --plugin-dir "$REPO/mods/prose-lint" "/prose-lint sample.md"
claude -p --plugin-dir "$REPO/mods/prose-lint" "/prose-lint stats"
```

The first prints `prose-lint · 4 alerts in 1 file · bundled rules` and one
`line:col Rule: message` per alert. Neither costs a model turn.

The Write and Edit hooks need a turn. The note they hand Claude never shows in
stream-json, so ask Claude to quote it; the toast does show, as `ui_toast`:

```bash
cd "$TMPDIR/pl" && rm -f draft.md
claude -p --plugin-dir "$REPO/mods/prose-lint" --model haiku --permission-mode acceptEdits \
  --output-format stream-json --verbose \
  "Use the Write tool to create draft.md with exactly this content: This tool really serves as a bridge — it is crucial.
Then do not edit anything. Reply with every note you received about draft.md after the Write, quoted verbatim inside a code block, or NO NOTE if there was none." \
  | jq -r 'select(.subtype == "ui_toast" or .type == "result") | .text // .result'
```

Expect `prose-lint: 4 alerts in draft.md`, then the note: `Vale (bundled
rules)`, the dash under `Must fix:`, the other three under `Fix, or tell the
user why not:`.

## Run (agent path): the terminal transcript row

`driver.py` starts an interactive `claude` in a pseudo-terminal, plays scripted
steps, and saves each screen as text. This run writes a draft with four alerts,
then fixes the dash so the turn's end strikes it out:

```bash
python3 .claude/skills/run-newsroom/driver.py \
  --cwd /tmp/pl-tui --claude-args "--model haiku --permission-mode acceptEdits" \
  --timeout 30 --wait "trust this folder" --idle 1 --keys Down --keys Enter --idle 3 --shot ready \
  --timeout 180 \
  --send "Use the Write tool to create draft.md with exactly this content: This tool really serves as a bridge — it is crucial. Then stop." \
  --wait "prose-lint ·" --idle 4 --shot write \
  --send "Use the Edit tool to replace only the dash in draft.md with a comma, then stop." \
  --wait "fixed" --idle 4 --shot fixed
```

Shots land in `<cwd>/shots/`: `NAME.txt` to read, `NAME.ansi` to `cat` in a
terminal, `raw.log` with every byte. In `NAME.txt` a marker line under a drawn
line puts the underline's colour initial under each underlined cell (`r`
error, `y` warning, `b` suggestion) and `-` under struck-through ones.
`fixed.txt` shows:

```text
     prose-lint · 4 alerts · 1 fixed · bundled rules

     1 │ This tool really serves as a bridge — it is crucial.
                   bbbbbb bbbbbbbbbbb        - yyyyy
```

| step | does |
|---|---|
| `--send TEXT` | types TEXT, then Enter |
| `--keys NAME` | Enter, Escape, Up, Down, Tab, CtrlC |
| `--wait REGEX` | waits for the screen to match; on timeout writes `timeout.txt` and exits 1 |
| `--idle SECS` | waits until the screen stops changing |
| `--shot NAME` | saves the screen |
| `--timeout SECS` | timeout for the waits after it |

## Run (human path)

```bash
claude --plugin-dir mods/prose-lint
```

Then ask Claude to write some prose. Ctrl-C twice to quit.

## Test

```bash
claude plugin validate .
claude plugin test mods/prose-lint
```

Both pass: validate warns that `plugin.json` has no `version`.

## Gotchas

- **Claude Code's sandbox denies `openpty()`**, so the driver runs outside it:
  `.claude/settings.json` excludes `python3 .claude/skills/run-newsroom/driver.py *`.
  The exclusion matches only a call that starts with that text, verbatim, and
  chains nothing: no `cd`, pipe or redirect, or the call stays sandboxed and
  fails with `out of pty devices`. Outside the sandbox `$TMPDIR` is macOS's own
  `/var/folders/…/T/`, not the sandbox's, so give `--cwd` a literal `/tmp/…`
  path and the shots land where you look for them. The headless path works in
  the sandbox once it allows `api.anthropic.com`.
- **`--plugin-dir` keeps its own stats.** It stores them in
  `~/.claude/plugins/store/prose-lint_inline-<hash>.json`, keyed by the
  folder's name, apart from the installed copy's store, so test runs never
  count in your `/prose-lint stats`. Inside the sandbox it stores none: the
  write fails and the mod drops the failure.
- **The trust dialog defaults to "No, exit".** A fresh folder opens on it, and
  Enter alone quits; the driver shows `claude exited` right after the first
  `--send`. Press Down first.
- **Fixed alerts strike out at the turn's end**, not after the Edit. Wait for

From andrezzoid/newsroom, MIT.

More from andrezzoid/newsroom

Signals

Stars
0
Forks
0
Open issues
14
Last commit (this folder)
Oct 21, 2026 (7 days ago)

From GitHub (fetched Oct 24, 2026).

Details

License
MIT
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

More from andrezzoid

Cite this page

run-newsroom skill. Agent Mart. https://agentmart.dev/skills/andrezzoid-run-newsroom (last updated 2026-10-24)