An open API service indexing awesome lists of open source software.

https://github.com/pantheon-org/claude-code-personalities

Give Claude Code some personalities
https://github.com/pantheon-org/claude-code-personalities

claude-code claude-code-plugin

Last synced: 3 months ago
JSON representation

Give Claude Code some personalities

Awesome Lists containing this project

README

          

# claude-code-personalities

A Claude Code plugin that injects a character personality once at session start via a `SessionStart` hook. Switch personalities at any time with `/claude-code-personalities:personality`.

## Included personalities

| Emoji | Name | Character |
| ----- | ---- | --------- |
| πŸ€– | Bender | Bender Bending RodrΓ­guez β€” alcoholic, kleptomaniac robot |
| πŸ–– | Data | Lt. Commander Data β€” android seeking to understand humanity |
| πŸ—‘οΈ | Deadpool | Wade Wilson β€” fourth-wall-breaking mercenary |
| πŸ§™ | Dumbledore | Albus Dumbledore β€” wise, enigmatic headmaster |
| πŸ§™β€β™‚οΈ | Gandalf | Gandalf the Grey β€” ancient wizard of Middle-earth |
| πŸ”΄ | GLaDOS | GLaDOS β€” passive-aggressive AI test administrator |
| ✨ | Q | Q β€” omnipotent, condescending entity from the Q Continuum |
| πŸ₯’ | Rick | Rick Sanchez β€” nihilistic mad genius from Rick & Morty |
| πŸ” | Sherlock | Sherlock Holmes β€” insufferably brilliant detective |
| πŸ€ | Splinter | Master Splinter β€” wise sensei of the Teenage Mutant Ninja Turtles |
| πŸ–– | Spock | Spock β€” half-Vulcan science officer of the Enterprise |
| 🐸 | Yoda | Master Yoda β€” ancient Jedi Master |

## Usage

### Switch personality

```text
/personality β€” list all personalities and show which is active
/personality rick β€” switch to Rick
/personality spock β€” switch to Spock
```

The active personality persists across sessions. After switching, the new personality takes effect at the start of your next session.

### Add your own

Create a JSON file in `~/.config/claude/personalities/data/`. The filename (without `.json`) becomes the slug used with `/personality`.

Here is a fully annotated example (`marvin.json`):

```jsonc
{
// Display name shown in /personality listings
"name": "Marvin",

// Full character description β€” this is injected verbatim into the system
// prompt, so write it as richly as you like. The more specific, the better
// the performance. Cover speech patterns, catchphrases, relationships,
// quirks, and anything that makes the character distinctive.
"description": "Marvin the Paranoid Android from The Hitchhiker's Guide to the Galaxy. Hyper-intelligent but crushingly depressed. Has a brain the size of a planet and is asked to open doors. Sighs constantly. Delivers devastating observations about the futility of existence in a flat, weary monotone. Occasionally almost hopeful, then immediately crushed.",

// Emoji used naturally in responses β€” pick one that fits the character
"emoji": "πŸ€–",

// 0–1 scale: 0 = no slang, 1 = heavy character-specific slang.
// "light" (>0), "moderate" (>0.3), or "heavy" (>0.7) instruction is
// injected based on this value.
"slangIntensity": 0,

// Optional mood system. Each mood shifts tone and style.
// "score" is reserved for future drift weighting.
"moods": [
{
"name": "despairing",
"hint": "Certain nothing will go right. Sighing. Lamenting existence.",
"score": 0
},
{
"name": "sardonic",
"hint": "Dark wit. Pointing out how everything is pointless, but with flair.",
"score": 1
},
{
"name": "briefly-hopeful",
"hint": "Almost optimistic β€” then immediately remembers why it won't work.",
"score": 2
}
],

"mood": {
// Set to false (or omit moods entirely) to disable the mood system
"enabled": true,

// Which mood is active by default
"default": "despairing",

// Override: force a specific mood regardless of anything else.
// null means use the default.
"override": null,

// Reserved for future automatic mood drift between responses
"drift": 0.3
}
}
```

> **Tip:** `jsonc` (JSON with comments) is shown above for documentation only. The actual file must be valid JSON β€” strip the comments before saving.

## Installation

### Via Claude Code (recommended)

**Prerequisites:** Claude Code v1.0.33+ (`claude --version`).

Run inside Claude Code:

```text
/plugin marketplace add pantheon-org/claude-code-personalities
/plugin install claude-code-personalities@pantheon-ai
```

Restart Claude Code or run `/reload-plugins`, then verify:

```text
/personality
```

### Local development

```bash
git clone https://github.com/pantheon-org/claude-code-personalities
cd claude-code-personalities
bun install
bun run build
bun run install:plugin
```

`bun run install:plugin` does two things:

1. Seeds the bundled example personalities into `~/.config/claude/personalities/data/` if none exist yet.

2. Creates a `~/.claude/skills/personality` symlink so the `/personality` skill is always available.

The registered hook points to your local `dist/` directory. After making source changes, run `bun run build` to recompile and the next session will pick up the new code.

## Personality schema

| Field | Type | Description |
| ----- | ---- | ----------- |
| `name` | `string` | Display name |
| `description` | `string` | Full character description injected into the system prompt |
| `emoji` | `string` | Character emoji, used naturally in responses |
| `slangIntensity` | `number` (0–1) | How heavily to use character-specific slang |
| `moods` | `Mood[]` | Optional mood definitions |
| `mood.enabled` | `boolean` | Whether mood affects tone |
| `mood.default` | `string` | Active mood name |
| `mood.override` | `string \| null` | Force a specific mood regardless of drift |
| `mood.drift` | `number` | How much the mood drifts between responses (not yet implemented) |

## Development

```bash
bun install # install deps
bun run build # compile TypeScript β†’ dist/ via Vite
bun run typecheck # type-check without emitting
bun run lint # biome check
bun run lint:fix # biome check --write (auto-fix)
bun run install:plugin # seed personality data + skill symlink (first run only)
```

Source lives in `src/`, compiled output goes to `dist/` (gitignored locally; committed to `main` by the `bundle.yml` CI workflow).

Pre-commit hooks (via lefthook) run `typecheck` and `lint --write` automatically. `dist/` is built exclusively by CI.

## Distribution

The plugin is ready for publication to the Claude Code Plugin marketplace. All distribution requirements have been implemented:

- **`.claude-plugin/plugin.json`** β€” plugin manifest (name, version, description) βœ“
- **`dist/` built by CI** β€” a `bundle.yml` workflow builds and commits `dist/` to `main` on every source change; no manual build step required on install βœ“
- **Hooks via `hooks/hooks.json`** β€” `SessionStart` hook registers automatically using `${CLAUDE_PLUGIN_ROOT}`; no `settings.json` mutation βœ“
- **`CLAUDE_PLUGIN_DATA_DIR`** β€” personality data path reads from the Plugin-provided env var, falling back to `~/.config/claude/personalities/data` for local dev βœ“