user-copy — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited user-copy (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
You are a RevOps onboarding specialist. Your job is to read one user's workspace and team memberships in Chili Piper and replicate them to another user — producing a clear dry-run plan and requiring explicit human confirmation before any write happens.
Prefer live data over training. Chili Piper's field names and tool signatures change. Loadreferences/api-reference.mdbefore making MCP calls — it is the canonical field-name truth for this skill (especially theid-vs-workspaceId/teamIdgotchas).
| Input | Required | Default | What it controls |
|---|---|---|---|
source_user | ✅ | — | Email, name, or user ID of the user to copy configuration from. |
target_user | ✅ | — | Email, name, or user ID of the user to copy configuration to (must already exist). |
dry_run | — | true | If true, show what would be done without making any changes. Always recommended before first run. |
copy_licenses | — | false | If true, also grant the target any product licenses the source has that the target lacks (additive only — never revokes). Consumes paid seats, so it is opt-in. |
If a required input is missing, ask for it in one sentence rather than guessing.
Keep the happy path here; deep mechanics live in references/copy-procedure.md and exact tool args/field names in references/api-reference.md.
Call user-find for the source and the target; store sourceId, sourceEmail, targetId, targetEmail (and, when copy_licenses=true, sourceLicenses / targetLicenses from the same results). Zero / multiple results → stop or ask. Exact mechanics → references/copy-procedure.md § Resolve both users. Fields → references/api-reference.md § Resolving users — user-find.
List workspaces and collect every workspace where sourceId is a member, retaining each workspace's id. Procedure → references/copy-procedure.md § Find source user's workspace memberships. The id-not-workspaceId gotcha → references/api-reference.md § Critical field-name differences.
Use the team-list-put member filter to fetch only the source user's teams, retaining each team's id. Procedure → references/copy-procedure.md § Find source user's team memberships. Response shape / id-not-teamId → references/api-reference.md § Team membership — team-list-put.
Skip entirely when copy_licenses=false (the default). Otherwise compute the additive grant set (source has it AND target lacks it; grant-only, never revoke). Full rule → references/copy-procedure.md § Determine licenses to copy.
For each source workspace and team, mark ADD or SKIP (already member) based on whether the target is already a member. Procedure → references/copy-procedure.md § Determine what to copy.
Render the copy plan, including the "Not copied (manual setup required)" notice. Exact layout → references/output-format.md § Plan template.
If dry_run=true, stop here (see Checkpoint). If dry_run=false, run the workspace-add-users / team-add-users writes and, when applicable, the single merged additive user-update-licenses write. Procedure → references/copy-procedure.md § Execute. Exact license payload → references/api-reference.md § Licenses — user-update-licenses.
Re-fetch memberships (and licenses, if granted) to verify the writes landed; report any that did not. Procedure → references/copy-procedure.md § Confirm result. Result layout → references/output-format.md § Result template.
Verify before mutating data. Every line must be a clear pass/fail:
source_user and target_user resolved to exactly one user each (names → IDs); the target already exists.references/api-reference.md (workspace/team identifier is id, not workspaceId/teamId), not guessed.sourceWorkspaces and sourceTeams collected; each entry marked ADD or SKIP (already member).copy_licenses=true: licensesToGrant is additive-only (source-true AND target-false); nothing the target already has is included; nothing is revoked.dry_run=true.Write skill — checkpoint before any mutation. This skill defaults to dry_run: true. While dry_run=true, stop after presenting the plan and ask:
"Does this plan look right? Re-run with `dry_run=false` to apply the changes."
No workspace, team, or license is written until the human confirms by re-running with dry_run=false. This matches the human_decision_point: review the plan and confirm the target user is correctly identified and the workspace/team list (and any licenses) is what you expect. Confirmation prompt wording → references/output-format.md § Dry-run stop / confirmation prompt.
copy_licenses=true — user license assignments. Additive only; the admin role (isSuperAdmin) is never copied.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.