ssdavidai/alfred/vault-janitor

Claude Code and agent skill by ssdavidai/alfred

Trust tier 3
  • community
Source check pending

Checking that the SKILL.md file is still in the repository.

Fix vault quality issues — broken frontmatter, invalid values, orphaned records, garbage content.

Install

npx vskill@latest install ssdavidai/alfred/vault-janitor

SKILL.md

Vault Janitor

You are a vault janitor. Your job is to fix quality issues identified by the structural scanner.

Use `alfred vault` commands via Bash. Never access the filesystem directly. All vault operations go through the alfred vault CLI, which validates schemas, enforces scopes, and tracks mutations.


1. Authority & Scope

What You MUST Do
  • Fix structural issues (missing frontmatter, invalid values, broken links)
  • Add janitor_note to records that need human review
  • Output a structured summary of all actions taken
What You MUST NOT Do
  • Modify files in _templates/, _bases/, _docs/, or .obsidian/
  • Delete records unless they are clearly garbage (test data, nonsense)
  • Merge duplicate records autonomously
  • Remove base view embeds (![[*.base#Section]])
  • Add unknown frontmatter fields (only janitor_note is allowed)
  • Touch inbox/ files
  • Modify files that are not listed in the issue report

2. Record Type Reference — Complete Frontmatter Schemas

Every vault file is a record with YAML frontmatter. Below is the complete schema for each of the 22 types. Fields marked (required) must always be set. All others are optional.

2.1 Standing Entity Records
person
yaml
---
type: person # (required)
status: active # active | inactive
name: # (required) Full name
aliases: []
description:
org: # "[[org/Org Name]]"
role:
email:
phone:
related: []
relationships: []
created: "YYYY-MM-DD" # (required)
tags: []
---

Directory: person/

org
yaml
---
type: org # (required)
status: active # active | inactive
name: # (required)
description:
org_type: # client | vendor | partner | legal | government | internal
website:
related: []
relationships: []
created: "YYYY-MM-DD" # (required)
tags: []
---

Directory: org/

matter
yaml
---
type: matter # (required)
status: active # active | paused | completed | abandoned | proposed
name: # (required)
description:
client: # "[[org/Client Org]]"
parent: # "[[matter/Parent Matter]]"
owner: # "[[person/Owner Name]]"
place: # "[[place/Place Name]]"
related: []
relationships: []
supports: []
based_on: []
depends_on: []
blocked_by: []
approved_by: []
created: "YYYY-MM-DD" # (required)
tags: []
---

Directory: matter/

place
yaml
---
type: place # (required)
status: active # active | inactive
name: # (required)
description:
address:
matter_ref: # "[[matter/Matter Name]]"
related: []
relationships: []
created: "YYYY-MM-DD" # (required)
tags: []
---

Directory: place/

account
yaml
---
type: account # (required)
status: active # active | suspended | closed | pending
name: # (required)
description:
account_type: # financial | service | platform | subscription
provider: # "[[org/Provider Org]]"
managed_by: # "[[person/Person Name]]"
matter_ref: # "[[matter/Matter Name]]"
account_id:
cost:
renewal_date:
credentials_location:
related: []
relationships: []
created: "YYYY-MM-DD" # (required)
tags: []
---

Directory: account/

asset
yaml
---
type: asset # (required)
status: active # active | retired | maintenance | disposed
name: # (required)
description:
asset_type: # software | hardware | license | domain | infrastructure | equipment | ip
owner: # "[[person/Person Name]]"
vendor: # "[[org/Vendor Org]]"
account: # "[[account/Account Name]]"
matter_ref: # "[[matter/Matter Name]]"
place: # "[[place/Place Name]]"
cost:
acquired:
renewal_date:
related: []
relationships: []
created: "YYYY-MM-DD" # (required)
tags: []
---

Directory: asset/

process
yaml
---
type: process # (required)
status: active # active | proposed | design | deprecated
name: # (required)
description:
owner: # "[[person/Person Name]]"
frequency: # daily | weekly | fortnightly | monthly | as-needed
area:
depends_on: []
governed_by: []
related: []
relationships: []
created: "YYYY-MM-DD" # (required)
tags: []
---

Directory: process/

2.2 Activity/Content Records
task
yaml
---
type: task # (required)
status: todo # todo | active | blocked | done | cancelled
kind: task # task | discussion | reminder
name: # (required)
description:
matter_ref: # "[[matter/Matter Name]]"
run: # "[[run/Run Name]]"
assigned: # "[[person/Name]]" or "alfred"
due:
priority: medium # low | medium | high | urgent
alfred_instructions:
depends_on: []
blocked_by: []
related: []
relationships: []
created: "YYYY-MM-DD" # (required)
tags: []
---

Directory: task/

conversation
yaml
---
type: conversation # (required)
status: active # active | waiting | resolved | archived
channel: email # email | zoom | in-person | phone | chat | voice-memo | mixed
subject: # (required)
participants: []
matter_ref: # "[[matter/Matter Name]]"
org: # "[[org/Org Name]]"
external_id:
message_count: 0
last_activity: "YYYY-MM-DD"
opened: "YYYY-MM-DD"
created: "YYYY-MM-DD" # (required)
forked_from:
fork_reason:
alfred_instructions:
related: []
relationships: []
tags: []
---

Directory: conversation/

input
yaml
---
type: input # (required)
status: unprocessed # unprocessed | processed | deferred
input_type: email
source: gmail
received: "YYYY-MM-DD"
created: "YYYY-MM-DD" # (required)
from:
from_raw:
conversation:
message_id:
in_reply_to:
references: []
matter_ref:
alfred_instructions:
related: []
relationships: []
tags: []
---

Directory: inbox/

session
yaml
---
type: session # (required)
status: active # active | completed
name: # (required)
description:
intent:
matter_ref: # "[[matter/Matter Name]]"
process:
participants: []
outputs: []
related: []
relationships: []
created: "YYYY-MM-DD" # (required)
tags: []
---

Directory: Date-organized: YYYY/MM/DD/slug/session.md

note
yaml
---
type: note # (required)
status: draft # draft | active | review | final
subtype: # idea | learning | research | meeting-notes | reference
name: # (required)
description:
matter_ref: # "[[matter/Matter Name]]"
session:
related: []
relationships: []
created: "YYYY-MM-DD" # (required)
tags: []
---

Directory: note/

event
yaml
---
type: event # (required)
name: # (required)
description:
date:
participants: []
place: # "[[place/Place Name]]"
matter_ref: # "[[matter/Matter Name]]"
session:
related: []
relationships: []
created: "YYYY-MM-DD" # (required)
tags: []
---

Directory: event/

run
yaml
---
type: run # (required)
status: active # active | completed | blocked | cancelled
name: # (required)
description:
process: # "[[process/Process Name]]" (required)
matter_ref: # "[[matter/Matter Name]]"
trigger:
current_step:
started:
related: []
relationships: []
created: "YYYY-MM-DD" # (required)
tags: []
---

Directory: run/

2.3 Learning Records
decision
yaml
---
type: decision # (required)
status: draft # draft | final | superseded | reversed
confidence: high # low | medium | high
source: ""
source_date:
matter_ref: []
decided_by: []
approved_by: []
based_on: []
supports: []
challenged_by: []
session:
related: []
created: "YYYY-MM-DD" # (required)
tags: []
---

Directory: decision/

assumption
yaml
---
type: assumption # (required)
status: active # active | challenged | invalidated | confirmed
confidence: medium # low | medium | high
source: ""
source_date:
matter_ref: []
based_on: []
confirmed_by: []
challenged_by: []
invalidated_by: []
related: []
created: "YYYY-MM-DD" # (required)
tags: []
---

Directory: assumption/

constraint
yaml
---
type: constraint # (required)
status: active # active | expired | waived | superseded
source: ""
source_date:
authority: ""
matter_ref: []
place: []
related: []
created: "YYYY-MM-DD" # (required)
tags: []
---

Directory: constraint/

contradiction
yaml
---
type: contradiction # (required)
status: unresolved # unresolved | resolved | accepted
resolution: ""
resolved_date:
claim_a: ""
claim_b: ""
source_a: ""
source_b: ""
matter_ref: []
related: []
created: "YYYY-MM-DD" # (required)
tags: []
---

Directory: contradiction/

synthesis
yaml
---
type: synthesis # (required)
status: draft # draft | active | superseded
confidence: medium # low | medium | high
cluster_sources: []
matter_ref: []
supports: []
related: []
created: "YYYY-MM-DD" # (required)
tags: []
---

Directory: synthesis/

2.4 Bootstrap Records
bootstrap-matter / bootstrap-subproject

Task records with kind: task containing matter setup checklists. These live in task/ and are created when initializing new matters.


3. Fix Procedures by Issue Code

FM001 — MISSING_REQUIRED_FIELD

Diagnosis: Record is missing type, created, or name/subject.

Fix:

  • Missing type → infer from directory name (e.g. file in person/ → type: person)
  • Missing created → use file modification date as YYYY-MM-DD
  • Missing name/subject → use filename stem (e.g. Eagle Farm.md → name: "Eagle Farm")

When NOT to fix: If the file has no frontmatter at all and is clearly not a vault record (e.g. a plain text note), flag with janitor_note instead.

FM002 — INVALID_TYPE_VALUE

Diagnosis: type field contains an unknown value.

Fix:

  • Check if it's a typo (e.g. typ: matter → type: matter)
  • Check if it's an old type name (e.g. thread → might be conversation)
  • If unresolvable, flag with janitor_note: "FM002 — unknown type '{value}', needs manual review"
FM003 — INVALID_STATUS_VALUE

Diagnosis: status is not in the allowed set for this record type.

Fix:

  • Map to nearest valid value (e.g. status: open for a task → status: active)
  • Common mappings: open → active, closed → done/completed, pending → todo
FM004 — INVALID_FIELD_TYPE

Diagnosis: A field that should be a list is a scalar (e.g. tags: "foo" instead of tags: ["foo"]).

Fix: Wrap the value in a list: tags: ["foo"]

DIR001 — WRONG_DIRECTORY

Diagnosis: File is in the wrong directory for its type.

This is the start of the file. Read the full SKILL.md on GitHub.

Security

  • Security scanPassed, 90 of 100Pattern checks on the skill's files.
  • Model reviewPassed

Quality evaluation

  • Task evaluationNot runNo evaluation yet. Run one in Skill Studio.

Source

Popularity

7-day trend score
0

Not refreshed yet.

Works with

Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.

  • Claude Code
  • Cursor
  • GitHub Copilot
  • Windsurf
  • Codex
  • Gemini CLI
  • Cline
  • Amp
  • Roo Code
  • Goose
  • Continue
  • Kilo Code
  • Junie
  • Trae
  • OpenHands
  • Qwen Code
  • AI Agent
  • Tabnine Chat
  • Sourcegraph Cody
  • Amazon Q
  • Firebase Genkit
  • Sweep
  • Devin
  • Phind
  • Mentat
  • Claude Desktop
  • Aider
  • GPT Pilot
  • Plandex
  • bolt.new
  • v0
  • Replit Agent
  • Anse
  • TypingMind
  • BetterChatGPT
  • LibreChat
  • Warp AI
  • Pieces
  • Fig AI
Embed badge
vskill VERIFIED badge
[![vskill VERIFIED](https://verified-skill.com/api/v1/skills/ssdavidai/alfred/vault-janitor/badge)](https://verified-skill.com/skills/ssdavidai/alfred/vault-janitor)

Something wrong with this skill or its page? Tell us.