split-portfolio

split-portfolio is a skill for Claude Code from me2resh/apexyard. It costs 27 tokens per session (6,335 once invoked), scanned B, original, MIT.

A guided migration for changing an ApexYard setup from one public fork into a public framework repository plus a private project repository. It rewrites public Git history, removes private references, and creates the private repository with confirmation before each destructive step.

In plain words
What is it for?
Use it to recover a misconfigured ApexYard fork, separate public framework code from private portfolio work, redact exposed issue and pull-request text, and move project data into a new private repository.
Why use it?
It addresses the case where private project names were accidentally pushed to a public fork and GitHub will not allow the fork's visibility to be changed. The confirmation gates help prevent irreversible mistakes.

Skill for Claude Code

Written for Claude Code: allowed-tools in frontmatter. Also seen: reads .claude/ paths; mentions Claude Code.

Good fit Use it to recover a misconfigured ApexYard fork, separate public framework code from private portfolio work, redact exposed issue and pull-request text, and move project data into a new private repository.

Compare 6 skills from other repositories ↓
Install with agentmods
npx agentmods add skills/me2resh/apexyard/split-portfolio
Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

Any agent
npx skills add me2resh/apexyard --skill split-portfolio
Clone the repo
git clone --depth 1 https://github.com/me2resh/apexyard

Made for: Claude Code.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for split-portfolio

README.md
[![agentmods](https://agentmods.dev/badge/skills/me2resh/apexyard/split-portfolio/github.svg)](https://agentmods.dev/skills/me2resh/apexyard/split-portfolio)
Your own site
<a href="https://agentmods.dev/skills/me2resh/apexyard/split-portfolio"><img src="https://agentmods.dev/badge/skills/me2resh/apexyard/split-portfolio/github.svg" alt="Measured on agentmods" height="20"></a>

Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.

agentmods 80×15 button for split-portfolio

Your own site · 80×15
<a href="https://agentmods.dev/skills/me2resh/apexyard/split-portfolio"><img src="https://agentmods.dev/badge/skills/me2resh/apexyard/split-portfolio.svg" alt="Reviewed on agentmods" width="80" height="20"></a>
Per session 27 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 6,335 The whole file, excluding the scripts and references it only reads on demand.
Security scan B 1 finding. A grade says what 26 rules found in the file — not that it is safe. Third-party audits
  • NVIDIA SkillSpector warn 7 Sept 2026
SkillSpector: 4 findings, up to high

These are SkillSpector’s own severities. On a checked sample its high-severity flags on skills were ~96% false positives — a documented command, a public API, a “never do X” rule — so we show them as a caution to read, not a verdict. Why →

  • high Tool Misuse · line 244
    Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).
    Fix: Validate all tool parameters against an allowlist. Reject dangerous parameter values (shell=True, --force, -rf /) and use safe defaults.
  • high Tool Misuse · line 271
    Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).
    Fix: Validate all tool parameters against an allowlist. Reject dangerous parameter values (shell=True, --force, -rf /) and use safe defaults.
  • high Agent Snooping · line 331
    Skill reads from agent configuration directories (.claude/, .codex/, .gemini/). These directories may contain API keys, personal settings, and other credentials that the skill has no legitimate need to access.
    Fix: Remove all code or instructions that access agent configuration directories (.claude/, .codex/, .gemini/). If configuration values are needed, pass them explicitly as parameters or environment variabl
  • high Tool Misuse · line 538
    Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).
    Fix: Validate all tool parameters against an allowlist. Reject dangerous parameter values (shell=True, --force, -rf /) and use safe defaults.
How audits are shown
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5.1 $0.00027 $0.06335
Opus 5 $0.00014 $0.03168
Sonnet 5 $0.00005 $0.01267
Haiku 4.5 $0.00003 $0.00634

Measured 7d ago against content hash e39cd736af22, method: parsed. Prices are Anthropic first-party input rates as of 2026-09-10, from the pricing page.

Security

Grade B, and why

split-portfolio scanned grade B with 1 finding against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 7d ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Reads agent configuration directoriesmediumAgent snooping

.claude/, .codex/, .gemini/ hold keys, settings and other credentials a mod has no legitimate need for.

cat > .claude/project-config.json <<JSON
.claude/skills/split-portfolio/SKILL.md · 555 lines

How it starts

The opening of the file, as written. The whole thing — 555 lines — stays where its author put it; the contents beside it link to each section on GitHub.

/split-portfolio — Migrate to split-portfolio mode

