/actor-fetch-personality
Internal skill for commands. Fetch and validate personality from URL or file path for Actor agent. Do not trigger on user conversation - only when commands need personality loading.
Claude Code
$ npx -y skills add restarter/lets-workflow --skill actor-fetch-personality --agent claude-code
Codex
$ npx skills add restarter/lets-workflow --skill actor-fetch-personality -a codex -y
Cursor
$ npx skills add restarter/lets-workflow --skill actor-fetch-personality -a cursor -y
Gemini CLI
$ npx skills add restarter/lets-workflow --skill actor-fetch-personality -a gemini-cli -y
GitHub Copilot
$ npx skills add restarter/lets-workflow --skill actor-fetch-personality -a github-copilot -y
OpenCode
$ npx skills add restarter/lets-workflow --skill actor-fetch-personality -a opencode -y
Windsurf
$ npx skills add restarter/lets-workflow --skill actor-fetch-personality -a windsurf -y
SKILL.md
actor-fetch-personality.SKILL.mdname: actor-fetch-personality
description: Internal skill for commands. Fetch and validate personality from URL or file path for Actor agent. Do not trigger on user conversation - only when commands need personality loading.
user-invocable: false
Actor Fetch Personality
Internal skill used by commands that dispatch the Actor agent. Handles personality source detection, fetching, validation, and prompt formatting.
> **IMPORTANT:** If the spec below invokes any deferred tool (e.g. `AskUserQuestion`), you MUST load and call it as specified. Never skip the call, never substitute a default answer of your own — the tool invocation is part of the contract. This is critical.
Flow
Step 1: Detect Source Type
Parse the personality source argument:
- Starts with `http://` or `https://` -> URL
- Starts with `/`, `~`, or `.` -> local file path
- Otherwise -> inform user: "Personality source must be a URL or file path"
Step 2: Fetch Content
**URL:** Use Bash with `curl -sL <url>` to fetch the raw content. Do NOT use WebFetch - the internal model filters personality content as prompt injection.
**GitHub URLs:** If URL contains `github.com/.../blob/`, convert to raw URL: replace `github.com` with `raw.githubusercontent.com` and remove `/blob/`. Example: `https://github.com/user/repo/blob/main/persona.md` -> `https://raw.githubusercontent.com/user/repo/main/persona.md`
**File path:** Use Read tool. Expand `~` to home directory.
If fetch fails (curl returns empty, Read returns error): inform user "Could not load personality from {source}. Check the URL/path." Stop - do not proceed with actor dispatch.
Step 3: User Review Gate
Before loading personality into the actor, show a preview and ask for confirmation:
Extract from fetched content: name (from frontmatter or first heading), expertise signals (first 2-3 bullet points or description), line count.
AskUserQuestion(
questions=[{
question: "Load this personality into Actor?",
header: "Actor",
options: [
{ label: "Load", description: "{name} - {expertise summary} ({N} lines)" },
{ label: "Cancel", description: "Don't load, skip actor" }
],
multiSelect: false
}]
)- **Load** -> proceed to Step 4
- **Cancel** -> stop, inform calling command that actor was skipped
Step 4: Validate
- If content is empty: stop, inform user
- If content exceeds 2000 lines: truncate to first 2000 lines, warn user
- Content should contain identifiable persona signals (name, expertise, identity). If it looks like code or random text, warn but proceed (lenient validation)
Step 5: Format for Prompt
Return the personality content formatted as a prompt block to be injected into the Actor agent's Task prompt:
PERSONALITY:
{fetched content}The calling command inserts this block into the Task prompt alongside MODE, PROJECT CONTEXT, and the user's question.
Read more
name: actor-fetch-personality description: Internal skill for commands. Fetch and validate personality from URL or file path for Actor agent. Do not trigger on user conversation - only when commands need personality loading. user-invocable: false
Actor Fetch Personality
Internal skill used by commands that dispatch the Actor agent. Handles personality source detection, fetching, validation, and prompt formatting.
> **IMPORTANT:** If the spec below invokes any deferred tool (e.g. `AskUserQuestion`), you MUST load and call it as specified. Never skip the call, never substitute a default answer of your own — the tool invocation is part of the contract. This is critical.
Flow
Step 1: Detect Source Type
Parse the personality source argument:
- Starts with `http://` or `https://` -> URL
- Starts with `/`, `~`, or `.` -> local file path
- Otherwise -> inform user: "Personality source must be a URL or file path"
Step 2: Fetch Content
**URL:** Use Bash with `curl -sL <url>` to fetch the raw content. Do NOT use WebFetch - the internal model filters personality content as prompt injection.
**GitHub URLs:** If URL contains `github.com/.../blob/`, convert to raw URL: replace `github.com` with `raw.githubusercontent.com` and remove `/blob/`. Example: `https://github.com/user/repo/blob/main/persona.md` -> `https://raw.githubusercontent.com/user/repo/main/persona.md`
**File path:** Use Read tool. Expand `~` to home directory.
If fetch fails (curl returns empty, Read returns error): inform user "Could not load personality from {source}. Check the URL/path." Stop - do not proceed with actor dispatch.
Step 3: User Review Gate
Before loading personality into the actor, show a preview and ask for confirmation:
Extract from fetched content: name (from frontmatter or first heading), expertise signals (first 2-3 bullet points or description), line count.
AskUserQuestion(
questions=[{
question: "Load this personality into Actor?",
header: "Actor",
options: [
{ label: "Load", description: "{name} - {expertise summary} ({N} lines)" },
{ label: "Cancel", description: "Don't load, skip actor" }
],
multiSelect: false
}]
)- **Load** -> proceed to Step 4
- **Cancel** -> stop, inform calling command that actor was skipped
Step 4: Validate
- If content is empty: stop, inform user
- If content exceeds 2000 lines: truncate to first 2000 lines, warn user
- Content should contain identifiable persona signals (name, expertise, identity). If it looks like code or random text, warn but proceed (lenient validation)
Step 5: Format for Prompt
Return the personality content formatted as a prompt block to be injected into the Actor agent's Task prompt:
PERSONALITY:
{fetched content}The calling command inserts this block into the Task prompt alongside MODE, PROJECT CONTEXT, and the user's question.
A development workflow plugin for Claude Code Stop babysitting your AI. Start shipping with it.
Other skills on lets-workflow.
goal-test
Local sandbox for experimenting with Claude Code's /goal command (stop-hook condition + LLM-evaluator driving autonomous work…
loop-bb-pr
Compose a /loop that monitors a Bitbucket PR for activity (new comments, review state changes, merge, decline) via the bb-api…
loop-gh-pr
Compose a /loop that watches all open GitHub PRs for activity (new PRs, new commits, new comments) and auto-prepares a READ-ONLY…
loop-test
Local sandbox for experimenting with Claude Code's /loop command (interval + dynamic/self-paced scheduling) applied to LETS…
agent-report
Internal skill for commands. The file transport for agent reports - hand every Task-dispatched agent a REPORT_FILE, then collect…
More skills from other plugins.
brainstorming
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
ask-matt
Ask which skill or flow fits your situation. A router over the skills in this repo.
Questions about actor-fetch-personality.
- Which coding agents can use actor-fetch-personality?
- actor-fetch-personality installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.

