@rmyndharis/aimhooman 0.1.8 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/rules/aimhooman.md +9 -6
- package/.claude-plugin/marketplace.json +3 -3
- package/.claude-plugin/plugin.json +2 -2
- package/.clinerules/aimhooman.md +9 -6
- package/.codex-plugin/plugin.json +3 -3
- package/.cursor/rules/aimhooman.mdc +9 -6
- package/.github/copilot-instructions.md +9 -6
- package/.kiro/steering/aimhooman.md +9 -6
- package/.windsurf/rules/aimhooman.md +9 -6
- package/AGENTS.md +9 -6
- package/CHANGELOG.md +147 -0
- package/CONTRIBUTING.md +2 -3
- package/GEMINI.md +9 -6
- package/README.md +56 -374
- package/SECURITY.md +6 -4
- package/bin/aimhooman.mjs +190 -55
- package/docs/ai-artifacts.gitignore +63 -0
- package/docs/catalog.md +41 -0
- package/docs/design/frictionless-enforcement.md +27 -17
- package/hooks/hooks.json +1 -1
- package/package.json +5 -2
- package/rules/paths.json +0 -114
- package/schemas/overrides.schema.json +4 -1
- package/skills/aimhooman/SKILL.md +11 -8
- package/src/exclude.mjs +16 -2
- package/src/githooks.mjs +38 -3
- package/src/gitx.mjs +68 -6
- package/src/hook.mjs +33 -12
- package/src/report.mjs +23 -5
- package/src/scan-session.mjs +14 -21
- package/src/scan-target.mjs +10 -10
- package/src/scan.mjs +9 -24
- package/src/state.mjs +59 -10
- package/rules/secrets.json +0 -92
|
@@ -12,13 +12,16 @@ Its policy:
|
|
|
12
12
|
`.copilot/*`, `.cursor/session*`, `.cursor/chats/*`, `.cursor/logs/*`,
|
|
13
13
|
`.aider.*`, `.specstory/*`, `.continue/sessions/*`, `.playwright-mcp/*`,
|
|
14
14
|
`.remember/*`, `.superpowers/*`, and `.agent/*`. The examples are not
|
|
15
|
-
exhaustive; the packaged `rules/paths.json` is the detection source of truth
|
|
16
|
-
If one is staged, unstage it and keep it out of Git
|
|
15
|
+
exhaustive; the packaged `rules/paths.json` is the detection source of truth
|
|
16
|
+
for these artifacts. If one is staged, unstage it and keep it out of Git
|
|
17
|
+
instead.
|
|
17
18
|
- Never commit secrets: a real `.env` (not `.env.example`), private keys
|
|
18
19
|
(`id_rsa` and files containing a private-key header), `.aws/credentials`,
|
|
19
20
|
`.claude/.credentials.json`, service-account keys, or a provider API key
|
|
20
21
|
(GitHub, GitLab, npm, Slack, Anthropic, OpenAI, Google, Stripe, Hugging Face,
|
|
21
|
-
SendGrid). Public certificates are allowed.
|
|
22
|
+
SendGrid). Public certificates are allowed. aimhooman does not scan for
|
|
23
|
+
secrets — this rule is on you, and a dedicated scanner such as gitleaks is
|
|
24
|
+
the right backstop for it.
|
|
22
25
|
- Never add AI attribution to commit messages: no `Co-authored-by` trailer naming
|
|
23
26
|
an AI (Claude, Copilot, Codex), no "Generated with/by <AI>" lines, no AI-service
|
|
24
27
|
noreply emails. A commit message reads as if a human wrote it.
|
|
@@ -49,7 +52,7 @@ npm test
|
|
|
49
52
|
npm run test:coverage
|
|
50
53
|
```
|
|
51
54
|
|
|
52
|
-
aimhooman also enforces
|
|
53
|
-
violation to fix, not a check to bypass. The rule
|
|
54
|
-
ship.
|
|
55
|
+
aimhooman also enforces the artifact and attribution rules at commit time, so
|
|
56
|
+
a blocked commit means a real violation to fix, not a check to bypass. The rule
|
|
57
|
+
is simple: AI works, hoomans ship.
|
|
55
58
|
<!-- aimhooman:ruleset-end -->
|
|
@@ -3,13 +3,13 @@
|
|
|
3
3
|
"owner": {
|
|
4
4
|
"name": "aimhooman"
|
|
5
5
|
},
|
|
6
|
-
"description": "AI works. Hoomans ship. Keep AI session files
|
|
6
|
+
"description": "AI works. Hoomans ship. Keep AI session files and attribution out of your commits.",
|
|
7
7
|
"plugins": [
|
|
8
8
|
{
|
|
9
9
|
"name": "aimhooman",
|
|
10
10
|
"source": "./",
|
|
11
|
-
"description": "Keeps AI session files
|
|
12
|
-
"version": "0.
|
|
11
|
+
"description": "Keeps AI session files and unwanted attribution out at the agent and Git boundary.",
|
|
12
|
+
"version": "0.3.0",
|
|
13
13
|
"license": "MIT",
|
|
14
14
|
"keywords": [
|
|
15
15
|
"git",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "aimhooman",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "AI works. Hoomans ship. Keeps AI session files
|
|
3
|
+
"version": "0.3.0",
|
|
4
|
+
"description": "AI works. Hoomans ship. Keeps AI session files and unwanted attribution out at the agent and Git boundary.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "aimhooman"
|
|
7
7
|
},
|
package/.clinerules/aimhooman.md
CHANGED
|
@@ -12,13 +12,16 @@ Its policy:
|
|
|
12
12
|
`.copilot/*`, `.cursor/session*`, `.cursor/chats/*`, `.cursor/logs/*`,
|
|
13
13
|
`.aider.*`, `.specstory/*`, `.continue/sessions/*`, `.playwright-mcp/*`,
|
|
14
14
|
`.remember/*`, `.superpowers/*`, and `.agent/*`. The examples are not
|
|
15
|
-
exhaustive; the packaged `rules/paths.json` is the detection source of truth
|
|
16
|
-
If one is staged, unstage it and keep it out of Git
|
|
15
|
+
exhaustive; the packaged `rules/paths.json` is the detection source of truth
|
|
16
|
+
for these artifacts. If one is staged, unstage it and keep it out of Git
|
|
17
|
+
instead.
|
|
17
18
|
- Never commit secrets: a real `.env` (not `.env.example`), private keys
|
|
18
19
|
(`id_rsa` and files containing a private-key header), `.aws/credentials`,
|
|
19
20
|
`.claude/.credentials.json`, service-account keys, or a provider API key
|
|
20
21
|
(GitHub, GitLab, npm, Slack, Anthropic, OpenAI, Google, Stripe, Hugging Face,
|
|
21
|
-
SendGrid). Public certificates are allowed.
|
|
22
|
+
SendGrid). Public certificates are allowed. aimhooman does not scan for
|
|
23
|
+
secrets — this rule is on you, and a dedicated scanner such as gitleaks is
|
|
24
|
+
the right backstop for it.
|
|
22
25
|
- Never add AI attribution to commit messages: no `Co-authored-by` trailer naming
|
|
23
26
|
an AI (Claude, Copilot, Codex), no "Generated with/by <AI>" lines, no AI-service
|
|
24
27
|
noreply emails. A commit message reads as if a human wrote it.
|
|
@@ -49,7 +52,7 @@ npm test
|
|
|
49
52
|
npm run test:coverage
|
|
50
53
|
```
|
|
51
54
|
|
|
52
|
-
aimhooman also enforces
|
|
53
|
-
violation to fix, not a check to bypass. The rule
|
|
54
|
-
ship.
|
|
55
|
+
aimhooman also enforces the artifact and attribution rules at commit time, so
|
|
56
|
+
a blocked commit means a real violation to fix, not a check to bypass. The rule
|
|
57
|
+
is simple: AI works, hoomans ship.
|
|
55
58
|
<!-- aimhooman:ruleset-end -->
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "aimhooman",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "AI works. Hoomans ship. Keeps AI session files
|
|
3
|
+
"version": "0.3.0",
|
|
4
|
+
"description": "AI works. Hoomans ship. Keeps AI session files and unwanted attribution out at the agent and Git boundary.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "aimhooman maintainers",
|
|
7
7
|
"email": "yudhi@rmyndharis.com",
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"interface": {
|
|
20
20
|
"displayName": "aimhooman",
|
|
21
21
|
"shortDescription": "Keep AI tooling residue out of Git",
|
|
22
|
-
"longDescription": "Detects AI session files
|
|
22
|
+
"longDescription": "Detects AI session files and unwanted attribution before they enter Git history.",
|
|
23
23
|
"developerName": "aimhooman maintainers",
|
|
24
24
|
"category": "Developer Tools",
|
|
25
25
|
"capabilities": [
|
|
@@ -18,13 +18,16 @@ Its policy:
|
|
|
18
18
|
`.copilot/*`, `.cursor/session*`, `.cursor/chats/*`, `.cursor/logs/*`,
|
|
19
19
|
`.aider.*`, `.specstory/*`, `.continue/sessions/*`, `.playwright-mcp/*`,
|
|
20
20
|
`.remember/*`, `.superpowers/*`, and `.agent/*`. The examples are not
|
|
21
|
-
exhaustive; the packaged `rules/paths.json` is the detection source of truth
|
|
22
|
-
If one is staged, unstage it and keep it out of Git
|
|
21
|
+
exhaustive; the packaged `rules/paths.json` is the detection source of truth
|
|
22
|
+
for these artifacts. If one is staged, unstage it and keep it out of Git
|
|
23
|
+
instead.
|
|
23
24
|
- Never commit secrets: a real `.env` (not `.env.example`), private keys
|
|
24
25
|
(`id_rsa` and files containing a private-key header), `.aws/credentials`,
|
|
25
26
|
`.claude/.credentials.json`, service-account keys, or a provider API key
|
|
26
27
|
(GitHub, GitLab, npm, Slack, Anthropic, OpenAI, Google, Stripe, Hugging Face,
|
|
27
|
-
SendGrid). Public certificates are allowed.
|
|
28
|
+
SendGrid). Public certificates are allowed. aimhooman does not scan for
|
|
29
|
+
secrets — this rule is on you, and a dedicated scanner such as gitleaks is
|
|
30
|
+
the right backstop for it.
|
|
28
31
|
- Never add AI attribution to commit messages: no `Co-authored-by` trailer naming
|
|
29
32
|
an AI (Claude, Copilot, Codex), no "Generated with/by <AI>" lines, no AI-service
|
|
30
33
|
noreply emails. A commit message reads as if a human wrote it.
|
|
@@ -55,7 +58,7 @@ npm test
|
|
|
55
58
|
npm run test:coverage
|
|
56
59
|
```
|
|
57
60
|
|
|
58
|
-
aimhooman also enforces
|
|
59
|
-
violation to fix, not a check to bypass. The rule
|
|
60
|
-
ship.
|
|
61
|
+
aimhooman also enforces the artifact and attribution rules at commit time, so
|
|
62
|
+
a blocked commit means a real violation to fix, not a check to bypass. The rule
|
|
63
|
+
is simple: AI works, hoomans ship.
|
|
61
64
|
<!-- aimhooman:ruleset-end -->
|
|
@@ -12,13 +12,16 @@ Its policy:
|
|
|
12
12
|
`.copilot/*`, `.cursor/session*`, `.cursor/chats/*`, `.cursor/logs/*`,
|
|
13
13
|
`.aider.*`, `.specstory/*`, `.continue/sessions/*`, `.playwright-mcp/*`,
|
|
14
14
|
`.remember/*`, `.superpowers/*`, and `.agent/*`. The examples are not
|
|
15
|
-
exhaustive; the packaged `rules/paths.json` is the detection source of truth
|
|
16
|
-
If one is staged, unstage it and keep it out of Git
|
|
15
|
+
exhaustive; the packaged `rules/paths.json` is the detection source of truth
|
|
16
|
+
for these artifacts. If one is staged, unstage it and keep it out of Git
|
|
17
|
+
instead.
|
|
17
18
|
- Never commit secrets: a real `.env` (not `.env.example`), private keys
|
|
18
19
|
(`id_rsa` and files containing a private-key header), `.aws/credentials`,
|
|
19
20
|
`.claude/.credentials.json`, service-account keys, or a provider API key
|
|
20
21
|
(GitHub, GitLab, npm, Slack, Anthropic, OpenAI, Google, Stripe, Hugging Face,
|
|
21
|
-
SendGrid). Public certificates are allowed.
|
|
22
|
+
SendGrid). Public certificates are allowed. aimhooman does not scan for
|
|
23
|
+
secrets — this rule is on you, and a dedicated scanner such as gitleaks is
|
|
24
|
+
the right backstop for it.
|
|
22
25
|
- Never add AI attribution to commit messages: no `Co-authored-by` trailer naming
|
|
23
26
|
an AI (Claude, Copilot, Codex), no "Generated with/by <AI>" lines, no AI-service
|
|
24
27
|
noreply emails. A commit message reads as if a human wrote it.
|
|
@@ -49,7 +52,7 @@ npm test
|
|
|
49
52
|
npm run test:coverage
|
|
50
53
|
```
|
|
51
54
|
|
|
52
|
-
aimhooman also enforces
|
|
53
|
-
violation to fix, not a check to bypass. The rule
|
|
54
|
-
ship.
|
|
55
|
+
aimhooman also enforces the artifact and attribution rules at commit time, so
|
|
56
|
+
a blocked commit means a real violation to fix, not a check to bypass. The rule
|
|
57
|
+
is simple: AI works, hoomans ship.
|
|
55
58
|
<!-- aimhooman:ruleset-end -->
|
|
@@ -12,13 +12,16 @@ Its policy:
|
|
|
12
12
|
`.copilot/*`, `.cursor/session*`, `.cursor/chats/*`, `.cursor/logs/*`,
|
|
13
13
|
`.aider.*`, `.specstory/*`, `.continue/sessions/*`, `.playwright-mcp/*`,
|
|
14
14
|
`.remember/*`, `.superpowers/*`, and `.agent/*`. The examples are not
|
|
15
|
-
exhaustive; the packaged `rules/paths.json` is the detection source of truth
|
|
16
|
-
If one is staged, unstage it and keep it out of Git
|
|
15
|
+
exhaustive; the packaged `rules/paths.json` is the detection source of truth
|
|
16
|
+
for these artifacts. If one is staged, unstage it and keep it out of Git
|
|
17
|
+
instead.
|
|
17
18
|
- Never commit secrets: a real `.env` (not `.env.example`), private keys
|
|
18
19
|
(`id_rsa` and files containing a private-key header), `.aws/credentials`,
|
|
19
20
|
`.claude/.credentials.json`, service-account keys, or a provider API key
|
|
20
21
|
(GitHub, GitLab, npm, Slack, Anthropic, OpenAI, Google, Stripe, Hugging Face,
|
|
21
|
-
SendGrid). Public certificates are allowed.
|
|
22
|
+
SendGrid). Public certificates are allowed. aimhooman does not scan for
|
|
23
|
+
secrets — this rule is on you, and a dedicated scanner such as gitleaks is
|
|
24
|
+
the right backstop for it.
|
|
22
25
|
- Never add AI attribution to commit messages: no `Co-authored-by` trailer naming
|
|
23
26
|
an AI (Claude, Copilot, Codex), no "Generated with/by <AI>" lines, no AI-service
|
|
24
27
|
noreply emails. A commit message reads as if a human wrote it.
|
|
@@ -49,7 +52,7 @@ npm test
|
|
|
49
52
|
npm run test:coverage
|
|
50
53
|
```
|
|
51
54
|
|
|
52
|
-
aimhooman also enforces
|
|
53
|
-
violation to fix, not a check to bypass. The rule
|
|
54
|
-
ship.
|
|
55
|
+
aimhooman also enforces the artifact and attribution rules at commit time, so
|
|
56
|
+
a blocked commit means a real violation to fix, not a check to bypass. The rule
|
|
57
|
+
is simple: AI works, hoomans ship.
|
|
55
58
|
<!-- aimhooman:ruleset-end -->
|
|
@@ -16,13 +16,16 @@ Its policy:
|
|
|
16
16
|
`.copilot/*`, `.cursor/session*`, `.cursor/chats/*`, `.cursor/logs/*`,
|
|
17
17
|
`.aider.*`, `.specstory/*`, `.continue/sessions/*`, `.playwright-mcp/*`,
|
|
18
18
|
`.remember/*`, `.superpowers/*`, and `.agent/*`. The examples are not
|
|
19
|
-
exhaustive; the packaged `rules/paths.json` is the detection source of truth
|
|
20
|
-
If one is staged, unstage it and keep it out of Git
|
|
19
|
+
exhaustive; the packaged `rules/paths.json` is the detection source of truth
|
|
20
|
+
for these artifacts. If one is staged, unstage it and keep it out of Git
|
|
21
|
+
instead.
|
|
21
22
|
- Never commit secrets: a real `.env` (not `.env.example`), private keys
|
|
22
23
|
(`id_rsa` and files containing a private-key header), `.aws/credentials`,
|
|
23
24
|
`.claude/.credentials.json`, service-account keys, or a provider API key
|
|
24
25
|
(GitHub, GitLab, npm, Slack, Anthropic, OpenAI, Google, Stripe, Hugging Face,
|
|
25
|
-
SendGrid). Public certificates are allowed.
|
|
26
|
+
SendGrid). Public certificates are allowed. aimhooman does not scan for
|
|
27
|
+
secrets — this rule is on you, and a dedicated scanner such as gitleaks is
|
|
28
|
+
the right backstop for it.
|
|
26
29
|
- Never add AI attribution to commit messages: no `Co-authored-by` trailer naming
|
|
27
30
|
an AI (Claude, Copilot, Codex), no "Generated with/by <AI>" lines, no AI-service
|
|
28
31
|
noreply emails. A commit message reads as if a human wrote it.
|
|
@@ -53,7 +56,7 @@ npm test
|
|
|
53
56
|
npm run test:coverage
|
|
54
57
|
```
|
|
55
58
|
|
|
56
|
-
aimhooman also enforces
|
|
57
|
-
violation to fix, not a check to bypass. The rule
|
|
58
|
-
ship.
|
|
59
|
+
aimhooman also enforces the artifact and attribution rules at commit time, so
|
|
60
|
+
a blocked commit means a real violation to fix, not a check to bypass. The rule
|
|
61
|
+
is simple: AI works, hoomans ship.
|
|
59
62
|
<!-- aimhooman:ruleset-end -->
|
package/AGENTS.md
CHANGED
|
@@ -12,13 +12,16 @@ Its policy:
|
|
|
12
12
|
`.copilot/*`, `.cursor/session*`, `.cursor/chats/*`, `.cursor/logs/*`,
|
|
13
13
|
`.aider.*`, `.specstory/*`, `.continue/sessions/*`, `.playwright-mcp/*`,
|
|
14
14
|
`.remember/*`, `.superpowers/*`, and `.agent/*`. The examples are not
|
|
15
|
-
exhaustive; the packaged `rules/paths.json` is the detection source of truth
|
|
16
|
-
If one is staged, unstage it and keep it out of Git
|
|
15
|
+
exhaustive; the packaged `rules/paths.json` is the detection source of truth
|
|
16
|
+
for these artifacts. If one is staged, unstage it and keep it out of Git
|
|
17
|
+
instead.
|
|
17
18
|
- Never commit secrets: a real `.env` (not `.env.example`), private keys
|
|
18
19
|
(`id_rsa` and files containing a private-key header), `.aws/credentials`,
|
|
19
20
|
`.claude/.credentials.json`, service-account keys, or a provider API key
|
|
20
21
|
(GitHub, GitLab, npm, Slack, Anthropic, OpenAI, Google, Stripe, Hugging Face,
|
|
21
|
-
SendGrid). Public certificates are allowed.
|
|
22
|
+
SendGrid). Public certificates are allowed. aimhooman does not scan for
|
|
23
|
+
secrets — this rule is on you, and a dedicated scanner such as gitleaks is
|
|
24
|
+
the right backstop for it.
|
|
22
25
|
- Never add AI attribution to commit messages: no `Co-authored-by` trailer naming
|
|
23
26
|
an AI (Claude, Copilot, Codex), no "Generated with/by <AI>" lines, no AI-service
|
|
24
27
|
noreply emails. A commit message reads as if a human wrote it.
|
|
@@ -49,7 +52,7 @@ npm test
|
|
|
49
52
|
npm run test:coverage
|
|
50
53
|
```
|
|
51
54
|
|
|
52
|
-
aimhooman also enforces
|
|
53
|
-
violation to fix, not a check to bypass. The rule
|
|
54
|
-
ship.
|
|
55
|
+
aimhooman also enforces the artifact and attribution rules at commit time, so
|
|
56
|
+
a blocked commit means a real violation to fix, not a check to bypass. The rule
|
|
57
|
+
is simple: AI works, hoomans ship.
|
|
55
58
|
<!-- aimhooman:ruleset-end -->
|
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,153 @@ All notable changes to this project are documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [0.3.0] - 2026-07-19
|
|
9
|
+
|
|
10
|
+
This release narrows aimhooman to the job it does better than anyone else:
|
|
11
|
+
keeping AI tooling residue and attribution out of Git history. Secret
|
|
12
|
+
scanning leaves the product — dedicated tools do it better, and
|
|
13
|
+
`docs/secrets.md` shows the gitleaks setup that replaces it. Commits also
|
|
14
|
+
get less brittle: a scan that cannot cover everything now warns on the
|
|
15
|
+
frictionless profiles instead of stopping the first hook, while the final
|
|
16
|
+
reference-transaction guard keeps its veto on every profile.
|
|
17
|
+
|
|
18
|
+
### Removed
|
|
19
|
+
|
|
20
|
+
- **Breaking: built-in secret scanning is gone.** `rules/secrets.json` and
|
|
21
|
+
the four secret path rules (`secret.dotenv`, `secret.private-key`,
|
|
22
|
+
`secret.aws-credentials`, `secret.claude-credentials`) no longer ship, so
|
|
23
|
+
`.env` files, private keys, and provider tokens are not detected by
|
|
24
|
+
aimhooman anymore. Pair it with gitleaks — `docs/secrets.md` has the
|
|
25
|
+
pre-commit and GitHub Actions setup. The agent-facing instruction files
|
|
26
|
+
still tell agents not to commit secrets; only the mechanical scanner
|
|
27
|
+
moved out.
|
|
28
|
+
- `init --grandfather-secrets` and the `--scope secret-path` override are
|
|
29
|
+
gone with the scanner. Legacy `secret-path` entries in an existing
|
|
30
|
+
`overrides.json` are dropped on load with a warning naming the file.
|
|
31
|
+
A secret already in history needs rotation and a gitleaks run, not
|
|
32
|
+
aimhooman.
|
|
33
|
+
- With no rule reading binary content, an oversized binary file no longer
|
|
34
|
+
makes a scan incomplete; oversized text still does.
|
|
35
|
+
|
|
36
|
+
### Added
|
|
37
|
+
|
|
38
|
+
- `aimhooman init --gitignore`: opt-in that also writes the managed
|
|
39
|
+
AI-artifact pattern block into the worktree `.gitignore`, so a team can
|
|
40
|
+
commit it and share the ignore set across clones. The default stays
|
|
41
|
+
local (`.git/info/exclude`); `status` shows the block and `uninstall`
|
|
42
|
+
removes it. Gitignore matching is case-sensitive.
|
|
43
|
+
- `docs/ai-artifacts.gitignore` and `docs/catalog.md`: the detection
|
|
44
|
+
catalog as a standalone resource, generated from `rules/*.json` by
|
|
45
|
+
`npm run sync:catalog` and kept honest in CI. Just want the ignore
|
|
46
|
+
list? Copy the first file.
|
|
47
|
+
- `.pre-commit-hooks.yaml`: run aimhooman from the pre-commit.com
|
|
48
|
+
framework (`aimhooman check --staged`).
|
|
49
|
+
- `action.yml`: a composite GitHub Action that runs
|
|
50
|
+
`aimhooman check --range <base>...<head>` in CI. See
|
|
51
|
+
`docs/integrations.md` for it, the pre-commit.com config, and honest
|
|
52
|
+
husky/lint-staged notes.
|
|
53
|
+
- Docs gained `docs/policy.md`, `docs/cli-reference.md`, `docs/faq.md`,
|
|
54
|
+
`docs/integrations.md`, and `docs/secrets.md`.
|
|
55
|
+
|
|
56
|
+
### Changed
|
|
57
|
+
|
|
58
|
+
- An incomplete scan (an oversized file, a budget hit, an unloadable
|
|
59
|
+
local rule pack) now warns and continues on `clean`/`compliance` in
|
|
60
|
+
`check`, `fix`, `pre-commit`, and `commit-msg` instead of stopping at
|
|
61
|
+
exit 31. `strict` stays fail-closed, and so does the
|
|
62
|
+
reference-transaction guard on every profile — the stop moved from the
|
|
63
|
+
first hook to the final ref boundary, which `--no-verify` cannot skip.
|
|
64
|
+
- The README slimmed from 481 to 162 lines. The detail it carried —
|
|
65
|
+
versioned team policy, overrides, command and exit-code references,
|
|
66
|
+
the FAQ — moved into `docs/` unchanged in substance.
|
|
67
|
+
|
|
68
|
+
## [0.2.0] - 2026-07-19
|
|
69
|
+
|
|
70
|
+
This release works through the findings of the cross-ecosystem field test
|
|
71
|
+
(8 upstream clones, 6 language loops, a local bare remote, and a private
|
|
72
|
+
GitHub sandbox). The headline: `allow` no longer says yes when it means no —
|
|
73
|
+
a path allow on a file whose content holds a secret is refused up front,
|
|
74
|
+
with the working escape hatch named in the same breath.
|
|
75
|
+
|
|
76
|
+
### Fixed
|
|
77
|
+
|
|
78
|
+
- Tracked-tree scans (`audit`, `check --tracked`, `init --grandfather-secrets`)
|
|
79
|
+
no longer die with `spawnSync git EPIPE` on a partial clone of a repository
|
|
80
|
+
with submodule pins. A gitlink names a commit of another repository, so
|
|
81
|
+
asking `cat-file` about it triggered a promisor fetch that aborted the
|
|
82
|
+
whole metadata batch ("not our ref"). Gitlinks now skip the metadata read;
|
|
83
|
+
their type comes from the mode. Found by the OpenSSL field run, whose 11
|
|
84
|
+
submodule pins made the grandfather flag seed zero allows.
|
|
85
|
+
- `init --grandfather-secrets` now runs its one-shot tracked scan with the
|
|
86
|
+
total-byte budget raised to the env cap and the finding budget raised to
|
|
87
|
+
100,000. The commit-time defaults (64 MiB, 1,000 findings) silently missed
|
|
88
|
+
fixtures beyond them in exactly the large, fixture-heavy repositories the
|
|
89
|
+
flag exists for; the per-file budget and an explicit env override still
|
|
90
|
+
apply.
|
|
91
|
+
- `aimhooman allow <path>` on a file whose content matches a secret rule
|
|
92
|
+
(e.g. a private key inside an ordinary-looking filename) no longer reports
|
|
93
|
+
`allowed` while the commit stays blocked. The guard now runs the engine's
|
|
94
|
+
secret content rules over the file's bytes, refuses the allow, and points
|
|
95
|
+
at `--scope secret-path`. Files over the scan budget or unreadable skip
|
|
96
|
+
the check; the commit-time scanner still fails closed on those.
|
|
97
|
+
- The scan-incomplete summary now names what was skipped
|
|
98
|
+
(`skipped: size-limit=1 file`) instead of `(size-limit=1)`, which read as
|
|
99
|
+
a one-byte budget rather than a count of files.
|
|
100
|
+
|
|
101
|
+
### Added
|
|
102
|
+
|
|
103
|
+
- `aimhooman init --grandfather-secrets`: after a successful init, scan the
|
|
104
|
+
tracked tree once and write a `--scope secret-path` allow for every path
|
|
105
|
+
already tracking secret-looking material (test certs, sample keys). New
|
|
106
|
+
secrets stay blocked; only paths found in that scan are allowed. A failed
|
|
107
|
+
or incomplete scan warns without failing the init.
|
|
108
|
+
- Provider-token findings name the provider in human output
|
|
109
|
+
(`A provider access token (GitHub) must not enter Git history.`), so the
|
|
110
|
+
developer knows which credential to revoke. The token itself stays
|
|
111
|
+
redacted; the JSON report is unchanged.
|
|
112
|
+
- Secret content rules now carry a remediation line naming the fixture
|
|
113
|
+
escape hatch: `aimhooman allow <path> --scope secret-path --reason
|
|
114
|
+
"test fixture"`.
|
|
115
|
+
- The pre-commit hook now names locally-ignored AI artifacts once per set
|
|
116
|
+
change (`3 AI artifact(s) present locally are kept out of commits: ...`).
|
|
117
|
+
The prevention layer keeps them out of `git status`, which also kept their
|
|
118
|
+
exclusion silent: a `git add .` never told the developer the chat log did
|
|
119
|
+
not make the commit. The worktree walk is pathspec-pruned to the managed
|
|
120
|
+
exclude patterns, so it costs ~15ms; informational only, it never changes
|
|
121
|
+
an exit code.
|
|
122
|
+
- The reference-transaction veto now notes that the rejected commit object
|
|
123
|
+
remains in the local object store — collected by `git gc --prune=now` when
|
|
124
|
+
nothing else references it — so a secret payload is not mistaken for gone.
|
|
125
|
+
|
|
126
|
+
### Changed
|
|
127
|
+
|
|
128
|
+
- Repeated findings of the same rule print the remediation once, then
|
|
129
|
+
`fix: as above for <rule id>`, instead of reprinting an identical fix
|
|
130
|
+
block for every hit.
|
|
131
|
+
- `init` output now prints `undo: aimhooman uninstall` and notes that known
|
|
132
|
+
AI artifacts are ignored locally (`git status --ignored` shows them).
|
|
133
|
+
|
|
134
|
+
### Performance
|
|
135
|
+
|
|
136
|
+
- `openRepo` resolves the repository in one `git rev-parse` call instead of
|
|
137
|
+
three; every hook spawn pays this, so it was the cheapest milliseconds on
|
|
138
|
+
the commit path. The common-dir answer is resolved against the invoking
|
|
139
|
+
cwd and canonicalized, preserving the previous spelling on symlinked
|
|
140
|
+
paths (macOS `/tmp`), and a path containing a newline falls back to one
|
|
141
|
+
flag per call.
|
|
142
|
+
- The reference-transaction dispatcher exits before the Node spawn for a
|
|
143
|
+
`prepared` transaction that moves neither a branch nor HEAD (ORIG_HEAD,
|
|
144
|
+
tags, remote-tracking refs). Such payloads carry nothing `refcheck`
|
|
145
|
+
scans — but the skip first proves the four dispatchers are still
|
|
146
|
+
installed, so a hook manager wiping them mid-operation is answered with
|
|
147
|
+
a stop, not silence. An ordinary commit's hook time drops by roughly a
|
|
148
|
+
third in the field measurement (982ms → 649ms).
|
|
149
|
+
- Installed Git hook shims export `NODE_COMPILE_CACHE` pointing at a
|
|
150
|
+
per-install directory under the state dir (removed by
|
|
151
|
+
`uninstall --purge-state`), shaving the module parse/compile cost off
|
|
152
|
+
each hook spawn. An unwritable cache dir degrades to the old cold start,
|
|
153
|
+
never to a hook failure.
|
|
154
|
+
|
|
8
155
|
## [0.1.8] - 2026-07-18
|
|
9
156
|
|
|
10
157
|
This release works through the findings of the real-world scenario report
|
package/CONTRIBUTING.md
CHANGED
|
@@ -31,9 +31,8 @@ npm run verify # schemas, workflows, dead code, coverage, package, installed
|
|
|
31
31
|
## Adding a rule
|
|
32
32
|
|
|
33
33
|
Rules live in `rules/` as JSON arrays: `paths.json` (staged paths),
|
|
34
|
-
`attribution.json` (commit-message lines), `markers.json` (staged content)
|
|
35
|
-
|
|
36
|
-
rule has the shape:
|
|
34
|
+
`attribution.json` (commit-message lines), `markers.json` (staged content).
|
|
35
|
+
Each rule has the shape:
|
|
37
36
|
|
|
38
37
|
```json
|
|
39
38
|
{
|
package/GEMINI.md
CHANGED
|
@@ -12,13 +12,16 @@ Its policy:
|
|
|
12
12
|
`.copilot/*`, `.cursor/session*`, `.cursor/chats/*`, `.cursor/logs/*`,
|
|
13
13
|
`.aider.*`, `.specstory/*`, `.continue/sessions/*`, `.playwright-mcp/*`,
|
|
14
14
|
`.remember/*`, `.superpowers/*`, and `.agent/*`. The examples are not
|
|
15
|
-
exhaustive; the packaged `rules/paths.json` is the detection source of truth
|
|
16
|
-
If one is staged, unstage it and keep it out of Git
|
|
15
|
+
exhaustive; the packaged `rules/paths.json` is the detection source of truth
|
|
16
|
+
for these artifacts. If one is staged, unstage it and keep it out of Git
|
|
17
|
+
instead.
|
|
17
18
|
- Never commit secrets: a real `.env` (not `.env.example`), private keys
|
|
18
19
|
(`id_rsa` and files containing a private-key header), `.aws/credentials`,
|
|
19
20
|
`.claude/.credentials.json`, service-account keys, or a provider API key
|
|
20
21
|
(GitHub, GitLab, npm, Slack, Anthropic, OpenAI, Google, Stripe, Hugging Face,
|
|
21
|
-
SendGrid). Public certificates are allowed.
|
|
22
|
+
SendGrid). Public certificates are allowed. aimhooman does not scan for
|
|
23
|
+
secrets — this rule is on you, and a dedicated scanner such as gitleaks is
|
|
24
|
+
the right backstop for it.
|
|
22
25
|
- Never add AI attribution to commit messages: no `Co-authored-by` trailer naming
|
|
23
26
|
an AI (Claude, Copilot, Codex), no "Generated with/by <AI>" lines, no AI-service
|
|
24
27
|
noreply emails. A commit message reads as if a human wrote it.
|
|
@@ -49,7 +52,7 @@ npm test
|
|
|
49
52
|
npm run test:coverage
|
|
50
53
|
```
|
|
51
54
|
|
|
52
|
-
aimhooman also enforces
|
|
53
|
-
violation to fix, not a check to bypass. The rule
|
|
54
|
-
ship.
|
|
55
|
+
aimhooman also enforces the artifact and attribution rules at commit time, so
|
|
56
|
+
a blocked commit means a real violation to fix, not a check to bypass. The rule
|
|
57
|
+
is simple: AI works, hoomans ship.
|
|
55
58
|
<!-- aimhooman:ruleset-end -->
|