Agent skill

Senpi Agent QA Harness

by code-yeongyu in code-yeongyu/senpi

Checks changes to the senpi coding agent by driving the real CLI from source in an isolated sandbox, over RPC, terminal UI, mock model and CLI smoke channels.

MITAuto-check: notesTesting & QA

Install Senpi Agent QA Harness

skills CLI
$ npx skills add code-yeongyu/senpi --skill senpi-qa -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install code-yeongyu/senpi senpi-qa --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/code-yeongyu/senpi.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/senpi-qa .claude/skills/senpi-qa && rm -rf skills-src

Use ~/.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/

Facts

Skill name
senpi-qa
GitHub stars
472
Token cost
~2.7k tokens
SKILL.md length
969 words
Files
159 (incl. scripts, references)
Skills in repo
7
Repo updated
First seen
Licence
MIT

At a glance

Checks changes to the senpi coding agent by driving the real CLI from source in an isolated sandbox, over RPC, terminal UI, mock model and CLI smoke channels.

  • Verifying an agent-loop, tool or provider change end to end
  • SKILL.md covers Golden rules (read before…, Setup (once), Router: match QA to your change and Channels, plus 3 more sections
  • Runs JavaScript scripts from its folder; calls node
  • Checking keybindings or rendering in the interactive TUI after an edit

What it does

Passing typecheck and unit tests do not count as QA for senpi, so this harness runs the actual CLI through `tsx` after changes to the ai, agent, coding-agent or tui packages. Each run points `SENPI_CODING_AGENT_DIR` at a temporary sandbox with offline mode on, never writes to the real `~/.senpi` directory, and hashes the real auth file to confirm it is unchanged at the end.

Four channels exist: remote RPC with JSONL over stdio, TUI smoke tests using node-pty on Windows or tmux on POSIX systems, a mock loop backed by a local fake model server for deterministic runs that spend no tokens, and a CLI smoke check of `--help`, `--print` and `--list-models`. Every helper script has a `--self-test`. Evidence must be saved under `local-ignore/qa-evidence/`, since no artifact means the QA did not happen, and the skill reports bugs rather than editing `src/`.

When your agent uses it

  • Verifying an agent-loop, tool or provider change end to end
  • Checking keybindings or rendering in the interactive TUI after an edit
  • Running a deterministic agent-loop test without spending real tokens
  • Smoke-testing the CLI flags after a refactor

Example prompts

  • “QA senpi after my change to tool-call handling in packages/agent.”
  • “Run the mock-loop QA for the new provider and save the evidence.”
  • “Smoke the CLI and tell me whether --help, --print and --list-models still work.”
  • “Do a TUI QA of the composer keybinding change I just made.”

Requirements

  • The senpi repository with Node.js and `tsx`
  • `node-pty` on Windows or `tmux` on POSIX systems
  • A one-time run of `node scripts/devenv-setup.mjs`

What it can do on your machine

Read from SKILL.md and the folder at commit 6073042. It shows what the files ask for, not the result of running them.

  • Tool permissions

    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.

  • Runs code

    Ships 6 files in scripts/ (JavaScript, from the files we listed), which the agent can run.

    Shell commands in SKILL.md call:

    • node

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Senpi Agent QA Harness loads about 2.7k tokens when it runs, and up to ~8.2k if it reads all its reference files. Until then it costs about 207 tokens; SKILL.md has 969 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~207
When it runs · the whole SKILL.md, loaded when a task matches
~2.7k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~8.2k

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.

Safety

Auto-check: notes

The automated check noted patterns worth knowing about, such as sudo or a known installer.

  • NoteMentions a .env fileSKILL.md:39
    # installs skill deps (node-pty), wires .env.local + .claude/skills

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.

SKILL.md

The full file from code-yeongyu/senpi at commit 6073042, republished under its MIT licence (© code-yeongyu). 969 words, ~2,721 tokens.

Download SKILL.mdSave it as .claude/skills/senpi-qa/SKILL.md (or your agent's skills folder). This skill also uses 158 other files; get the full folder from GitHub.
name
senpi-qa
description
Manual QA harness for the senpi coding agent itself. MUST USE after changing packages/ai, packages/agent, packages/coding-agent, or packages/tui — a green typecheck and `npm test` are NOT QA. Drives the real CLI from source in an isolated sandbox (never touches ~/.senpi or real credentials) across four channels: remote RPC (--mode rpc JSONL stdio), TUI smoke (node-pty on Windows, tmux on POSIX), mock loop (a local fake model server for deterministic, zero-token agent-loop runs), and CLI smoke (--help/--print/--list-models). Every helper ships a --self-test. Use whenever someone says qa senpi, test the agent, verify my change, rpc qa, tui qa, mock-loop qa, smoke the cli, or needs evidence that an agent-loop, tool, keybinding, or provider change works end to end. Capture evidence to local-ignore/qa-evidence/.

senpi QA

QA the senpi coding agent (packages/{ai,agent,coding-agent,tui}) by driving the REAL CLI — not by reading code or trusting unit tests. Each channel runs the agent from source via tsx in an isolated sandbox and asserts observable behavior, so a passing run is evidence the user-facing surface actually works.

Every helper script ships a --self-test (or --self-check) that asserts its scenario against this machine. The scripts are therefore both the QA tools and their own regression checks.

Golden rules (read before running anything)

  • Isolation is mandatory. Everything spawns the CLI with SENPI_CODING_AGENT_DIR / SENPI_CODING_AGENT_SESSION_DIR pointed at a temp sandbox and PI_OFFLINE=1. QA must never write into the real ~/.senpi. scripts/lib/common.mjs does this for you — use it.
  • Never read or modify the real credentials. ~/.senpi/agent/auth.json is the user's real key store. Every script snapshots its sha256 and asserts it is unchanged at the end. If you script a run by hand, do the same (guardRealAuth() in common.mjs).
  • Deterministic loop = mock loop. To exercise the agent loop without real tokens, use Channel 3 (a local fake model server). Real-provider runs are for final smoke only and must use the user's existing auth, never a new key.
  • No src/ edits from this skill. It verifies; it does not fix. If QA finds a bug, report it with the captured evidence and let a follow-up change fix it.
  • The captured artifact IS the evidence. Write it under local-ignore/qa-evidence/<YYYYMMDD>-<slug>/. No artifact == the QA did not happen. local-ignore/ is gitignored — never commit evidence.

Setup (once)

bash
node scripts/devenv-setup.mjs        # installs skill deps (node-pty), wires .env.local + .claude/skills
node .agents/skills/senpi-qa/scripts/lib/common.mjs --self-check   # confirm the harness

common.mjs --self-check confirms the repo resolves, a sandbox is created and auto-removed, a free port is allocatable, and the real auth file is untouched.

Router: match QA to your change

You changed…Run this channelReference
Agent loop, tools, sessions, provider/model resolution, RPCChannel 1 (RPC) — and Channel 3 for a deterministic loopreferences/rpc-protocol.md
Interactive TUI, keybindings, rendering, composerChannel 2 (TUI smoke)references/tui-driving.md
Anything where you want a full agent turn with ZERO tokensChannel 3 (mock loop)references/mock-loop.md
CLI flags, --help, --print, model listingChannel 4 (CLI smoke)—
Persistent terminal tools / packages/pty / PTY sessionsChannel 5 (pty-drive)—
Added a provider / auth pathChannel 3 + 4, and update references/env-vars.mdreferences/credential-injection.md

When in doubt, run the channel closest to your change AND Channel 3 (mock loop): the mock loop is the cheapest end-to-end proof that the agent still completes a turn.

Channels

All commands are run from the repo root.

Channel 1 — Remote RPC (scripts/rpc-drive.mjs)

Drives --mode rpc (JSON lines over stdio). get_state round-trips with no API call; --prompt drives a real turn and captures the event stream.

bash
node .agents/skills/senpi-qa/scripts/rpc-drive.mjs --self-test
node .agents/skills/senpi-qa/scripts/rpc-drive.mjs --state
node .agents/skills/senpi-qa/scripts/rpc-drive.mjs --prompt "say PONG" --provider mock --model mock-model --evidence rpc-pong
Channel 2 — TUI smoke (scripts/tui-smoke.mjs)

Boots the interactive TUI in a real pseudo-terminal, confirms it renders and a keystroke reaches the composer, then tears it down. Uses node-pty (ConPTY on Windows — no WSL) and falls back to tmux on POSIX.

bash
node .agents/skills/senpi-qa/scripts/tui-smoke.mjs --self-test
node .agents/skills/senpi-qa/scripts/tui-smoke.mjs --self-test --driver tmux --evidence tui

TUI smoke proves boot/render/input, not fine-grained output. For behavioral assertions use Channel 1 or 3.

Channel 3 — Mock loop (scripts/mock-loop.mjs)

Starts a local fake model server, registers it via a baseUrl override in an isolated models.json, and drives a REAL turn — deterministic, zero tokens. Covers all three wire formats senpi uses, so baseUrl override is QA'd for both OpenAI and Anthropic (pick with --api; default openai-completions):

--apiprovider overriddenpath / auth
openai-completionsmock/v1/chat/completions · Bearer
anthropic-messagesanthropic/v1/messages · x-api-key
openai-responsesopenai/v1/responses · Bearer

--self-test (no --api) round-trips all three and exercises the three error/retry scenarios below. --with-tool proves the full loop (model → bash tool → final text). --with-mcp-tool registers a sandbox extension that proxies mcp_fx_tool_<n> to the local MCP stdio fixture, then asserts the fixture call log exists and the model's second request contains the fixture result. The loop is hermetic: provider key env vars are stripped so only the inline mock key is ever used.

bash
node .agents/skills/senpi-qa/scripts/mock-loop.mjs --self-test
node .agents/skills/senpi-qa/scripts/mock-loop.mjs --self-test --api anthropic-messages
node .agents/skills/senpi-qa/scripts/mock-loop.mjs --with-tool --api openai-responses
node .agents/skills/senpi-qa/scripts/mock-loop.mjs --with-mcp-tool mcp_fx_tool_1 --tool-args '{"value":"ok"}'
node .agents/skills/senpi-qa/scripts/mock-loop.mjs --with-eval-hard-limit --evidence eval-hard-limit
node .agents/skills/senpi-qa/scripts/mock-loop.mjs --scenario transient-recover
node .agents/skills/senpi-qa/scripts/mock-loop.mjs --scenario budget-exhaust
node .agents/skills/senpi-qa/scripts/mock-loop.mjs --scenario long-retry-after
node .agents/skills/senpi-qa/scripts/mock-loop.mjs --run "summarize this repo" --evidence mock-summary
Show full SKILL.md (348 more words)Show less
Channel 4 — CLI smoke (scripts/cli-smoke.mjs)

Fast, no model: --help, --version, offline --list-models, unknown-flag handling.

bash
node .agents/skills/senpi-qa/scripts/cli-smoke.mjs --self-test
Channel 5 — Persistent terminal / PTY (scripts/pty-drive.mjs)

Drives the real @earendil-works/pi-pty runtime that backs the built-in terminal tools (bash / bash_output / bash_input / bash_resize / kill_bash) through the canonical scenarios: background command + monitor-style line watch and peek, stdin steering, screen snapshot + resize reflow, and registry teardown with no orphans. Uses native PTY when a host prebuild is present, else the pipe fallback (--force-pipe forces it).

bash
node .agents/skills/senpi-qa/scripts/pty-drive.mjs --self-test --evidence terminal
node .agents/skills/senpi-qa/scripts/pty-drive.mjs --self-test --force-pipe

Scripts index (each is its own regression test)

Script--self-test / --self-check asserts
scripts/lib/common.mjs --self-checkrepo + tsx resolve; sandbox created and auto-removed; free port; real auth.json unchanged
scripts/lib/fake-model-server.mjs --self-testOpenAI SSE contract: scripted text streams back, [DONE] sent, request recorded
scripts/rpc-drive.mjs --self-testget_state returns the documented RpcSessionState, no API call, auth unchanged
scripts/mock-loop.mjs --self-testscripted marker returns through the real loop via the mock provider; retry error injection proves same-model recovery, retry-budget fallback, and long-retry-after fallback; zero real calls; auth unchanged
scripts/mock-loop.mjs --with-toolfull loop: two model turns served, bash tool ran, final text returned
scripts/mock-loop.mjs --with-mcp-tool <tool>full loop with a registered sandbox MCP stdio fixture proxy; fails if the requested mcp_fx_tool_<n> is not registered, invoked, and fed back to the model
scripts/mock-loop.mjs --with-eval-hard-limitfull loop where a never-returning eval cell is killed by its wall-clock hard limit and the kill is reported back to the model
scripts/eval-hard-limit-rpc-qa.mjs --self-testRPC channel: a DETACHED eval cell killed by the hard limit injects its <system-reminder> kill notice into the model's next request (print mode cannot show this)
scripts/tui-smoke.mjs --self-testTUI boots, renders, accepts a keystroke, tears down; auth unchanged
scripts/cli-smoke.mjs --self-test--help/--version/--list-models work offline; unknown flag reported; auth unchanged
scripts/pty-drive.mjs --self-testPTY runtime backing the terminal tools: background line watch + peek, stdin steering, screen snapshot + resize, registry teardown (no orphans); auth unchanged

Run the whole suite:

bash
for s in lib/common.mjs:--self-check lib/fake-model-server.mjs:--self-test \
         rpc-drive.mjs:--self-test mock-loop.mjs:--self-test \
         tui-smoke.mjs:--self-test cli-smoke.mjs:--self-test; do
  node ".agents/skills/senpi-qa/scripts/${s%%:*}" "${s##*:}" || echo "FAILED: $s"
done

Capturing evidence

bash
ev="local-ignore/qa-evidence/$(date +%Y%m%d)-senpi-qa-<slug>"; mkdir -p "$ev"
node .agents/skills/senpi-qa/scripts/mock-loop.mjs --self-test | tee "$ev/mock-loop.txt"
node .agents/skills/senpi-qa/scripts/rpc-drive.mjs --prompt "say PONG" \
  --provider mock --model mock-model --evidence senpi-qa-<slug>

Most channels accept --evidence <slug> and write artifacts to local-ignore/qa-evidence/<date>-<slug>/ themselves.

References

  • references/rpc-protocol.md — RPC command/response catalog, turn completion, examples
  • references/tui-driving.md — node-pty vs tmux, keybindings files, fragility, isolation
  • references/mock-loop.md — fake server, custom-provider models.json shape, in-process faux alternative
  • references/credential-injection.md — per-harness credential injection + masking
  • references/env-vars.md — provider keys + isolation env vars

© code-yeongyu, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 158 other files (scripts, references) in .agents/skills/senpi-qa of code-yeongyu/senpi.

  • SKILL.md
  • .gitignore
  • AGENTS.md
  • evals/evals.json
  • package-lock.json
  • package.json
  • references/credential-injection.md
  • references/env-vars.md
  • references/mock-loop.md
  • references/provider-error-tui.md
  • references/rpc-protocol.md
  • references/tui-driving.md
  • scripts/anthropic-oauth-callback-bind-fallback-probe.mjs
  • scripts/anthropic-subscription-auth-spike.mjs
  • scripts/anthropic-subscription-autocompact-settings-probe.mjs
  • scripts/anthropic-subscription-autocompact-spike.mjs
  • scripts/anthropic-subscription-fullstack-probe.mjs
  • scripts/anthropic-subscription-headless-restart-probe.mjs
  • … and 141 more

Open the folder on GitHubat commit 6073042

Compare with similar skills

Senpi Agent QA Harness 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.

Senpi Agent QA Harness compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Senpi Agent QA Harness this skillcode-yeongyu/senpi472—~2.7kAutomated safety check: NotesMIT
tmux Real User TestingQwenLM/qwen-code28k—~2.3kAutomated safety check: PassApache-2.0
CodexBar Live QAsteipete/CodexBar22k—~1.2kAutomated safety check: PassMIT
Verify Omnigent End-to-Endomnigent-ai/omnigent11k—~1.6kAutomated safety check: PassApache-2.0
OpenHarness End-to-End EvalsHKUDS/OpenHarness16k1 repos~2.1kAutomated safety check: NotesMIT
Acceptance Evidence for Deliverieslobehub/lobehub83k—~9.7kAutomated safety check: PassApache-2.0

Similar skills

  • tmux Real User Testing

    QwenLM/qwen-code

    Drives Qwen Code in a real tmux session the way a user would and saves a readable step-by-step transcript of each screen for maintainers to review.

    28k GitHub stars~2.3k tokensUpdated today
    Testing & QAAuto-check passed
  • CodexBar Live QA

    steipete/CodexBar

    Runs live QA for the CodexBar app: provider usage matrix checks through its packaged CLI, config validation and menu checks, with 1Password-backed credentials handled safely.

    22k GitHub stars~1.2k tokensUpdated today
    Testing & QAAuto-check passed
  • Verify Omnigent End-to-End

    omnigent-ai/omnigent

    Spins up an isolated Omnigent server, runner and mock model to prove a user-facing behavior or bug fix with recorded evidence instead of reasoning from code.

    11k GitHub stars~1.6k tokensUpdated today
    Testing & QAAuto-check passed
  • Validates OpenHarness features by running real multi-turn agent loops with live LLM calls against an unfamiliar codebase, checking actual tool execution.

    16k GitHub starsUsed in 1 repo~2.1k tokens
    Testing & QAAuto-check: notes
  • Verifies a delivery end to end by driving the real product on a CLI, web, desktop or iOS Simulator surface, capturing evidence and publishing a round with the lh CLI.

    83k GitHub stars~9.7k tokensUpdated today
    Testing & QAAuto-check passed
  • Drive MiMo Code

    XiaomiMiMo/MiMo-Code

    Lets one MiMoCode process drive another, headless with JSON events or interactively through tmux, to test behavior and visual regressions with parseable evidence.

    14k GitHub stars~3.9k tokensUpdated 4 days ago
    Testing & QAAuto-check passed

More from code-yeongyu/senpi

  • Merge Upstream into Fork

    code-yeongyu/senpi

    Syncs a fork branch with its upstream remote using a history-preserving merge commit, with no rebase and no force push.

    472 GitHub stars~1.6k tokensUpdated today
    Auto-check passed
  • Bun 1.4 Builtins Guide

    code-yeongyu/senpi

    Points the agent at Bun 1.4 built-in APIs before it installs an npm package, so image, browser, markdown, cron, PTY and test work uses what Bun already ships.

    472 GitHub stars~1.3k tokensUpdated today
    Auto-check passed
  • Worker brief for implementing one pre-assigned feature in the senpi todotools built-in extension, with strict scope, typing, testing and git-safety rules.

    472 GitHub stars~2.8k tokensUpdated today
    Auto-check passed
  • GPT Image Prompt Guide

    code-yeongyu/senpi

    Prompt-crafting guide for gpt-image-2.5: which image tool to call, which model to pick, and how to write prompts, edit with references and refine over turns.

    472 GitHub stars~2.3k tokensUpdated today
    Auto-check passed
  • Senpi Release Publishing

    code-yeongyu/senpi

    Walks the canonical CalVer release flow for senpi, from a clean main checkout through changelog audit, checks, tag push, GitHub Release and npm publishing.

    472 GitHub stars~1.7k tokensUpdated today
    Auto-check passed
  • Tmux Manual QA Worker

    code-yeongyu/senpi

    Runs one manual QA scenario for the todo continuation feature in the real ./pi-test.sh CLI inside tmux, captures scrollback and checks a deterministic count marker.

    472 GitHub stars~1.6k tokensUpdated today
    Auto-check passed

Works with

Questions about Senpi Agent QA Harness

What does Senpi Agent QA Harness do?

Checks changes to the senpi coding agent by driving the real CLI from source in an isolated sandbox, over RPC, terminal UI, mock model and CLI smoke channels. Passing typecheck and unit tests do not count as QA for senpi, so this harness runs the actual CLI through `tsx` after changes to the ai, agent, coding-agent or tui packages.senpi` directory, and hashes the real auth file to confirm it is unchanged at the end.

When should I use Senpi Agent QA Harness?

Senpi Agent QA Harness fits situations like: verifying an agent-loop, tool or provider change end to end; checking keybindings or rendering in the interactive TUI after an edit; running a deterministic agent-loop test without spending real tokens; smoke-testing the CLI flags after a refactor.

How do I install Senpi Agent QA Harness in Claude Code?

Run `npx skills add code-yeongyu/senpi --skill senpi-qa -a claude-code`. Or copy the skill folder (.agents/skills/senpi-qa in code-yeongyu/senpi) into .claude/skills/senpi-qa in your project. Claude Code loads it when a task matches its description.

How do I install Senpi Agent QA Harness in Codex?

Run `npx skills add code-yeongyu/senpi --skill senpi-qa -a codex`. Or copy the skill folder (.agents/skills/senpi-qa in code-yeongyu/senpi) into .agents/skills/senpi-qa in your project. Codex loads it when a task matches its description.

Can I use Senpi Agent QA Harness in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add code-yeongyu/senpi --skill senpi-qa -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/senpi-qa, .gemini/skills/senpi-qa, .github/skills/senpi-qa and .opencode/skills/senpi-qa in your project.

What does Senpi Agent QA Harness need to run?

Going by SKILL.md and its folder, Senpi Agent QA Harness needs JavaScript for the scripts in its folder and the command-line tools its instructions call (node). Our summary lists: The senpi repository with Node.js and `tsx`; `node-pty` on Windows or `tmux` on POSIX systems; A one-time run of `node scripts/devenv-setup.mjs`.

Does Senpi Agent QA Harness access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Senpi Agent QA Harness safe to install?

Our automated static check of SKILL.md found notes only (mentions a .env file), nothing it rates as a warning. 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.

What licence does Senpi Agent QA Harness use?

Senpi Agent QA Harness is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Senpi Agent QA Harness use?

About 2.7k tokens (SKILL.md is roughly 11k 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 5.5k tokens, read only when the agent opens those files.

What are the alternatives to Senpi Agent QA Harness?

Skills that share tags, products or a category with Senpi Agent QA Harness: tmux Real User Testing (QwenLM/qwen-code, 28k stars), CodexBar Live QA (steipete/CodexBar, 22k stars), Verify Omnigent End-to-End (omnigent-ai/omnigent, 11k stars) and OpenHarness End-to-End Evals (HKUDS/OpenHarness, 16k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Senpi Agent QA Harness?

code-yeongyu (a GitHub user) maintains it in code-yeongyu/senpi, which has 472 GitHub stars. The repository holds 7 skills in this directory. The repository was last updated on October 8, 2026.

Source: code-yeongyu/senpi on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.