Agent Native

junior-qa

This skill guides agents to validate Junior framework changes by exercising local app paths through the CLI, dashboard mock UI, and direct commands.

by SentryOfficial publisher

Identity proven by GitHub's verified organisation badge (getsentry)

Agents
Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode, claude.ai and API
License
Apache-2.0 (permissive)
Pin
1745a29pinned Oct 9, 2026
Context cost
about 2,100 tokenswhen the skill loads
GitHub stars
367on getsentry/junior
Scripts
None found

What it does

“Validate Junior changes through local app-facing paths. Use for local client or agent QA, dashboard mock reporting UI QA, PR readiness, plugin CLI commands, skill/tool/prompt/plugin behavior, and behavior that tests do not cover well but can be exercised with `pnpm cli -- chat ...`, another `pnpm cli` command, or `JUNIOR_DASHBOARD_MOCK_CONVERSATIONS=true pnpm dev`.”
The author's description, from SKILL.md

Generated summary from the skill's own text

This skill guides agents to validate Junior framework changes by exercising local app paths through the CLI, dashboard mock UI, and direct commands. It provides structured procedures for testing agent behavior, plugin CLI commands, skill/tool/prompt functionality, and dashboard rendering that unit tests do not cover well.

When to use it

  • Testing agent routing, prompts, skills, tools behavior locally before PR
  • Validating dashboard UI changes with mock reporting data deterministically
  • Checking plugin CLI commands and discovery through the example app
  • Verifying OAuth flows resume correctly in plugin and MCP contexts

When not to

  • Proving Slack-only behavior like formatting, delivery retries, reactions
  • Validating model behavior, runtime ingestion, or credential logic directly
  • Testing without local dev environment or required credentials available

Install

These commands install from the publisher's repository and need no account.

skills CLI

npx skills add getsentry/junior --skill junior-qa

Installs from the repository's default branch, which may have changed since the commit we checked.

GitHub CLI 2.90 or later

gh skill install getsentry/junior junior-qa@1745a298365f0f001db0b3eec6de8a8347e0f6d9

Installs the commit we checked (1745a29).

Copy by hand

Download the folder at 1745a29 and put it in .claude/skills/junior-qa for Claude Code and in .agents/skills/junior-qa for Codex, Cursor, Gemini CLI, GitHub Copilot and OpenCode.

Skill folder on GitHub at 1745a29

Claude Code plugin

/plugin install sentry@claude-plugins-official

The publisher's plugin in Claude's official marketplace. It may hold more than this skill, and we have not pinned it.

Claude Code plugin

/plugin install sentry-cli@claude-plugins-official

The publisher's plugin in Claude's official marketplace. It may hold more than this skill, and we have not pinned it.

Copy for your agent

A prompt for any coding agent. It installs this skill from GitHub at the pinned commit, copies the files as they are, and runs nothing unless you ask.

Prompt

Install the agent skill "junior-qa" by Sentry.

Source, pinned to commit 1745a298365f0f001db0b3eec6de8a8347e0f6d9:
https://github.com/getsentry/junior/tree/1745a298365f0f001db0b3eec6de8a8347e0f6d9/skills/junior-qa

1. Download that folder at exactly this commit. Do not use the default branch.
2. Copy every file unchanged, keeping the folder structure, into .claude/skills/junior-qa/ for Claude Code and .agents/skills/junior-qa/ for Codex, Cursor, Gemini CLI, GitHub Copilot and OpenCode. Create the folders if they do not exist.
3. Do not edit the files, and do not run any script in the folder unless I ask you to.
4. When you are done, list the files you copied and where you put them.

Listing and checks: https://www.agentnative.dev/skills/sentry/junior-qa

SKILL.md at the pin

