Projectv0.3.0
Pulsar
Pulsar scores a repository and each agent diff under one shared policy.
An agent says a change is done. Pulsar checks the diff against the rules your repository committed, lists what the change introduced by file and line, and refuses to compare scores if the rules changed in between.
npx @skastr0/pulsar agent score .01
The pain
- Done means green checks. An agent reports done. Typecheck is green and the tests pass.
- The diff says otherwise. A
catchthat returns{}, a validator that always returnstrue, a@ts-ignorewith no reason, and no test covers any of them. - A repo-wide score hides it. One bad change disappears into an average that still looks fine.
02
See it run
What did this diff hit?
pulsar score --diff HEAD..WORKTREE --changed-only --agent-view .Pulsar Agent View: ROUTERange: HEAD..WORKTREEChanged files: 1Introduced diagnostics: 7- 6 introduced diagnostic(s) need review routing.TS-AB-02-unused-exports WARN Export loadSearchCache in src/search/cache.ts: unusedTS-LD-07-unsafe-type-erosion INFO Unsafe `any` in assertion `<expression>` at src/search/cache.ts:7TS-LD-09-error-channel-opacity WARN Catch fallback hides error channel in boundary `loadSearchCache` at src/search/cache.ts:8 fix: Expose the failure contract (medium)TS-SL-03-suppressions WARN ts-ignore is missing justification at src/search/cache.ts:6TS-SL-06-confidence-claim-mismatch WARN validateSearchCache claims runtime validation; observed behavior: unconditional success at src/search/cache.ts:13 fix: Make the claim true or rename it (medium)Loosening the policy can't pass as a fix.
pulsar persona apply strict-type-safety --to ./.pulsar/vector.json Wrote repo vector: .pulsar/vector.jsonpulsar agent score --expect-policy d654fb01c258… . # exit 1{"status":"error","error":{"code":"POLICY_MISMATCH", "message":"The assessment policy changed; this run cannot verify a repair under the expected policy."}}The whole repository, with no setup.
pulsar agent score . # exit 3: some evidence missing{ "schema": "pulsar/agent/v1alpha1", "status": "completed", "result": { "assessment": { "hard_gate_status": "pass", "readiness": { "score": 0.676092553184, "status": "yellow" }, "counts": { "applicable": 32, "not_applicable": 11, "insufficient_evidence": 29, "failed": 0 } }, "findings": [ { "signal_id": "TS-LD-02-function-size-distribution", "severity": "warn", "message": "Function outlier `collectFacts/Effect.gen` — 147 LOC", "location": { "file": "src/facts/lint.ts", "line": 378 } }, … ] } }03
How it works
The rules live in a committed .pulsar/vector.json, plus optional project modules. Together they hash to one fingerprint, and every agent and person in the repo is scored against it.
It runs 75 checks: TypeScript (built on Quartz), Rust, and checks on git history and package manifests that work in any language. Only checks backed by proof can block a change; the rest flag it for review. score --diff scores the base commit and your working tree, then lists only what the change introduced.
Scoring runs locally, with no account and no API key. One optional command calls a model: pulsar agent judge sends the source files you declare in .pulsar/ownership.json, with your rubric, to TypeSafe's Jev model to check whether callers share one rule. --dry-run shows what it would send.
04
Where it fits
The check every agent in a repository runs against the same committed policy before it says a change is done. Its TypeScript analysis runs on Quartz.
05
Install
- Version
- 0.3.0
- Runs on
- macOS and Linux, arm64 and x64
- Install
npx @skastr0/pulsar agent score .