Commit Graph
475 Commits
Author SHA1 Message Date
Addy Osmani 85ea8fbc39 Merge #547: destructive path operations need an allowlisted root
docs(security): destructive path targets need an allowlist, a depth floor, and an owner check
2026-09-04 20:21:20 -07:00
Addy Osmani 8c8cfd1920 Merge #546: name the entry point when several write to one log
docs(observability): name the entry point when several write to one log
2026-09-04 20:21:15 -07:00
notbuckiandClaude Opus 5 45fd4a0439 docs(security): destructive path targets need an allowlist, a depth floor, and an owner check
The trust-boundary list names only remote channels, so local values that the
OS hands you — another process's command line or environment, a filename on a
shared volume, a path in a job payload — read as internal. The one rule about
destructive actions (LLM06) governs who may act, not what gets hit: a
confirmed call with a wrongly derived target deletes the root just the same.
A shape check ("absolute, at least one directory deep") proves well-formedness
and gets mistaken for authorization.

SKILL.md gets the extended trust-boundary item, a prose-only "Destructive
Operations on Derived Paths" next to File Upload Safety, and one line each in
the Input checklist, Red Flags and Verification. The worked example lives in
references/security-checklist.md, per skill-anatomy's rule to move detailed
material out of SKILL.md — the file is already over the 500-line budget, so
this keeps the per-activation cost to +11 lines.

Two limits are stated where the snippet is copied from, rather than implied
away: a marker inside the tree is self-attestation until its integrity is
protected and the expected owner comes from authenticated state, and
resolving a path and then operating on the name is a check/use race wherever
an untrusted process can swap an ancestor.

No new directory, frontmatter unchanged.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-04 10:25:46 +02:00
notbuckiandClaude Opus 5 6a9f2eb2d6 docs(observability): name the entry point when several write to one log
A correlation ID identifies a run, not the code path that started it. When a
scheduler, a replay endpoint and a manual CLI run all reach the same job and
write into one sink, the lines are interchangeable — attributing one falls
back to elimination against external records (scheduler history, process
table, deploy log) that only happen to still exist.

Adds a paragraph plus a short example to "3. Structured logging" — stamp the
entry point where the run starts, next to the correlation ID, and propagate
both across queue metadata and outbound calls — and one line each to Red
Flags, Verification, and references/observability-checklist.md.

The field is `entryPoint` rather than `source`: Elastic Common Schema reserves
`source.*` for network fields (source.ip, source.port, …), so a scalar
`source` collides with that mapping and can get documents rejected.