---
name: junior-qa
description: Validate Junior changes through local app-facing paths. Use for local client or agent QA, dashboard mock reporting UI QA, PR readiness, plugin CLI commands, skill/tool/prompt/plugin behavior, and behavior that tests do not cover well but can be exercised with `pnpm cli -- chat ...`, another `pnpm cli` command, or `JUNIOR_DASHBOARD_MOCK_CONVERSATIONS=true pnpm dev`.
---

Use the local Junior CLI to exercise behavior the test suite does not prove well.
The goal is to run the same app-facing path a developer or operator would use
from `apps/example`, inspect the result, and report concrete evidence.

Start by reading `packages/junior/src/chat/local/README.md`. Read the owning
package or module README when the changed behavior belongs elsewhere.

## Running the Local CLI

Use the repo wrapper so commands run from `apps/example` with root and app env
loaded. Pick the command and prompt that exercise the changed behavior; do not
treat any example prompt here as the required QA:

```sh
pnpm cli -- chat -p "<targeted prompt>"
```

For agent behavior, prompts, skills, tools, and model-facing plugin behavior,
use `chat -p` or interactive `chat` with a prompt that naturally exercises the
change. A trivial exact-output prompt is only useful when the requested check is
limited to proving the local runner starts and delivers one response.

For host or plugin CLI behavior, call the command directly through the same
wrapper:

```sh
pnpm cli -- memory search --scope personal --scope-key local:local-cli --limit 5
```

Use example app discovery probes when the change touches skill or plugin
discovery:

```sh
pnpm cli -- chat -p "/example-local confirm local QA discovery"
pnpm cli -- chat -p "/example-bundle-help"
```

Healthy startup usually logs `SOUL.md`, `WORLD.md`, loaded plugins, and
discovered skills. Treat those logs as useful evidence that the example app path
was exercised.

## Dashboard UI QA

For dashboard UI changes that depend on reporting payload shape, use the typed
mock reporting overlay before relying on ad-hoc local conversations:

```sh
JUNIOR_DASHBOARD_MOCK_CONVERSATIONS=true pnpm dev
```

Then open the dashboard in a browser and exercise the relevant conversation,
transcript, search, or conversation stats surface. The mock overlay returns
read-only `@sentry/junior/reporting` conversation API-shaped data, including
dashboard QA edge cases such as activity-only tool rows and inverted tool
timestamps. It also includes an advisor tool call/result paired with advisor
subagent activity so transcript rendering can be checked against nested tool
activity without manufacturing a live agent run. Use it when a UI change needs
deterministic reporting records that are hard to produce through a live local
chat. Plugin report data is pass-through from the configured reporting provider
and needs separate validation.

The root dev command owns local auth-disabled defaults and the production-like
Nitro preset. If it fails to start, diagnose or report the dev runner failure;
do not change `apps/example/nitro.config.ts`, dashboard auth settings, or OAuth
configuration to make visual QA run.

Do not treat mock dashboard data as proof of runtime ingestion, Slack delivery,
credential behavior, or model behavior. Pair it with local CLI or integration
tests when the changed contract crosses those boundaries.

## Choosing a Probe

Pick the smallest local CLI run that demonstrates the changed behavior:

- Prefer a targeted prompt or direct CLI command tied to the modified feature.
- Use exact-output prompts for simple agent routing or prompt-context checks.
- Use natural-language prompts when the behavior is an agent/tool workflow.
- Use direct plugin commands when the behavior is an operator CLI surface.
- Use interactive `pnpm cli -- chat` when continuity across turns matters.
- Use dashboard mock reporting when the behavior is dashboard rendering,
  filtering, search, or metrics over reporting API payloads.
- Do not use local CLI to claim Slack-only behavior, such as Slack formatting,
  delivery retries, reactions, files, or OAuth UI.

Automated tests, typechecks, linters, and evals are separate validation. They do
not replace local QA evidence from running the client or agent.

## OAuth Flow QA (MCP and Plugin)

Junior has two OAuth pause/resume flows:

