@i4ctime/q-ring 0.14.0 → 0.14.1
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/README.md +14 -6
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
<div align="center">
|
|
2
|
-
<img src="https://
|
|
2
|
+
<img src="https://raw.githubusercontent.com/I4cTime/q-ring/main/assets/social-card-optimized.jpg" alt="q-ring — never paste an API key into .env again" width="100%" />
|
|
3
3
|
</div>
|
|
4
4
|
|
|
5
5
|
# q-ring
|
|
6
6
|
|
|
7
|
-
**
|
|
7
|
+
**OS keychain secrets for AI coding agents, over MCP.**
|
|
8
8
|
|
|
9
9
|
[](https://www.npmjs.com/package/@i4ctime/q-ring)
|
|
10
10
|
[](https://qring.i4c.studio/docs)
|
|
@@ -383,7 +383,7 @@ qring exec -- npm run deploy
|
|
|
383
383
|
# Inject only specific tags
|
|
384
384
|
qring exec --tags backend -- node server.js
|
|
385
385
|
|
|
386
|
-
# Run with a restricted profile (blocks
|
|
386
|
+
# Run with a restricted profile (blocks network tools and interpreters/shells, 30s timeout)
|
|
387
387
|
qring exec --profile restricted -- npm test
|
|
388
388
|
```
|
|
389
389
|
|
|
@@ -533,6 +533,8 @@ Define project-level governance rules in `.q-ring.json` to control which MCP too
|
|
|
533
533
|
|
|
534
534
|
Over MCP, policy is resolved from the directory the server was **launched** in — not from the `projectPath` a caller passes — so an agent can't sidestep restrictions by pointing at a directory with no policy. Launch the MCP server from your project root (where `.q-ring.json` lives). Edits to `.q-ring.json` are picked up automatically (the policy cache invalidates on file change), so you don't need to restart the server.
|
|
535
535
|
|
|
536
|
+
Policy files are schema-validated and **fail closed**: an invalid `policy` object (say, a typo like `denytools`) raises a `PolicyConfigError` instead of being silently ignored, so a malformed rule can never widen access.
|
|
537
|
+
|
|
536
538
|
```bash
|
|
537
539
|
# View the active policy
|
|
538
540
|
qring policy
|
|
@@ -568,7 +570,7 @@ Example policy in `.q-ring.json`:
|
|
|
568
570
|
Restrict command execution with named profiles that control allowed commands, network access, timeouts, and environment sanitization.
|
|
569
571
|
|
|
570
572
|
```bash
|
|
571
|
-
# Run with the "restricted" profile (blocks
|
|
573
|
+
# Run with the "restricted" profile (blocks network tools and interpreters/shells; 30s timeout)
|
|
572
574
|
qring exec --profile restricted -- npm test
|
|
573
575
|
|
|
574
576
|
# Run with the "ci" profile (5min timeout, allows network)
|
|
@@ -578,11 +580,11 @@ qring exec --profile ci -- npm run deploy
|
|
|
578
580
|
qring exec -- echo "hello"
|
|
579
581
|
```
|
|
580
582
|
|
|
581
|
-
**Built-in profiles:** `unrestricted`, `restricted` (
|
|
583
|
+
**Built-in profiles:** `unrestricted`, `restricted` (denies network tools *and* interpreters/shells — `python -c`, `node -e`, `bash` and friends can't exfiltrate injected secrets; 30s limit), `ci` (5min limit, blocks destructive commands).
|
|
582
584
|
|
|
583
585
|
### Tamper-Evident Audit
|
|
584
586
|
|
|
585
|
-
Every audit event includes a SHA-256 hash of the previous event, creating a tamper-evident chain. Verify integrity and export logs in multiple formats.
|
|
587
|
+
Every audit event includes a SHA-256 hash of the previous event, creating a tamper-evident chain. Since v0.14 the chain is also anchored with a keyed HMAC stored in the OS keyring, so `qring audit:verify` detects truncation and whole-file rewrites — not just in-place edits. Verify integrity and export logs in multiple formats.
|
|
586
588
|
|
|
587
589
|
```bash
|
|
588
590
|
# Verify the entire audit chain
|
|
@@ -987,6 +989,12 @@ See [CONTRIBUTING.md](CONTRIBUTING.md) for the full guide (dev environment, conv
|
|
|
987
989
|
- **Claude Code:** `pnpm run plugin:sync:claude` copies `claude-code-plugin/` into the current directory (or pass a project path; add `--user` to install at `~/.claude/`).
|
|
988
990
|
- See also [docs/cli-mcp-parity.md](docs/cli-mcp-parity.md).
|
|
989
991
|
|
|
992
|
+
## 🔒 Security
|
|
993
|
+
|
|
994
|
+
- **Local-first.** Core storage is your OS keychain — there is no q-ring cloud and no account. The MCP surface, audit log, and agent memory live on your machine (audit and memory files are written owner-only, `0600`).
|
|
995
|
+
- **Hardened by adversarial review.** v0.14.0 shipped the results of an internal adversarial audit — policy-bypass, approval-scoping, and exec-profile findings all fixed, each with regression tests. Details are in the [CHANGELOG](CHANGELOG.md) `Security` sections (house style since 0.12.0: fix first, then disclose there).
|
|
996
|
+
- **Reporting a vulnerability.** Use [GitHub private vulnerability reporting](https://github.com/I4cTime/q-ring/security/advisories/new) — see [SECURITY.md](SECURITY.md) for the supported-versions table and response commitments (48-hour acknowledgement, 7-day assessment).
|
|
997
|
+
|
|
990
998
|
## 📜 License
|
|
991
999
|
|
|
992
1000
|
[AGPL-3.0](LICENSE) - Free to use, modify, and share. Any derivative work or hosted service must release its source code under the same license.
|
package/package.json
CHANGED