Novu Design Workflow
novuhq/novu
Design notification workflows the Novu way — choose channels, set severity, decide when a workflow is critical, configure digests, and route based on subscriber state.
Apply when building or reviewing external ingestion, imports, connector polling, webhooks, extraction workers, sync cursors, checkpoints, or repair jobs.
$ npx skills add stella/stella --skill conventions-ingestion -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install stella/stella conventions-ingestion --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/stella/stella.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/conventions-ingestion .claude/skills/conventions-ingestion && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "conventions-ingestion" agent skill from https://github.com/stella/stella/tree/main/.agents/skills/conventions-ingestion into .claude/skills/conventions-ingestion/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "conventions-ingestion", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/stella/stella/tree/main/.agents/skills/conventions-ingestionType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add stella/stella --skill conventions-ingestion -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install stella/stella conventions-ingestion --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/stella/stella.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/conventions-ingestion .agents/skills/conventions-ingestion && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "conventions-ingestion" agent skill from https://github.com/stella/stella/tree/main/.agents/skills/conventions-ingestion into .agents/skills/conventions-ingestion/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "conventions-ingestion", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add stella/stella --skill conventions-ingestion -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install stella/stella conventions-ingestion --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/stella/stella.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/conventions-ingestion .cursor/skills/conventions-ingestion && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "conventions-ingestion" agent skill from https://github.com/stella/stella/tree/main/.agents/skills/conventions-ingestion into .cursor/skills/conventions-ingestion/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "conventions-ingestion", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/stella/stella.git --path .agents/skills/conventions-ingestion--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add stella/stella --skill conventions-ingestion -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install stella/stella conventions-ingestion --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/stella/stella.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/conventions-ingestion .gemini/skills/conventions-ingestion && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "conventions-ingestion" agent skill from https://github.com/stella/stella/tree/main/.agents/skills/conventions-ingestion into .gemini/skills/conventions-ingestion/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "conventions-ingestion", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install stella/stella conventions-ingestionInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add stella/stella --skill conventions-ingestion -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/stella/stella.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/conventions-ingestion .github/skills/conventions-ingestion && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "conventions-ingestion" agent skill from https://github.com/stella/stella/tree/main/.agents/skills/conventions-ingestion into .github/skills/conventions-ingestion/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "conventions-ingestion", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add stella/stella --skill conventions-ingestion -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install stella/stella conventions-ingestion --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/stella/stella.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/conventions-ingestion .opencode/skills/conventions-ingestion && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "conventions-ingestion" agent skill from https://github.com/stella/stella/tree/main/.agents/skills/conventions-ingestion into .opencode/skills/conventions-ingestion/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "conventions-ingestion", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
conventions-ingestionApply when building or reviewing external ingestion, imports, connector polling, webhooks, extraction workers, sync cursors, checkpoints, or repair jobs.
Conventions Ingestion is an agent skill from stella/stella. Apply when building or reviewing external ingestion, imports, connector polling, webhooks, extraction workers, sync cursors, checkpoints, or repair jobs. Enforces replay safety, idempotency, durable progress, and bounded recovery.
Its SKILL.md is about 2.9k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files (for example `agents/openai.yaml`).
It sits in Backend & APIs, covering Webhooks. The repository describes itself as: Open-source legal workspace. The licence is Apache-2.0.
12 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit a9618db. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md.
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Conventions Ingestion loads about 2.9k tokens when it runs. Until then it costs about 63 tokens; SKILL.md has 1,602 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from stella/stella at commit a9618db, republished under its Apache-2.0 licence (© stella). 1,602 words, ~2,914 tokens.
.claude/skills/conventions-ingestion/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.Apply to any workflow that turns external or asynchronous input into durable stella state: paginated imports, connector sync, webhooks, file extraction, queue workers, migrations, and repair scans.
A retry, duplicate delivery, worker restart, or overlapping run must converge to the same durable state as one successful run. Idempotency is one ingredient; replay safety also requires correct checkpoint ordering, durable retries, and protection from stale work.
commitReplaySafeIngestionBatch from
apps/api/src/lib/replay-safe-ingestion.ts.advanceCorpusIngestionCheckpoint from
apps/api/src/lib/corpus-ingestion-checkpoint.ts.apps/api/src/lib/case-law/cz-ecli-courts.ts for Czech sources). Never a
per-adapter constant, even where the portal is believed to serve one
court's decisions: portals republish other courts, and the court name is
what authority weighting is read off. An inventory declaration must name
the field the value is read from, and a value produced from a literal
satisfies no declaration. no-literal-decision-court rejects a literal
court in a case-law adapter.Direct Drizzle writes to syncCursor are banned by
no-direct-ingestion-checkpoint-write. Public corpus cursors go through
advanceCorpusIngestionCheckpoint; database-only batches keep the write inside
the persistCheckpoint callback passed to commitReplaySafeIngestionBatch.
The lint rule enforces the visible boundary; it does not prove that preceding
external effects are durable.
A page an adapter never fetched is invisible to any inventory of the pages it
did. So the declaration comes in two steps, and the first is the surfaces:
SourceAdapter.sourceSurfaces is required, and it is total over the addresses
the publisher serves for one decision — SOURCE_SURFACES as a kebab-case list,
then the map as const satisfies Record<<that union>, SourceSurfaceDisposition>
as the surfaces of a literal written as const satisfies SourceSurfaceCensus.
Each surface is one of three things:
storedSourceSurface(part) — fetched with the decision and kept as that
envelope part. The conformance suite reads the part back out of an envelope
this repository can produce, so an adapter with no such capture cannot
declare one;excludedSourceSurface(reason) — the same constructor discipline as the
field inventory: a blank reason does not compile, and "not fetched today" is
not a reason. A rendering of a payload already kept, a corpus-wide index, a
query-scoped export and a page the publisher's robots policy disallows are;backlogSurface(adapter, reason) — it belongs in the row and is not there
yet. Only an adapter already on source-surface-backlog-baseline.json can be
named, each entry is listed there, and source-surface-census.test.ts fails
both ways, so the set only shrinks. Recording a surface deletes its line.A field an adapter never noticed is indistinguishable from one it decided to
leave. Case-law adapters therefore declare what their source states, and the
declaration is part of the contract: SourceAdapter.sourceFields is required,
so an adapter without one does not compile.
An inventory has three parts, in the adapter beside the readers it mirrors:
SOURCE_FIELDS, the list of names the source labels on the per-decision
pages this adapter parses, as const;as const satisfies Record<<that union>, SourceFieldDisposition>, so the map
is total by type and a new name without a decision does not compile. Each
entry is { disposition: "stored", target } (a metadata key, a result
field, the parsed document, or the row's identity), or
excludedSourceField(reason), where the reason says what the field is and
why the row does not carry it. "Not read today" is not a reason; duplicate of
a stored field, derived elsewhere, no field on the row, and data minimization
are. The constructor is the only way to write an exclusion, and a blank
reason does not compile;listSourceFields(parts), which reads the stored envelope back and answers
what the publisher labelled across it. The whole envelope, not one page: a
source states fields on the listing row as well as on the detail payload, and
a reader given one of them declares the others out of scope by accident.source-field-inventory.test.ts drives every registered adapter from the
registry: each adapter's fixture is built, its stored envelope goes
through its own listSourceFields, every name that comes out must be in the
map, and every field the map stores must be on the decision built from that
fixture, at the target the disposition names. A field on the page that is in
neither set fails with its name, and so does a field the map declares that the
envelope never states. Its coverage map is total over the registry, so a source
registered without a fixture does not compile.
Refresh a fixture from the live page when the source changes. The suite certifies the adapter against the page it is given, so a fixture that stopped matching the publisher certifies nothing.
An inventory decides what is read; the stored raw decides what can still be
read later. Where a source serves one decision across several responses (a
detail page beside the document), store all of them, with
encodeSourceRawEnvelope and SOURCE_RAW_ENVELOPE_CONTENT_TYPE, naming each
part by its role. A raw that holds only the page the parser read makes a field
captured later unrecoverable for every stored row: replay can only re-read what
was kept.
The envelope holds text. A response the adapter keeps as bytes goes through
sourceRawBytes, which the pipeline stores instead of sourceRaw, so an
adapter that sets both loses the payload that names the decision.
reparseStoredRaw decodes with decodeSourceRawEnvelope and handles null,
which is what a row stored before its adapter had an envelope reads as. The
shapes those rows hold are registered per adapter in LEGACY_RAW_SHAPES, so a
reader knows which payload it is looking at and a migrated adapter deletes its
line. Bump the adapter's entry in PARSER_VERSIONS when the replay's output
changes, and state in the pull request what a replay does and does not
backfill: rows stored before the change hold what they held, and only a
re-crawl adds to them.
Test the behavior that types and lint cannot prove:
listSourceFields and
assert every field it states is stored or excluded with a reason.Prefer invariant and state-machine tests over one example retry.
apps/api/src/handlers/uploads/update.tsapps/api/src/handlers/case-law/ingestion/pipeline.ts
and the modules under apps/api/src/handlers/case-law/ingestion/pipeline/apps/api/src/handlers/legislation/ingestion.tsapps/api/src/lib/hosted-usage-provider/webhook-store.tsThese are examples, not blanket proof: audit each new side effect and checkpoint independently.
© stella, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 1 other file in .agents/skills/conventions-ingestion of stella/stella.
Open the folder on GitHubat commit a9618db
Conventions Ingestion next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Conventions Ingestion this skillstella/stella | 258 | — | ~2.9k | Automated safety check: Pass | Apache-2.0 | |
| Novu Design Workflownovuhq/novu | 40k | — | ~2.6k | Automated safety check: Pass | Custom licence | |
| Golivemikehasa/golive-skill | 1.3k | — | ~13k | Automated safety check: Notes | MIT | |
| Stripe Appsfossasia/eventyay | 1.7k | 1 repos | ~3.6k | Automated safety check: Pass | Apache-2.0 | |
| Dingtalk Messageagentscope-ai/ReMe | 3.6k | — | ~1.6k | Automated safety check: Pass | Apache-2.0 | |
| PR Review Provideryansongda/pay | 5.4k | — | ~2.4k | Automated safety check: Pass | MIT |
novuhq/novu
Design notification workflows the Novu way — choose channels, set severity, decide when a workflow is critical, configure digests, and route based on subscriber state.
mikehasa/golive-skill
Take an agent-written app from repo to live production on the user's OWN accounts, with providers they choose (hosting, database, auth, payments, email, domain/DNS).
fossasia/eventyay
A skill your agent uses when building, modifying, or reviewing a Stripe App — or when the user describes something that implies one (e.g.
agentscope-ai/ReMe
钉钉消息发送技能。支持企业内部机器人(批量单聊/群聊)和 Webhook 自定义机器人两种接入方式,支持多机器人管理,支持文本、Markdown、链接、ActionCard、FeedCard等多种消息类型。
yansongda/pay
A skill your agent uses when reviewing PRs that add or modify a payment Provider in yansongda/pay - covers plugin pipeline, multi-tenant safety, signature verification, docs, and naming conventions.
kanchengw/cnllm
Guides Stripe integration decisions — API selection (Checkout Sessions vs PaymentIntents), Connect platform setup (Accounts v2, controller properties), billing/subscriptions, Treasury financial…
stella/stella
Create a concise, evidence-backed implementation plan in the repository planning area when the user explicitly asks for a plan.
stella/stella
Answers data-protection (GDPR) questions grounded in the regulation and supervisory guidance, with a citation for every claim.
stella/stella
Reviews a non-disclosure agreement against the firm's NDA checklist and reports findings with citations.
stella/stella
Collects the facts of an unpaid invoice, then drafts a payment demand letter.
stella/stella
Apply when a performance-guard check (network baseline, bundle baseline, DB query count, loader-prefetch lint, RC bailouts) fails or when touching a hot route/endpoint.
stella/stella
Apply when writing or reviewing React effects in apps/web. An agent skill from stella/stella.
Categories
Apply when building or reviewing external ingestion, imports, connector polling, webhooks, extraction workers, sync cursors, checkpoints, or repair jobs. Conventions Ingestion is an agent skill from stella/stella. Apply when building or reviewing external ingestion, imports, connector polling, webhooks, extraction workers, sync cursors, checkpoints, or repair jobs.
Conventions Ingestion fits situations like: tasks that involve Webhooks.
Run `npx skills add stella/stella --skill conventions-ingestion -a claude-code`. Or copy the skill folder (.agents/skills/conventions-ingestion in stella/stella) into .claude/skills/conventions-ingestion in your project. Claude Code loads it when a task matches its description.
Run `npx skills add stella/stella --skill conventions-ingestion -a codex`. Or copy the skill folder (.agents/skills/conventions-ingestion in stella/stella) into .agents/skills/conventions-ingestion in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add stella/stella --skill conventions-ingestion -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/conventions-ingestion, .gemini/skills/conventions-ingestion, .github/skills/conventions-ingestion and .opencode/skills/conventions-ingestion in your project.
SKILL.md names no scripts, command-line tools or credentials: Conventions Ingestion is instructions for the agent only.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Conventions Ingestion is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.9k tokens (SKILL.md is roughly 12k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Conventions Ingestion: Novu Design Workflow (novuhq/novu, 40k stars), Golive (mikehasa/golive-skill, 1.3k stars), Stripe Apps (fossasia/eventyay, 1.7k stars) and Dingtalk Message (agentscope-ai/ReMe, 3.6k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
stella (a GitHub organization) maintains it in stella/stella, which has 258 GitHub stars. The repository holds 24 skills in this directory. The repository was last updated on October 10, 2026.
Source: stella/stella on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.