ee

GitHub

定义 Grida 企业版(EE)功能边界,规范 EE 专属特性(如计费、BYOD)的识别与剥离。提供 GRIDA-EE 注释标记约定及文件物理放置规则,确保开源核心与商业功能的清晰分离。

.agents/skills/ee/SKILL.md gridaco/grida

Trigger Scenarios

添加或修改仅存在于企业版的商业功能 决定某功能是否属于 EE 领域 需要标记 EE 专属代码文件

Install

npx skills add gridaco/grida --skill ee -g -y
More Options

Non-standard path

npx skills add https://github.com/gridaco/grida/tree/main/.agents/skills/ee -g -y

Use without installing

npx skills use gridaco/grida@ee

指定 Agent (Claude Code)

npx skills add gridaco/grida --skill ee -a claude-code -g -y

安装 repo 全部 skill

npx skills add gridaco/grida --all -g -y

预览 repo 内 skill

npx skills add gridaco/grida --list

SKILL.md

Frontmatter
{
    "name": "ee",
    "description": "Working pattern for enterprise-edition features in Grida — the commercial\/hosted concerns (entitlement, BYOD, billing) on top of the OSS core. Anchor for the `GRIDA-EE: <surface>` grep marker, `(ee)` route group, `*-hosted` package suffix, and namespaced `grida_*` schema. Use when adding or touching an EE-only feature, or deciding whether a feature is EE territory. Surface skills (`ee-billing`) are siblings."
}

ee

Grida is open source. Some features only exist because Grida is also a hosted commercial product — org-level entitlement, custom domains, billing. Those features are EE (enterprise edition): they ship in the same monorepo as the OSS core, but a self-hoster running the codebase without paid infrastructure should be able to identify and strip them.

This skill is the anchor for that boundary. No GRIDA-EE marker exists in the repo today; this skill establishes the convention.

What counts as EE

The test: would this feature still make sense in a single-user, no-billing self-hosted instance? If no, it is EE.

Three surfaces today:

  • Org / entitlement — the commercial layer on top of multi-tenant routing. Paid plans, member seats, the entitlement check that gates paid features. The tenant routing substrate itself ((tenant) route group, RLS, hostname resolution) is OSS infrastructure — only the commercial layer on top of it is EE.
  • Custom domains (BYOD) — user-owned apex + subdomain mapping on Vercel. See multi-tenant-custom-domain-vercel.
  • Billing — subscriptions, AI credit, the entitlement gate primitive. See the ee-billing skill (planned) for the workflow.

The GRIDA-EE marker

Like GRIDA-SEC, the boundary is grep-able. Tag every file that exists only for EE, with the surface as the sub-label:

// GRIDA-EE: entitlement — paid-plan gate
// GRIDA-EE: byod — apex domain verification
// GRIDA-EE: billing — see ee-billing

Sub-labels are surface names (entitlement / byod / billing), not ids — there is no central registry like SECURITY.md. The grep is the index:

grep -rn 'GRIDA-EE' editor crates packages

Tag the file header when the entire file is EE; tag inline when only a branch is EE.

Known limitation. The marker captures files that exist only for EE. Shared utilities that EE imports but OSS also uses are not tagged — strip-time discovery has to come from an import audit, not grep. Don't tag OSS modules with EE callers; tag inline at the EE branch instead.

Physical placement

Co-locate by surface so the grep doesn't have to do all the work.

  • Next.js routes — group under (ee) only when a cluster of EE-only routes shares chrome/auth distinct from OSS readers (per naming, route groups encode the reader on the other side of the screen). For a single EE route inside an OSS reader's surface, tag inline rather than fragmenting the existing group. Tenant content rendering stays in (tenant) — that is the OSS routing substrate, not EE.
  • Packages and crates — use the existing *-hosted suffix when the whole package is EE-only. grida_hosted already lives in the DB schemas as the parallel namespace, and *-hosted is in naming's established suffix list. Don't mint a parallel *-ee suffix. Mixed packages stay unsuffixed and tag the EE branches inside.
  • Database — namespaced schema. Existing examples: grida_billing, grida_hosted. Don't bleed EE columns into OSS-relevant tables. Schema-design rules live in the database skill / supabase/AGENTS.md; consult those.

When in doubt, default to the EE-named location. The cost of moving later is the cost of every import.

Working on EE features

  1. Tag every file you create or touch with GRIDA-EE: <surface>.
  2. Place new code in an EE-named location. If there's no existing EE location for the surface yet, create it — don't dilute an OSS one.
  3. Direction of dependency: EE → OSS, not OSS → EE. Stripping the (ee) group and *-hosted packages must not break OSS modules. Where OSS needs to query an EE concept (entitlement, paid plan, member seats), define the interface in OSS and let EE provide the implementation — not a direct import of an EE module from an OSS one.
  4. Fail-closed at the EE boundary is security discipline — see GRIDA-SEC-003 (BYOK fail-closed) for the worked example.

When EE crosses security

EE surfaces that also carry a GRIDA-SEC-<id> tag — the Stripe and Metronome webhook receivers (GRIDA-SEC-001), the BYOK carve-out (GRIDA-SEC-003), any path that gates entitlement on a signed payload — run the security review first; this pattern is the second pass. Tag the file with both markers.

Precedence is stated here only; if the rule becomes load-bearing, mirror it into security/SKILL.md so a reader entering from that side doesn't miss it.

See also: ee-billing (billing workflow — planned), security (boundary contracts, fail-closed discipline), naming (the suffix list this inherits), oss-standards (public-by-default discipline), database (schema namespacing).

Version History

  • 29f3afa Current 2026-08-20 15:55

Same Skill Collection

.agents/skills/ai-models/SKILL.md
.agents/skills/code-react/SKILL.md
.agents/skills/code-ts/SKILL.md
.agents/skills/database/SKILL.md
.agents/skills/docs-canvas/SKILL.md
.agents/skills/docs/SKILL.md
.agents/skills/editor-perf/SKILL.md
.agents/skills/ee-billing/SKILL.md
.agents/skills/etiology/SKILL.md
.agents/skills/fixtures/SKILL.md
.agents/skills/io-figma/SKILL.md
.agents/skills/io-grida/SKILL.md
.agents/skills/links/SKILL.md
.agents/skills/naming/SKILL.md
.agents/skills/opt-library/SKILL.md
.agents/skills/oss-standards/SKILL.md
skills/dotcanvas/SKILL.md
skills/slides/SKILL.md
skills/svg/SKILL.md
.agents/skills/agent-system/SKILL.md
.agents/skills/desktop/SKILL.md
.agents/skills/docs-svg-kit/SKILL.md
.agents/skills/docs-wg/SKILL.md
.agents/skills/gg/SKILL.md
.agents/skills/grounding/SKILL.md
.agents/skills/pedantic/SKILL.md
.agents/skills/sdk-design/SKILL.md
.agents/skills/sdk-seam/SKILL.md
.agents/skills/security/SKILL.md
.agents/skills/seo/SKILL.md
.agents/skills/vision/SKILL.md

Metadata

Files
0
Version
8ef5e53
Hash
d1ac4a8d
Indexed
2026-08-20 15:55

Accueil - Wiki
Copyright © 2011-2026 iteam. Current version is 2.155.2. UTC+08:00, 2026-08-31 10:34
浙ICP备14020137号-1 $Carte des visiteurs$