Skip to main content

simt-dev

Shared agent rules, skills and git hooks for a repository.

One command adopts a repository: it reads what the repo actually runs, projects the matching rules into the files your agent already reads, and installs a pre-commit hook that refuses a commit which breaks a gate that repo can genuinely run.

  • Nothing is declared that cannot run. Every gate is probed against the working tree before it is written. A gate whose tool is absent is dropped, with a remedy naming the package to install — never silently present, never silently absent.
  • Nothing an agent reads is written twice. Each rule goes to exactly one place, chosen by what the harness actually reads.
  • The rules are a projection, not a copy. They carry markers, so check can tell drift from a deliberate edit, and sync can regenerate.
  • The tool explains itself. rules why answers "why did I get told this?" from a numbered record of the decisions behind the rules, with the rejected alternatives attached.

Install

Requires Node >= 22.20.0 (the PyPI install can supply it, see below).

# pinned, per repository - what CI and a teammate both get
npm i -D simt-dev@0.2.1

# or globally, if you would rather not add a dependency
npm i -g simt-dev@0.2.1

# or with no install at all, for a one-off
npx -y simt-dev@0.2.1 check

From PyPI

The same tool, from the same bytes. The wheel carries the exact contents the npm tarball carries — the wheel is not a wrapper around npm install, so nothing is fetched when you install it.

pip install simt-dev

# and if this machine has no node at all
pip install "simt-dev[node]"

simt is the command on both channels. Where node comes from is resolved in this order, and the first one that answers wins: SIMT_DEV_NODE, the bundled node from the node extra, then node on your PATH. If none of them resolve, you get a message naming the remedy rather than a placeholder node path.

From Homebrew

brew install QuazarMedia/homebrew-tap/simt-dev

The formula declares its own node dependency, so brew install gives you a working command on a machine that has never had Node.

Pin the version. The tool writes a content digest into the files it generates, and an unpinned upgrade changes them under you.

Use

simt init            # adopt or scaffold this repository (dry-run; --yes to write)
simt doctor          # what this repo is, and whether its config is healthy
simt check           # the gate: projection drift, manifest validity, policy
simt sync --yes      # regenerate the projection
simt upgrade --yes   # move every consumer of this tool to this version
simt rules why ADR-042   # why a rule says what it says, and what was rejected
simt compare         # what changed across every repository that adopted it

init and sync print a plan and write nothing without --yes. Neither commits or pushes.

What it writes

Path What
AGENTS.md the projection, between <!-- simt:begin --> and <!-- simt:end --> (renamed from simt-dev:; the old markers are still read, and a region migrates on its next write)
simt.json your manifest: which gates to declare, which substitutions to fill
.cursor/rules/*.mdc, .claude/rules/*.md, .agents/rules/*.md, .github/instructions/*.instructions.md one file per rule, written only for the harnesses that read their own directory
.editorconfig, .gitattributes baseline regions
.simt-hooks/ and core.hooksPath the shared dispatcher, fail-closed

Anything outside the markers is yours. simt-dev never edits it and never reverts it.

Platform

macOS and Linux. The hooks are POSIX sh; there is no Windows build and no plan for one. npm i on Windows fails with npm's EBADPLATFORM, which npm will not let a package explain — so the answer is here: use WSL2, and the gate works normally inside it.

A Windows checkout without WSL2 can still read every rule this tool generates, because the projection is plain text in AGENTS.md and the per-harness rule files. Only the hooks and the CI gate need the POSIX host.

How the rules are chosen

Detection reads what the repository runs — its dependency manifests, its build files, its CI workflows — and resolves that against a registry of capabilities. Resolution is a scored ranking over path, keyword, name, capability and stack: no model, no network, no guessing, so a pull request can meaningfully diff the answer.

Not every ecosystem has a profile yet. A Go, Rust, .NET, Ruby, Swift, Dart or Elixir repository is detected and gets facts, but it is adopted with the core rules and no gates until its gate templates are written. A repository with no gates is a repository with an agent and no pre-commit hook — better than one with a hook that runs nothing, but not full support, and this README will not pretend otherwise.

Every behaviour that is a choice rather than a detail has a numbered record, and the records are readable with simt rules why <id>. If the tool ever does something you did not expect, that command is the shortest path from the symptom to the reason.

Licence

Apache-2.0. See LICENSE.

Metadata

Release files for simt-dev 0.2.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for simt-dev 0.2.1
File Size Uploaded
simt_dev-0.2.1.tar.gz 416.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for simt-dev 0.2.1
File Interpreter ABI Platform
simt_dev-0.2.1-py3-none-any.whl Python 3 none any Details

Total release size: 949.5 kB

Release files / simt_dev-0.2.1.tar.gz

Download URL simt_dev-0.2.1.tar.gz
Size 416.8 kB
Tags Source
SHA-256 checksum
How to use checksums
6fd8b6885d71fc04be6a3f3f48517a6447c1681b7401e8feb1ba70565530e6d7
BLAKE2b-256 checksum
How to use checksums
c553641737af343b0f4e0517bc0ca3baccc2500c1c2a0ce978e6d11581acd2d2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.9.6

Release files / simt_dev-0.2.1-py3-none-any.whl

Download URL simt_dev-0.2.1-py3-none-any.whl
Size 532.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
e9677d53487297b228275285780867538d1a3d6f804b293bc64ae2c0923f95c6
BLAKE2b-256 checksum
How to use checksums
e504037a037cdf01d9f9000c248c38bb8a8d15472090cb6e1470a62aceac1d8a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.9.6

Release history Release notifications | RSS feed

This release

0.2.1 This release

2 release files

0.2.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page