技能创建器
skill-creator
创建、改进和评估自定义技能,把专业流程转化为可重复使用的 AI 能力。
grammarly-license-governor【数据与研究】Produce a review-only plan from a sanitized Grammarly License Management snapshot, identifying non-admin users whose last activity is before an explicit cutoff. Use when governing unused seats without exposing identity data or mutating Grammarly. Trigger with "review Grammarly inactive licenses", "Grammarly seat audit", or "analyze a sanitized Gramma…
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
This skill creates a human-review queue from a sanitized License Management API
snapshot. It never calls Grammarly, resolves identities, sends a mutation, or
deletes a user or invitee. A candidate is only a non-admin user whose recorded
last_activity_at is strictly earlier than the explicit inactive_before cutoff.
Use this skill for a bounded seat-review decision from sanitized user activity metadata, not for identity resolution or live account administration.
No credentials, network access, Grammarly account, names, email addresses, or raw IDs are needed. Python 3.10+ is the only runtime requirement. If a separate live integration is being designed, consult the official OAuth 2.0 credentials documentation (accessed 2026-09-04) for scopes; live authentication and mutation are outside this skill.
python3 scripts/analyze_license_snapshot.py snapshot.json
cat snapshot.json | python3 scripts/analyze_license_snapshot.py -
python3 scripts/analyze_license_snapshot.py --self-test
The input contract is intentionally narrow. It accepts one snapshot object with an explicit snapshot timestamp and UTC cutoff, producer attestation for keyed HMAC-SHA256 pseudonymization, and records containing only resource pseudonyms, last-activity timestamps, and the admin flag. Names, email addresses, raw numeric/string IDs, institution identifiers, secrets, tokens, headers, and unknown fields fail closed, including when nested.
snapshot_generated_at and inactive_before; never use the current time or
an implicit default, and reject a cutoff later than the snapshot.last_activity_at < inactive_before.
Equal timestamps are not inactive-before evidence.is_admin: true. The official API says admin licenses
cannot currently be removed; admins must not enter the candidate plan.resource_id_hmac_sha256, generated outside this tool with an
organization-controlled HMAC key. The analyzer validates attestation and digest
shape but cannot cryptographically prove upstream generation. Do not reverse, join,
enrich, or display identity attributes; a plain unsalted hash is not enough.HUMAN_REVIEW_ONLY candidates. The output is not an execution manifest and
contains no delete operation, endpoint call, or authorization instruction.Invitees are outside this analyzer's inactivity rule because the documented invitee
shape has creation and invitation status, not last_activity_at. Keep them in a
separate human review if they need governance; do not silently treat an invitee's
creation date as inactivity.
The official License Management API page gives two different paths for the institution
summary: its endpoint heading says /ecosystem/api/v1/institutions-summary, while its
example request omits /v1 and uses /ecosystem/api/institutions-summary. This is
unresolved documentation evidence. Treat it as a fail-closed stop: verify the path
with Grammarly before any human-authorized integration work. This skill does not
automate that endpoint and the offline script never performs network access.
Read the focused references when needed:
references/snapshot-schema.md — exact sanitized
input and review-plan output schema.references/license-management-contract.md
— official user/admin/invitee facts and the preserved path conflict.The script emits plan_type: REVIEW_ONLY, mutation_performed: false, snapshot time,
cutoff, the bounded producer-attestation claim, counts, and sorted candidates containing
only pseudonyms and the HUMAN_REVIEW_ONLY action. It never emits names, emails, raw
IDs, or a delete request.
Invalid JSON, missing or implicit cutoff, non-UTC timestamps, malformed or duplicate digests, admins with missing fields, forbidden identity/secret keys, and unknown fields fail closed with a non-zero exit. No partial candidate plan is emitted.
created_at; its activity evidence is absent.references/snapshot-schema.md — exact input and
review-plan output schemas.references/license-management-contract.md
— official facts and unresolved summary-path conflict.Grammarly License Management API (accessed 2026-09-04).