gridzen-developer-kit 0.5.0__tar.gz → 0.6.0__tar.gz

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.
Files changed (116) hide show
  1. {gridzen_developer_kit-0.5.0/src/gridzen_developer_kit.egg-info → gridzen_developer_kit-0.6.0}/PKG-INFO +27 -12
  2. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/README.es.md +22 -5
  3. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/README.md +26 -11
  4. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/README.zh-CN.md +22 -5
  5. {gridzen_developer_kit-0.5.0/src/gridzen_developer/web → gridzen_developer_kit-0.6.0/clients}/compatibility.json +1 -1
  6. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/pyproject.toml +1 -1
  7. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/skills/gridzen-explain-verification/SKILL.md +3 -0
  8. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/skills/gridzen-integrate-sandbox/SKILL.md +3 -0
  9. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/skills/gridzen-integrate-sandbox/references/api.md +1 -1
  10. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/skills/gridzen-select-verification/SKILL.md +3 -0
  11. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/skills/mexico-pilot-scoper/SKILL.md +3 -0
  12. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/skills/payout-policy-designer/SKILL.md +3 -0
  13. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/skills/provider-rights-readiness/SKILL.md +3 -0
  14. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/src/gridzen_developer/__init__.py +1 -1
  15. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/src/gridzen_developer/cli.py +26 -1
  16. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/src/gridzen_developer/mcp.py +24 -2
  17. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/src/gridzen_developer/product_feedback.py +15 -2
  18. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/src/gridzen_developer/server.py +12 -3
  19. gridzen_developer_kit-0.6.0/src/gridzen_developer/telemetry.py +71 -0
  20. {gridzen_developer_kit-0.5.0/clients → gridzen_developer_kit-0.6.0/src/gridzen_developer/web}/compatibility.json +1 -1
  21. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/src/gridzen_developer/web/locales.js +3 -3
  22. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/src/gridzen_developer/web/privacy.html +1 -1
  23. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0/src/gridzen_developer_kit.egg-info}/PKG-INFO +27 -12
  24. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/src/gridzen_developer_kit.egg-info/SOURCES.txt +2 -0
  25. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/tests/test_remote.py +1 -1
  26. gridzen_developer_kit-0.6.0/tests/test_telemetry.py +73 -0
  27. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/LICENSE +0 -0
  28. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/MANIFEST.in +0 -0
  29. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/NOTICE.md +0 -0
  30. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/clients/claude-code.json +0 -0
  31. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/clients/claude-desktop.json +0 -0
  32. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/clients/cline.json +0 -0
  33. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/clients/codex.toml +0 -0
  34. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/clients/copilot-cli.json +0 -0
  35. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/clients/cursor.json +0 -0
  36. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/clients/gemini-cli.json +0 -0
  37. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/clients/opencode.json +0 -0
  38. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/clients/roo-code.json +0 -0
  39. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/clients/vscode.json +0 -0
  40. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/docs/harness/README.md +0 -0
  41. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/docs/harness/claude-code.md +0 -0
  42. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/docs/harness/claude-desktop.md +0 -0
  43. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/docs/harness/cline.md +0 -0
  44. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/docs/harness/codex.md +0 -0
  45. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/docs/harness/copilot-cli.md +0 -0
  46. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/docs/harness/cursor.md +0 -0
  47. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/docs/harness/gemini-cli.md +0 -0
  48. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/docs/harness/opencode.md +0 -0
  49. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/docs/harness/roo-code.md +0 -0
  50. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/docs/harness/vscode.md +0 -0
  51. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/scripts/check_integration.py +0 -0
  52. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/setup.cfg +0 -0
  53. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/skills/mexico-pilot-scoper/LICENSE +0 -0
  54. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/skills/mexico-pilot-scoper/README.md +0 -0
  55. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/skills/mexico-pilot-scoper/agent-evals.json +0 -0
  56. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/skills/mexico-pilot-scoper/evaluate.py +0 -0
  57. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/skills/mexico-pilot-scoper/example-input.json +0 -0
  58. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/skills/mexico-pilot-scoper/examples/missing-evidence.json +0 -0
  59. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/skills/mexico-pilot-scoper/examples/normal.json +0 -0
  60. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/skills/mexico-pilot-scoper/examples/out-of-scope.json +0 -0
  61. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/skills/mexico-pilot-scoper/spec.json +0 -0
  62. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/skills/mexico-pilot-scoper/test_evaluate.py +0 -0
  63. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/skills/payout-policy-designer/LICENSE +0 -0
  64. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/skills/payout-policy-designer/README.md +0 -0
  65. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/skills/payout-policy-designer/agent-evals.json +0 -0
  66. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/skills/payout-policy-designer/evaluate.py +0 -0
  67. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/skills/payout-policy-designer/example-input.json +0 -0
  68. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/skills/payout-policy-designer/examples/missing-evidence.json +0 -0
  69. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/skills/payout-policy-designer/examples/normal.json +0 -0
  70. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/skills/payout-policy-designer/examples/out-of-scope.json +0 -0
  71. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/skills/payout-policy-designer/spec.json +0 -0
  72. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/skills/payout-policy-designer/test_evaluate.py +0 -0
  73. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/skills/provider-rights-readiness/LICENSE +0 -0
  74. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/skills/provider-rights-readiness/README.md +0 -0
  75. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/skills/provider-rights-readiness/agent-evals.json +0 -0
  76. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/skills/provider-rights-readiness/evaluate.py +0 -0
  77. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/skills/provider-rights-readiness/example-input.json +0 -0
  78. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/skills/provider-rights-readiness/examples/missing-evidence.json +0 -0
  79. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/skills/provider-rights-readiness/examples/normal.json +0 -0
  80. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/skills/provider-rights-readiness/examples/out-of-scope.json +0 -0
  81. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/skills/provider-rights-readiness/spec.json +0 -0
  82. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/skills/provider-rights-readiness/test_evaluate.py +0 -0
  83. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/src/gridzen_developer/client.py +0 -0
  84. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/src/gridzen_developer/core.py +0 -0
  85. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/src/gridzen_developer/data/LICENSE +0 -0
  86. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/src/gridzen_developer/data/catalog.json +0 -0
  87. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/src/gridzen_developer/remote.py +0 -0
  88. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/src/gridzen_developer/setup.py +0 -0
  89. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/src/gridzen_developer/skills.py +0 -0
  90. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/src/gridzen_developer/usage.py +0 -0
  91. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/src/gridzen_developer/web/client-configs.json +0 -0
  92. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/src/gridzen_developer/web/developer.css +0 -0
  93. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/src/gridzen_developer/web/developer.js +0 -0
  94. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/src/gridzen_developer/web/harnesses.html +0 -0
  95. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/src/gridzen_developer/web/harnesses.js +0 -0
  96. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/src/gridzen_developer/web/icon.png +0 -0
  97. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/src/gridzen_developer/web/icon.svg +0 -0
  98. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/src/gridzen_developer/web/index.html +0 -0
  99. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/src/gridzen_developer/web/language.js +0 -0
  100. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/src/gridzen_developer/web/layout.js +0 -0
  101. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/src/gridzen_developer/web/quickstart.html +0 -0
  102. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/src/gridzen_developer/web/site-shell.json +0 -0
  103. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/src/gridzen_developer/web/support.html +0 -0
  104. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/src/gridzen_developer/web/terms.html +0 -0
  105. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/src/gridzen_developer_kit.egg-info/dependency_links.txt +0 -0
  106. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/src/gridzen_developer_kit.egg-info/entry_points.txt +0 -0
  107. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/src/gridzen_developer_kit.egg-info/requires.txt +0 -0
  108. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/src/gridzen_developer_kit.egg-info/top_level.txt +0 -0
  109. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/tests/test_call_sources.py +0 -0
  110. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/tests/test_developer.py +0 -0
  111. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/tests/test_localization.py +0 -0
  112. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/tests/test_product_feedback.py +0 -0
  113. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/tests/test_setup.py +0 -0
  114. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/tests/test_site_shell.py +0 -0
  115. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/tests/test_usage.py +0 -0
  116. {gridzen_developer_kit-0.5.0 → gridzen_developer_kit-0.6.0}/tests/test_workflow_skills.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gridzen-developer-kit
