# Mk:strip Identity

> Remove upstream identity markers from kit content after an upstream sync. Use after pulling upstream updates, before committing or publishing, to rewrite ck: prefixes, project names, authors, and domains.

- Skill: `phuc-nt/mk-strip-identity` (Agent Skill, multi-file: 3 files)
- Install (CLI): `npx skillmds@latest add phuc-nt/mk-strip-identity`
- Raw SKILL.md: https://api.skillmd.com/api/skills/phuc-nt/mk-strip-identity/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: phuc-nt (https://skillmd.com/u/phuc-nt)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/phuc-nt/mk-strip-identity

---


# Strip Identity

Rewrites every upstream identity marker in kit content to the my-agent-kit
equivalents, then verifies none remain. Run this **after every upstream sync**,
before committing or publishing.

## When to use

- After bulk-copying upstream content into `claude/` (upstream sync workflow)
- Before `git commit` / `npm publish` following any upstream merge
- As a CI gate — `verify.sh` exits non-zero if any marker leaks

## Why this skill exists

The v2.0.0 release was stripped by hand with `sed` + `\b` word boundaries.
BSD/macOS `sed` does not honor `\b` consistently, so the `ck:<skill>` slash
command pattern slipped through — **246 files shipped with `/ck:cook` instead
of `/mk:cook`** (fixed in v2.0.1). These scripts encode the verified
boundary-safe patterns so that bug class cannot recur.

## The two scripts

| Script | Purpose | Exit |
|---|---|---|
| `scripts/strip.sh [dir]` | Apply all substitutions in place | 0 = applied |
| `scripts/verify.sh [dir]` | Fail if any marker remains | 0 = clean, 1 = dirty |

Default target is `claude/`. Always run `verify.sh` after `strip.sh`.

```bash
bash claude/skills/strip-identity/scripts/strip.sh
bash claude/skills/strip-identity/scripts/verify.sh   # must exit 0
```

## What gets rewritten

| Marker | Becomes |
|---|---|
| `claudekit-engineer` | `my-agent-kit` |
| `claudekit-marketing` | `my-marketing-kit` |
| `claudekit-cli` / `claudekit-docs` | `my-kit-cli` / `my-kit-docs` |
| `ClaudeKit` / `CLAUDEKIT` / `claudekit` | `MyKit` / `MYKIT` / `my-kit` |
| `docs.claudekit.cc` / `claudekit.cc` | `docs.my-kit.local` / `my-kit.local` |
| `github.com/claudekit/...` | (removed) |
| `@goonnguyen` / `mrgoonie` / `goonie` | `personal` |
| `Udit Goenka` | `original author` |
| `.ck.json` / `.ckignore` | `.mk.json` / `.mkignore` |
| `ck-config` / `ck-paths` | `mk-config` / `mk-paths` |
| `ck:<name>` (slash command) | `mk:<name>` |
| `ckm:<name>` (marketing command) | `mk:<name>` |
| `` `ck` `` / `spawn('ck')` / `ck <subcommand>` (bare CLI) | `mk` equivalents |

## Critical implementation notes

**The `ck:` rule.** A naive `s/ck:/mk:/g` corrupts `check:`, `block:`,
`track:`, `feedback:`, `stack:`, `lock:`. The safe pattern is a negative
lookbehind — replace `ck:` only when **not preceded by an ASCII letter**:

```
(?<![a-zA-Z])ck:
```

This matches `/ck:fix`, `ck:cook`, `"ck:test"` but never the inside of a
longer word.

**The `ckm:` and bare-`ck` rules (added after the 2026-08 A/B test).** Two
marker classes escaped every pattern above and shipped for months:
`ckm:design` (the string `ckm:` does not contain `ck:`), and bare CLI
mentions like ``requires `ck` CLI`` or `spawn('ck')` (no colon, no dash —
nothing for the prefix rules to anchor on). The bare form is the worst kind
of leak: agents read it and try to run a binary that does not exist. strip.sh
now rewrites the unambiguous forms (backticked, quoted-as-command, and
`ck <known-subcommand>`); verify.sh scans `\bck\b` and flags **any**
surviving standalone `ck` for manual review rather than guessing.

**Perl, not grep -P or sed.** macOS/BSD `grep` has no `-P` (PCRE); BSD `sed`
has no lookbehind. Both scripts use `perl`, whose regex engine is identical
across platforms. `perl` is a hard dependency — the scripts abort if missing.

**Substitution order matters.** Longest project names (`claudekit-engineer`)
are rewritten before the bare `claudekit`, otherwise `claudekit` consumes the
`-engineer`/`-cli` suffix first and leaves `my-kit-engineer`.

**`metadata.json` is excluded** from the `ck-paths` / `.ck` checks. Its
`deletions` array intentionally retains legacy paths (e.g.
`hooks/lib/ck-paths.cjs`) so `mk-init.sh --upgrade` knows to delete them from
old installs. Do not "fix" those entries.

## Adding a new marker

Add the substitution to **both** scripts:

- `strip.sh` — a new `s/.../.../g` line (mind the ordering rule above)
- `verify.sh` — extend the relevant `scan '...'` pattern

Then re-run the fixture test (see git history of this skill for the test
fixture used to validate the `ck:` lookbehind against `check:`/`block:`).

