packmind-create-standard — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited packmind-create-standard (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
This skill provides a complete walkthrough for creating coding standards via the Packmind CLI.
Coding standards are collections of rules that capture team conventions, best practices, and coding guidelines. They help maintain consistency across codebases and enable GitLab Duo to follow your team's specific practices.
Every standard is drafted as a markdown file with this structure:
# Standard Name
## Description
What the standard covers and why.
## Scope
Comma-separated glob patterns for files where the standard applies (e.g., "**/*.ts", "**/*.spec.ts,**/*.test.ts").
## Rules
### Rule description starting with action verb
#### Positive Example
\`\`\`typescript
// Valid code example
\`\`\`
#### Negative Example
\`\`\`typescript
// Invalid code example
\`\`\`
### Another rule without examplesThe # Title heading is the display name shown in indexes and dashboards. The slug is auto-generated from it — never write the slug yourself.
Format: Use Title Case with spaces — natural language, not a slug.
Examples:
"TypeScript Testing Conventions", "React Component File Organization", "Backend Error Handling""typescript-testing-conventions" (slug format — use Title Case with spaces)"testing" (too generic)"good-practices" (slug format and too vague)"Standards for Code" (describes meta-concept, not the actual domain)Note: The summary field is used in other workflows but not yet supported by the CLI.
#### Understanding scope vs summary
"**/*.spec.ts,**/*.test.ts", "**/*.tsx,**/*.jsx", "src/domain/**/*.ts"**/*.ts — all TypeScript files**/*.spec.ts,**/*.test.ts — all test files**/*.tsx,**/*.jsx — all React component filessrc/domain/**/*.ts — domain TypeScript files under srcpackages/**/src/**/*.ts — all package source files"Apply when writing tests to ensure consistency", "Use when handling user data for privacy compliance"Before creating a standard, verify that packmind-cli is available:
Check if packmind-cli is installed:
packmind-cli --versionIf not available, install it:
npm install -g @packmind/cliThen login to Packmind:
packmind-cli loginTo create a standard, follow this process in order, skipping steps only if there is a clear reason why they are not applicable.
Gather essential information before drafting the standard.
#### Clarification Flow
Study the user's request and identify critical gaps. The number of questions should match the request clarity:
Examples of focused questions:
Introduce questions with a simple phrase about needing clarification, then list as bullet points—no numbering, no category headers.
#### Repository Access Guardrail
Do not open or scan repository files unless the user explicitly points to them (provides file paths or requests project-wide review). If source references are needed, ask the user to supply them.
#### What to Capture
Take brief notes on:
Keep notes concise—just enough to unlock drafting.
Transform the understanding into a complete markdown draft with rules and examples.
#### Draft Creation
.packmind/standards/_drafts/ (create the folder if missing) using filename <slug>.md (lowercase with hyphens)# <Standard Title> (Title Case, 2–5 words)## Description — what the standard covers and why it exists## Scope — comma-separated glob patterns (required)## Rules — each rule as a ### <rule text> subsection following the Rule Writing Guidelines below#### Positive Example with a language-annotated code block showing the compliant approach#### Negative Example with a language-annotated code block showing the anti-patternThis draft file is the only file created during drafting — no separate files are needed.
#### Rule Writing Guidelines
Each rule should follow these format requirements:
##### Avoid Rationale Phrases
Rules describe WHAT to do, not WHY. Strip justifications and benefits—let examples demonstrate value.
Common fluff patterns to remove:
Bad (includes rationale):
Document props with JSDoc comments to provide IDE intellisense and improve developer experience.
Good (action only):
Document component props with JSDoc comments (/** ... */) describing purpose, expected values, and defaults.##### Rule Splitting
If a rule addresses 2+ distinct concerns, proactively split it into separate rules:
Bad (too broad):
Create centralized color constants in dedicated files for consistent palettes, using semantic naming based on purpose rather than specific color values.
Good (split into focused rules):
theme/colors.ts using semantic names (e.g., primary, error)##### Inline Examples in Rules
Inline examples (code, paths, patterns) within the rule content are optional. Only include them when they clarify something not obvious from the rule text.
Types of useful inline examples:
const, async/await, /** ... */infra/repositories/, domain/entities/.spec.ts, I{Name} prefixGood rules with inline examples:
IUserService)"infra/repositories/"Good rules without inline examples:
Bad rules:
#### Examples Guidelines
typescript, sql, javascript)Valid language values for code blocks:
#### Draft Summary
After saving the draft file, write a concise summary that captures:
Then proceed directly to Step 3.
Before running the CLI command, you MUST get explicit user approval:
---
Name: <standard name>
Description: <description>
Scope: <scope>
Rules:
1. <rule content>
- ✅ <positive example>
- ❌ <negative example>
2. <rule content>
- ✅ <positive example>
- ❌ <negative example>
...
---# heading → name## Description content → description## Scope content → scope### ... under ## Rules → rule content#### Positive Example code block → examples.positive#### Negative Example code block → examples.negativeexamples.language (UPPERCASED)Important: examples is a single object (not an array) — one positive/negative pair per rule. It is optional — omit entirely for rules without code examples. When present, all three fields (positive, negative, language) are required.
Expected JSON format:
{
"name": "Standard Name",
"description": "What the standard covers and why.",
"scope": "**/*.spec.ts,**/*.test.ts",
"rules": [
{
"content": "Rule description starting with action verb",
"examples": {
"positive": "// valid code",
"negative": "// invalid code",
"language": "TYPESCRIPT"
}
},
{
"content": "Rule without examples"
}
]
}packmind-cli standards create --origin-skill packmind-create-standard <<'EOF'
{"name":"...","description":"...","scope":"...","rules":[...]}
EOFExpected output on success:
packmind-cli Standard "Your Standard Name" created successfully (ID: <uuid>)#### Troubleshooting
"Not logged in" error:
packmind-cli login"Failed to resolve global space" error:
Validation errors:
## Rules section has at least one ### rule subsection"expected object, received array" error on examples:
examples field must be a single object {positive, negative, language}, not an arrayAfter the standard is successfully created, delete the draft markdown file in .packmind/standards/_drafts/.
Only clean up on success - if the CLI command fails, keep the files so the user can retry.
After successful creation, check if the standard fits an existing package:
packmind-cli install --list to get available packages<package-slug> package."<package-slug>packmind-cli packages add --to <package-slug> --standard <standard-slug>packmind-cli install to sync the changes?"packmind-cli installHere's a complete example creating a TypeScript testing standard:
File: .packmind/standards/_drafts/testing-conventions.md
# TypeScript Testing Conventions
## Description
Enforce consistent testing patterns in TypeScript test files to improve readability, maintainability, and reliability of the test suite.
## Scope
**/*.spec.ts,**/*.test.ts
## Rules
### Use descriptive test names that explain the expected behavior
#### Positive Example
\`\`\`typescript
it('returns empty array when no items match filter')
\`\`\`
#### Negative Example
\`\`\`typescript
it('test filter')
\`\`\`
### Follow Arrange-Act-Assert pattern in test structure
#### Positive Example
\`\`\`typescript
const input = createInput();
const result = processInput(input);
expect(result).toEqual(expected);
\`\`\`
#### Negative Example
\`\`\`typescript
expect(processInput(createInput())).toEqual(expected);
\`\`\`
### Use one assertion per test for better error isolation
#### Positive Example
\`\`\`typescript
it('validates name', () => { expect(result.name).toBe('test'); });
it('validates age', () => { expect(result.age).toBe(25); });
\`\`\`
#### Negative Example
\`\`\`typescript
it('validates user', () => { expect(result.name).toBe('test'); expect(result.age).toBe(25); });
\`\`\`
### Avoid using 'should' at the start of test names - use assertive verb-first namingCreating the standard (piped via stdin):
packmind-cli standards create --origin-skill packmind-create-standard <<'EOF'
{"name":"TypeScript Testing Conventions","description":"Enforce consistent testing patterns...","scope":"**/*.spec.ts,**/*.test.ts","rules":[...]}
EOF| Section | Required | Description |
|---|---|---|
# Title | Yes | Title Case, descriptive, 2–5 words |
## Description | Yes | What and why |
## Scope | Yes (CLI) | Comma-separated glob patterns |
## Rules | Yes | Contains rule subsections |
### Rule text | Yes (≥1) | Rule text (verb-first, max ~25 words) |
#### Positive Example | No | Valid code in fenced block |
#### Negative Example | No | Invalid code in fenced block |
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.