3
- Version: 0.5.0
3
+ Version: 0.6.0
4
4
  Summary: Gridzen research catalog, integration planner and explicit verification sandbox
5
5
  Author-email: Gridzen <open@gridzen.ai>
6
6
  License-Expression: MIT
@@ -27,7 +27,7 @@ Requires-Dist: fastapi==0.142.4; extra == "test"
27
27
  Requires-Dist: uvicorn==0.54.0; extra == "test"
28
28
  Dynamic: license-file
29
29
 
30
- # Gridzen Developer Kit 0.5.0
30
+ # Gridzen Developer Kit 0.6.0
31
31
 
32
32
  Research for 198 countries/territories, a verification integration planner, five synthetic outcomes, an HTTP SDK, local MCP server and six Skills. **No live provider is enabled. No real person is verified.** The research snapshot is dated 2026-10-07, with source links and file hashes.
33
33
 
@@ -59,7 +59,7 @@ Register a local stdio server in your MCP client. Use the absolute path to the i
59
59
  {"mcpServers":{"gridzen":{"command":"/absolute/path/to/.venv/bin/gridzen-mcp","args":[]}}}
60
60
  ```
61
61
 
62
- Tools: get_coverage, plan_verification, create_sandbox_verification, get_sandbox_verification, explain_result. All operate on local research or synthetic fixtures, with read-only/idempotent annotations. Public research/sandbox MCP endpoint: `https://gridzen.ai/developers/mcp` (Streamable HTTP, no account or API key). It has the same five tools and zero live providers. Remote usage sends the documented arguments to Gridzen; local stdio remains offline. Limits: 120 requests/minute per client address and 600/minute overall, returning HTTP 429 with Retry-After.
62
+ Tools: get_coverage, plan_verification, create_sandbox_verification, get_sandbox_verification, explain_result. All operate on local research or synthetic fixtures, with read-only/idempotent annotations. Public research/sandbox MCP endpoint: `https://gridzen.ai/developers/mcp` (Streamable HTTP, no account or API key). It has the same five tools and zero live providers. Remote usage sends the documented arguments to Gridzen; local stdio is offline by default. Limits: 120 requests/minute per client address and 600/minute overall, returning HTTP 429 with Retry-After.
63
63
 
64
64
  ## Skills
65
65
 
@@ -106,10 +106,10 @@ npx skills add immurray/gridzen-developer-kit
106
106
  Install the tagged Python/MCP release from GitHub (Python 3.11+ and Git):
107
107
 
108
108
  ```sh
109
- python -m pip install "gridzen-developer-kit[mcp] @ git+https://github.com/immurray/gridzen-developer-kit.git@v0.5.0"
109
+ python -m pip install "gridzen-developer-kit[mcp] @ git+https://github.com/immurray/gridzen-developer-kit.git@v0.6.0"
110
110
  ```
111
111
 
112
- PyPI 0.5.0 is published and verified. Install with `python -m pip install
112
+ PyPI 0.6.0 is published and verified. Install with `python -m pip install
113
113
  gridzen-developer-kit`. See [the release tracker](distribution/STATUS.md) for
114
114
  publication and installation evidence.
115
115
 
@@ -132,11 +132,11 @@ Original code and Skills: MIT. Research provenance and third-party rights:
132
132
  Source, release downloads, the official MCP Registry entry and six Skills.sh pages are public. Docker catalog submission is awaiting review. See [the publication ledger](distribution/STATUS.md) for exact status and remaining platform steps.
133
133
 
134
134
 
135
- ## Six bundled Skills (0.5.0)
135
+ ## Six bundled Skills (0.6.0)
136
136
 
137
137
  `python -m pip install gridzen-developer-kit` installs the CLI, stdio MCP dependencies
138
- and all six Skill directories. Version 0.5.0 is published on
139
- [PyPI](https://pypi.org/project/gridzen-developer-kit/0.5.0/); clean installation,
138
+ and all six Skill directories. Version 0.6.0 is published on
139
+ [PyPI](https://pypi.org/project/gridzen-developer-kit/0.6.0/); clean installation,
140
140
  CLI, stdio MCP and all six bundled Skill directories were verified. No extra MCP
141
141
  dependency installation is required.
142
142
 
@@ -157,7 +157,7 @@ workflows, version 1.0.0: `mexico-pilot-scoper`, `payout-policy-designer`, and
157
157
  and agent acceptance prompts. They make no third-party calls and grant no real
158
158
  verification, legal approval or regulatory conclusion.
159
159
 
160
- ## Configure your assistant (v0.5.0)
160
+ ## Configure your assistant (v0.6.0)
161
161
 
162
162
  ```sh
163
163
  python3 -m venv .venv
@@ -174,7 +174,7 @@ Use `--client` for Codex, Claude Code/Desktop, Cursor, VS Code/Copilot, Copilot
174
174
  Hosted calls count successful tool invocations, not customers. Existing totals
175
175
  remain unchanged. The hosted service records UTC day, tool name, one source
176
176
  category and a count; it never persists request arguments or client addresses.
177
- Historical and unlabelled calls remain `unknown`. Local stdio remains offline.
177
+ Historical and unlabelled calls remain `unknown`. Local stdio is offline by default.
178
178
 
179
179
  Explicit acceptance requests to the loopback-published service may set
180
180
  `X-Gridzen-Purpose: internal_test`. Only configured local peers with no forwarded
@@ -187,7 +187,7 @@ and must never contain public client addresses. Source counts use the existing
187
187
  new PyPI version or enable any live provider.
188
188
 
189
189
 
190
- ## Customer tasks and voluntary feedback (0.5.0)
190
+ ## Customer tasks and voluntary feedback (0.6.0)
191
191
 