No new heading, no new directory, frontmatter unchanged.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-04 10:22:37 +02:00
Federico Bartoli 1c760d6434 Merge pull request #316 from nucliweb/docs/advanced-per-agent-configuration
docs: add advanced per-agent configuration guide
2026-09-04 08:45:55 +02:00
Addy Osmani 020ec10a78 Merge #536: rate limiting must count in a shared store
docs(security): rate limiting must count in a shared store across instances
2026-09-02 23:36:51 -07:00
Addy Osmani 632aa0bcd4 Merge #532: document the Antigravity command-wrapper difference
docs(antigravity): document the command-wrapper discoverability limitation (#445)
2026-09-02 23:36:47 -07:00
Addy Osmani b2ad72ddf2 Merge #544: add a rejected skill-change ledger (#535)
docs: add a rejected skill-change ledger
2026-09-02 23:36:42 -07:00
Addy Osmani 2f036a05ce Merge #537: add database-migration and dependency vocabulary
fix(skills): add database-migration and dependency-audit vocabulary to two skill descriptions
2026-09-02 23:36:38 -07:00
Matt Van Horn 125b1f865e docs: add a rejected skill-change ledger
Fixes #535
2026-09-02 01:41:25 -07:00
notbuckiandClaude Fable 5 1483fc1247 fix(skills): add database-migration and dependency-audit vocabulary to two skill descriptions
Two skills carry core body content whose vocabulary never reached their
descriptions, so Tier-2 trigger routing cannot see it:

- deprecation-and-migration: Expand/Contract database schema migrations
  (added in #345) - description now mentions database schema migration,
  renaming/dropping a column, expand/contract.
- security-and-hardening: dependency-audit triage and supply-chain hygiene
  (hardened in #392, delegated to by code-review-and-quality) - description
  now mentions dependency audits, audit-finding triage, supply-chain risk.

Adds four positive trigger cases so the suite can see these gaps.
Measured: baseline 86% (72/84); cases-only 82% (4 hard misses, 'shares no
vocabulary'); cases+fix 86% (76/88), 140 checks, 0 errors, no existing case
loses rank 1.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-31 17:32:14 +02:00
CahidArda 1458305604 docs(security): rate limiting must count in a shared store across instances 2026-08-31 16:59:42 +03:00
ayobamiseun cd8922b617 docs(antigravity): document the command-wrapper discoverability limitation (#445)
Affected agy 1.1.x releases report the 8 legacy command TOMLs as
converted to skills, but the converted wrappers never appear in the
slash-command or skill catalog — plugin validate passing confirms the
files are well formed, not that /build and the other wrappers exist.

Replace the slash-command table with a wrapper-to-direct-invocation
map (/agent-skills:<skill-name>, /agents for the webperf persona),
note the wrapper-only behaviors that are unavailable (/build auto
orchestration, /ship persona fan-out), warn against the YAML
frontmatter workaround that breaks Gemini CLI's TOML parser, and add
a post-install verification step. Align the README blurb with the
same guidance.
2026-08-30 00:17:37 +01:00
Addy Osmani d2c37ef622 chore(release): bump plugin manifests to 0.6.8 0.6.8 2026-08-28 16:30:57 -07:00
Addy Osmani fac0b186bd Merge #526: never overwrite an incomplete plan
fix(planning): never overwrite an incomplete plan without asking (#518)
2026-08-28 16:30:42 -07:00
Addy Osmani 4db88350d1 Merge #525: document the Guard step and enforce workflow-step coverage
fix(performance): document the missing guard step
2026-08-28 16:30:38 -07:00
Addy Osmani 2ce8d47a16 Merge pull request #472 from addyosmani/feat/constraint-driven-development
feat(skills): add constraint-driven-development
2026-08-28 16:23:03 -07:00
Addy Osmani 4be4bb7c03 feat(constraints): ship a reference floor-guard, address review feedback
Federico's review on #472 noted the floor is the one thing with no de facto
tool, so agents reinvent a check-floor each run. Add references/floor-guard.md
(the Step 6 checks as a diff-scoped reference implementation, exit 0/1/2, with
patterns adaptable per ecosystem) and point Step 6 and the escalation path at
it. Also mark CONSTRAINTS.md as the canonical source of commands over the
package.json wrappers, and document a floor-only first run plus a CI-only
option for machine-wide security tools.
2026-08-28 16:08:11 -07:00
ayobamiseun 8300e1bbe7 fix(planning): never overwrite an incomplete plan without asking (#518)
When /plan runs for new work while tasks/plan.md and tasks/todo.md
still hold unchecked tasks, the agent silently replaces them,
destroying the in-flight plan's state (reported in #518).

Add a convention-neutral guard: replanning the same work updates in
place; different work stops and asks the user before touching the
existing files. Mirror the rule for external task list targets (no
bulk-closing another plan's items), and add matching Rationalization,
Red Flag, and Verification entries plus the guard line in the /plan
command.

Deliberately does not introduce a parallel-lane layout — that
convention decision is being held open in #518; this fixes only the
data-loss half.
2026-08-28 16:54:48 +01:00
CaoBochun 6a268d7710 fix(performance): document the missing guard step 2026-08-28 12:15:32 +08:00
Joan Leon 485cd8ee86 docs: correct allowed-tools semantics, document disallowed-tools
Review feedback from @federicobartoli on #316.

allowed-tools was described as restricting the tool set. Per the Claude
Code docs it is a permission pre-approval: listed tools run without a
prompt for the turn that invokes the skill, the grant clears on the next
message, and nothing leaves the tool pool.

disallowed-tools is the field that actually restricts, so it now carries
the least-privilege guidance. Added the portability caveat that it is a
Claude Code field rather than one of the specification's six, so it fails
packaging if placed in a published SKILL.md.

Claude-Session: https://claude.ai/code/session_01TuWNaEV9RFXpTxqeBRTRg8
2026-08-27 23:08:46 +02:00
Joan Leon 58a37a0a55 docs: refine per-agent config guide (agent field, spec link, #35)
Link the Agent Skills spec, document the optional `agent` companion to
`context: fork`, clarify that commands and skills share frontmatter, and
add #35 to the consolidated Status list.
2026-08-27 23:08:46 +02:00
Joan Leon 34da7eb97e docs: mark per-agent config as canonical and add thinking_level example
Address review feedback on #316:
- State explicitly that this supersedes the inline top-level frontmatter approach, so kind/model/temperature/max_turns/tools/context must not appear at the top level of a skill.
- Add a copy-pasteable .gemini/agents/*.md example using thinking_level instead of hardcoded temperature for Gemini 3.x.
- Update Status: #272 and #36 are closed in favor of this approach.
2026-08-27 23:08:46 +02:00
Joan Leon aca2f9e06a docs: add advanced per-agent configuration guide
Add a draft reference for per-agent runtime configuration that keeps shared SKILL.md files portable while documenting the vendor-specific controls each agent offers (Claude Code, Gemini CLI, Antigravity) as an opt-in.
2026-08-27 23:08:46 +02:00
Joan León f63ec56a3c Merge pull request #521 from nucliweb/feat/perf-backend-database-depth
feat(performance): deepen backend and database substance
2026-08-27 21:28:24 +02:00
Joan Leon bfc9e32ddf fix(performance): scope low-selectivity caveat, make coalescing snippet generic
Review feedback from @federicobartoli on #521.

The low-selectivity rows read as if indexing a skewed column never
helps. That holds only when querying the dominant value; filtering on
the rare value is exactly the case a partial index serves. Scoped both
the SKILL.md table row and the checklist item.

loadOnce referenced an undeclared Row type. Made it generic so it
typechecks when pasted as-is.

Claude-Session: https://claude.ai/code/session_01TuWNaEV9RFXpTxqeBRTRg8
2026-08-27 20:52:22 +02:00
Addy Osmani 36fc35c13b Merge #508: add pull-request vocabulary to git-workflow-and-versioning
Add pull-request vocabulary to git-workflow-and-versioning description
2026-08-27 10:18:51 -07:00
Addy Osmani 9f2db930b3 Merge #516: clarify OpenCode skill installation (#515)
docs(opencode): clarify skill installation and AGENTS.md scope
2026-08-27 10:18:47 -07:00
Joan Leon 0ce0107f4f feat(performance): deepen backend and database substance
#358 broadened the performance-optimization description to cover
"frontend, backend, queries, and databases", but the body's backend
coverage was a single N+1 example, against the full Core Web Vitals
and art-direction treatment on the frontend side. Routing a "slow
query" or "connection pool" prompt here landed on a snippet.

Adds three measure-first patterns inline, each with a "when NOT to":

- Query plans: read EXPLAIN ANALYZE before indexing; composite column
  order (equality first, then range/sort); the four cases where an
  index does not help; revert an index that did not change the plan.
- Connection pool exhaustion: the distinctive symptom, one pool per
  process, why a bigger pool relocates the queue instead of removing
  it, and the proxy answer for serverless.
- Caching: layer choice (in-process, shared, edge), key design as a
  correctness concern, one invalidation strategy rather than an
  accidental mix, and stampede protection.

Deeper material goes to references/performance-checklist.md to keep
SKILL.md readable: read/write patterns, negative caching, request
coalescing, and query-plan, index, pooling and cache checklists.

Closes #378

Claude-Session: https://claude.ai/code/session_01TuWNaEV9RFXpTxqeBRTRg8
2026-08-27 18:37:32 +02:00
Addy Osmani 7cb7a20bb3 fix(agents): align code-reviewer severity labels with the code-review skill
The persona used Critical/Important/Suggestion while code-review-and-quality
uses Critical/Required/Optional/Nit, so the same finding got labeled differently
depending on which entry point ran the review. Align the persona to the skill's
four-level scheme (the skill is the source of truth) and note the shared
vocabulary to prevent future drift.
2026-08-27 00:20:57 -07:00
alexsyntonize 75af8bc50e docs(opencode): clarify skill installation and AGENTS.md scope
Rewrite docs/opencode-setup.md so it no longer instructs users to copy
the repo-scoped root AGENTS.md. Instead, document how to install skills
into .opencode/skills/ (project), ~/.config/opencode/skills/ (global),
and cross-compatible Claude/agent paths. Provide a project-local
AGENTS.md template and keep the intent mapping and lifecycle guidance.

Update the README summary to match the new installation model.

Refs #99
Refs #119
2026-08-25 13:02:22 +02:00
superandy8288andClaude Opus 5 b61213f534 Add pull-request vocabulary to git-workflow-and-versioning description
The skill body already covers pull requests -- "ideally a separate PR" and
"Target ~100 lines per commit/PR" -- but the frontmatter description never
uses the words "pull request" or "PR". Prompts phrased that way therefore
do not route to this skill first.

Adds a trigger case for the gap, and the vocabulary that closes it.

Tier-2 routing, via scripts/run-evals.js:

  baseline                      86%  67/78
  with new case, no fix         85%  67/79   <- case does not rank first
  with new case and fix         86%  68/79   <- case ranks first

Exactly one case changed rank; no other skill regressed.
scripts/validate-skills.js passes: 24 skills, 0 errors, 0 warnings.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-22 19:26:16 -06:00
Addy Osmani 5a5ea45e80 Merge pull request #505 from abhisheksharma2411/fix/skill-lint-frontmatter-and-exempt-lookup
fix(validator): allowlisted skills only, not Object.prototype keys
2026-08-21 11:15:04 -07:00
Abhishek Sharma c59c4b481c fix(validator): allowlisted skills only, not Object.prototype keys
`dirName in SECTION_EXEMPT_SKILLS` walks the prototype chain, and
`constructor` satisfies KEBAB_CASE (the `*` quantifier permits a single
word). A skill directory named `constructor` therefore resolved to
Object.prototype.constructor and was silently exempt from every
required-section check — `exempt: true`, zero errors, no sections. The
bypass guard missed it for the same reason, since the resolved value is
truthy.

Both lookups now use Object.hasOwn, which is what the comment above the
allowlist already promises: "Exemptions live HERE, not in skill
frontmatter, so contributors cannot bypass the validator by editing their
own skill file."

Adds scripts/lib/skill-lint-test.js — skill-lint.js was the only
validator without a test file. Confirmed the prototype-chain test goes red
against main; the other six pass either way, so existing behaviour is
unchanged.

Scope kept to the exemption lookup: #428 already rewrites frontmatter
parsing and the cross-reference patterns, so this stays clear of both.
2026-08-21 09:05:25 -07:00
Addy Osmani df1edb2e05 chore(release): bump plugin manifests to 0.6.7 0.6.7 2026-08-14 11:50:27 -07:00
Addy Osmani 966e4e5851 Merge #476: Phase 0 scope check / capability map for spec (#431)
feat(spec): Phase 0 scope check — capability map for multi-capability requirements (#431)
2026-08-14 11:50:02 -07:00
Addy Osmani 1ca6fce8e2 Merge #487: pluggable task list target for planning (#482)
fix(planning): define a single pluggable task list target (#482)
2026-08-14 11:49:57 -07:00
Addy Osmani 65f696ce29 Merge #479: add idempotency-key implementation guide
docs(api): add idempotency-key implementation guidance to api-and-interface-design
2026-08-14 11:49:52 -07:00
Addy Osmani c045127800 Merge #473: reject incomplete grader results
fix(evals): reject incomplete grader results
2026-08-14 11:49:46 -07:00
Addy Osmani 93bd71eeda Merge #471: make TDD behavioral case discriminate
evals: make the TDD behavioral case discriminate skill effect
2026-08-14 11:49:41 -07:00
Addy Osmani bb53a78bba Merge #470: add Data Privacy & Compliance to security-and-hardening
docs(security): add Data Privacy & Compliance section to security-and-hardening
2026-08-14 11:49:36 -07:00
Addy Osmani 54f1fe4b15 Merge #481: correct Antigravity install path (#445)
docs(antigravity): correct plugin install path
2026-08-14 11:49:32 -07:00
Abhishek Sharma ce89b03cbd docs(api): add idempotency-key implementation guidance
Reworked from a standalone skill into an addition to api-and-interface-design,
per review feedback on #479.

#241 covers the contract surface: which methods are idempotent, accepting an
Idempotency-Key header, replaying the stored result. This picks up where that
stops -- what the server has to do so the guarantee actually holds:

  * derive the key from the intent, not the attempt, with the patterns that
    look right and are not (randomUUID per call, timestamps, user+amount)
  * claim atomically; a SELECT then an INSERT is a race, and the unique
    constraint is the mechanism
  * guard the payload, so a reused key with a different body fails loudly
    instead of replaying the wrong response
  * decide deliberately what an in-flight duplicate receives -- 409, wait, or
    202 -- rather than accepting whatever falls out of the control flow
  * treat unknown as a third outcome distinct from failure, and record intent
    before calling out so a crash leaves evidence
  * set key retention from the longest re-delivery path, including DLQ replay

Adds three rationalizations, four red flags and five verification items so the
guidance is enforceable rather than advisory.

Validators: validate-skills 24 skills 0 errors 0 warnings,
validate-reference-links 0 errors, run-evals --min-rank1 80 -> 124 checks,
0 errors, rank-1 86%.
2026-08-12 17:04:08 -07:00
ayobamiseun f18d2c343e fix(planning): define a single pluggable task list target (#482)
The task list destination was hardcoded as tasks/todo.md in five places
across planning-and-task-breakdown, plus once more in
spec-driven-development's Phase 2 output convention. Projects tracking
tasks in an external tracker (bd/beads, Jira, Linear, GitHub Issues) had
to hand-edit every reference in a local fork.

Define the target once in a Task List Target section: default remains
the tasks/todo.md markdown checklist (downstream /build behavior is
unchanged), and projects can designate an external tracker via their
agent rules. All other references now defer to that single definition,
and spec-driven-development points at it instead of restating the path.
2026-08-12 14:33:57 +01:00
Yunare Maia 4acb9bb799 docs(antigravity): correct plugin install path per Issue #445
The setup doc claimed plugins install to ~/.gemini/antigravity-cli/plugins/
but on current agy releases they land in ~/.gemini/config/plugins/. Issue
#445 reporter confirmed the plugin lives under config/ on disk. Update the
path and add a note so users check the right location first.

Signed-off-by: Yunare Maia <yunare@gmail.com>
2026-08-11 19:58:38 +00:00
Addy Osmani be42637c5a Merge #474: emit standard SessionStart envelope (#465)
fix(hooks): emit the standard SessionStart envelope (#465)
2026-08-11 12:48:56 -07:00
ayobamiseun cbf37af0ae feat(spec): add Phase 0 scope check — capability map for multi-capability requirements (#431)
Implements the v1 scope agreed in #431: when one requirement bundles
several independently testable capabilities, spec-driven-development now
runs a bounded front-step before Specify — detect multi-capability scope,
propose a capability map (stable module ids, one-way dependency direction,
build order), gate it on human approval, then recurse the gated workflow
per module in dependency order.

Kept deliberately small per the maintainer's scoping:
- detection + module map + stable identity only; no per-module artifact
  tree — module specs reuse the root-level SPEC-<id>.md naming so the
  layout follows the delta-spec direction in #383 rather than leading it
- the simple path is preserved: single-capability requests skip Phase 0
  entirely, and the section says so first
- non-goals held: no PM framework, no forced hierarchy on small features

Also:
- description gains the decomposition vocabulary so realistic asks route
  here (both new positive triggers rank #1)
- /spec command wrappers (.claude, commands/, .gemini) gain one matching
  step, kept in parity
- eval case: +2 positive triggers, +1 owner-negative guarding the
  planning-and-task-breakdown boundary, +1 execution eval backed by a new
  multi-capability fixture (portal-brief.md)

Verification: validate-skills 24/24, validate-commands 8/8, run-evals
127 checks 0 errors 0 warnings, rank-1 86% (67/78) over floor 80,
behavioral dry-run resolves both spec evals.
2026-08-09 11:24:42 +01:00
Addy Osmani 7676817c12 Merge #469: fix references/ links and add CI validator (#468)
fix(skills): resolve references/ links from the skill directory
2026-08-08 14:05:56 -07:00
ayobamiseun abfb0b3200 fix(hooks): emit the standard SessionStart envelope (#465)
The session-start hook emitted {"priority", "message"} JSON on all three
of its output paths. Codex CLI validates SessionStart hook output and
fails the hook on that shape ('hook returned invalid session start JSON
output', #465); the documented contract for both Codex and Claude Code is

  {"hookSpecificOutput": {"hookEventName": "SessionStart",
                          "additionalContext": "..."}}

Switch all three paths (meta-skill injection, jq-missing fallback,
meta-skill-missing fallback) to that envelope. Verified each path emits
valid JSON of the new shape: happy path via jq shape assertion, jq-missing
via PATH='' run, meta-skill-missing via a copy outside the repo.
2026-08-08 18:41:01 +01:00
Addy Osmani 127bd99d1f feat(skills): give each dimension a tool, not just a number
Picking 'accessibility' returned a threshold and no mechanism, so the
agent had to invent the setup and two agents would invent two different
ones. That is the non-determinism the skill exists to remove.

Adds a table mapping every dimension to the de facto tool, its install
command, its run command, and what to gate on, across JS and Python. De
facto matters here: these rule formats are what the ecosystem targets, so
a team's existing config keeps working.

Five failure modes called out. gitleaks needs --redact or the matched
secret lands in the agent transcript. axe and Lighthouse need a running
URL, and a project without one should drop the dimension rather than fake
a check. Stryker and Semgrep scope to the diff or nobody runs them twice.
Coverage reads the lcov the suite already wrote.

CONSTRAINTS.md now carries the command next to each rule, so a dimension
with a number and no command reads as the aspiration it is.
2026-08-08 10:10:56 -07:00