Thanks for considering a contribution. This repo is small, opinionated, and intentionally kept to a narrow surface area. The contribution rules below exist to keep it that way.
Open an issue first for anything larger than a typo. A bug report, a new skill idea, a folder-structure change, a rule in a why-not-*.md — if it is more than a spelling fix, file an issue and wait for a discussion thread before writing code. This has saved contributors (and me) hours on pull requests that turned out to not fit the design. One paragraph is enough. You do not need to write a proposal document.
Read the philosophy. PHILOSOPHY.md explains the four-regime model, the tier system, and why this pack draws the lines where it does. About half of the rejected PRs in comparable packs ask for features that conflict with the regime model; knowing the model up front saves that round-trip.
One skill per PR. If you are adding /foo and also fixing a bug in /save, those are two PRs. Skills are the natural unit of review in this pack and mixing them makes reviews longer and riskier to revert.
No breaking changes without a major version bump. Anything that changes a frontmatter key, a folder role, a command name, or the [bot:*] commit prefix convention is a breaking change. Breaking changes require the version in .claude-plugin/plugin.json to go from 0.x.y to 1.0.0 (or from 1.x.y to 2.0.0) and an entry in CHANGELOG.md under a ### Breaking heading. We do not ship breaking changes silently.
Every PR runs the full test harness. From the repo root: bash tests/run_all.sh. The harness creates a known-state vault fixture in a temp directory, runs every skill against it, and diffs the output against expected-state files in tests/expected/. If your change modifies output, update the expected files in the same PR.
Direct push to main is the maintainer default, not the contributor default. This repo lives under fidgetcoding where maintainers push directly to main by policy. Contributor PRs are still required to target main through review. The direct-push policy does not mean "anyone can push" — it means "once merged, the change is live, no staging branch."
-
Decide on the regime it writes into. A skill that only reads and reports (like
/tether --dry-run) has no regime concern. A skill that writes must declare its target regime in the SKILL.md frontmatter asregime: HUMAN|PROJECT|SYNC|LLM-COMPILED. SYNC is reserved and should not be a write target outside the sync pipeline; PRs proposing a SYNC-writer will be rejected on sight. -
Create the skill directory.
mkdir -p skills/<name>/references && touch skills/<name>/SKILL.md. If the skill needs reference docs (a schema, a template), put them underskills/<name>/references/. Shared schemas that multiple skills read go underskills/save/references/wiki-schema.md— do not create parallel copies. -
Write the SKILL.md. Frontmatter must include
name,description,allowed-tools, andregime. Body must include: (a) invocation syntax, (b) mandatory dry-run preview description, (c) worked example, (d) edge cases and refusals. Cross-referencewiki-schema.mdfor any frontmatter keys or folder roles. -
Register it in
plugin.json. Add an entry to theskillsarray. If the skill should also have a slash command, add a wrapper incommands/<name>.md. -
Write tests. At minimum, one happy-path test and one refusal test (invalid input, missing prerequisite, regime violation — pick the most likely failure). Place in
tests/<name>/. -
Update the README command table. The table in
README.mdmust include every public slash command. If yours isn't listed, it isn't discoverable.
Open an issue tagged architecture. Include: the problem you are trying to solve, why existing skills cannot solve it, the regime implications, and a sketch of the change. I will either agree and mark it accepted (meaning a PR would be welcome) or disagree and mark it wontfix with a reason. Do not write the PR before the issue is accepted — I have rejected architecturally-sound PRs that conflicted with upcoming changes not yet in the repo, and that is wasteful for everyone.
Rule-level changes (a new rule in PHILOSOPHY.md, a new regime, a new frontmatter key) are architecture changes. Command surface changes (a new slash command that does something no existing command does) are also architecture changes. Implementation changes within an existing skill are not — those are normal PRs.
- Anything that introduces a dependency on a specific task manager other than the Obsidian Tasks plugin. This pack deliberately does not integrate with paid task managers and will not.
- Anything that removes the
[bot:*]commit prefix convention. That prefix is load-bearing for downstream sync filters. - Anything that writes to a SYNC regime file outside a declared sync pipeline.
- Features that require a vector database or an external search index. The pack is compilation-only by design; tier 3 retrieval-memory is explicitly deferred.
Contributions are made under the same MIT license as the repo. By opening a PR you agree to that. See LICENSE.