team-eo-emp

Skills for the Employee Organization team at Personio — weekly ops review reporting and code quality workflows.

Installation

claude plugin install team-eo-emp@personio-claude-code-marketplace

What does this plugin do?

Shared engineering skills contributed by the Employee Organization team. Ships emp-ops-review for weekly ops review reporting, remove-flag for end-to-end feature flag removal, test-lint for repo-aware test/lint runs, reviewer-roulette for picking random PR reviewers, scope-discipline for keeping task scope under control, and detect-language as an internal sub-skill for language detection.


emp-ops-review

Generate the weekly EMP Operational Review report — data gathered automatically from Datadog, Jira, and the SDLC security API, saved as a Confluence draft ready for the Firefighter to review and publish.

What you need:

  • Atlassian MCP plugin installed and authenticated (claude plugin install atlassian@claude-plugins-official, then /mcpplugin:atlassian:atlassian → Authenticate). Start a fresh session after authenticating.
  • claude.ai Datadog MCP server authenticated via /mcpclaude.ai Datadog → Authenticate. Uses OAuth — no CLI or VPN required for Datadog access. Start a fresh session after authenticating.
  • Personio VPN connected (required for the SDLC security metrics endpoint).

Quick Start:

# Default — last 7 days
/emp-ops-review

# Specific week
/emp-ops-review April 14 to April 21

Example:

It's Monday morning and you were Firefighter last week. You want to prep the ops review before the team meeting.

/emp-ops-review

The skill will:

  1. Ask for your name and any observations from your firefighting week that won't show up in dashboards
  2. Verify connectivity to Atlassian, Datadog, and the SDLC security API
  3. Collect open alerts, noisy monitors, SLO breaches, error rates, availability, incidents, postmortem action items, security findings, and E2E/flaky test stats — all in parallel
  4. Assemble findings into the standard EMP report format, ordered by priority (SLO breaches first, security second, etc.)
  5. Save a draft Confluence child page under the EMP Operational Review page for your review
  6. Publish once you confirm the draft looks good

Why would you want this?

  • Saves 30–60 minutes every week: no manual Datadog dashboard checks, Jira queries, or security API calls — all automated
  • Nothing slips through: covers open alerts, noisy monitors, SLO breaches, availability, incidents, postmortem actions, security findings, and E2E test health in one pass
  • Priority-ordered: report follows the meeting agenda so the most critical items are always at the top
  • Draft-first: you review and add your human context before it goes live on Confluence

remove-flag

End-to-end feature flag removal — from creating a branch to opening a draft PR, with a cubic AI code review in between.

What you need:

  • gh CLI installed and authenticated (gh auth status)
  • cubic CLI installed and authenticated (cubic auth) — the skill will tell you how to install it if missing
  • A Personio repo on the master branch

Note: The skill contains PHP and TypeScript reference files for flag patterns in the Personio monolith and web monorepo. It will stop with a clear message if you run it in a Kotlin or other repo where a reference file is missing.

Quick Start:

/remove-flag EMP-2850-my-feature-flag

Example:

You've just confirmed that EMP-2986-first-last-names-not-empty is 100% rolled out and ready to be cleaned up.

/remove-flag EMP-2986-first-last-names-not-empty

The skill will:

  1. Create branch remove-flag-EMP-2986-first-last-names-not-empty from master
  2. Search the codebase for every reference to the flag and ask you which path to keep (enabled or disabled)
  3. Dispatch a Sonnet agent to remove all call sites, inline the kept value, and follow boolean pass-throughs
  4. Run linting and fix any new lint issues
  5. Run cubic review and fix any correctness issues (surfacing opinion-based feedback for your review)
  6. Commit and push the branch
  7. Open a draft PR — automatically adding the original flag author as a reviewer

Why would you want this?

  • Removes the boring parts: finding every call site, inlining values, tracing boolean pass-throughs, cleaning up dead tests, running lint, running cubic, opening the PR — all automated
  • Safe: planning phase shows you what will change and asks for your confirmation before touching any files
  • Correct PR setup: automatically assigns you and adds the flag's original author as reviewer
  • Cubic-reviewed before it lands: fixes correctness issues immediately; surfaces style preferences for your consideration

test-lint

Run tests and linting for the current Personio repository. Detects the language automatically (PHP monolith, TypeScript web monorepo) and delegates to the right tooling.

What you need:

  • For PHP: be inside the Personio monolith with monolith-cli present
  • For TypeScript: be inside the Nx monorepo with pnpm and nx.json present

Quick Start:

# Run both tests and lint
/test-lint

# Lint only
/test-lint lint

# Tests only
/test-lint tests

Why would you want this?

  • Single command for any supported repo: no need to remember mc lint vs pnpm nx affected --target=lint
  • Language-aware fix guidance: when lint fails, the skill tells you exactly which autofix command to run and what suppression policy applies
  • Used by remove-flag automatically: the flag removal workflow calls this skill to ensure no new lint issues are introduced

reviewer-roulette

Pick 2 random eligible reviewers for an EMP-team PR. Auto-detects the repo type, excludes the PR author and existing reviewers, drops anyone inactive in Backstage or with an all-day OOO event today, and prints a ready-to-run gh pr edit command. Pass --automatic-create to skip the suggestion step and assign the reviewers immediately.

What you need:

  • gh CLI installed and authenticated, run from a Personio repo. Repo type is detected via the detect-language sub-skill: PHP/Kotlin → backend pool, TypeScript → UI pool
  • yq and jq available locally
  • claude.ai Google Calendar MCP server authenticated for the OOO check (skill still works without it — candidates are treated as available on auth errors)

Quick Start:

# Pick reviewers for the open PR on the current branch
/reviewer-roulette

# Pick reviewers for a specific PR (number or URL)
/reviewer-roulette 4521

# Add manual extras alongside the random picks
/reviewer-roulette also include carol_personio

# Pick and assign immediately (skip the confirm-and-run step)
/reviewer-roulette --automatic-create

Why would you want this?

  • Fair rotation: random selection from a maintained EMP pool, biased only by exclusions (author, existing reviewers, inactive employees, today's OOO)
  • Repo-aware: backend PRs draw from the backend pool, UI PRs from the UI pool — no need to remember who works on what
  • Safe by default: only prints the suggested gh pr edit command; you confirm before assigning. Pass --automatic-create to run the assignment in one step

scope-discipline

Keeps task scope under control. When you (or Claude) spots improvements beyond what was asked, this skill helps decide: do it now or note it for later.

What you need:

No prerequisites — works in any repository.

Quick Start:

Invoke it when you're tempted to do more than asked:

I noticed the UserService has duplication I could fix while I'm here — should I?

Example:

You're removing a feature flag and you notice five surrounding methods could also be cleaned up:

"While removing this flag I noticed some duplication in the payment flow — should I refactor it?"

The skill will tell you to note it in a ## Follow-up suggestions section and not act on it now.

Why would you want this?

  • Prevents scope creep: distinguishes between unavoidable cleanup (in scope) and "while I'm here" additions (out of scope)
  • Structured output: out-of-scope findings go into a ## Follow-up suggestions section, not the implementation
  • Red-flag reminders: surfaces the classic rationalisation patterns ("it's only small", "it would be weird not to fix this") so you catch them before acting

detect-language (internal sub-skill)

Detects the primary language of the current repository by checking for marker files (composer.json → PHP, build.gradle → Kotlin, package.json → TypeScript). Returns LANGUAGE and REFERENCE_FILE for use by calling skills.

Not intended for direct user invocation — called programmatically by other skills that need to load language-specific reference material.