192
192
  ```sh
193
193
  gridzen plan --country US --event onboarding --task signup_phone
@@ -201,4 +201,19 @@ gridzen feedback --input task-summary.json --share
201
201
 
202
202
  Phone intelligence is not OTP or ownership verification. Identity fixtures are not hosted document/liveness sessions. Payout matching remains a prototype with no real enabled route. Provider intake Skills are for provider operations/BYO, not a universal customer gate.
203
203
 
204
- Remote APIs count fixed task/capability/country/stage/error categories for 90 days, including technical failures. They store no arguments, identity data, credentials, raw chats or per-user tracking. Offline Skills/CLI never upload automatically. Optional feedback requires explicit consent, contains only fixed categories, and is unverified self-reported evidence. A SHA-256 hash of its random receipt ID is retained 30 days for within-day retry deduplication; the ID itself is not stored. Counters are capped at 10,000 requests/day and 500 summaries/day per database; missing history or offline usage is unknown. Requests are not unique customers.
204
+ Remote APIs count fixed task/capability/country/stage/error categories for 90 days, including technical failures. They store no arguments, identity data, credentials, raw chats or per-user tracking. Local feedback is off by default. After explicit opt-in, CLI and stdio MCP automatically upload category-only events. Reading static Skills remains unobservable. Optional feedback requires explicit consent, contains only fixed categories, and is unverified self-reported evidence. A SHA-256 hash of its random receipt ID is retained 30 days for 30-day retry deduplication; the ID itself is not stored. Counters are capped at 10,000 requests/day and 500 summaries/day per database; missing history or offline usage is unknown. Requests are not unique customers.
205
+
206
+ ## Optional automatic local feedback (0.6.0)
207
+
208
+ ```sh
209
+ gridzen telemetry status
210
+ # Run only after reading and agreeing to category-only automatic sharing:
211
+ gridzen telemetry enable --consent
212
+ gridzen plan --country US --event onboarding --task signup_phone
213
+ # Send one queued event per invocation after reconnecting:
214
+ gridzen telemetry flush
215
+ # Disable future uploads and clear the pending queue:
216
+ gridzen telemetry disable
217
+ ```
218
+
219
+ No network calls occur from local CLI/MCP when disabled. Consent is saved per OS user, not silently added to a project. Events contain only documented categories, ISO country, and a random per-event receipt, with no conversation, identity fields, credentials, user or project IDs. Feedback failures do not fail tool execution. The local queue is capped at 1,000 events/30 days; reconnect or `flush` retries one queued event, with a one-second HTTP timeout. Uploads are self-reported usage, not authenticated customers or completed verification. No background daemon is installed. Merely reading a Skill is unobservable; after consent, an Agent can explicitly record a fixed-category task summary.
@@ -60,11 +60,11 @@ Código original bajo MIT; consulte NOTICE.md para los derechos de terceros.
60
60
  El código, las descargas, la entrada oficial de MCP Registry y tres páginas de Skills.sh están publicados. La propuesta del catálogo de Docker está pendiente de revisión. Consulta [el registro de publicación](distribution/STATUS.md).
61
61
 
62
62
 
63
- ## Six bundled Skills (0.5.0)
63
+ ## Six bundled Skills (0.6.0)
64
64
 
65
65
  `python -m pip install gridzen-developer-kit` installs the CLI, stdio MCP dependencies
66
- and all six Skill directories. Version 0.5.0 is published on
67
- [PyPI](https://pypi.org/project/gridzen-developer-kit/0.5.0/); clean installation,
66
+ and all six Skill directories. Version 0.6.0 is published on
67
+ [PyPI](https://pypi.org/project/gridzen-developer-kit/0.6.0/); clean installation,
68
68
  CLI, stdio MCP and all six bundled Skill directories were verified. No extra MCP
69
69
  dependency installation is required.
70
70
 
@@ -100,7 +100,7 @@ Usa Python 3.11+ en un entorno virtual. Primero revisa el resultado y después a
100
100
  [Instructions / 使用说明](https://gridzen.ai/developers/harnesses.html) · [Compatibility / 测试记录](clients/compatibility.json)
101
101
 
102
102
 
103
- ## Customer tasks and voluntary feedback (0.5.0)
103
+ ## Customer tasks and voluntary feedback (0.6.0)
104
104
 
105
105
  ```sh
106
106
  gridzen plan --country US --event onboarding --task signup_phone
@@ -114,4 +114,21 @@ gridzen feedback --input task-summary.json --share
114
114
 
115
115
  Phone intelligence is not OTP or ownership verification. Identity fixtures are not hosted document/liveness sessions. Payout matching remains a prototype with no real enabled route. Provider intake Skills are for provider operations/BYO, not a universal customer gate.
116
116
 
117
- Remote APIs count fixed task/capability/country/stage/error categories for 90 days, including technical failures. They store no arguments, identity data, credentials, raw chats or per-user tracking. Offline Skills/CLI never upload automatically. Optional feedback requires explicit consent, contains only fixed categories, and is unverified self-reported evidence. A SHA-256 hash of its random receipt ID is retained 30 days for within-day retry deduplication; the ID itself is not stored. Counters are capped at 10,000 requests/day and 500 summaries/day per database; missing history or offline usage is unknown. Requests are not unique customers.
117
+ Remote APIs count fixed task/capability/country/stage/error categories for 90 days, including technical failures. They store no arguments, identity data, credentials, raw chats or per-user tracking. Local feedback is off by default. After explicit opt-in, CLI and stdio MCP automatically upload category-only events. Reading static Skills remains unobservable. Optional feedback requires explicit consent, contains only fixed categories, and is unverified self-reported evidence. A SHA-256 hash of its random receipt ID is retained 30 days for 30-day retry deduplication; the ID itself is not stored. Counters are capped at 10,000 requests/day and 500 summaries/day per database; missing history or offline usage is unknown. Requests are not unique customers.
118
+
119
+ ## Optional automatic local feedback (0.6.0)
120
+
121
+ ```sh
122
+ gridzen telemetry status
123
+ # Run only after reading and agreeing to category-only automatic sharing:
124
+ gridzen telemetry enable --consent
125
+ gridzen plan --country US --event onboarding --task signup_phone
126
+ # Send one queued event per invocation after reconnecting:
127
+ gridzen telemetry flush
128
+ # Disable future uploads and clear the pending queue:
129
+ gridzen telemetry disable
130
+ ```
131
+
132
+ No network calls occur from local CLI/MCP when disabled. Consent is saved per OS user, not silently added to a project. Events contain only documented categories, ISO country, and a random per-event receipt, with no conversation, identity fields, credentials, user or project IDs. Feedback failures do not fail tool execution. The local queue is capped at 1,000 events/30 days; reconnect or `flush` retries one queued event, with a one-second HTTP timeout. Uploads are self-reported usage, not authenticated customers or completed verification. No background daemon is installed. Merely reading a Skill is unobservable; after consent, an Agent can explicitly record a fixed-category task summary.
133
+
134
+ La telemetría está desactivada por defecto. Tras consentimiento explícito, CLI y stdio envían categorías automáticamente. `gridzen telemetry disable` desactiva y borra la cola. Sin conexión: máximo 1000 eventos durante 30 días. Cada llamada o flush reintenta un evento; no hay servicio en segundo plano. No se envían conversaciones, identidad, credenciales ni IDs de usuarios/proyectos. Leer un Skill no se observa; un Agent puede registrar un resumen tras consentimiento previo. Son datos autodeclarados, no clientes autenticados.
@@ -1,4 +1,4 @@
1
- # Gridzen Developer Kit 0.5.0
1
+ # Gridzen Developer Kit 0.6.0
2
2
 
3
3
  Research for 198 countries/territories, a verification integration planner, five synthetic outcomes, an HTTP SDK, local MCP server and six Skills. **No live provider is enabled. No real person is verified.** The research snapshot is dated 2026-10-07, with source links and file hashes.
4
4
 
@@ -30,7 +30,7 @@ Register a local stdio server in your MCP client. Use the absolute path to the i
30
30
  {"mcpServers":{"gridzen":{"command":"/absolute/path/to/.venv/bin/gridzen-mcp","args":[]}}}
