@deftai/directive-content 0.55.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/skills/deft/SKILL.md +6 -0
- package/.agents/skills/deft-directive-article-review/SKILL.md +11 -0
- package/.agents/skills/deft-directive-build/SKILL.md +10 -0
- package/.agents/skills/deft-directive-cost/SKILL.md +12 -0
- package/.agents/skills/deft-directive-debug/SKILL.md +13 -0
- package/.agents/skills/deft-directive-gh-arch/SKILL.md +11 -0
- package/.agents/skills/deft-directive-gh-slice/SKILL.md +10 -0
- package/.agents/skills/deft-directive-glossary/SKILL.md +10 -0
- package/.agents/skills/deft-directive-interview/SKILL.md +9 -0
- package/.agents/skills/deft-directive-pre-pr/SKILL.md +9 -0
- package/.agents/skills/deft-directive-refinement/SKILL.md +10 -0
- package/.agents/skills/deft-directive-release/SKILL.md +12 -0
- package/.agents/skills/deft-directive-review-cycle/SKILL.md +10 -0
- package/.agents/skills/deft-directive-setup/SKILL.md +10 -0
- package/.agents/skills/deft-directive-swarm/SKILL.md +10 -0
- package/.agents/skills/deft-directive-sync/SKILL.md +9 -0
- package/.agents/skills/deft-directive-triage/SKILL.md +9 -0
- package/.agents/skills/deft-directive-write-skill/SKILL.md +9 -0
- package/LICENSE.md +22 -0
- package/QUICK-START.md +167 -0
- package/UPGRADING.md +517 -0
- package/coding/build-output.md +28 -0
- package/coding/coding.md +235 -0
- package/coding/debugging.md +110 -0
- package/coding/holzmann.md +96 -0
- package/coding/hygiene.md +127 -0
- package/coding/security.md +158 -0
- package/coding/testing.md +162 -0
- package/coding/toolchain.md +44 -0
- package/commands.md +300 -0
- package/context/context.md +57 -0
- package/context/deterministic-split.md +67 -0
- package/context/examples.md +26 -0
- package/context/fractal-summaries.md +69 -0
- package/context/long-horizon.md +46 -0
- package/context/spec-deltas.md +177 -0
- package/context/tool-design.md +34 -0
- package/context/working-memory.md +62 -0
- package/contracts/boundary-maps.md +65 -0
- package/contracts/deterministic-questions.md +59 -0
- package/contracts/hierarchy.md +77 -0
- package/conventions/content-manifest.json +399 -0
- package/conventions/machine-generated-banner.md +130 -0
- package/conventions/references.md +120 -0
- package/conventions/rule-ownership.json +382 -0
- package/conventions/task-caching.md +43 -0
- package/conventions/vbrief-filenames.md +70 -0
- package/deployments/README.md +37 -0
- package/deployments/agentuity/README.md +138 -0
- package/deployments/agentuity/via-cli.md +380 -0
- package/deployments/agentuity/via-cloud.md +425 -0
- package/deployments/agentuity/via-github-actions.md +664 -0
- package/deployments/agentuity/via-gravity-network.md +606 -0
- package/deployments/agentuity/via-vpc.md +607 -0
- package/deployments/aws/README.md +38 -0
- package/deployments/aws/via-app-runner.md +612 -0
- package/deployments/aws/via-ecs-fargate.md +561 -0
- package/deployments/aws/via-elastic-beanstalk.md +628 -0
- package/deployments/aws/via-lambda.md +649 -0
- package/deployments/azure/README.md +37 -0
- package/deployments/azure/via-aks.md +390 -0
- package/deployments/azure/via-app-service.md +564 -0
- package/deployments/azure/via-container-apps.md +599 -0
- package/deployments/azure/via-functions.md +552 -0
- package/deployments/cloud-gov/README.md +63 -0
- package/deployments/cloud-gov/agents/compliance-docs.md +154 -0
- package/deployments/cloud-gov/agents.md +39 -0
- package/deployments/cloud-gov/cicd.md +64 -0
- package/deployments/cloud-gov/deployment.md +150 -0
- package/deployments/cloud-gov/logging.md +43 -0
- package/deployments/cloud-gov/manifest.md +121 -0
- package/deployments/cloud-gov/overview.md +58 -0
- package/deployments/cloud-gov/security.md +46 -0
- package/deployments/cloud-gov/services.md +72 -0
- package/deployments/cloud-gov/upstream/README.md +18 -0
- package/deployments/cloudflare/README.md +33 -0
- package/deployments/cloudflare/via-dashboard.md +83 -0
- package/deployments/cloudflare/via-git.md +90 -0
- package/deployments/cloudflare/via-github-actions.md +185 -0
- package/deployments/cloudflare/via-terraform.md +157 -0
- package/deployments/cloudflare/via-wrangler.md +165 -0
- package/deployments/fly-io/README.md +37 -0
- package/deployments/fly-io/via-dockerfile.md +648 -0
- package/deployments/fly-io/via-flyctl.md +653 -0
- package/deployments/fly-io/via-github-actions.md +695 -0
- package/deployments/fly-io/via-multi-region.md +598 -0
- package/deployments/google/README.md +34 -0
- package/deployments/google/via-app-engine.md +42 -0
- package/deployments/google/via-cloud-functions.md +23 -0
- package/deployments/google/via-cloud-run.md +330 -0
- package/deployments/google/via-gke.md +23 -0
- package/deployments/netlify/README.md +99 -0
- package/deployments/netlify/via-cli.md +17 -0
- package/deployments/netlify/via-functions.md +19 -0
- package/deployments/netlify/via-git.md +25 -0
- package/deployments/vercel/README.md +90 -0
- package/deployments/vercel/via-api.md +16 -0
- package/deployments/vercel/via-cli.md +17 -0
- package/deployments/vercel/via-git.md +24 -0
- package/docs/BROWNFIELD.md +179 -0
- package/docs/getting-started.md +137 -0
- package/docs/good-agents-md.md +137 -0
- package/events/README.md +89 -0
- package/events/event-record.schema.json +26 -0
- package/events/registry.json +166 -0
- package/events/registry.schema.json +71 -0
- package/glossary.md +145 -0
- package/incidents/README.md +81 -0
- package/incidents/_template.md +38 -0
- package/interfaces/cli.md +104 -0
- package/interfaces/rest.md +212 -0
- package/interfaces/tui.md +242 -0
- package/interfaces/web.md +123 -0
- package/languages/6502-DASM.md +132 -0
- package/languages/c.md +235 -0
- package/languages/commands.md +23 -0
- package/languages/cpp.md +132 -0
- package/languages/csharp.md +259 -0
- package/languages/dart.md +183 -0
- package/languages/delphi.md +218 -0
- package/languages/elixir.md +208 -0
- package/languages/go.md +78 -0
- package/languages/java.md +278 -0
- package/languages/javascript.md +163 -0
- package/languages/julia.md +175 -0
- package/languages/kotlin.md +193 -0
- package/languages/markdown.md +168 -0
- package/languages/mermaid.md +146 -0
- package/languages/officejs.md +392 -0
- package/languages/python.md +209 -0
- package/languages/r.md +163 -0
- package/languages/rust.md +216 -0
- package/languages/sql.md +216 -0
- package/languages/swift.md +153 -0
- package/languages/typescript.md +132 -0
- package/languages/vba.md +279 -0
- package/languages/vhdl.md +180 -0
- package/languages/visual-basic.md +151 -0
- package/languages/zig.md +196 -0
- package/meta/SOUL.md +27 -0
- package/meta/code-field.md +44 -0
- package/meta/morals.md +40 -0
- package/meta/philosophy.md +39 -0
- package/meta/project.md +49 -0
- package/meta/ralph.md +223 -0
- package/meta/security.md +80 -0
- package/meta/versioning.md +326 -0
- package/package.json +22 -0
- package/packs/lessons/lessons-pack-0.1.json +553 -0
- package/packs/patterns/patterns-pack-0.1.json +57 -0
- package/packs/rules/rules-pack-0.1.json +4767 -0
- package/packs/skills/skills-pack-0.1.json +262 -0
- package/packs/strategies/strategies-pack-0.1.json +167 -0
- package/packs/swarm-spec/swarm-spec-pack-0.1.json +17 -0
- package/patterns/executor-layer-credentials.md +227 -0
- package/patterns/llm-app.md +156 -0
- package/patterns/multi-agent.md +278 -0
- package/patterns/prompt-assembly-layer-ordering.md +154 -0
- package/patterns/role-as-overlay.md +179 -0
- package/platforms/2600.md +137 -0
- package/platforms/unity.md +329 -0
- package/references/composer-skill-porting.md +152 -0
- package/references/cost-models.md +163 -0
- package/references/ip-risk.md +246 -0
- package/references/plain-english-ux.md +275 -0
- package/resilience/context-pruning.md +67 -0
- package/resilience/continue-here.md +62 -0
- package/scm/changelog.md +276 -0
- package/scm/git.md +139 -0
- package/scm/github.md +265 -0
- package/secrets/.gitkeep +0 -0
- package/skills/deft-build/SKILL.md +20 -0
- package/skills/deft-directive-article-review/SKILL.md +156 -0
- package/skills/deft-directive-build/SKILL.md +302 -0
- package/skills/deft-directive-cost/SKILL.md +201 -0
- package/skills/deft-directive-debug/SKILL.md +140 -0
- package/skills/deft-directive-decompose/SKILL.md +96 -0
- package/skills/deft-directive-gh-arch/SKILL.md +160 -0
- package/skills/deft-directive-gh-slice/SKILL.md +199 -0
- package/skills/deft-directive-glossary/SKILL.md +118 -0
- package/skills/deft-directive-interview/SKILL.md +528 -0
- package/skills/deft-directive-pre-pr/SKILL.md +131 -0
- package/skills/deft-directive-probe/SKILL.md +127 -0
- package/skills/deft-directive-refinement/SKILL.md +403 -0
- package/skills/deft-directive-release/SKILL.md +266 -0
- package/skills/deft-directive-review-cycle/SKILL.md +401 -0
- package/skills/deft-directive-setup/SKILL.md +717 -0
- package/skills/deft-directive-swarm/SKILL.md +989 -0
- package/skills/deft-directive-sync/SKILL.md +288 -0
- package/skills/deft-directive-triage/SKILL.md +137 -0
- package/skills/deft-directive-write-skill/SKILL.md +169 -0
- package/skills/deft-interview/SKILL.md +16 -0
- package/skills/deft-pre-pr/SKILL.md +16 -0
- package/skills/deft-review-cycle/SKILL.md +16 -0
- package/skills/deft-roadmap-refresh/SKILL.md +16 -0
- package/skills/deft-setup/SKILL.md +20 -0
- package/skills/deft-swarm/SKILL.md +16 -0
- package/skills/deft-sync/SKILL.md +16 -0
- package/strategies/README.md +83 -0
- package/strategies/artifact-guards.md +85 -0
- package/strategies/bdd.md +115 -0
- package/strategies/brownfield.md +7 -0
- package/strategies/discuss.md +129 -0
- package/strategies/emit-hints.md +69 -0
- package/strategies/enterprise.md +193 -0
- package/strategies/interview.md +551 -0
- package/strategies/map.md +179 -0
- package/strategies/probe.md +151 -0
- package/strategies/rapid.md +155 -0
- package/strategies/research.md +155 -0
- package/strategies/roadmap.md +9 -0
- package/strategies/speckit.md +437 -0
- package/strategies/v0-20-contract.md +134 -0
- package/strategies/yolo.md +169 -0
- package/swarm/swarm.md +300 -0
- package/templates/COST-ESTIMATE.md +114 -0
- package/templates/PULL_REQUEST_TEMPLATE.md +35 -0
- package/templates/agent-prompt-preamble.md +409 -0
- package/templates/agents-entry.md +211 -0
- package/templates/agents-entry.placeholders.md +75 -0
- package/templates/embed.go +20 -0
- package/templates/embed_test.go +36 -0
- package/templates/make-spec-example.md +9 -0
- package/templates/make-spec.md +246 -0
- package/templates/project.md.template +52 -0
- package/templates/specification.md +1 -0
- package/templates/swarm-greptile-poller-prompt.md +556 -0
- package/templates/user.md.template +31 -0
- package/tools/RWLDL.md +80 -0
- package/tools/greptile.md +141 -0
- package/tools/installer.md +23 -0
- package/tools/taskfile-migration.md +32 -0
- package/tools/taskfile.md +185 -0
- package/tools/telemetry.md +285 -0
- package/vbrief/schemas/cache-meta.schema.json +137 -0
- package/vbrief/schemas/candidates.schema.json +130 -0
- package/vbrief/schemas/codebase-map.schema.json +213 -0
- package/vbrief/schemas/lessons-pack.schema.json +134 -0
- package/vbrief/schemas/patterns-pack.schema.json +84 -0
- package/vbrief/schemas/rules-pack.schema.json +105 -0
- package/vbrief/schemas/skills-pack.schema.json +94 -0
- package/vbrief/schemas/slices.schema.json +87 -0
- package/vbrief/schemas/strategies-pack.schema.json +89 -0
- package/vbrief/schemas/swarm-spec-pack.schema.json +84 -0
- package/vbrief/schemas/vbrief-core.schema.json +1022 -0
- package/vbrief/vbrief.md +684 -0
- package/verification/integration.md +76 -0
- package/verification/plan-checking.md +85 -0
- package/verification/uat.md +60 -0
- package/verification/verification.md +117 -0
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: deft
|
|
3
|
+
description: Apply deft framework standards for AI-assisted development. Use when starting projects, writing code, running tests, making commits, or when the user references deft, project standards, or coding guidelines.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Read and follow: SKILL.md
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: deft-directive-article-review
|
|
3
|
+
description: >-
|
|
4
|
+
Evaluate an article, paper, or post for lessons that could improve directive.
|
|
5
|
+
Analyzes two axes: how concepts improve directive's own implementation, and
|
|
6
|
+
how they improve the projects directive creates. Produces filtered
|
|
7
|
+
suggestions, iterates with the user, and optionally creates GitHub issues on
|
|
8
|
+
the directive repo.
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
Read and follow: skills/deft-directive-article-review/SKILL.md
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: deft-directive-build
|
|
3
|
+
description: >-
|
|
4
|
+
Build a project from scope vBRIEFs following Deft Directive framework standards.
|
|
5
|
+
Use after deft-directive-setup has generated the project definition, or when the
|
|
6
|
+
user has story vBRIEFs in vbrief/active/ ready to implement. Handles scaffolding,
|
|
7
|
+
implementation, testing, and quality checks phase by phase.
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
Read and follow: skills/deft-directive-build/SKILL.md
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: deft-directive-cost
|
|
3
|
+
description: >-
|
|
4
|
+
Pre-build cost & budget transparency phase. Use after the project
|
|
5
|
+
SPECIFICATION is approved and before the build skill kicks off, to
|
|
6
|
+
produce a plain-English COST-ESTIMATE.md the user can read, react to,
|
|
7
|
+
and explicitly accept, rescope, no-build, or skip with a recorded
|
|
8
|
+
reason. Audience is non-technical users; voice is dollars and
|
|
9
|
+
whole-number bands, not spreadsheets.
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
Read and follow: skills/deft-directive-cost/SKILL.md
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: deft-directive-debug
|
|
3
|
+
description: >-
|
|
4
|
+
Systematic, evidence-based root-cause investigation. Use when the user asks
|
|
5
|
+
"why did X break / slow down / regress?", wants to debug a failure, run a
|
|
6
|
+
forensic investigation, or find the root cause of a bug -- to enter a
|
|
7
|
+
sustained investigation MODE with a claim ledger, mandatory falsification
|
|
8
|
+
before any conclusion, a chat answer-embargo until evidence closes, and a
|
|
9
|
+
deterministic validator gate. Triggers: "debug", "root cause", "investigate",
|
|
10
|
+
"why did X break", "why is X slow", "systematic debugging", "forensic".
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
Read and follow: skills/deft-directive-debug/SKILL.md
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: deft-directive-gh-arch
|
|
3
|
+
description: >-
|
|
4
|
+
Explore a codebase for architectural improvement opportunities -- deepen
|
|
5
|
+
shallow modules, generate competing interface designs in parallel via
|
|
6
|
+
sub-agents, and file a refactor RFC as a GitHub Issue. Use when improving
|
|
7
|
+
architecture, finding refactoring opportunities, or making a codebase more
|
|
8
|
+
testable and AI-navigable. Requires the GitHub CLI (gh).
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
Read and follow: skills/deft-directive-gh-arch/SKILL.md
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: deft-directive-gh-slice
|
|
3
|
+
description: >-
|
|
4
|
+
Break a SPECIFICATION.md, PRD, or plan into independently-grabbable GitHub
|
|
5
|
+
Issues using tracer-bullet vertical slices. Use after spec generation, when
|
|
6
|
+
the user wants to create implementation tickets, or when breaking work into
|
|
7
|
+
parallel-assignable issues. Requires the GitHub CLI (gh).
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
Read and follow: skills/deft-directive-gh-slice/SKILL.md
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: deft-directive-glossary
|
|
3
|
+
description: >-
|
|
4
|
+
Extract a DDD-style ubiquitous language glossary from the current
|
|
5
|
+
conversation, flagging ambiguities and proposing canonical terms. Saves
|
|
6
|
+
to UBIQUITOUS_LANGUAGE.md. Use when defining domain terms, building a
|
|
7
|
+
glossary, hardening terminology, or when "domain model" or "DDD" is mentioned.
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
Read and follow: skills/deft-directive-glossary/SKILL.md
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: deft-directive-interview
|
|
3
|
+
description: >-
|
|
4
|
+
Deterministic structured Q&A interview loop. Use when any skill needs
|
|
5
|
+
structured user input through focused questions with defaults and
|
|
6
|
+
confirmation gate. Interview output targets vBRIEF narratives.
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
Read and follow: skills/deft-directive-interview/SKILL.md
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: deft-directive-pre-pr
|
|
3
|
+
description: >-
|
|
4
|
+
Iterative pre-PR quality improvement loop. Use before pushing a branch
|
|
5
|
+
for PR creation -- after completing implementation but before task check.
|
|
6
|
+
Cycles through Read-Write-Lint-Diff until a full pass produces zero changes.
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
Read and follow: skills/deft-directive-pre-pr/SKILL.md
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: deft-directive-refinement
|
|
3
|
+
description: >-
|
|
4
|
+
Conversational refinement session. Ingests external work items into
|
|
5
|
+
vBRIEF proposed/ scope, deduplicates via origin references, evaluates
|
|
6
|
+
proposals with the user, reconciles stale origins, and promotes/demotes
|
|
7
|
+
scopes through the lifecycle using deterministic task commands.
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
Read and follow: skills/deft-directive-refinement/SKILL.md
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: deft-directive-release
|
|
3
|
+
description: >-
|
|
4
|
+
Cut a v0.X.Y release of the deft framework safely. Use when the user
|
|
5
|
+
says "release", "cut release", "v0.X.Y", or "publish release" -- to
|
|
6
|
+
walk an 8-phase workflow that pre-flights, runs an end-to-end
|
|
7
|
+
rehearsal against a temp repo, lands a draft on the real repo, gates
|
|
8
|
+
on user review, then publishes or rolls back. Re-uses the
|
|
9
|
+
deft-directive-swarm Phase 6 Step 5 Slack announcement template.
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
Read and follow: skills/deft-directive-release/SKILL.md
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: deft-directive-review-cycle
|
|
3
|
+
description: >-
|
|
4
|
+
Greptile bot reviewer response workflow. Use when running a review cycle
|
|
5
|
+
on a PR -- to audit process prerequisites, fetch bot findings, fix all
|
|
6
|
+
issues in a single batch commit, and exit cleanly when no P0 or P1 issues
|
|
7
|
+
remain. Enables cloud agents to run autonomous PR review cycles.
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
Read and follow: skills/deft-directive-review-cycle/SKILL.md
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: deft-directive-setup
|
|
3
|
+
description: >-
|
|
4
|
+
Set up a new project with Deft Directive framework standards. Use when the
|
|
5
|
+
user wants to bootstrap user preferences, configure a project, or generate a
|
|
6
|
+
project specification. Walks through setup conversationally — no separate CLI
|
|
7
|
+
needed.
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
Read and follow: skills/deft-directive-setup/SKILL.md
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: deft-directive-swarm
|
|
3
|
+
description: >-
|
|
4
|
+
Parallel local agent orchestration. Use when running multiple agents
|
|
5
|
+
on vBRIEF stories simultaneously — to scan active/ for allocatable work,
|
|
6
|
+
set up isolated worktrees, launch agents with proven prompts, monitor
|
|
7
|
+
progress, handle stalled review cycles, and close out PRs cleanly.
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
Read and follow: skills/deft-directive-swarm/SKILL.md
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: deft-directive-sync
|
|
3
|
+
description: >-
|
|
4
|
+
Session-start framework sync skill. Pulls latest deft submodule,
|
|
5
|
+
validates vBRIEF lifecycle structure, checks folder/status consistency,
|
|
6
|
+
detects stale origins (RFC D12), and summarizes changes.
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
Read and follow: skills/deft-directive-sync/SKILL.md
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: deft-directive-triage
|
|
3
|
+
description: >-
|
|
4
|
+
Triage-cache hygiene and "what's next?" queue selection -- the agent-facing
|
|
5
|
+
playbook for syncing the triage cache, classifying candidates, presenting a
|
|
6
|
+
ranked queue, walking per-item decisions, and auditing the session.
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
Read and follow: skills/deft-directive-triage/SKILL.md
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: deft-directive-write-skill
|
|
3
|
+
description: >-
|
|
4
|
+
Create new deft skills with proper structure, RFC2119 notation, triggers,
|
|
5
|
+
and progressive disclosure. Use when user wants to create, write, or build
|
|
6
|
+
a new deft skill.
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
Read and follow: skills/deft-directive-write-skill/SKILL.md
|
package/LICENSE.md
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025-2026 Jonathan "visionik" Taylor
|
|
4
|
+
https://deft.md
|
|
5
|
+
|
|
6
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
7
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
8
|
+
in the Software without restriction, including without limitation the rights
|
|
9
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
10
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
11
|
+
furnished to do so, subject to the following conditions:
|
|
12
|
+
|
|
13
|
+
The above copyright notice and this permission notice shall be included in all
|
|
14
|
+
copies or substantial portions of the Software.
|
|
15
|
+
|
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
17
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
18
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
19
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
20
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
21
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
22
|
+
SOFTWARE.
|
package/QUICK-START.md
ADDED
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
# QUICK-START
|
|
2
|
+
|
|
3
|
+
You are reading this because a user told you to, or because a stale `AGENTS.md` (or a `skills/deft-*/SKILL.md` redirect stub) sent you here. Follow these steps exactly, in order.
|
|
4
|
+
|
|
5
|
+
Legend (from RFC2119): !=MUST, ~=SHOULD, ≉=SHOULD NOT, ⊗=MUST NOT, ?=MAY.
|
|
6
|
+
|
|
7
|
+
## Installing Deft from GitHub (fetch-and-run one-liner)
|
|
8
|
+
|
|
9
|
+
! If Deft is **not yet installed** and you were told to "download and install Deft from GitHub into this directory," do NOT build from a source checkout and do NOT guess a path. Run the canonical per-platform fetch-and-run one-liner below. Each downloads the correct release binary from `https://github.com/deftai/directive/releases/latest/download/<asset>`, makes it executable, then runs it headless against the current directory (`--yes --repo-root . --json`).
|
|
10
|
+
|
|
11
|
+
**macOS (Intel + Apple Silicon):**
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
curl -fsSL -o /tmp/deft-install https://github.com/deftai/directive/releases/latest/download/install-macos-universal && chmod +x /tmp/deft-install && /tmp/deft-install --yes --repo-root . --json
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
**Linux** (amd64; use `install-linux-arm64` on Raspberry Pi / ARM):
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
curl -fsSL -o /tmp/deft-install https://github.com/deftai/directive/releases/latest/download/install-linux-amd64 && chmod +x /tmp/deft-install && /tmp/deft-install --yes --repo-root . --json
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
**Windows** (PowerShell; use `install-windows-arm64.exe` on Surface / Copilot+ PCs):
|
|
24
|
+
|
|
25
|
+
```powershell
|
|
26
|
+
Invoke-WebRequest -Uri https://github.com/deftai/directive/releases/latest/download/install-windows-amd64.exe -OutFile $env:TEMP\deft-install.exe; & $env:TEMP\deft-install.exe --yes --repo-root . --json
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
⊗ Do NOT `go build` from a source checkout or a developer-specific path (e.g. a hardcoded `/Users/<name>/...` clone) — the canonical fetch path above never assumes a local clone. Once the installer finishes, continue with Step 1 below.
|
|
30
|
+
|
|
31
|
+
## Step 1 — Who are you?
|
|
32
|
+
|
|
33
|
+
Ask the user: **"Are you (1) using deft in your project, or (2) working on deft itself?"**
|
|
34
|
+
|
|
35
|
+
- If **(2)**: Tell the user: "Read `./AGENTS.md` in this directory instead — it has contributor instructions." **Stop here.**
|
|
36
|
+
- If **(1)**: Continue to Step 2.
|
|
37
|
+
|
|
38
|
+
## Step 2 — Detect project state
|
|
39
|
+
|
|
40
|
+
Before touching `../AGENTS.md`, inspect the user's project root to decide whether this is a fresh install, a re-run, a stale-AGENTS.md upgrade, or a pre-cutover project that needs migration.
|
|
41
|
+
|
|
42
|
+
Run these deterministic checks, in order:
|
|
43
|
+
|
|
44
|
+
### 2a. Does `../AGENTS.md` exist?
|
|
45
|
+
|
|
46
|
+
- **No:** treat as fresh install — jump to Case F ("No AGENTS.md") in Step 3.
|
|
47
|
+
- **Yes:** continue to 2b.
|
|
48
|
+
|
|
49
|
+
### 2b. Does `../AGENTS.md`'s managed section match the current template? Do referenced paths resolve?
|
|
50
|
+
|
|
51
|
+
Three checks here, in this order. The first match wins; later checks only run when earlier checks pass.
|
|
52
|
+
|
|
53
|
+
1. **Template-content byte comparison (Case G gate).** Locate the managed section in `../AGENTS.md` (the block bounded by the `<!-- deft:managed-section v2 -->` and `<!-- /deft:managed-section -->` markers). Compare those bytes against the current `./templates/agents-entry.md` rendered managed-section output.
|
|
54
|
+
- ! If the managed section is **byte-different** from the current template render (or the markers are absent in `../AGENTS.md`), treat as **stale content** -- jump to Case G ("Stale AGENTS.md") in Step 3. Case G is the right remediation for byte-different staleness because the refresh actually rewrites the content.
|
|
55
|
+
2. **Install-path resolution (Case K gate -- #1046 PR-A).** When the managed section IS byte-current, parse the section for its install-path declaration (`Full guidelines: <root>/main.md`, e.g. `.deft/core/main.md` for the canonical install layout or `deft/main.md` for the legacy install layout). Verify that `../<root>/main.md` exists on disk.
|
|
56
|
+
- ! If the managed section is **byte-identical** to the current template render BUT the declared install path does NOT resolve, jump to **Case K ("Install location mismatch")** in Step 3. Refreshing the managed section is a documented no-op when the content already matches -- Case K is a different failure class than Case G and demands a different remediation (#1046 finding #2).
|
|
57
|
+
3. **Legacy skill-path resolution (v0.19 AGENTS.md backstop).** Parse `../AGENTS.md` for any token matching `deft/skills/<name>/SKILL.md` (the legacy v0.19 path shape) and verify the file exists under `./skills/<name>/SKILL.md` (relative to this QUICK-START.md).
|
|
58
|
+
- ! If any referenced path does not exist on disk, treat `../AGENTS.md` as **stale** -- jump to Case G in Step 3.
|
|
59
|
+
- ! If the referenced path exists but its first 200 characters contain `<!-- deft:deprecated-skill-redirect -->`, also treat as stale. These stubs exist to keep v0.19 `AGENTS.md` files working until QUICK-START can refresh them. (The 200-character window matches the same budget used in 2c and is guaranteed to cover the sentinel position in every stub this repo ships -- see `tests/content/test_deprecated_skill_redirects.py::test_stub_has_sentinel`.)
|
|
60
|
+
- If all referenced paths exist and none are redirect stubs, continue to 2c.
|
|
61
|
+
|
|
62
|
+
Priority ordering: Case G (byte-different content) always wins over Case K (install-path mismatch) because the refresh path is the higher-priority remediation -- when the template content has moved on, the refresh closes BOTH the content drift and any incidental install-path mismatch that the new content might re-introduce. Case K only fires when the content is byte-current AND the path is unresolved -- the exact "refresh would be a no-op" failure class issue #1046 documents.
|
|
63
|
+
|
|
64
|
+
**Big-jump joint check (Case G+H gate).** Before acting on ANY Case G routing above (a byte-different managed section, or an unresolved / redirect-stub legacy skill path), first ALSO evaluate the 2c pre-cutover check below against `../`. ! If 2c ALSO holds (real pre-v0.20 `SPECIFICATION.md` / `PROJECT.md` present), the project is in the **joint big-jump state** where both the AGENTS.md refresh (Case G) and the pre-cutover migration (Case H) are due — jump to **Case G+H** (combined single-session remediation) in Step 3 instead of Case G. The combined path runs the refresh and the migration in one session and emits a single restart, avoiding the wasted Case G → restart → Case H round-trip. If 2c does not hold, route to Case G as usual.
|
|
65
|
+
|
|
66
|
+
### 2c. Are there pre-v0.20 artifacts at the user's project root?
|
|
67
|
+
|
|
68
|
+
Check both of these files at `../` (the user's project root), using the same
|
|
69
|
+
rule implemented by `scripts/_precutover.py`:
|
|
70
|
+
|
|
71
|
+
- `../SPECIFICATION.md` — exists and is neither a deprecation redirect nor a current generated spec export. A current generated spec export contains `<!-- Purpose: rendered specification -->` and `<!-- Source of truth: vbrief/specification.vbrief.json -->`, and `../vbrief/specification.vbrief.json` plus all five lifecycle folders exist.
|
|
72
|
+
- `../PROJECT.md` — exists and is not a deprecation redirect (`<!-- deft:deprecated-redirect -->` or `<!-- Purpose: deprecation redirect -->`).
|
|
73
|
+
|
|
74
|
+
- If **either** holds (real pre-v0.20 content present), treat as **pre-cutover** — jump to Case H ("Pre-cutover migration") in Step 3.
|
|
75
|
+
- If both contain the sentinel (or neither exists), continue to 2d.
|
|
76
|
+
|
|
77
|
+
### 2d. Partial migration?
|
|
78
|
+
|
|
79
|
+
Check whether `../vbrief/` exists. If it does, inspect for the 5 lifecycle subfolders (`proposed/`, `pending/`, `active/`, `completed/`, `cancelled/`). If `vbrief/` exists but any lifecycle subfolder is missing, treat as **partial migration** — jump to Case I ("Partial migration repair") in Step 3.
|
|
80
|
+
|
|
81
|
+
### 2e. Everything clean
|
|
82
|
+
|
|
83
|
+
If none of 2a–2d triggered, `../AGENTS.md` is current and the project is on v0.20+. Jump to Case J ("Everything clean") in Step 3.
|
|
84
|
+
|
|
85
|
+
## Step 3 — Act on detected state
|
|
86
|
+
|
|
87
|
+
Pick exactly one case from Step 2 and follow its instructions. Do not mix cases.
|
|
88
|
+
|
|
89
|
+
### Case F — No AGENTS.md (fresh install)
|
|
90
|
+
|
|
91
|
+
1. Read `./templates/agents-entry.md` (this directory).
|
|
92
|
+
2. Write that content to `../AGENTS.md`.
|
|
93
|
+
3. Tell the user: "✓ Created AGENTS.md at your project root."
|
|
94
|
+
4. Continue to Step 4.
|
|
95
|
+
|
|
96
|
+
### Case G — Stale AGENTS.md (v0.19 → v0.20 upgrade)
|
|
97
|
+
|
|
98
|
+
1. Read `../AGENTS.md` and identify the **Deft-managed section** — bounded by the `deft/main.md` sentinel marker.
|
|
99
|
+
2. If the `deft/main.md` sentinel is **absent**, treat the entire existing file as user-authored and do NOT rewrite it. Instead, read `./templates/agents-entry.md` and **append** its content to `../AGENTS.md` with two blank lines between the existing content and the appended block. This matches the idempotent append behavior documented in `setup.go::WriteAgentsMD` for brownfield projects with a pre-existing AGENTS.md.
|
|
100
|
+
3. If the `deft/main.md` sentinel is **present**, replace only the sentinel-bounded section with the current content of `./templates/agents-entry.md`. Preserve everything outside that region verbatim.
|
|
101
|
+
4. Tell the user: "✓ Refreshed Deft-managed section of AGENTS.md. Your existing additions outside that region were preserved."
|
|
102
|
+
5. ! Instruct the user: **"Framework updated. Start a new agent session to pick up the changes. The current session has stale context."** Do not continue past this instruction in the current session.
|
|
103
|
+
|
|
104
|
+
### Case H — Pre-cutover migration (SPECIFICATION.md / PROJECT.md without sentinel)
|
|
105
|
+
|
|
106
|
+
1. Tell the user: "Your project uses the pre-v0.20 document model. I can run `task migrate:vbrief` to upgrade, which replaces SPECIFICATION.md and PROJECT.md with deprecation redirect stubs and creates the `vbrief/` lifecycle folders. First I'll run an environment preflight."
|
|
107
|
+
2. ! Execute the environment preflight from `./skills/deft-directive-setup/SKILL.md` "Pre-Cutover Detection Guard" § Environment Preflight: check (a) `task migrate:vbrief` resolvability, (b) `uv` on PATH, (c) `deft/scripts/migrate_vbrief.py` present. Report each result to the user BEFORE asking for approval. If any check fails, surface the specific fix pointer and stop — do not prompt for approval until preflight passes.
|
|
108
|
+
3. ! If `task migrate:vbrief` is not resolvable from the project root (the consumer `Taskfile.yml` does not yet include `deft/Taskfile.yml`), tell the user the fallback invocation `task -t ./deft/Taskfile.yml migrate:vbrief` will be used instead. See [./main.md](../main.md#publishing-deft-tasks-in-your-project-root) for the recommended include pattern that makes the primary command work from the project root.
|
|
109
|
+
4. ! Only after preflight results have been reported, ask the user: "Preflight passed. Shall I run `task migrate:vbrief` (or the fallback invocation) now?" Wait for explicit user approval (`yes`, `approve`, `confirmed`). ⊗ Run migration on a broad "proceed" or "go ahead".
|
|
110
|
+
5. On approval: run the resolved command (primary `task migrate:vbrief` or the fallback `task -t ./deft/Taskfile.yml migrate:vbrief`) from the project root. For preview (`--dry-run`), dirty-tree bypass (`--force`), and undo (`--rollback`) see the [Migration safety flags](./skills/deft-directive-setup/SKILL.md#migration-safety-flags) subsection.
|
|
111
|
+
6. See [./main.md](../main.md#migrating-from-pre-v020) for the full migration reference (what pre-cutover looks like, what the migrator produces, safety flags) and [docs/BROWNFIELD.md](./docs/BROWNFIELD.md) for the brownfield adoption guide.
|
|
112
|
+
7. After migration completes, re-run Step 2 of this QUICK-START — the project state has changed. Most likely you land in Case G (AGENTS.md still references old paths) or Case J.
|
|
113
|
+
8. When AGENTS.md is refreshed, ! instruct the user: **"Framework updated. Start a new agent session to pick up the changes. The current session has stale context."**
|
|
114
|
+
|
|
115
|
+
### Case G+H — Combined stale AGENTS.md + pre-cutover migration (big-jump, one session)
|
|
116
|
+
|
|
117
|
+
Reached only via the **Big-jump joint check** in 2b: the managed section in `../AGENTS.md` is stale (Case G) AND pre-v0.20 artifacts are present at `../` (Case H). This is the typical shape of a multi-version "big jump" that crossed both the AGENTS.md managed-section refresh and the pre-v0.20 document-model cutover. Running Case G and Case H as two separate sessions wastes an agent-session round-trip, because `task migrate:vbrief` re-reads filesystem state directly and does NOT depend on the refreshed `AGENTS.md` being in the current agent's context. Both remediations therefore complete safely in **one session**.
|
|
118
|
+
|
|
119
|
+
! Run the two remediations in this exact order — **AGENTS.md refresh first, migration second** — then emit a **single** restart instruction at the very end:
|
|
120
|
+
|
|
121
|
+
1. **Refresh AGENTS.md first (Case G work).** Perform Case G steps 1-4 verbatim: identify the managed section, append when the sentinel is absent or byte-replace it when present, and preserve everything outside the managed region. ⊗ Do NOT emit the Case G step-5 restart instruction here — the combined path defers the single restart to step 3.
|
|
122
|
+
2. **Run migration second (Case H work).** Perform Case H steps 1-6 verbatim: run the environment preflight, report each result, ask for explicit approval, and on approval run `task migrate:vbrief` (or the `task -t ./deft/Taskfile.yml migrate:vbrief` fallback) from the project root. ⊗ Do NOT perform Case H step 7 (re-run Step 2) or step 8 (restart): the AGENTS.md refresh is already done in step 1, and the single restart is emitted in step 3. The migration reads filesystem state directly, so refreshing AGENTS.md first does not change its inputs — the ordering is safe.
|
|
123
|
+
3. **Single restart, exactly once.** Only after BOTH the refresh and the migration have completed, ! instruct the user EXACTLY ONCE: **"Framework updated and project migrated. Start a new agent session to pick up the changes. The current session has stale context."** ⊗ Do NOT emit a second restart instruction — the deferred Case G restart and the Case H restart collapse into this one.
|
|
124
|
+
|
|
125
|
+
The end state is byte-identical to running Case G and Case H separately: the same managed-section refresh against `./templates/agents-entry.md` and the same `task migrate:vbrief` output (deprecation-redirect stubs plus the five `vbrief/` lifecycle folders). The only thing removed is the wasted intermediate session restart. For the version-by-version context of a big jump, see the [big-jump triage entry point](./UPGRADING.md#big-jump-triage--multi-version-upgrades-start-here) in UPGRADING.md.
|
|
126
|
+
|
|
127
|
+
### Case I — Partial migration repair
|
|
128
|
+
|
|
129
|
+
1. Tell the user: "Your project has a partial vBRIEF layout. Missing lifecycle folders: <list the absent ones>. Shall I complete the migration by running `task migrate:vbrief`? It is idempotent and safe to re-run."
|
|
130
|
+
2. On approval, run `task migrate:vbrief` (or fall back to `task -t ./deft/Taskfile.yml migrate:vbrief` if the task is not resolvable from the project root — see [./main.md](../main.md#publishing-deft-tasks-in-your-project-root)). Re-run Step 2 afterwards.
|
|
131
|
+
3. If the user declines, point them at [docs/BROWNFIELD.md](./docs/BROWNFIELD.md) §Troubleshooting and stop.
|
|
132
|
+
|
|
133
|
+
### Case J — Everything clean
|
|
134
|
+
|
|
135
|
+
1. Tell the user: "✓ Deft is already configured and current in your AGENTS.md."
|
|
136
|
+
2. Continue to Step 4.
|
|
137
|
+
|
|
138
|
+
### Case K — Install location mismatch (#1046 PR-A)
|
|
139
|
+
|
|
140
|
+
The managed section in `../AGENTS.md` is byte-identical to the current `./templates/agents-entry.md` render, BUT the install path the managed section declares (e.g. `.deft/core/main.md`) does NOT resolve on disk. This is the failure class issue #1046 finding #2 documents: Case G's "refresh the managed section" prescription is a byte-for-byte no-op against the current template, so re-running just re-detects the same staleness next session.
|
|
141
|
+
|
|
142
|
+
1. Tell the user (verbatim phrasing, naming the unresolved path): "AGENTS.md's managed section is byte-identical to the current template, but the install path it declares (`<declared-path>`) does NOT exist on disk. Refreshing the managed section would be a no-op -- Case G's remediation does not fix install-location mismatches."
|
|
143
|
+
2. ! Direct the user to run `task framework:doctor` (forthcoming in PR-B of the #1046 cohort -- the diagnostic + remediation surface that owns Case K's fix path) OR to manually verify that the install path AGENTS.md claims actually exists on disk. Until PR-B merges, the manual check is the operator's only path: confirm the framework is deposited at the path AGENTS.md declares, OR re-run the installer / relocator to deposit at that path, OR hand-edit AGENTS.md to point at the path where the framework actually lives.
|
|
144
|
+
3. ⊗ Run a Case G refresh -- it is a documented no-op for Case K. The managed section already byte-matches the current template; refreshing the bytes back to the same bytes does not change which install path is declared.
|
|
145
|
+
4. ! Instruct the user: **"Stop here. Do not continue to Step 4 until the install-path mismatch is resolved -- subsequent sessions will re-enter Case K until then."**
|
|
146
|
+
|
|
147
|
+
## Step 4 — Continue setup
|
|
148
|
+
|
|
149
|
+
Read and follow `../AGENTS.md`. This starts the normal first-session flow (user preferences, project definition, specification). If you reached Case G or completed Case H/I and rewrote AGENTS.md, you have already told the user to start a new session — do not keep going yourself.
|
|
150
|
+
|
|
151
|
+
**Brownfield pointer:** For users retrofitting Deft onto an existing project (existing code, existing docs, or pre-v0.20 Deft layout), the authoritative adoption guide is [docs/BROWNFIELD.md](./docs/BROWNFIELD.md). It covers install options, migration, post-migration checks, and troubleshooting in more depth than the Case H flow above.
|
|
152
|
+
|
|
153
|
+
**Upgrade pointer:** Users moving between framework versions should also read [UPGRADING.md](./UPGRADING.md) in the repo root for the version-by-version guide. For a multi-version "big jump", start at its [big-jump triage entry point](./UPGRADING.md#big-jump-triage--multi-version-upgrades-start-here), which names which version buckets apply and in what order. An agent on a big jump that hits both a stale AGENTS.md and pre-cutover artifacts should follow [Case G+H](#case-gh--combined-stale-agentsmd--pre-cutover-migration-big-jump-one-session) above to complete both in one session.
|
|
154
|
+
|
|
155
|
+
## Update notifications
|
|
156
|
+
|
|
157
|
+
After a Deft project is set up, the CLI runs a periodic, read-only remote-version probe (issue #801) so you find out when the upstream framework ships a new release. The probe shells out to `git ls-remote --tags --refs <upstream>` against the deft submodule's `origin` remote at most once every 24 hours, parses the highest semver tag, and -- if your local checkout is behind -- prints a single informational warn line below the existing recorded-vs-current message:
|
|
158
|
+
|
|
159
|
+
```
|
|
160
|
+
⚠ Upstream directive v0.24.0 is available (you are on v0.23.0). Run `task framework:check-updates` for details; follow `skills/deft-directive-sync/SKILL.md` Phase 2 to update.
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
The banner is informational only: it never blocks CI, never prompts in non-interactive sessions, and never triggers a second `Continue anyway?` prompt on top of the existing #410 marker-drift gate. Re-notification cadence is per-tag -- once you dismiss `v0.24.0` the banner stays silent for 24 hours, but a fresh `v0.24.1` re-notifies immediately. State is persisted to `vbrief/.deft-remote-probe.json`; per-`run`-invocation dedup prevents the same banner from stacking when chained commands (e.g. `cmd_install -> cmd_project -> cmd_spec`) all hit the gate.
|
|
164
|
+
|
|
165
|
+
For a synchronous interactive probe -- handy when you want to verify your update path before pushing -- run `task framework:check-updates`. Pass `-- --force` to bypass the 24-hour throttle and `-- --json` to get a machine-parseable payload (useful in CI dashboards). Exit code is `1` only when the probe positively reports BEHIND; every other status (`OK` / `NO-UPSTREAM` / `NO-TAGS` / `ERROR` / `SKIPPED`) returns `0`.
|
|
166
|
+
|
|
167
|
+
Air-gapped or strict-egress environments can opt out of the probe entirely by setting `DEFT_NO_NETWORK=1` in the calling shell -- the probe short-circuits before any subprocess call, the gate emits no banner, and no `framework:remote-drift` event is recorded. The subprocess timeout (default 5 seconds) is overridable via `DEFT_REMOTE_PROBE_TIMEOUT` for slow upstream remotes.
|