- Plugin (non-MCP) OAuth: sandbox egress `auth_required` signal resumes via
  `/api/oauth/callback/<provider>`. In `apps/example` the `sentry` plugin is
  the OAuth-manifest provider (`SENTRY_CLIENT_ID`/`SENTRY_CLIENT_SECRET`).
- MCP OAuth: a remote MCP server 401 challenge resumes via
  `/api/oauth/callback/mcp/<provider>`. In `apps/example` the `linear`,
  `notion`, and `hex` plugins use remote MCP URLs.

The local CLI prints the private authorization URL, waits for the provider
callback, and resumes the same turn as the `local-cli` user. Keep `pnpm dev`
running so the configured public callback and tunnel can verify the signed
local state and redirect the browser to the CLI's loopback listener.

Before starting the chat command:

1. Keep one `pnpm dev` process running in the foreground.
2. Confirm only one Cloudflare tunnel for this development hostname is active.
3. Probe both callback hops. Each request should reach Junior and return `400`
   because the probe intentionally omits OAuth state:

```sh
curl -sS -o /dev/null -w '%{http_code}\n' \
  http://127.0.0.1:3000/api/oauth/callback/mcp/linear
curl -sS -o /dev/null -w '%{http_code}\n' \
  https://junior-dev.sentry.cool/api/oauth/callback/mcp/linear
```

Do not present an authorization URL until both probes return `400`. A public
`502` means the tunnel is running without a reachable local server; restart the
dev command and re-run both probes before creating a fresh OAuth attempt.

```sh
pnpm cli -- chat -p "Use the linear skill to list Linear teams."
```

Expect an authorization URL on stderr. Complete the provider flow in a browser;
the same CLI process should then continue the blocked request and print its
reply without requiring the prompt again.

Use the integration tests as the check for local resume behavior and for the
callback route. Use the auth integration evals as the check for Slack and
dashboard resume behavior:

```sh
pnpm --filter @sentry/junior exec vitest run tests/integration/local-agent-runner.test.ts
pnpm --filter @sentry/junior exec vitest run tests/integration/oauth-callback.test.ts
pnpm --filter @sentry/junior-evals evals:integration evals/integration/auth
```

For SQL conversation storage changes, verify the resumed turn rebuilds context
from SQL, not `thread-state` mirrors: conversation context must hydrate from
`junior_conversation_messages` (`hydrateConversationMessages`) and pi history
from `junior_conversation_events` through the Pi adapter (`loadProjection`). In
those tests, transcripts seeded only into `thread-state` must also be persisted
to SQL (`persistConversationMessages`) before the callback runs, and the
resumed agent-run input `conversationContext` must contain the SQL-seeded
messages.

## Failure Handling

If local chat fails because credentials are missing or expired, refresh the
environment when appropriate with `pnpm dev:env`, then rerun the same command.
If local chat fails with a `junior_conversation_messages` or
`junior_conversation_events` query error, the local Postgres schema predates the
SQL conversation storage cutover; run `pnpm cli -- upgrade`, then rerun.
If Redis errors appear during ordinary local QA, check whether
`JUNIOR_STATE_ADAPTER=redis` was set; local chat normally defaults to memory
state.
If OAuth returns `502`, verify port 3000 is listening and remove stale duplicate
dev servers or tunnel clients before retrying. If the provider says the
authorization expired, discard that URL and start a fresh chat attempt after
the callback health checks pass.

If the model answer is too loose to prove the behavior, use a narrower prompt,
an exact-output prompt, interactive mode, or a direct plugin CLI command. If the
behavior cannot be exercised through the local client/agent, say local QA is
insufficient and name the runtime surface that still needs manual coverage.

## Reporting

Report:

- the exact `pnpm cli -- ...` commands run
- for dashboard mock QA, the dev-server command, URL, mock conversation or page
  inspected, and the visible UI evidence