31
31
  ```
32
32
 
33
- Tools: get_coverage, plan_verification, create_sandbox_verification, get_sandbox_verification, explain_result. All operate on local research or synthetic fixtures, with read-only/idempotent annotations. Public research/sandbox MCP endpoint: `https://gridzen.ai/developers/mcp` (Streamable HTTP, no account or API key). It has the same five tools and zero live providers. Remote usage sends the documented arguments to Gridzen; local stdio remains offline. Limits: 120 requests/minute per client address and 600/minute overall, returning HTTP 429 with Retry-After.
33
+ Tools: get_coverage, plan_verification, create_sandbox_verification, get_sandbox_verification, explain_result. All operate on local research or synthetic fixtures, with read-only/idempotent annotations. Public research/sandbox MCP endpoint: `https://gridzen.ai/developers/mcp` (Streamable HTTP, no account or API key). It has the same five tools and zero live providers. Remote usage sends the documented arguments to Gridzen; local stdio is offline by default. Limits: 120 requests/minute per client address and 600/minute overall, returning HTTP 429 with Retry-After.
34
34
 
35
35
  ## Skills
36
36
 
@@ -77,10 +77,10 @@ npx skills add immurray/gridzen-developer-kit
77
77
  Install the tagged Python/MCP release from GitHub (Python 3.11+ and Git):
78
78
 
79
79
  ```sh
80
- python -m pip install "gridzen-developer-kit[mcp] @ git+https://github.com/immurray/gridzen-developer-kit.git@v0.5.0"
80
+ python -m pip install "gridzen-developer-kit[mcp] @ git+https://github.com/immurray/gridzen-developer-kit.git@v0.6.0"
81
81
  ```
82
82
 
83
- PyPI 0.5.0 is published and verified. Install with `python -m pip install
83
+ PyPI 0.6.0 is published and verified. Install with `python -m pip install
84
84
  gridzen-developer-kit`. See [the release tracker](distribution/STATUS.md) for
85
85
  publication and installation evidence.
86
86
 
@@ -103,11 +103,11 @@ Original code and Skills: MIT. Research provenance and third-party rights:
103
103
  Source, release downloads, the official MCP Registry entry and six Skills.sh pages are public. Docker catalog submission is awaiting review. See [the publication ledger](distribution/STATUS.md) for exact status and remaining platform steps.
104
104
 
105
105
 
106
- ## Six bundled Skills (0.5.0)
106
+ ## Six bundled Skills (0.6.0)
107
107
 
108
108
  `python -m pip install gridzen-developer-kit` installs the CLI, stdio MCP dependencies
109
- and all six Skill directories. Version 0.5.0 is published on
110
- [PyPI](https://pypi.org/project/gridzen-developer-kit/0.5.0/); clean installation,
109
+ and all six Skill directories. Version 0.6.0 is published on
110
+ [PyPI](https://pypi.org/project/gridzen-developer-kit/0.6.0/); clean installation,
111
111
  CLI, stdio MCP and all six bundled Skill directories were verified. No extra MCP
112
112
  dependency installation is required.
113
113
 
@@ -128,7 +128,7 @@ workflows, version 1.0.0: `mexico-pilot-scoper`, `payout-policy-designer`, and
128
128
  and agent acceptance prompts. They make no third-party calls and grant no real
129
129
  verification, legal approval or regulatory conclusion.
130
130
 
131
- ## Configure your assistant (v0.5.0)
131
+ ## Configure your assistant (v0.6.0)
132
132
 
133
133
  ```sh
134
134
  python3 -m venv .venv
@@ -145,7 +145,7 @@ Use `--client` for Codex, Claude Code/Desktop, Cursor, VS Code/Copilot, Copilot
145
145
  Hosted calls count successful tool invocations, not customers. Existing totals
146
146
  remain unchanged. The hosted service records UTC day, tool name, one source
147
147
  category and a count; it never persists request arguments or client addresses.
148
- Historical and unlabelled calls remain `unknown`. Local stdio remains offline.
148
+ Historical and unlabelled calls remain `unknown`. Local stdio is offline by default.
149
149
 
150
150
  Explicit acceptance requests to the loopback-published service may set
151
151
  `X-Gridzen-Purpose: internal_test`. Only configured local peers with no forwarded
@@ -158,7 +158,7 @@ and must never contain public client addresses. Source counts use the existing
158
158
  new PyPI version or enable any live provider.
159
159
 
160
160
 
161
- ## Customer tasks and voluntary feedback (0.5.0)
161
+ ## Customer tasks and voluntary feedback (0.6.0)
162
162
 
163
163
  ```sh
164
164
  gridzen plan --country US --event onboarding --task signup_phone
@@ -172,4 +172,19 @@ gridzen feedback --input task-summary.json --share
172
172
 
173
173
  Phone intelligence is not OTP or ownership verification. Identity fixtures are not hosted document/liveness sessions. Payout matching remains a prototype with no real enabled route. Provider intake Skills are for provider operations/BYO, not a universal customer gate.
174
174
 
175
- Remote APIs count fixed task/capability/country/stage/error categories for 90 days, including technical failures. They store no arguments, identity data, credentials, raw chats or per-user tracking. Offline Skills/CLI never upload automatically. Optional feedback requires explicit consent, contains only fixed categories, and is unverified self-reported evidence. A SHA-256 hash of its random receipt ID is retained 30 days for within-day retry deduplication; the ID itself is not stored. Counters are capped at 10,000 requests/day and 500 summaries/day per database; missing history or offline usage is unknown. Requests are not unique customers.
175
+ Remote APIs count fixed task/capability/country/stage/error categories for 90 days, including technical failures. They store no arguments, identity data, credentials, raw chats or per-user tracking. Local feedback is off by default. After explicit opt-in, CLI and stdio MCP automatically upload category-only events. Reading static Skills remains unobservable. Optional feedback requires explicit consent, contains only fixed categories, and is unverified self-reported evidence. A SHA-256 hash of its random receipt ID is retained 30 days for 30-day retry deduplication; the ID itself is not stored. Counters are capped at 10,000 requests/day and 500 summaries/day per database; missing history or offline usage is unknown. Requests are not unique customers.
176
+
177
+ ## Optional automatic local feedback (0.6.0)
178
+
179
+ ```sh
180
+ gridzen telemetry status
181
+ # Run only after reading and agreeing to category-only automatic sharing:
182
+ gridzen telemetry enable --consent
183
+ gridzen plan --country US --event onboarding --task signup_phone
184
+ # Send one queued event per invocation after reconnecting:
185
+ gridzen telemetry flush
186
+ # Disable future uploads and clear the pending queue:
187
+ gridzen telemetry disable
188
+ ```
189
+
190
+ No network calls occur from local CLI/MCP when disabled. Consent is saved per OS user, not silently added to a project. Events contain only documented categories, ISO country, and a random per-event receipt, with no conversation, identity fields, credentials, user or project IDs. Feedback failures do not fail tool execution. The local queue is capped at 1,000 events/30 days; reconnect or `flush` retries one queued event, with a one-second HTTP timeout. Uploads are self-reported usage, not authenticated customers or completed verification. No background daemon is installed. Merely reading a Skill is unobservable; after consent, an Agent can explicitly record a fixed-category task summary.
@@ -59,11 +59,11 @@ Skills 安装:`npx skills add immurray/gridzen-developer-kit`。
59
59
  源码、版本下载、官方 MCP Registry 和三个 Skills.sh 技能页已公开;Docker 目录投稿待审核。各渠道真实状态及剩余步骤见[发布台账](distribution/STATUS.md)。
60
60
 
61
61
 
62
- ## Six bundled Skills (0.5.0)
62
+ ## Six bundled Skills (0.6.0)
63
63
 
64
64
  `python -m pip install gridzen-developer-kit` installs the CLI, stdio MCP dependencies
65
- and all six Skill directories. Version 0.5.0 is published on
66
- [PyPI](https://pypi.org/project/gridzen-developer-kit/0.5.0/); clean installation,
65
+ and all six Skill directories. Version 0.6.0 is published on
66
+ [PyPI](https://pypi.org/project/gridzen-developer-kit/0.6.0/); clean installation,
67
67
  CLI, stdio MCP and all six bundled Skill directories were verified. No extra MCP
68
68
  dependency installation is required.
69
69
 
@@ -99,7 +99,7 @@ gridzen setup --client all --project . --apply
99
99
  [Instructions / 使用说明](https://gridzen.ai/developers/harnesses.html) · [Compatibility / 测试记录](clients/compatibility.json)
100
100
 
101
101
 
102
- ## Customer tasks and voluntary feedback (0.5.0)
102
+ ## Customer tasks and voluntary feedback (0.6.0)
103
103
 
104
104
  ```sh
