PR Babysitter
openinterpreter/openinterpreter
Watches an open GitHub pull request until it merges, handling review comments, diagnosing CI failures and retrying flaky checks along the way.
Developer personality portrait generator. An agent skill from hashgraph-online/awesome-codex-plugins.
$ npx skills add hashgraph-online/awesome-codex-plugins --skill vibe-portrait -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install hashgraph-online/awesome-codex-plugins vibe-portrait --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/hashgraph-online/awesome-codex-plugins.git skills-src && mkdir -p .claude/skills && cp -r skills-src/plugins/dadwadw233/VibePortrait/skills/vibe-portrait .claude/skills/vibe-portrait && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "vibe-portrait" agent skill from https://github.com/hashgraph-online/awesome-codex-plugins/tree/main/plugins/dadwadw233/VibePortrait/skills/vibe-portrait into .claude/skills/vibe-portrait/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "vibe-portrait", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/hashgraph-online/awesome-codex-plugins/tree/main/plugins/dadwadw233/VibePortrait/skills/vibe-portraitType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add hashgraph-online/awesome-codex-plugins --skill vibe-portrait -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install hashgraph-online/awesome-codex-plugins vibe-portrait --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/hashgraph-online/awesome-codex-plugins.git skills-src && mkdir -p .agents/skills && cp -r skills-src/plugins/dadwadw233/VibePortrait/skills/vibe-portrait .agents/skills/vibe-portrait && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "vibe-portrait" agent skill from https://github.com/hashgraph-online/awesome-codex-plugins/tree/main/plugins/dadwadw233/VibePortrait/skills/vibe-portrait into .agents/skills/vibe-portrait/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "vibe-portrait", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add hashgraph-online/awesome-codex-plugins --skill vibe-portrait -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install hashgraph-online/awesome-codex-plugins vibe-portrait --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/hashgraph-online/awesome-codex-plugins.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/plugins/dadwadw233/VibePortrait/skills/vibe-portrait .cursor/skills/vibe-portrait && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "vibe-portrait" agent skill from https://github.com/hashgraph-online/awesome-codex-plugins/tree/main/plugins/dadwadw233/VibePortrait/skills/vibe-portrait into .cursor/skills/vibe-portrait/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "vibe-portrait", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/hashgraph-online/awesome-codex-plugins.git --path plugins/dadwadw233/VibePortrait/skills/vibe-portrait--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add hashgraph-online/awesome-codex-plugins --skill vibe-portrait -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install hashgraph-online/awesome-codex-plugins vibe-portrait --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/hashgraph-online/awesome-codex-plugins.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/plugins/dadwadw233/VibePortrait/skills/vibe-portrait .gemini/skills/vibe-portrait && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "vibe-portrait" agent skill from https://github.com/hashgraph-online/awesome-codex-plugins/tree/main/plugins/dadwadw233/VibePortrait/skills/vibe-portrait into .gemini/skills/vibe-portrait/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "vibe-portrait", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install hashgraph-online/awesome-codex-plugins vibe-portraitInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add hashgraph-online/awesome-codex-plugins --skill vibe-portrait -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/hashgraph-online/awesome-codex-plugins.git skills-src && mkdir -p .github/skills && cp -r skills-src/plugins/dadwadw233/VibePortrait/skills/vibe-portrait .github/skills/vibe-portrait && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "vibe-portrait" agent skill from https://github.com/hashgraph-online/awesome-codex-plugins/tree/main/plugins/dadwadw233/VibePortrait/skills/vibe-portrait into .github/skills/vibe-portrait/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "vibe-portrait", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add hashgraph-online/awesome-codex-plugins --skill vibe-portrait -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install hashgraph-online/awesome-codex-plugins vibe-portrait --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/hashgraph-online/awesome-codex-plugins.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/plugins/dadwadw233/VibePortrait/skills/vibe-portrait .opencode/skills/vibe-portrait && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "vibe-portrait" agent skill from https://github.com/hashgraph-online/awesome-codex-plugins/tree/main/plugins/dadwadw233/VibePortrait/skills/vibe-portrait into .opencode/skills/vibe-portrait/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "vibe-portrait", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
vibe-portraitDeveloper personality portrait generator. An agent skill from hashgraph-online/awesome-codex-plugins.
Vibe Portrait is an agent skill from hashgraph-online/awesome-codex-plugins. Developer personality portrait generator. Supports subcommands: (1) 'generate my portrait' / 'analyze my personality' — full analysis; (2) 'update my portrait' — incremental update since last analysis; (3) 'install persona from <url' — install community persona from GitHub; (4) 'list personas' / '我安装了哪些人格' — show installed; (5) 'remove persona <id' — uninstall; (6) 'think like <name' / '像<name一样思考' — activate a persona. Also triggers on 'vibe-portrait', 'what kind of developer am I'.
Its SKILL.md is about 5.4k tokens, which your agent loads only when the skill is triggered. The skill folder holds 19 other files, including reference files (for example `agents/openai.yaml`, `references/analysis-framework.md` and `references/famous-matching.md`).
It works with GitHub. The repository describes itself as: A curated list of awesome OpenAI Codex / ChatGPT plugins, skills, and resources. The 1 Codex Marketplace. See live plugins at: https://hol.org/plugins/best-codex-plugins. The licence is Apache-2.0.
9 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 3e1456a. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
gitghnpxFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use git, gh and npx, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Vibe Portrait loads about 5.4k tokens when it runs, and up to ~13k if it reads all its reference files. Until then it costs about 127 tokens; SKILL.md has 2,162 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from hashgraph-online/awesome-codex-plugins at commit 3e1456a, republished under its Apache-2.0 licence (© hashgraph-online). 2,162 words, ~5,426 tokens.
.claude/skills/vibe-portrait/SKILL.md (or your agent's skills folder). This skill also uses 12 other files; get the full folder from GitHub.Developer personality portrait generator with subcommands.
Determine which subcommand the user wants based on their message:
| Trigger | Action |
|---|---|
| "generate my portrait" / "analyze my personality" / just "/vibe-portrait" | → Generate (full analysis, Steps 0-8) |
| "update my portrait" / "update portrait" / "更新我的画像" | → Update (incremental, see Update section) |
| "install persona from <url>" / "安装人格 <url>" | → Install (see Persona Management) |
| "list personas" / "我安装了哪些人格" | → List (see Persona Management) |
| "remove persona <id>" / "删除人格 <id>" | → Remove (see Persona Management) |
| "think like <name>" / "像<name>一样思考" | → Activate (load the persona skill, not handled here — Claude auto-activates from the installed skill) |
If ambiguous, ask the user which action they want.
Before reading any data, ask the user which analysis mode they prefer:
How thorough should the analysis be?
- ⚡ Quick (cost-efficient) — Sample ~200 messages. Fast, low token cost, good enough for most portraits.
- 🔍 Full (comprehensive) — Read ALL messages. Higher token cost, but captures every nuance and evolution of your personality. Best for users with long history who want maximum accuracy.
If the user doesn't respond or says "just do it" / "默认" / "whatever", default to Quick mode.
In Quick mode, follow the sampling strategy described in Step 1c.
In Full mode, read all lines from history.jsonl (and any imported files). Skip the sampling strategy entirely. If the file exceeds 3000 lines, still read in batches (e.g., 500 lines at a time) to avoid tool errors, but process every line.
Always read from ALL available sources regardless of which terminal the user is running. A developer's personality is shaped by all their AI interactions, not just one tool.
Check and read from every source that exists:
| Source | Path | Message field |
|---|---|---|
| Claude Code history | ~/.claude/history.jsonl | display |
| Claude Code projects | ~/.claude/projects/**/*.jsonl | display |
| Codex history | ~/.codex/history.jsonl | text (also has ts unix timestamp) |
| Codex sessions | ~/.codex/sessions/YYYY/MM/DD/rollout-*.jsonl | filter type=response_item + payload.role=user → iterate payload.content[], take items where text does NOT start with < (skip system-injected <environment_context>, <permissions> etc.) |
Merge all messages from all sources into one pool before sampling. Use ts timestamps (Codex history) or timestamp (Codex sessions) for chronological sorting when available.
Vibe Portrait uses a private GitHub repo to sync persona data across machines. This is the recommended approach for users with multiple development machines.
First-time setup (if no portrait repo exists yet):
After analysis is complete (Step 7), the skill will offer to create a private repo. See Step 7 for details.
If the user already has a portrait repo:
Ask the user for their portrait repo URL, or check if ~/.vibe-portrait-repo exists (a file containing the repo URL, written during first-time setup).
# Check for existing repo config
cat ~/.vibe-portrait-repo 2>/dev/nullIf found, clone or pull the repo into a temp directory:
# Clone if not already local
REPO_URL=$(cat ~/.vibe-portrait-repo)
REPO_DIR=~/.cache/vibe-portrait-sync
git clone "$REPO_URL" "$REPO_DIR" 2>/dev/null || (cd "$REPO_DIR" && git pull)Then load existing analysis files from $REPO_DIR/analysis/*.json. When merging with the current machine's analysis:
analysis/{hostname}-{date}.jsonme/SKILL.md) is always regenerated from the merged resultIf the user provides a .jsonl file directly (fallback):
Read it as a supplementary source. Merge messages from all sources before sampling:
display contentUse a bash command to count total lines first:
wc -l ~/.claude/history.jsonlQuick mode (default): Sample strategically:
Full mode: Read all lines. For large files (>500 lines), read in batches of 500 lines using offset/limit to avoid tool errors. Process every message.
Parse each line as JSON and extract the display field. Skip lines where display is empty, null, or a slash command (starts with /).
Minimum threshold: If fewer than 20 non-empty messages are found across all sources, inform the user that there isn't enough data for a meaningful portrait. Suggest they try again after more conversations.
Read the analysis framework for detailed signal definitions:
→ references/analysis-framework.md
Analyze across six dimensions: Communication Style, Technical Breadth, Technical Depth, Decision Patterns, Collaboration Style, Work Rhythm. See the reference file for detailed signal definitions.
Language detection (for i18n): if >50% of sampled messages are in Chinese, set meta.lang = "zh". Otherwise "en". This determines the portrait page language.
For each dimension, produce: a score (0-100), a one-line summary, and 2-3 evidence quotes (keep quotes short, anonymize sensitive content).
Read: → references/mbti-mapping.md
Map observed signals to four axes:
Each axis: 0-100 score. Letter determined by which side of 50.
Read: → references/rating-rubric.md
Rate on a six-tier scale (provide BOTH label for Chinese and labelEn for English):
| Tier | label (zh) | labelEn (en) | Emoji |
|---|---|---|---|
| S+ | 夯爆了 | Legendary | 👑 |
| S | 夯 | Elite | 💎 |
| A | 人上人 | Above Average | ⭐ |
| B | NPC | NPC | 🤖 |
| C | 拉 | Below Average | 😅 |
| D | 拉完了 | Inactive | 💀 |
Always include strength highlights AND growth areas, even for top-tier ratings.
Read: → references/famous-matching.md
Match the user across 3 independent dimensions (Technical Spirit / Strategic Mind / Communication Soul), each picking a different historical or contemporary figure. No predefined list — the AI uses its own knowledge. See reference file for rules and anti-bias constraints.
Read the HTML template:
→ templates/portrait.html
The template contains a PORTRAIT_DATA JavaScript object near the top of the <body>. Replace the ENTIRE PORTRAIT_DATA object with the computed data. The structure is:
const PORTRAIT_DATA = {
meta: {
username: "...", // infer from system username or ask
generatedAt: "...", // today's date
messageCount: 0, // actual count of sampled messages
dateRange: "...", // earliest to latest message date
confidence: "...", // "Early Sketch" / "Clear Portrait" / "Deep Portrait"
lang: "..." // "zh" if user's messages are predominantly Chinese, otherwise "en"
},
personality: {
mbtiType: "XXXX",
axes: {
EI: { score: 0, letter: "X", label: "..." },
SN: { score: 0, letter: "X", label: "..." },
TF: { score: 0, letter: "X", label: "..." },
JP: { score: 0, letter: "X", label: "..." }
},
summary: "..."
},
radar: {
technicalDepth: 0,
technicalBreadth: 0,
communication: 0,
decisionSpeed: 0,
collaboration: 0,
creativity: 0
},
rating: {
tier: "...",
label: "...", // Chinese label: 夯爆了/夯/人上人/NPC/拉/拉完了
labelEn: "...", // English label: Legendary/Elite/Above Average/NPC/Below Average/Inactive
emoji: "...",
color: "...",
reason: "...",
strengthHighlights: [],
growthAreas: []
},
famousMatch: {
technical: {
name: "...", emoji: "...",
dimension: "Technical Spirit", dimensionZh: "技术灵魂",
reason: "...", sharedTraits: []
},
strategic: {
name: "...", emoji: "...",
dimension: "Strategic Mind", dimensionZh: "思维内核",
reason: "...", sharedTraits: []
},
communication: {
name: "...", emoji: "...",
dimension: "Communication Soul", dimensionZh: "表达人格",
reason: "...", sharedTraits: []
}
},
communication: {
languages: {},
directnessScore: 0,
avgMessageLength: 0,
topKeywords: [],
questionRatio: 0
},
technical: {
domains: {},
topTools: []
},
workRhythm: {
hourlyActivity: [/* 24 integers, one per hour */],
sessionPattern: "...",
avgSessionLength: "...",
projectCount: 0
},
quotes: [
{ text: "...", context: "..." }
// 3-5 representative quotes
]
};IMPORTANT:
PORTRAIT_DATA object. Do not modify any other part of the template.Read the persona skill template:
→ references/persona-skill-template.md
Generate a multi-file persona skill. Read the template for the full structure:
→ references/persona-skill-template.md
Create the following files under ~/.claude/skills/vibe-portrait-personas/me/:
me/
├── SKILL.md # Entry point (~80 lines)
├── portrait-meta.json # Timestamps for incremental updates
└── references/
├── thinking-patterns.md # From: technical depth + decision patterns
├── decision-framework.md # From: decision patterns + collaboration style
├── communication-style.md # From: communication style analysis
├── engineering-philosophy.md # From: technical depth + breadth + anti-patterns
└── mindset-markers.md # Abstracted attitudes (NO raw quotes)portrait-meta.json is critical — it stores lastMessageIndex (line count of history.jsonl at analysis time) and updatedAt timestamp. These enable the update subcommand to do incremental analysis later.
Create directories if they don't exist. me/ is reserved for the user's own persona.
Write the following files to the current working directory:
1. HTML Portrait:
vibe-portrait-YYYY-MM-DD.html2. Portrait Image (auto-export):
After writing the HTML, attempt to generate a PNG screenshot of the portrait. Try these methods in order:
If Playwright MCP is available (check for playwright_navigate and playwright_screenshot tools):
file:///absolute/path/to/vibe-portrait-YYYY-MM-DD.htmlvibe-portrait-YYYY-MM-DD.pngIf Playwright is not available, try bash:
# Try with npx playwright if installed
npx --yes playwright screenshot --full-page "file://$(pwd)/vibe-portrait-YYYY-MM-DD.html" "vibe-portrait-YYYY-MM-DD.png" 2>/dev/nullIf neither works, skip silently. Tell the user they can use the "Export as Image" button on the HTML page instead.
3. Analysis JSON (for sync/merge):
vibe-portrait-analysis-YYYY-MM-DD.jsonContents:
{
"version": "1.0",
"machine": "<hostname from `hostname` command>",
"exportedAt": "YYYY-MM-DD",
"sourceFiles": ["~/.claude/history.jsonl"],
"messageCount": 200,
"portraitData": { /* the full PORTRAIT_DATA object */ }
}3. Persona skill (also written in Step 5):
~/.claude/skills/vibe-portrait-personas/me/SKILL.mdAfter writing all output files, ask the user:
Sync to your portrait repo?
- Yes — create a new repo (first time)
- Yes — push to existing repo
- No — keep everything local
gh auth status. If not authenticated, tell user to run ! gh auth login.repo-template/ contents into a temp directory.analysis/, portraits/, and me/ respectively.{{PLACEHOLDER}} markers. Read repo-template/README.md (see the file for the full list of placeholders) and replace them all with the user's analysis data. Key formatting rules:`item1` `item2`**ML/AI** ██████████████░░░░░░ 30% (20 chars wide, █ filled, ░ empty)> "text" — *context*"Chinese 65% · English 30% · Mixed 5%"git init && git add -A && git commit -m "Initial portrait"gh repo create my-vibe-portrait --private --source=. --pushgh repo view --json url -q '.url' > ~/.vibe-portrait-repo~/.vibe-portrait-repo.~/.cache/vibe-portrait-sync).README.md using the same placeholder-filling process as Option 1.git add -A && git commit -m "Update portrait from $(hostname)" && git pushDo nothing. Files are already written locally.
Tell the user:
~/.claude/skills/vibe-portrait-personas/me/)Based on total non-empty messages found:
confidence: "Early Sketch". Warn that results are approximate.confidence: "Clear Portrait".confidence: "Deep Portrait".This skill produces THREE outputs:
vibe-portrait-YYYY-MM-DD.html)PORTRAIT_DATA JavaScript object~/.claude/skills/vibe-portrait-personas/me/SKILL.md)vibe-portrait-analysis-YYYY-MM-DD.json)gh repo create my-vibe-portrait --private~/.vibe-portrait-repo for future syncsrepo-template/ within this skillAll outputs of VibePortrait (HTML, persona skill, analysis JSON, repo README) are potentially shareable. Apply these rules to every file you write:
[REDACTED]/home/username/, /Users/realname/) → replace with ~/ or <home>/Scan all files being committed for the redaction patterns above. If any slip through, fix before pushing.
templates/portrait.html as the base.references/analysis-framework.md · references/mbti-mapping.md · references/famous-matching.md · references/rating-rubric.md · references/persona-skill-template.md · templates/portrait.html · repo-template/
When the user says "update my portrait" / "更新我的画像":
~/.claude/skills/vibe-portrait-personas/me/portrait-meta.json.lastMessageIndex from the meta file.~/.claude/history.jsonl.lastMessageIndex+1 to end).totalMessagesAnalyzed, new weight = new message count).updatedAt, lastMessageIndex, totalMessagesAnalyzed).This is much cheaper than a full re-analysis — typically only processes dozens of new messages.
Trigger: "install persona from <url>"
TEMP_DIR=$(mktemp -d)
git clone --depth 1 "<url>" "$TEMP_DIR"
PERSON_ID=$(grep -m1 'personaId' "$TEMP_DIR/me/portrait-meta.json" | sed 's/.*: *"\(.*\)".*/\1/' )
# Fallback: infer from GitHub username
TARGET=~/.claude/skills/vibe-portrait-personas/$PERSON_ID
cp -R "$TEMP_DIR/me" "$TARGET"
rm -rf "$TEMP_DIR"Confirm: where installed + how to invoke (think like {person-id}).
Trigger: "list personas" / "我安装了哪些人格"
ls ~/.claude/skills/vibe-portrait-personas/For each directory, read portrait-meta.json and show: name, MBTI type, rating, last updated.
Trigger: "remove persona <id>"
rm -rf ~/.claude/skills/vibe-portrait-personas/<id>Confirm before deleting. Refuse to delete me/ — tell user to run generate to overwrite instead.
~/.claude/skills/vibe-portrait-personas/
├── me/ ← yours (multi-file, auto-generated)
│ ├── SKILL.md
│ ├── portrait-meta.json
│ └── references/
│ ├── thinking-patterns.md
│ ├── decision-framework.md
│ ├── communication-style.md
│ ├── engineering-philosophy.md
│ └── mindset-markers.md
├── jane-doe/ ← installed from GitHub
│ ├── SKILL.md
│ ├── portrait-meta.json
│ └── references/...
└── zhuge-liang/ ← installed from community
└── ...© hashgraph-online, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 12 other files (references) in plugins/dadwadw233/VibePortrait/skills/vibe-portrait of hashgraph-online/awesome-codex-plugins.
Open the folder on GitHubat commit 3e1456a
Vibe Portrait next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Vibe Portrait this skillhashgraph-online/awesome-codex-plugins | 1.3k | — | ~5.4k | Automated safety check: Pass | Apache-2.0 | |
| PR Babysitteropeninterpreter/openinterpreter | 69k | 3 repos | ~4.2k | Automated safety check: Pass | Apache-2.0 | |
| Greplooponyx-dot-app/onyx | 32k | 4 repos | ~3.3k | Automated safety check: Pass | MIT | |
| GitHub Deep Researchbytedance/deer-flow | 84k | 4 repos | ~1.3k | Automated safety check: Pass | MIT | |
| Diagnosing Superpowers Sessionsobra/superpowers | 297k | 3 repos | ~1.7k | Automated safety check: Pass | MIT | |
| Update V8 Versionopeninterpreter/openinterpreter | 69k | 2 repos | ~845 | Automated safety check: Pass | Apache-2.0 |
openinterpreter/openinterpreter
Watches an open GitHub pull request until it merges, handling review comments, diagnosing CI failures and retrying flaky checks along the way.
onyx-dot-app/onyx
Iteratively improves a PR (GitHub), MR (GitLab), or shelved changelist (Perforce) until Greptile gives it a 5/5 confidence score with zero unresolved comments.
bytedance/deer-flow
Researches a GitHub repository over four rounds using the GitHub API and web search, then writes a structured markdown report with timeline, metrics and Mermaid diagrams.
obra/superpowers
Investigates a session where Superpowers went wrong, reads the transcripts on disk and produces an evidence-cited report, optionally prepared as a bug report for the maintainers.
openinterpreter/openinterpreter
Bumps the pinned v8 and rusty_v8 versions in Codex, validates the release-candidate path with the v8-canary check, and traces failures to upstream build changes.
mvanhorn/last30days-skill
Research what people actually say about any topic in the last 30 days.
hashgraph-online/awesome-codex-plugins
Create original anime-style reaction stickers as looping GIFs and MP4 previews, using generated character pose sheets and timed key poses.
hashgraph-online/awesome-codex-plugins
Manage and query Calibre libraries with the calibredb CLI (local paths or Calibre Content server URLs).
hashgraph-online/awesome-codex-plugins
A skill your agent uses when adding, changing, testing, or debugging Rust HTTP APIs and services, especially when Codex needs black-box integration tests, random-port app startup, real database test…
hashgraph-online/awesome-codex-plugins
Make a studio's game look like something at build time — a cover from a real frame of the game (free), painted covers, backdrops, textures and character plates from image models through the…
hashgraph-online/awesome-codex-plugins
Use CALL-E from Codex through the calle CLI. An agent skill from hashgraph-online/awesome-codex-plugins.
hashgraph-online/awesome-codex-plugins
Balance game difficulty, resources, rewards, probability, progression, economies, and dominant strategies.
Works with
Developer personality portrait generator. An agent skill from hashgraph-online/awesome-codex-plugins. Vibe Portrait is an agent skill from hashgraph-online/awesome-codex-plugins. Developer personality portrait generator.
Vibe Portrait fits situations like: what kind of developer am I.
Run `npx skills add hashgraph-online/awesome-codex-plugins --skill vibe-portrait -a claude-code`. Or copy the skill folder (plugins/dadwadw233/VibePortrait/skills/vibe-portrait in hashgraph-online/awesome-codex-plugins) into .claude/skills/vibe-portrait in your project. Claude Code loads it when a task matches its description.
Run `npx skills add hashgraph-online/awesome-codex-plugins --skill vibe-portrait -a codex`. Or copy the skill folder (plugins/dadwadw233/VibePortrait/skills/vibe-portrait in hashgraph-online/awesome-codex-plugins) into .agents/skills/vibe-portrait in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add hashgraph-online/awesome-codex-plugins --skill vibe-portrait -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/vibe-portrait, .gemini/skills/vibe-portrait, .github/skills/vibe-portrait and .opencode/skills/vibe-portrait in your project.
Going by SKILL.md and its folder, Vibe Portrait needs the command-line tools its instructions call (git, gh and npx).
SKILL.md contains no URLs. Its commands use git, gh and npx, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Vibe Portrait is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 5.4k tokens (SKILL.md is roughly 22k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 7.2k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Vibe Portrait: PR Babysitter (openinterpreter/openinterpreter, 69k stars), Greploop (onyx-dot-app/onyx, 32k stars), GitHub Deep Research (bytedance/deer-flow, 84k stars) and Diagnosing Superpowers Sessions (obra/superpowers, 297k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
hashgraph-online (a GitHub organization) maintains it in hashgraph-online/awesome-codex-plugins, which has 1,267 GitHub stars. The repository holds 716 skills in this directory. The repository was last updated on October 10, 2026.
Source: hashgraph-online/awesome-codex-plugins on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.