- exit status and the key output that proves the behavior
- whether `apps/example` loaded the expected app/plugin/skill path
- whether local QA was sufficient, or what remains unproven locally

Keep any automated test/lint/typecheck/eval results in a separate validation
section so they are not confused with local QA.

From getsentry/junior at 1745a29, shown as plain text under its license: Apache-2.0 (permissive). The license text is in LICENSE.

View SKILL.md on GitHub at 1745a29

Files

1 file, 8.7 KB in total. Each file has a sha256 in the pin's manifest; the first 12 characters are shown.

Skill folder on GitHub at 1745a29
All 50 skills from Sentry

More from Sentry

  • claude-settings-audit

    This skill analyzes a repository to detect its tech stack, build tools, and service integrations, then generates recommended Claude Code settings.json…

    Claude Code · about 2.9K tokens · pinned 7 days ago

  • commit

    This skill enables the agent to create conventional commit messages following Sentry's style guide.

    Claude Code, Codex, Cursor +4 · about 430 tokens · pinned 7 days ago

  • django-access-review

    This skill guides agents through investigating Django and Django REST Framework code for IDOR and access control vulnerabilities.

    Claude Code, Codex, Cursor +4 · about 2.5K tokens · pinned 7 days ago

  • django-perf-review

    This skill audits Django codebases for performance problems by validating issues through code tracing before reporting.

    Claude Code, Codex, Cursor +4 · about 2.8K tokens · pinned 7 days ago

  • iterate-pr

    This skill automates PR iteration by fetching CI check statuses and review feedback, then fixing actionable failures and high/medium priority comments until…

    Contains scripts

    Claude Code · about 1.2K tokens · pinned 7 days ago

  • pr-writer

    This skill helps agents write clear, reviewer-focused PR titles and descriptions by inspecting the branch, diff, and existing PR state, then crafting concise…

    Claude Code, Codex, Cursor +4 · about 1.3K tokens · pinned 7 days ago

All Testing and QA skills
  • testing-mwaa-workflow

    Triggers and monitors Amazon MWAA workflow runs end-to-end for both Provisioned (Python DAGs via REST API) and Serverless (YAML workflows via…

    by Amazon (AWS)Official publisher

    Claude Code, Codex, Cursor +4 · about 3.6K tokens · pinned 7 days ago

  • browser-navigation

    This skill enables agents to automate browser interactions including navigation, form filling, element clicking, screenshots, and data extraction from web…

    by FactoryOfficial publisher

    Claude Code, Codex, Cursor +3 · about 2.5K tokens · pinned 7 days ago

  • e2e-testing

    This skill sets up end-to-end testing for Falcon Foundry applications using Playwright and the @crowdstrike/foundry-playwright library.

    by CrowdStrikeOfficial publisher

    Claude Code, Codex, Cursor +3 · about 5.1K tokens · pinned 7 days ago

  • meticulous-cli

    This skill provides access to the Meticulous CLI, a tool that records user sessions and replays them to detect visual regressions.

    by alwaysmeticulousCommunity

    Claude Code · about 1.4K tokens · pinned 7 days ago

  • unity-explorer-mcp

    This skill sets up, launches, and drives the Decentraland Explorer through its MCP automation server to build and test SDK7 scenes in-world.

    by decentralandCommunity

    Contains scripts

    Claude Code · about 5K tokens · pinned 7 days ago

  • next-partial-prefetching-optimizer

    This skill optimizes Next.js client-side navigation under Partial Prefetching by defining what UI loads before and after a click.

    by VercelOfficial publisher

    Claude Code, Codex, Cursor +4 · about 2.8K tokens · pinned 7 days ago

The skills listed here are third-party software, collected from public GitHub repositories as a catalog of recent skills and provided as is. Agent Native does not write or control them and is not responsible for any harm, loss or damage caused by installing or using them. Labels and checks describe what we saw at one commit and are not a guarantee. Read a skill's files before you run it. Terms of use