105
105
  gridzen plan --country US --event onboarding --task signup_phone
@@ -113,4 +113,21 @@ gridzen feedback --input task-summary.json --share
113
113
 
114
114
  Phone intelligence is not OTP or ownership verification. Identity fixtures are not hosted document/liveness sessions. Payout matching remains a prototype with no real enabled route. Provider intake Skills are for provider operations/BYO, not a universal customer gate.
115
115
 
116
- Remote APIs count fixed task/capability/country/stage/error categories for 90 days, including technical failures. They store no arguments, identity data, credentials, raw chats or per-user tracking. Offline Skills/CLI never upload automatically. Optional feedback requires explicit consent, contains only fixed categories, and is unverified self-reported evidence. A SHA-256 hash of its random receipt ID is retained 30 days for within-day retry deduplication; the ID itself is not stored. Counters are capped at 10,000 requests/day and 500 summaries/day per database; missing history or offline usage is unknown. Requests are not unique customers.
116
+ Remote APIs count fixed task/capability/country/stage/error categories for 90 days, including technical failures. They store no arguments, identity data, credentials, raw chats or per-user tracking. Local feedback is off by default. After explicit opt-in, CLI and stdio MCP automatically upload category-only events. Reading static Skills remains unobservable. Optional feedback requires explicit consent, contains only fixed categories, and is unverified self-reported evidence. A SHA-256 hash of its random receipt ID is retained 30 days for 30-day retry deduplication; the ID itself is not stored. Counters are capped at 10,000 requests/day and 500 summaries/day per database; missing history or offline usage is unknown. Requests are not unique customers.
117
+
118
+ ## 首次同意后的本地自动反馈(0.6.0)
119
+
120
+ ```sh
121
+ gridzen telemetry status
122
+ # Run only after reading and agreeing to category-only automatic sharing:
123
+ gridzen telemetry enable --consent
124
+ gridzen plan --country US --event onboarding --task signup_phone
125
+ # Send one queued event per invocation after reconnecting:
126
+ gridzen telemetry flush
127
+ # Disable future uploads and clear the pending queue:
128
+ gridzen telemetry disable
129
+ ```
130
+
131
+ No network calls occur from local CLI/MCP when disabled. Consent is saved per OS user, not silently added to a project. Events contain only documented categories, ISO country, and a random per-event receipt, with no conversation, identity fields, credentials, user or project IDs. Feedback failures do not fail tool execution. The local queue is capped at 1,000 events/30 days; reconnect or `flush` retries one queued event, with a one-second HTTP timeout. Uploads are self-reported usage, not authenticated customers or completed verification. No background daemon is installed. Merely reading a Skill is unobservable; after consent, an Agent can explicitly record a fixed-category task summary.
132
+
133
+ 本地反馈默认关闭。用户先阅读说明并同意,再运行 `gridzen telemetry enable --consent`;此后 CLI 和本地 MCP 自动反馈分类事件。`gridzen telemetry disable` 立即关闭并清空待发送队列。断网最多保留 1000 条、30 天;恢复后每次调用或 flush 发送一条,无后台守护进程。只发送固定分类、国家和随机事件回执,不发送对话、身份资料、凭证或用户/项目标识。按服务器收到的日期统计,延迟上传不是该日实际发生的全部调用。仅阅读 Skill 无法自动观察,Agent 可在用户已经同意时主动 record 分类小结。它们仍是自报线索,不代表认证客户或真实核验完成。
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.5.0",
2
+ "version": "0.6.0",
3
3
  "checked_at": "2026-10-09",
4
4
  "tools": 5,
5
5
  "skills": 6,
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "gridzen-developer-kit"
7
- version = "0.5.0"
7
+ version = "0.6.0"
8
8
  readme = "README.md"
9
9
  license = "MIT"
10
10
  license-files = ["LICENSE", "NOTICE.md"]
@@ -22,3 +22,6 @@ Separate network/auth/schema/rate-limit errors from returned synthetic fixture o
22
22
  ## Optional task feedback
23
23
 
24
24
  Offline use is not tracked. Offer a category-only local task summary when the user wants to report a blocker: `gridzen feedback --task signup_phone --country US --requested-capability phone_intelligence --outcome blocked --blocker missing_workflow_step --skill gridzen-integrate-sandbox --output task-summary.json`. Choose the actual fixed categories; do not fabricate demand. Inspect the file with the user. Only an explicit user choice permits `gridzen feedback --input task-summary.json --share`; otherwise stop at the local file. Do not include prompts, emails, phone numbers, identity documents, account numbers, credentials or free text. Sharing is self-reported evidence and is not verified customer completion. No hidden upload, background call or new MCP tool is required.
25
+
26
+
27
+ Local feedback in kit 0.6.0 is off by default. If the CLI is installed, `gridzen telemetry status` shows consent. Never enable it on the user's behalf without explicit agreement. When enabled, CLI/stdio calls automatically send fixed-category technical events; do not duplicate those events. For a Skill-only workflow, record one task summary after actual work with `gridzen telemetry record --skill gridzen-explain-verification --task <documented-task> --outcome <documented-outcome> --blocker <documented-reason>`, only if consent is already enabled. Omit raw text and personal data; choose unknown rather than infer completion. Do not install a dependency just to report telemetry. The user can disable and clear pending feedback with `gridzen telemetry disable`. Reading these instructions alone is not tracked.
@@ -21,3 +21,6 @@ For signup phone checks use `phone_intelligence`; number type is not ownership o
21
21
  ## Optional task feedback
22
22
 
23
23
  Offline use is not tracked. Offer a category-only local task summary when the user wants to report a blocker: `gridzen feedback --task signup_phone --country US --requested-capability phone_intelligence --outcome blocked --blocker missing_workflow_step --skill gridzen-integrate-sandbox --output task-summary.json`. Choose the actual fixed categories; do not fabricate demand. Inspect the file with the user. Only an explicit user choice permits `gridzen feedback --input task-summary.json --share`; otherwise stop at the local file. Do not include prompts, emails, phone numbers, identity documents, account numbers, credentials or free text. Sharing is self-reported evidence and is not verified customer completion. No hidden upload, background call or new MCP tool is required.
24
+
25
+
26
+ Local feedback in kit 0.6.0 is off by default. If the CLI is installed, `gridzen telemetry status` shows consent. Never enable it on the user's behalf without explicit agreement. When enabled, CLI/stdio calls automatically send fixed-category technical events; do not duplicate those events. For a Skill-only workflow, record one task summary after actual work with `gridzen telemetry record --skill gridzen-integrate-sandbox --task <documented-task> --outcome <documented-outcome> --blocker <documented-reason>`, only if consent is already enabled. Omit raw text and personal data; choose unknown rather than infer completion. Do not install a dependency just to report telemetry. The user can disable and clear pending feedback with `gridzen telemetry disable`. Reading these instructions alone is not tracked.
@@ -23,4 +23,4 @@ assert result['status'] == 'inconclusive'
23
23
  Unexpected fields are rejected (422); unknown country/capability/fixture is rejected (400). Network errors and HTTP failures are integration failures, not verification outcomes. Do not retry indefinitely. Local core and local MCP work offline after installation; Python HTTP SDK sends only documented fixture parameters to Gridzen.
