Skip to content
OpenSmartRoute
Skillv1.0.0

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

by jeremylongshore(0) 0 installs
Free
Sign in to install

Free account. Installing gives you the manifest plus copy-paste snippets.

See reviews

About

Imported from jeremylongshore/tons-of-skills-marketplace (skills/.curated/grammarly-license-governor/SKILL.md). Install upstream with npx skills add jeremylongshore/tons-of-skills-marketplace --skill grammarly-license-governor. Copyright stays with the author (MIT).

Grammarly License Governor

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.

Overview

Use this skill for a bounded seat-review decision from sanitized user activity metadata, not for identity resolution or live account administration.

Prerequisites

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.

Instructions

Step 1: Run the analyzer

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.

Step 2: Apply the review rules

  • Require snapshot_generated_at and inactive_before; never use the current time or an implicit default, and reject a cutoff later than the snapshot.
  • Compare timestamps in UTC and classify only last_activity_at < inactive_before. Equal timestamps are not inactive-before evidence.
  • Exclude every record with is_admin: true. The official API says admin licenses cannot currently be removed; admins must not enter the candidate plan.
  • Require the exact producer-attestation object and keep candidate identity to 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.
  • Emit HUMAN_REVIEW_ONLY candidates. The output is not an execution manifest and contains no delete operation, endpoint call, or authorization instruction.
  • Missing activity evidence, duplicate digests, malformed timestamps, and raw or identity-bearing fields are review blockers, not reasons to guess.

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.

Step 3: Stop on the unresolved official path conflict

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:

Output

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.

Error Handling

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.

Examples

  • A non-admin active before the cutoff becomes a review candidate.
  • An admin with the same old activity is counted as excluded and never becomes a candidate.
  • An invitee is not classified from created_at; its activity evidence is absent.
  • Either institution-summary path variant stops live integration work for human verification; the offline analyzer does not select one.

Resources

Official source

Grammarly License Management API (accessed 2026-09-04).

Use it

Copy one of these into your project. Installing also returns the manifest and these snippets.

yaml
targets:
  - https://api.opensmartroute.ai/api/v1/registry/jeremylongshore-tons-of-skills-marketplace-grammarly-lic-ef4ee6/manifest   # or paste the manifest below

Manifest

An Open Capability Manifest: the router reads it to know what this does, what it costs and when to pick it.

jeremylongshore-tons-of-skills-marketplace-grammarly-lic-ef4ee6.ocm.jsonjson
{
  "ocm": "1",
  "id": "jeremylongshore-tons-of-skills-marketplace-grammarly-lic-ef4ee6",
  "kind": "skill",
  "name": "grammarly-license-governor",
  "description": "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 Grammarly license snapshot\".",
  "publisher": "jeremylongshore",
  "version": "1.0.0",
  "capabilities": {
    "domains": [
      "general"
    ],
    "tags": [
      "skill-md",
      "saas",
      "grammarly",
      "licenses",
      "privacy",
      "governance",
      "skills-sh"
    ],
    "languages": [
      "en"
    ]
  },
  "quality_prior": 0.6,
  "examples": [
    "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 Grammarly license snapshot\"."
  ],
  "primary": false,
  "metadata": {
    "source": {
      "provider": "skills.sh",
      "repository": "https://github.com/jeremylongshore/tons-of-skills-marketplace",
      "path": "skills/.curated/grammarly-license-governor/SKILL.md",
      "ref": "HEAD",
      "url": "https://github.com/jeremylongshore/tons-of-skills-marketplace/blob/HEAD/skills/.curated/grammarly-license-governor/SKILL.md",
      "key": "jeremylongshore/tons-of-skills-marketplace/skills/.curated/grammarly-license-governor/SKILL.md"
    },
    "compatibility": "Agent Skills-compatible hosts; requires Python 3.10+",
    "allowed_tools": [
      "Bash(python3:*)"
    ],
    "license": "MIT"
  },
  "instructions": "# Grammarly License Governor\n\nThis skill creates a human-review queue from a sanitized License Management API\nsnapshot. It never calls Grammarly, resolves identities, sends a mutation, or\ndeletes a user or invitee. A candidate is only a non-admin user whose recorded\n`last_activity_at` is strictly earlier than the explicit `inactive_before` cutoff.\n\n## Overview\n\nUse this skill for a bounded seat-review decision from sanitized user activity\nmetadata, not for identity resolution or live account administration.\n\n## Prerequisites\n\nNo credentials, network access, Grammarly account, names, email addr",
  "cost": {
    "context_tokens": 1365
  }
}

Fetch it by URL: GET /api/v1/registry/jeremylongshore-tons-of-skills-marketplace-grammarly-lic-ef4ee6/manifest?version=1.0.0

Reviews

Star ratings from people who tried it. One review per account; edit yours any time.

No reviews yet. Install it, try it, and be the first to rate it.