Automates the recovery flow for ApexYard adopters who hit the trip-wire documented in docs/multi-project.md — pushed private project names to a public fork, then realized GitHub Free disallows fork-visibility changes.

The skill is destructive: it force-pushes the public fork's main branch after rewriting history, redacts GitHub Issue / PR body content, and creates a new private repo. Every destructive step has an explicit operator-confirmation gate. None of those gates are skip-able.

Path resolution

Read the registry path via portfolio_registry, the per-project docs dir via portfolio_projects_dir, and the ideas backlog via portfolio_ideas_backlog — all from .claude/hooks/_lib-portfolio-paths.sh. Source the helper at the top of any bash block that touches those paths:

source "$(git rev-parse --show-toplevel)/.claude/hooks/_lib-read-config.sh"
source "$(git rev-parse --show-toplevel)/.claude/hooks/_lib-portfolio-paths.sh"
registry=$(portfolio_registry)

Defaults match today's single-fork layout (./apexyard.projects.yaml, ./projects, ./projects/ideas-backlog.md). Adopters in split-portfolio mode override the portfolio.{registry, projects_dir, ideas_backlog} keys in .claude/project-config.json. Don't hardcode literal apexyard.projects.yaml or projects/ paths in bash blocks — the helper resolves whichever mode the adopter is in. See docs/multi-project.md.

Modes

Invocation Effect
/split-portfolio Full migration — runs all 10 steps with operator-confirmation gates
/split-portfolio --verify Read-only state report (registry/config drift, backup branch age, validate). No destructive ops.
/split-portfolio --dry-run Walk through every step printing the commands that would run, but execute none.

Pre-flight refusals (before doing anything)

The skill refuses with a clear redirect when:

Condition Refusal message
Target fork's visibility is PRIVATE (gh repo view --json visibility returns PRIVATE) "This fork is already private — split-portfolio mode is for public forks. If you meant something else, run /split-portfolio --verify for the state report."
Adopter is on a paid GitHub plan (Pro / Team / Enterprise) "Paid GitHub plans support changing a fork's visibility in-place — that's a simpler path than this skill's destructive flow. Visit your fork's GitHub settings → Danger Zone → Change Visibility, and you're done. If you specifically want the public-framework + private-portfolio split anyway, re-run this skill with --force (not implemented in v1; ask first)."
Working tree has uncommitted changes "Refusing to migrate with a dirty working tree — commit or stash first. Force-push + history rewrite would lose your in-flight work."
Already migrated (config-block mode OR symlink mode detected) "Looks like this fork is already in split-portfolio mode (detected via config block / symlink). Run /split-portfolio --verify for the state report, or /split-portfolio --dry-run to see what a re-run would do."

Read the full file on GitHub · 555 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 7d ago First seen · 555 lines · 27 tokens per session scan B e39cd736af22

Subscribe to this mod's changes

split-portfolio is a skill published in the GitHub repository me2resh/apexyard (498 stars, last pushed today), licensed MIT. It adds 27 tokens to every session and 6,335 once invoked, about $0.0001 per session on Opus 5. A static security scan graded it B with 1 finding (reads agent configuration directories). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-09-03.

Related

Other skills, from other repositories

prowler-commit

Creates professional git commits following conventional-commits format. Trigger: When creating commits, after completing code changes, when user asks to commit.

prowler-cloud/prowler · 33 tokens

gh-auth-isolation

Safely manage multiple GitHub identities (EMU + personal) in agent workflows.

github/gh-aw · 20 tokens

comet-github

A routing guide for Comet-related GitHub work. It directs requests about pull requests, issues, CI failures, ideas, and fixes to the appropriate review or implementation process.

rpamis/comet · 72 tokens

github-skill

Work with GitHub via the gh CLI — clone repositories, create/list/merge pull requests, create/list issues, and run any other gh command (API calls, workflow runs, releases, repo administration). List operations return parsed JSON.

zeenie-ai/OpenCompany · 51 tokens

re0-merge

Review and land an external contribution the way this suite does: gate it against the thesis, land it with the author's credit intact, complete a new skill rather than merging it raw, then approve, credit, and explain before closing. Use when reviewing a pull request, as any collaborator or maintainer, not only the…

LilMGenius/paperthin · 70 tokens

nvca-chart-release

Release NVCA Operator chart changes from the native monorepo source to the vendored Helm chart. Use when updating the vendored NVCA Operator chart, changing NVCA image refs, publishing helm-nvca-operator, or validating the chart against a self-managed control plane.

NVIDIA/nvcf · 61 tokens