---
name: People Stubs
slug: people-stubs
category: Automation
description: People Stubs creates minimal Teams/People/@Name.md placeholders for unresolved [@*] wikilinks in an Obsidian vault. Use it when meeting notes or interviews reference people that do not have a vault file yet.
github: "https://github.com/benoror/obsidianos_work/tree/main/.agents/skills/people-stubs"
language: JavaScript
stars: 165
forks: 13
install: "npx degit https://github.com/benoror/obsidianos_work/tree/main/.agents/skills/people-stubs ~/.claude/skills/people-stubs"
installs_to: ~/.claude/skills/people-stubs
source_path: .agents/skills/people-stubs/SKILL.md
collection_size: 24
category_size: 2226
collection_url: "https://dirskills.com/collections/benoror/obsidianos_work"
added: 2026-09-08T05:35:08.109Z
last_synced: 2026-09-08T05:35:08.109Z
canonical_url: "https://dirskills.com/skills/people-stubs"
---

# People Stubs

People Stubs creates minimal Teams/People/@Name.md placeholders for unresolved [@*] wikilinks in an Obsidian vault. Use it when meeting notes or interviews reference people that do not have a vault file yet.

**Install:**

```bash
npx degit https://github.com/benoror/obsidianos_work/tree/main/.agents/skills/people-stubs ~/.claude/skills/people-stubs
```

## README

# People Stubs

## Usage

- `/people-stubs` — Scan unresolved `[[@*]]` links, present a creation list, prompt to confirm each.
- `/people-stubs --auto` — Create stubs for every unresolved `[[@*]]` link without per-name confirmation. Useful after a big batch of new interviews.

## Why this skill exists

When meeting notes are wrapped via `/fill-participants`, names get linked as `[[@Jane Doe]]`, `[[@John Smith]]`, etc. If the corresponding `Teams/People/@Name.md` file doesn't exist yet, Obsidian shows a dead-link indicator and the name doesn't appear in `People.base`. This skill creates the missing stubs in one pass.

Stubs are intentionally minimal — they're placeholders. The user (or a future `/onboard-person` skill) fills in the real metadata (Team, Location, FullName, Start Date, etc.).

## Workflow

### Step 1: Discover unresolved [[@*]] links

Run `obsidian unresolved format=json` and filter to entries where the link target starts with `@`. Aggregate by target — one stub per unique target, with a list of files where it's referenced.

### Step 2: Present the creation list

Display a numbered table sorted by reference count descending:

```
| # | Stub to create | Referenced in (count) | Sample file |
|---|----------------|----------------------|-------------|
| 1 | Teams/People/@Jane Doe.md | 6 | Meetings/Interviews/Interview Alex Kim... |
| 2 | Teams/People/@John Smith.md | 3 | Meetings/Engineering/Weekly Team Leads... |
| 3 | Teams/People/@Alex Kim.md | 2 | Meetings/Engineering/Weekly Team Leads... |
```

Ask the user: "all", "1,2", "none", or per-line skips.

### Step 3: Create stubs

For each confirmed stub, write `Teams/People/@<Name>.md` with this minimal frontmatter:

```yaml
---
FullName:
Team:
Location:
created: <ISO 8601 with offset>
---
```

Use `obsidian create path="Teams/People/@<Name>.md" content="<frontmatter>"` so Obsidian indexes it immediately (the next `/vault-health` run won't show the link as unresolved any more).

Leave `FullName`, `Team`, `Location` empty — the stub is a placeholder. The agent can fill in `FullName` if it can infer from the wikilink display text (e.g. `[[@Jane Doe]]` → `FullName: Jane Doe`).

### Step 4: Report

Print a summary:
```
Created 3 stubs:
  Teams/People/@Jane Doe.md
  Teams/People/@John Smith.md
  Teams/People/@Alex Kim.md

Next steps:
- Open each stub and fill in Team / Location / Start Date.
- Or run /onboard-person <name> to pull metadata from external sources.
```

### Step 5: Commit

See [/commit](../commit/SKILL.md). Commit message: `chore(people): add N stubs (Jane Doe, John Smith, ...)`.

## Important Notes

- **Don't create stubs for the user's own aliases** — they're handled by `USER.md` aliases.
- **Don't create stubs for candidate names** (someone interviewed once but never hired). The /vault-health report should let the user skip those manually. If a name has only 1-2 references and they're all from an interviews folder, surface a hint that this might be a candidate.
- **Filename collision**: if `Teams/People/@<Name>.md` exists already (even empty), don't overwrite. Skip and note in the report.
- Stubs make subsequent `/vault-health` runs cleaner — the unresolved-links count drops as stubs are created.