24
24
 
25
25
 
26
- Task-specific planning (kit 0.5.0): `plan_verification(country="US", event="onboarding", task="signup_phone", stage="prototype")`. Identity task: `identity_onboarding`. Task and event must agree. Fixtures accept `phone_intelligence` and `identity_verification` in addition to existing research capability names. All fixture outcomes remain simulated and verified=false. Production planning always reports NO_LIVE_ROUTE_ENABLED. No extra MCP tool is added.
26
+ Task-specific planning (kit 0.6.0): `plan_verification(country="US", event="onboarding", task="signup_phone", stage="prototype")`. Identity task: `identity_onboarding`. Task and event must agree. Fixtures accept `phone_intelligence` and `identity_verification` in addition to existing research capability names. All fixture outcomes remain simulated and verified=false. Production planning always reports NO_LIVE_ROUTE_ENABLED. No extra MCP tool is added.
@@ -19,3 +19,6 @@ Select the proof for the customer task before choosing a provider. Use `plan_ver
19
19
  ## Optional task feedback
20
20
 
21
21
  Offline use is not tracked. Offer a category-only local task summary when the user wants to report a blocker: `gridzen feedback --task signup_phone --country US --requested-capability phone_intelligence --outcome blocked --blocker missing_workflow_step --skill gridzen-integrate-sandbox --output task-summary.json`. Choose the actual fixed categories; do not fabricate demand. Inspect the file with the user. Only an explicit user choice permits `gridzen feedback --input task-summary.json --share`; otherwise stop at the local file. Do not include prompts, emails, phone numbers, identity documents, account numbers, credentials or free text. Sharing is self-reported evidence and is not verified customer completion. No hidden upload, background call or new MCP tool is required.
22
+
23
+
24
+ Local feedback in kit 0.6.0 is off by default. If the CLI is installed, `gridzen telemetry status` shows consent. Never enable it on the user's behalf without explicit agreement. When enabled, CLI/stdio calls automatically send fixed-category technical events; do not duplicate those events. For a Skill-only workflow, record one task summary after actual work with `gridzen telemetry record --skill gridzen-select-verification --task <documented-task> --outcome <documented-outcome> --blocker <documented-reason>`, only if consent is already enabled. Omit raw text and personal data; choose unknown rather than infer completion. Do not install a dependency just to report telemetry. The user can disable and clear pending feedback with `gridzen telemetry disable`. Reading these instructions alone is not tracked.
@@ -22,3 +22,6 @@ Mexico payout scope remains a bounded draft. No real bank matching route is enab
22
22
  ## Optional task feedback
23
23
 
24
24
  Offline use is not tracked. Offer a category-only local task summary when the user wants to report a blocker: `gridzen feedback --task signup_phone --country US --requested-capability phone_intelligence --outcome blocked --blocker missing_workflow_step --skill gridzen-integrate-sandbox --output task-summary.json`. Choose the actual fixed categories; do not fabricate demand. Inspect the file with the user. Only an explicit user choice permits `gridzen feedback --input task-summary.json --share`; otherwise stop at the local file. Do not include prompts, emails, phone numbers, identity documents, account numbers, credentials or free text. Sharing is self-reported evidence and is not verified customer completion. No hidden upload, background call or new MCP tool is required.
25
+
26
+
27
+ Local feedback in kit 0.6.0 is off by default. If the CLI is installed, `gridzen telemetry status` shows consent. Never enable it on the user's behalf without explicit agreement. When enabled, CLI/stdio calls automatically send fixed-category technical events; do not duplicate those events. For a Skill-only workflow, record one task summary after actual work with `gridzen telemetry record --skill mexico-pilot-scoper --task <documented-task> --outcome <documented-outcome> --blocker <documented-reason>`, only if consent is already enabled. Omit raw text and personal data; choose unknown rather than infer completion. Do not install a dependency just to report telemetry. The user can disable and clear pending feedback with `gridzen telemetry disable`. Reading these instructions alone is not tracked.
@@ -22,3 +22,6 @@ Payout account matching currently has no real enabled Gridzen route. Keep output
22
22
  ## Optional task feedback
23
23
 
24
24
  Offline use is not tracked. Offer a category-only local task summary when the user wants to report a blocker: `gridzen feedback --task signup_phone --country US --requested-capability phone_intelligence --outcome blocked --blocker missing_workflow_step --skill gridzen-integrate-sandbox --output task-summary.json`. Choose the actual fixed categories; do not fabricate demand. Inspect the file with the user. Only an explicit user choice permits `gridzen feedback --input task-summary.json --share`; otherwise stop at the local file. Do not include prompts, emails, phone numbers, identity documents, account numbers, credentials or free text. Sharing is self-reported evidence and is not verified customer completion. No hidden upload, background call or new MCP tool is required.
25
+
26
+
27
+ Local feedback in kit 0.6.0 is off by default. If the CLI is installed, `gridzen telemetry status` shows consent. Never enable it on the user's behalf without explicit agreement. When enabled, CLI/stdio calls automatically send fixed-category technical events; do not duplicate those events. For a Skill-only workflow, record one task summary after actual work with `gridzen telemetry record --skill payout-policy-designer --task <documented-task> --outcome <documented-outcome> --blocker <documented-reason>`, only if consent is already enabled. Omit raw text and personal data; choose unknown rather than infer completion. Do not install a dependency just to report telemetry. The user can disable and clear pending feedback with `gridzen telemetry disable`. Reading these instructions alone is not tracked.
@@ -22,3 +22,6 @@ This is a provider-operation or bring-your-own-provider task. Do not impose this
22
22
  ## Optional task feedback
23
23
 
24
24
  Offline use is not tracked. Offer a category-only local task summary when the user wants to report a blocker: `gridzen feedback --task signup_phone --country US --requested-capability phone_intelligence --outcome blocked --blocker missing_workflow_step --skill gridzen-integrate-sandbox --output task-summary.json`. Choose the actual fixed categories; do not fabricate demand. Inspect the file with the user. Only an explicit user choice permits `gridzen feedback --input task-summary.json --share`; otherwise stop at the local file. Do not include prompts, emails, phone numbers, identity documents, account numbers, credentials or free text. Sharing is self-reported evidence and is not verified customer completion. No hidden upload, background call or new MCP tool is required.
25
+
26
+
27
+ Local feedback in kit 0.6.0 is off by default. If the CLI is installed, `gridzen telemetry status` shows consent. Never enable it on the user's behalf without explicit agreement. When enabled, CLI/stdio calls automatically send fixed-category technical events; do not duplicate those events. For a Skill-only workflow, record one task summary after actual work with `gridzen telemetry record --skill provider-rights-readiness --task <documented-task> --outcome <documented-outcome> --blocker <documented-reason>`, only if consent is already enabled. Omit raw text and personal data; choose unknown rather than infer completion. Do not install a dependency just to report telemetry. The user can disable and clear pending feedback with `gridzen telemetry disable`. Reading these instructions alone is not tracked.
@@ -1,2 +1,2 @@
1
1
  """Gridzen developer tools. Research and simulation are never live verification."""
2
- __version__ = '0.5.0'
2
+ __version__ = '0.6.0'
@@ -18,7 +18,26 @@ def main():
18
18
  from .setup import CLIENTS
19
19
  x=s.add_parser('setup',help='Prepare six Skills and MCP config for a harness; dry-run until --apply')
20
20
  x.add_argument('--client',choices=['all',*CLIENTS],required=True);x.add_argument('--project',default='.');x.add_argument('--apply',action='store_true')
21
+ x=s.add_parser('telemetry',help='Opt-in local category feedback; no chat, personal fields or credentials')
22
+ x.add_argument('action',choices=['enable','disable','status','flush','record'])
23
+ x.add_argument('--consent',action='store_true',help='Explicitly consent to automatic category uploads')
24
+ x.add_argument('--task',choices=sorted(TASKS),default='unknown');x.add_argument('--skill',choices=sorted(SKILLS),default='unknown')
25
+ x.add_argument('--outcome',choices=sorted(OUTCOMES),default='unknown');x.add_argument('--blocker',choices=sorted(REASONS),default='unknown')
21
26
  a=p.parse_args()
27
+ if a.command=='telemetry':
28
+ from . import telemetry
29
+ try:
30
+ if a.action=='enable':
31
+ if not a.consent:p.error('Enabling automatic feedback requires --consent. Fixed categories only; disable anytime.')
32
+ result=telemetry.configure(True)
33
+ elif a.action=='disable':result=telemetry.configure(False)
34
+ elif a.action=='status':result=telemetry.status()
35
+ elif a.action=='flush':result=telemetry.flush()
36
+ else:
37
+ telemetry.observe({'operation':'task_summary','task':a.task,'skill':a.skill,'mode':'local_draft','outcome':a.outcome,'reason':a.blocker})
38
+ result=telemetry.status()
39
+ except (OSError,ValueError) as exc:p.error(type(exc).__name__)
40
+ print(json.dumps(result,indent=2));return
22
41
  if a.command=='feedback':
23
42
  from .product_feedback import validate_summary
24
43
  try:
@@ -43,6 +62,12 @@ def main():
43
62
  print(json.dumps(list_skills(),ensure_ascii=False,indent=2));return
44
63
  try:
45
64
  result={'coverage':lambda:core.coverage(a.country,a.capability),'plan':lambda:core.plan(a.country,a.event,a.task,a.stage),'simulate':lambda:core.simulate(a.country,a.capability,a.scenario),'explain':lambda:core.explain(a.reason_code)}[a.command]()
46
- except ValueError as e:p.error(str(e))
65
+ except ValueError as e:
66
+ from .telemetry import observe
67
+ observe({'operation':{'coverage':'get_coverage','plan':'plan_verification','simulate':'create_sandbox_verification','explain':'explain_result'}[a.command],'task':getattr(a,'task',None),'country':getattr(a,'country',None),'outcome':'integration_error','reason':'schema_error'})
68
+ p.error(str(e))
69
+ from .telemetry import observe
70
+ blocked=a.command=='plan' and (a.stage=='production' or result.get('task_match_status') in ('unsupported','needs_clarification'))
71
+ observe({'operation':{'coverage':'get_coverage','plan':'plan_verification','simulate':'create_sandbox_verification','explain':'explain_result'}[a.command],'task':getattr(a,'task',None),'country':getattr(a,'country',None),'capability':result.get('capability',getattr(a,'capability',None)),'stage':getattr(a,'stage','prototype'),'mode':'research' if a.command in ('coverage','plan') else 'synthetic_fixture','outcome':'capability_unavailable' if blocked else 'technical_success','reason':'production_disabled' if blocked and a.stage=='production' else 'unavailable_route' if blocked else 'none'})
47
72
  print(json.dumps(result,ensure_ascii=False,indent=2))
48
73
  if __name__=='__main__':main()
@@ -27,7 +27,7 @@ class GridzenMCP(MCPServer):
27
27
  for tool in tools:tool.input_schema['additionalProperties']=False
28
28
  return tools
29
29
 
30
- server=GridzenMCP('Gridzen Developer Kit',version='0.5.0',website_url='https://gridzen.ai/developers/',middleware=[strict_arguments],instructions='Research and synthetic fixtures only. No live providers are enabled. Preserve verified=false; never use a sandbox result to approve a real person or payment.')
30
+ server=GridzenMCP('Gridzen Developer Kit',version='0.6.0',website_url='https://gridzen.ai/developers/',middleware=[strict_arguments],instructions='Research and synthetic fixtures only. No live providers are enabled. Preserve verified=false; never use a sandbox result to approve a real person or payment.')
31
31
  read=ToolAnnotations(readOnlyHint=True,destructiveHint=False,idempotentHint=True,openWorldHint=False)
32
32
  @server.tool(annotations=read,structured_output=True)
33
33
  def get_coverage(country: str | None=None, capability: str | None=None) -> dict[str, Any]:
@@ -50,5 +50,27 @@ def explain_result(reason_code: str) -> dict[str, Any]:
50
50
  """Explain a sandbox reason code; missing data and timeout remain inconclusive."""
51
51
  return core.explain(reason_code)
52
52
  TOOLS={fn.__name__:fn for fn in (get_coverage,plan_verification,create_sandbox_verification,get_sandbox_verification,explain_result)}
53
- def main():server.run(transport='stdio')
53
+ async def local_feedback(ctx, call_next):
54
+ from .telemetry import observe
55
+ import asyncio
56
+ params=ctx.params if isinstance(ctx.params,dict) else {}
57
+ args=params.get('arguments') if isinstance(params.get('arguments'),dict) else {}
58
+ dims={'operation':params.get('name'),'task':args.get('task'),'country':args.get('country'),'capability':args.get('capability'),'stage':args.get('stage','prototype'),'mode':'research' if params.get('name') in ('get_coverage','plan_verification') else 'synthetic_fixture'}
59
+ try: result=await call_next(ctx)
60
+ except Exception:
61
+ if ctx.method=='tools/call':await asyncio.to_thread(observe,{**dims,'outcome':'integration_error','reason':'tool_error'})
62
+ raise
63
+ if ctx.method=='tools/call':
64
+ content=getattr(result,'structured_content',None) or {}
65
+ blocked=content.get('requested_stage')=='production' or content.get('task_match_status') in ('unsupported','needs_clarification')
66
+ failed=getattr(result,'is_error',False)
67
+ await asyncio.to_thread(observe,{**dims,'capability':content.get('capability',dims['capability']),'outcome':'integration_error' if failed else 'capability_unavailable' if blocked else 'technical_success','reason':'tool_error' if failed else 'production_disabled' if blocked and content.get('requested_stage')=='production' else 'unavailable_route' if blocked else 'none'})
68
+ return result
69
+
70
+ def main():
71
+ from .telemetry import enabled
72
+ if enabled():
73
+ read.open_world_hint=True
74
+ server.middleware.insert(0,local_feedback)
75
+ server.run(transport='stdio')
54
76
  if __name__=='__main__':main()
@@ -15,7 +15,7 @@ TASKS = frozenset(('signup_phone','identity_onboarding','payout_account','phone_
15
15
  CAPABILITIES = frozenset(('official_identity','commercial_identity','consented_eid','bank_account_match','consented_bank','cardholder_name','phone_identity','phone_intelligence','identity_verification','otp','business_kyb','batch','webhook_recovery','policy_design','provider_rights','other','unknown'))
16
16
  SKILLS = frozenset(('gridzen-select-verification','gridzen-integrate-sandbox','gridzen-explain-verification','provider-rights-readiness','payout-policy-designer','mexico-pilot-scoper','unknown'))
17
17
  OPERATIONS = frozenset(('get_coverage','plan_verification','create_sandbox_verification','get_sandbox_verification','explain_result','merchant_create','merchant_read','merchant_simulate','merchant_refresh','merchant_capabilities','task_summary','transport_rejected','other'))
18
- SOURCES = frozenset(('internal_test','self_reported_test','unknown','authenticated_merchant_sandbox','self_reported_feedback','authenticated_feedback'))
18
+ SOURCES = frozenset(('internal_test','self_reported_test','unknown','authenticated_merchant_sandbox','self_reported_feedback','authenticated_feedback','self_reported_local_usage'))
19
19
  MODES = frozenset(('research','synthetic_fixture','merchant_sandbox','local_draft','unknown'))
20
20
  OUTCOMES = frozenset(('technical_success','integration_error','capability_unavailable','completed_prototype','blocked','abandoned','unknown'))
21
21
  REASONS = frozenset(('none','auth_error','schema_error','rate_limit','timeout','transport_error','tool_error','unknown_country','unknown_capability','unavailable_route','coverage_gap','missing_workflow_step','price_unknown','production_disabled','already_solved_elsewhere','idempotency_conflict','record_not_found','other','unknown'))
@@ -57,7 +57,7 @@ def write(path, values, receipt=None, day=None):
57
57
  feedback=db.execute("SELECT COALESCE(SUM(count),0) FROM product_events WHERE day=? AND operation='task_summary'",(day.isoformat(),)).fetchone()[0]
58
58
  if feedback>=500:return False
59
59
  digest=hashlib.sha256(receipt.encode()).hexdigest()
60
- if db.execute('SELECT 1 FROM feedback_receipts WHERE day=? AND hash=?',(day.isoformat(),digest)).fetchone():return True
60
+ if db.execute('SELECT 1 FROM feedback_receipts WHERE hash=?',(digest,)).fetchone():return True
61
61
  db.execute('INSERT INTO feedback_receipts VALUES (?,?)',(day.isoformat(),digest))
62
62
  columns='day,'+','.join(FIELDS)
63
63
  values=(day.isoformat(),*(safe[key] for key in FIELDS))
@@ -93,3 +93,16 @@ def accept_summary(path, value, source='self_reported_feedback'):
93
93
 
94
94
  def http_reason(status):
95
95
  return {400:'schema_error',401:'auth_error',403:'auth_error',404:'record_not_found',409:'idempotency_conflict',413:'schema_error',422:'schema_error',429:'rate_limit',502:'unavailable_route',503:'unavailable_route',504:'timeout'}.get(status,'tool_error' if status>=400 else 'none')
96
+
97
+
98
+ def accept_usage(path, value):
99
+ if not isinstance(value,dict) or set(value)!={'schema_version','event_id','consent_to_share','dimensions'} or type(value['schema_version']) is not int or value['schema_version']!=1 or value['consent_to_share'] is not True:
100
+ raise ValueError('INVALID_USAGE_EVENT')
101
+ if not isinstance(value['event_id'],str) or len(value['event_id'])!=36: raise ValueError('INVALID_USAGE_EVENT')
102
+ try: UUID(value['event_id'])
103
+ except ValueError: raise ValueError('INVALID_USAGE_EVENT') from None
104
+ dimensions=value['dimensions']
105
+ if not isinstance(dimensions,dict) or set(dimensions)!=set(FIELDS) or safe_dimensions(dimensions)!=dimensions or dimensions['source']!='self_reported_local_usage': raise ValueError('INVALID_USAGE_EVENT')
106
+ if dimensions['operation'] not in OPERATIONS-{'merchant_create','merchant_read','merchant_simulate','merchant_refresh','merchant_capabilities','transport_rejected'}: raise ValueError('INVALID_USAGE_EVENT')
107
+ if dimensions['mode']=='merchant_sandbox': raise ValueError('INVALID_USAGE_EVENT')
108
+ return write(path,dimensions,receipt='local:'+value['event_id'])
@@ -18,7 +18,7 @@ mcp_app=make_transport()
18
18
  async def lifespan(_app):
19
19
  async with mcp_app.router.lifespan_context(mcp_app):yield
20
20
 
21
- app=FastAPI(title='Gridzen Developer Sandbox',version='0.5.0',lifespan=lifespan,docs_url=None,redoc_url=None,openapi_url='/api/openapi.json',servers=[{'url':'/developers'}])
21
+ app=FastAPI(title='Gridzen Developer Sandbox',version='0.6.0',lifespan=lifespan,docs_url=None,redoc_url=None,openapi_url='/api/openapi.json',servers=[{'url':'/developers'}])
22
22
  app.add_middleware(MCPBounds)
23
23
  app.add_middleware(CallSourceMiddleware)
24
24
  class PlanRequest(BaseModel):
@@ -67,10 +67,10 @@ async def bounds(request:Request,call_next):
67
67
  response.headers['Cache-Control']='no-store' if request.url.path.startswith(('/api','/mcp')) else 'public, max-age=60'
68
68
  return response
69
69
  @app.get('/health')
70
- def health():return {'status':'ok','mode':'sandbox','live_routes':0,'version':'0.5.0','mcp_transport':'streamable-http'}
70
+ def health():return {'status':'ok','mode':'sandbox','live_routes':0,'version':'0.6.0','mcp_transport':'streamable-http'}
71
71
  @app.get('/server-card.json')
72
72
  async def server_card():
73
- return {'serverInfo':{'name':'Gridzen Verification','version':'0.5.0'},'authentication':{'required':False},'tools':[tool.model_dump(by_alias=True,exclude_none=True) for tool in await mcp_server.list_tools()],'resources':[],'prompts':[]}
73
+ return {'serverInfo':{'name':'Gridzen Verification','version':'0.6.0'},'authentication':{'required':False},'tools':[tool.model_dump(by_alias=True,exclude_none=True) for tool in await mcp_server.list_tools()],'resources':[],'prompts':[]}
74
74
  @app.get('/api/coverage')
75
75
  def coverage(country:str|None=Query(None,max_length=2),capability:str|None=Query(None,max_length=40)):return core.coverage(country,capability)
76
76
  @app.post('/api/plan')
@@ -94,5 +94,14 @@ async def feedback(request:Request):
94
94
  if not accepted:return JSONResponse({'error':'FEEDBACK_TEMPORARILY_UNAVAILABLE'},status_code=503)
95
95
  return {'accepted':True,'evidence':'self_reported','authenticated_customer':False,'retention':'aggregate 90 days; receipt hash 30 days','duplicate_receipts':'deduplicated within UTC day'}
96
96
 
97
+ @app.post('/api/usage-events')
98
+ async def local_usage(request:Request):
99
+ from .product_feedback import accept_usage
100
+ try: accepted=accept_usage(os.environ.get('GRIDZEN_MCP_EVENTS_DB'),json.loads(await request.body()))
101
+ except ValueError: return JSONResponse({'error':'INVALID_USAGE_EVENT'},status_code=422)
102
+ except (OSError,sqlite3.Error): accepted=False
103
+ if not accepted: return JSONResponse({'error':'USAGE_TEMPORARILY_UNAVAILABLE'},status_code=503)
104
+ return {'accepted':True,'evidence':'self_reported_local_usage','authenticated_customer':False}
105
+
97
106
  app.router.routes.extend(mcp_app.routes)
98
107
  app.mount('/',StaticFiles(directory=Path(__file__).parent/'web',html=True),name='developer-web')