tart-ci

tart-ci is a skill for Claude Code from Generous-Corp/pulp. It costs 83 tokens per session (13,374 once invoked), scanned D, original, MIT.

A setup for running macOS continuous integration (CI), which automatically builds and tests code, inside short-lived virtual machines made from prepared images.

In plain words
What is it for?
Use it to create or maintain macOS virtual-machine images, run GitHub Actions jobs in disposable VMs, and define reusable per-project VM settings.
Why use it?
It keeps CI jobs isolated from the host computer and makes their environments more repeatable, while reusing caches to reduce setup work.

Skill for Claude Code

Written for Claude Code: shipped in a Claude Code plugin. Also seen: installed under .agents/ (shared by several agents); mentions Codex.

Part of the pulp plugin — 63 skills, 30 commands, 3 hooks, 1 MCP server shipped together

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.

agentmods
npx agentmods add skills/generous-corp/pulp/tart-ci
Any agent
npx skills add Generous-Corp/pulp --skill tart-ci
Clone the repo
git clone --depth 1 https://github.com/Generous-Corp/pulp

Made for: Claude Code.

Or install pulp, the plugin that ships this one along with the rest of its 63 skills, 30 commands, 3 hooks, 1 MCP server.

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 tart-ci

README.md
[![agentmods](https://agentmods.dev/badge/skills/generous-corp/pulp/tart-ci.svg)](https://agentmods.dev/skills/generous-corp/pulp/tart-ci)
Your own site
<a href="https://agentmods.dev/skills/generous-corp/pulp/tart-ci"><img src="https://agentmods.dev/badge/skills/generous-corp/pulp/tart-ci.svg" alt="Measured on agentmods" height="20"></a>
Per session 83 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 13,374 The whole file, excluding the scripts and references it only reads on demand.
Security scan D 2 findings. Scan, not verified.
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.00083 $0.13374
Opus 5 $0.00042 $0.06687
Sonnet 5 $0.00017 $0.02675
Haiku 4.5 $0.00008 $0.01337

Measured today against content hash 1b7808529e82, method: parsed. Prices are Anthropic first-party input rates as of 2026-09-05, from the pricing page.

Security

Grade D, and why

tart-ci scanned grade D with 2 findings 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 today.

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.

Asks for rootmediumPrivilege escalation

A mod that escalates privileges can change anything on the machine, not only the project.

- Prefer rsync'ing a **host-installed Xcode** into the golden over an in-guest `xcodes install` (interactive 2FA + multi-hour re-download). Remote rsync to `/Applications` needs `--rsync-path="sudo /opt/homebrew/bin/rsyn

Recursive force deletehighDestructive command

rm -rf with a variable or a broad path is one typo away from removing the wrong tree.

- **THE cross-build gotcha (baked into the recipe):** `setup.sh --ci` prefetches the **host-arch (arm64)** Skia and `fetch_skia_for_release.py`'s flatten step **won't clobber** it, so the x86_64 `cmake` fails `FindSkia`.
.agents/skills/tart-ci/SKILL.md · 392 lines

How it starts

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

Tart golden-VM CI lane

Run every macOS build/validation in a throwaway VM cloned from a versioned golden image so the host stays responsive and builds are reproducible. Generalizes to any repo via one vm-image manifest. Born from Pulp planning/2026-06-01-macos-ci-isolation-plan.md; the reusable macOS provider now lives in the sibling /Volumes/Workshop/Code/tartci repo. Pulp's tools/ci/tart-runner.sh / tart-run-job.sh scripts are the legacy/precursor shape and should stay as compatibility wrappers once the tartci lane graduates.

Current Pulp gate truth (read before rollout history)

Pulp's production required macOS gate is the local M1/M3/M5 JIT fleet. Each host's checked-in profile can serve both mutually exclusive event classes: pulp-build-pr-head at derived lease priority 100 and pulp-build-merge-group at derived priority 110. Profiles must not set one fixed lease priority for both classes; doing so defeats merge-group priority and can leave reserved gate cores idle. The older pulp-gate-fast, M1-only, static-runner, and pilot-label passages below are rollout history, not the current production selector.

A profile proves compatibility, not live participation. JIT runners register only while serving a job, and organization visibility does not prove that the Pulp repository can assign one. Establish current capacity from enabled and healthy Pulp supervisors, queue age, repository-visible registration, exact job-to-runner binding, derived lease priority, completion, and VM/JIT cleanup. Re-check M1, M3, and M5 live; do not preserve a dated incident snapshot as topology. tools/scripts/runner_topology.json plus runner_topology_check.py --mode=report is the declarative routing truth. When reviewed cross-repo evidence is available, pass TartCI source profiles, installed-profile receipts, and the private desired-fleet manifest through the checker's read-only --fleet-profile, --fleet-receipt, and --fleet-source-manifest inputs. A source profile must use the current TartCI fields (assignment_mode = "event-class-v2", exact [[lane.tier]] label/workflow/runner_group_id rows, and no fixed priority). This keeps private Pulp labels and host declarations out of generic TartCI/Shipyard code.

Read the full file on GitHub · 392 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. today First seen · 392 lines · 83 tokens per session scan D 1b7808529e82

Subscribe to this mod's changes

tart-ci is a skill published in the GitHub repository Generous-Corp/pulp (16 stars, last pushed today), licensed MIT. It adds 83 tokens to every session and 13,374 once invoked, about $0.0004 per session on Opus 5. A static security scan graded it D with 2 findings (asks for root, recursive force delete). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-09-04.