Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 6 additions & 4 deletions .beads/issues.jsonl
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
{"id":"app-0sa","title":"add in the option to install a skill with forced usage","description":"Add --eager flag to prpm install for forced/always-activated skills and agents.\n\n## Final Design (Approved)\n\n### CLI Flag\n- `--eager`: Force skill/agent to always activate\n- `--lazy`: Revert to default (on-demand) behavior\n- Precedence: CLI flag \u003e file-level \u003e package-level \u003e default (lazy)\n\n### prpm.json Schema\n```json\n{\n \"eager\": true, // package-level\n \"files\": [\n { \"path\": \"file.md\", \"eager\": true } // file-level override\n ]\n}\n```\n\n### AGENTS.md Output (Option A)\n```markdown\n\u003cskills_system priority=\"0\"\u003e\n\u003cusage\u003e\nMANDATORY: You MUST load and apply these skills at the START of every session.\nDo not wait for relevance - these are always active.\n\u003c/usage\u003e\n\u003ceager_skills\u003e\n\u003cskill activation=\"eager\"\u003e...\u003c/skill\u003e\n\u003c/eager_skills\u003e\n\u003c/skills_system\u003e\n\n\u003cskills_system priority=\"1\"\u003e\n\u003c!-- existing lazy skills --\u003e\n\u003c/skills_system\u003e\n```\n\n### Applies To\n- Skills ✅\n- Agents ✅ \n- Rules ✅\n- Plugins ✅\n- Commands ❌ (explicitly invoked)\n- Hooks ❌ (trigger-based)\n\n### Fallback Formats\nSame eager/lazy pattern applies to: CLAUDE.md, GEMINI.md, CONVENTIONS.md\n","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-06T20:40:25.599393+01:00","updated_at":"2025-12-08T11:17:17.505826+01:00","closed_at":"2025-12-08T11:17:17.505826+01:00"}
{"id":"app-1sx","title":"add in the ability to make prpm store credentials needed for mcp","description":"It shouldn't store hte actual credential on the users computer but rather the encrypted version which communicates with the server to decrypt and then allow usage. Details TBD","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-06T20:35:02.277717+01:00","updated_at":"2025-12-06T20:35:02.277717+01:00"}
{"id":"app-a04","title":"Add eager flag support for collections","description":"","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-08T12:02:13.888251+01:00","updated_at":"2025-12-08T12:02:19.264779+01:00","closed_at":"2025-12-08T12:02:19.264779+01:00"}
{"id":"app-1sx","title":"add in the ability to make prpm store credentials needed for mcp","description":"Store MCP credentials securely using system keychain (macOS Keychain, Windows Credential Manager, Linux Secret Service).\n\n## Requirements\n- Local keychain-based storage (no server dependency)\n- Works offline\n- Secrets never leave user's machine\n- OS handles encryption/secure storage\n\n## Use Case\nEnd users managing MCP credentials centrally - instead of setting env vars everywhere, PRPM manages credentials for MCP packages that need API keys.\n\n## Approach\nUse system keychain via library like 'keytar' or native APIs:\n- macOS: Keychain\n- Windows: Credential Manager \n- Linux: Secret Service (libsecret)\n\n## CLI Interface\nIntegrated with install flow - when installing MCP package that needs credentials, PRPM prompts user inline.\n\n## Credential Declaration\nPackage authors can declare required credentials two ways:\n1. Explicit `credentials` field in prpm.json: `\"credentials\": [\"GITHUB_TOKEN\"]`\n2. Inferred from env placeholders in MCP config: `env: { \"GITHUB_TOKEN\": \"${GITHUB_TOKEN}\" }`\nExplicit declaration takes priority.\n\n## Status\nBrainstorming - determining injection mechanism.","status":"in_progress","priority":2,"issue_type":"task","created_at":"2025-12-06T20:35:02.277717+01:00","updated_at":"2025-12-12T21:06:15.023868+01:00"}
{"id":"app-875","title":"Snippet subtype: append content to existing files (AGENTS.md, CLAUDE.md)","description":"Add a 'snippet' subtype that appends content to existing files (AGENTS.md, CLAUDE.md, CONVENTIONS.md) with markers for install/uninstall tracking. Use cases: adding sections to monolithic instruction files without creating separate packages.","status":"closed","priority":2,"issue_type":"feature","created_at":"2025-12-22T22:07:16.470716+01:00","updated_at":"2025-12-22T22:19:40.584397+01:00","closed_at":"2025-12-22T22:19:40.584397+01:00"}
{"id":"app-a04","title":"Add eager flag support for collections","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-08T12:02:13.888251+01:00","updated_at":"2025-12-08T12:02:19.264779+01:00","closed_at":"2025-12-08T12:02:19.264779+01:00"}
{"id":"app-ake","title":"Support eager: true in prpm.json schema","description":"Add eager field to prpm.json schema.\n\n## Changes\n1. Add `eager?: boolean` to PrpmManifest interface (package-level)\n2. Add `eager?: boolean` to FileEntry interface (file-level override)\n3. Update JSON schema if applicable\n\n## Files\n- packages/cli/src/types/manifest.ts (or equivalent)\n- JSON schema at prpm.dev/schemas/manifest.json\n\n## Priority\nDo this FIRST - other tasks depend on it.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-08T10:54:04.717854+01:00","updated_at":"2025-12-08T11:08:14.126838+01:00","closed_at":"2025-12-08T11:08:14.126838+01:00","dependencies":[{"issue_id":"app-ake","depends_on_id":"app-0sa","type":"blocks","created_at":"2025-12-08T10:54:12.915473+01:00","created_by":"daemon"}]}
{"id":"app-ctc","title":"Test eager flag across all supported formats","description":"Test eager flag across all supported formats.\n\n## Test Cases\n1. CLI flag --eager works\n2. CLI flag --lazy works\n3. prpm.json package-level eager: true\n4. prpm.json file-level eager: true/false\n5. Precedence: CLI \u003e file \u003e package \u003e default\n6. Output formats: AGENTS.md, CLAUDE.md, GEMINI.md, CONVENTIONS.md\n7. Package types: skills, agents, rules, plugins\n\n## Depends On\nAll implementation tasks complete","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-08T10:54:04.860271+01:00","updated_at":"2025-12-08T11:17:00.452457+01:00","closed_at":"2025-12-08T11:17:00.452457+01:00","dependencies":[{"issue_id":"app-ctc","depends_on_id":"app-kll","type":"blocks","created_at":"2025-12-08T10:54:13.014954+01:00","created_by":"daemon"},{"issue_id":"app-ctc","depends_on_id":"app-ake","type":"blocks","created_at":"2025-12-08T10:54:13.047362+01:00","created_by":"daemon"},{"issue_id":"app-ctc","depends_on_id":"app-y2i","type":"blocks","created_at":"2025-12-08T10:54:13.079507+01:00","created_by":"daemon"}]}
{"id":"app-fo2","title":"Fix gemini.md to output plain markdown instead of TOML","description":"","status":"closed","priority":2,"issue_type":"bug","created_at":"2025-12-08T12:00:10.478198+01:00","updated_at":"2025-12-08T12:00:16.864452+01:00","closed_at":"2025-12-08T12:00:16.864452+01:00"}
{"id":"app-jy2","title":"Refactor registry packages to use shared @pr-pm/types","description":"The registry and registry-client packages have their own duplicate type definitions (Package, PackageManifest, PackageVersion) instead of importing from the shared @pr-pm/types package. This causes maintenance burden - when adding fields like 'eager', we have to update multiple places.\n\nScope:\n- packages/registry/src/types.ts - Should import/extend from @pr-pm/types\n- packages/registry-client/src/registry-client.ts - RegistryPackage should extend/use @pr-pm/types\n- packages/registry-client/src/types/registry.ts - Should import from @pr-pm/types\n\nBenefits:\n- Single source of truth for type definitions\n- Less duplication\n- Type changes only need to happen in one place\n\nRisks:\n- May need to handle slight differences between DB types and API types\n- Could affect downstream consumers","status":"closed","priority":2,"issue_type":"feature","created_at":"2025-12-08T13:39:39.882981+01:00","updated_at":"2025-12-08T13:51:22.189917+01:00","closed_at":"2025-12-08T13:51:22.189917+01:00","comments":[{"id":1,"issue_id":"app-jy2","author":"khaliqgant","text":"GreenCreek: Test plan created. Waiting for BlackBear to complete implementation before testing. Key findings: Registry has 6 additional fields not in @pr-pm/types that need to be preserved. See TEST_PLAN_app-jy2.md for full details.","created_at":"2025-12-08T12:43:27Z"},{"id":2,"issue_id":"app-jy2","author":"khaliqgant","text":"GreenCreek: Analysis complete. Created 3 detailed docs in worktree: TEST_PLAN_app-jy2.md (45+ test checkpoints), TYPE_ANALYSIS_app-jy2.md (implementation guide with 3 options), GREENCREEK_STATUS_app-jy2.md (full status report). Recommend Option 1: add 6 missing fields to @pr-pm/types. Ready for BlackBear implementation.","created_at":"2025-12-08T12:46:33Z"}]}
{"id":"app-d11","title":"Add harness and runtime metadata to prpm.json","description":"## Problem\n\nPRPM handles format conversion and package bundling well, but doesn't explicitly model:\n- Which harness/runtime an agent is designed for (Claude Code, Codex, Cursor IDE, etc.)\n- What tools the agent requires (Bash, Read, Write, WebFetch)\n- What environment variables are needed (GITHUB_TOKEN, etc.)\n- What permissions are expected\n\nThis came from Twitter discussion about the 'containerization moment for agents' - the idea that agent.md + skills should be packageable like Docker containers.\n\n## Proposed Solution\n\nAdd optional fields to prpm.json:\n\n```json\n{\n \"name\": \"@example/my-agent\",\n \"version\": \"1.0.0\",\n \"harness\": [\"claude-code\", \"codex\", \"cursor\"],\n \"runtime\": {\n \"tools\": [\"Bash\", \"Read\", \"Write\", \"WebFetch\"],\n \"env\": [\"GITHUB_TOKEN\"],\n \"permissions\": [\"network\", \"filesystem\"]\n }\n}\n```\n\n## Benefits\n\n1. **Discovery** - Filter registry by harness compatibility\n2. **Documentation** - Clear requirements before install\n3. **Governance** - Enterprise users can audit agent capabilities\n4. **Portability** - Explicit about what's needed to run\n\n## Design Principles\n\n- Optional (backwards compatible)\n- Declarative (documentation, not enforcement)\n- Simple (don't over-engineer)\n\n## Open Questions\n\n- Should harness be a top-level field or nested?\n- Standard list of harness names? Or freeform?\n- Should tools list be validated against known tool names?\n- How does this interact with format conversion?","status":"open","priority":2,"issue_type":"feature","created_at":"2025-12-24T14:53:58.028888+01:00","updated_at":"2025-12-24T14:53:58.028888+01:00"}
{"id":"app-fo2","title":"Fix gemini.md to output plain markdown instead of TOML","status":"closed","priority":2,"issue_type":"bug","created_at":"2025-12-08T12:00:10.478198+01:00","updated_at":"2025-12-08T12:00:16.864452+01:00","closed_at":"2025-12-08T12:00:16.864452+01:00"}
{"id":"app-jy2","title":"Refactor registry packages to use shared @pr-pm/types","description":"The registry and registry-client packages have their own duplicate type definitions (Package, PackageManifest, PackageVersion) instead of importing from the shared @pr-pm/types package. This causes maintenance burden - when adding fields like 'eager', we have to update multiple places.\n\nScope:\n- packages/registry/src/types.ts - Should import/extend from @pr-pm/types\n- packages/registry-client/src/registry-client.ts - RegistryPackage should extend/use @pr-pm/types\n- packages/registry-client/src/types/registry.ts - Should import from @pr-pm/types\n\nBenefits:\n- Single source of truth for type definitions\n- Less duplication\n- Type changes only need to happen in one place\n\nRisks:\n- May need to handle slight differences between DB types and API types\n- Could affect downstream consumers","status":"closed","priority":2,"issue_type":"feature","created_at":"2025-12-08T13:39:39.882981+01:00","updated_at":"2025-12-08T13:51:22.189917+01:00","closed_at":"2025-12-08T13:51:22.189917+01:00"}
{"id":"app-kll","title":"Add --eager flag to CLI install command","description":"Add --eager and --lazy flags to prpm install command.\n\n## CLI Flags\n```\n--eager Force skill/agent to always activate\n--lazy Use default on-demand activation\n```\n\n## Precedence Logic\n1. --eager flag → eager\n2. --lazy flag → lazy\n3. File-level eager in prpm.json\n4. Package-level eager in prpm.json\n5. Default: lazy\n\n## Files\n- packages/cli/src/commands/install.ts\n\n## Depends On\n- app-ake (schema must be done first)","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-08T10:54:04.669559+01:00","updated_at":"2025-12-08T11:09:39.30892+01:00","closed_at":"2025-12-08T11:09:39.30892+01:00","dependencies":[{"issue_id":"app-kll","depends_on_id":"app-0sa","type":"blocks","created_at":"2025-12-08T10:54:12.879733+01:00","created_by":"daemon"}]}
{"id":"app-rc4","title":"Fix success message for eager installs","description":"Success message says 'The skill is available but not loaded into context by default' even for eager skills. This is misleading since eager skills ARE loaded by default. Update the message conditionally based on eager vs lazy install.","status":"closed","priority":3,"issue_type":"task","created_at":"2025-12-08T11:16:11.577976+01:00","updated_at":"2025-12-08T11:25:50.380825+01:00","closed_at":"2025-12-08T11:25:50.380825+01:00"}
{"id":"app-u71","title":"Document eager vs lazy loading in docs","description":"Document eager vs lazy loading in PRPM docs.\n\n## Topics to Cover\n- What eager vs lazy means\n- CLI usage: prpm install @org/skill --eager\n- prpm.json examples (package-level and file-level)\n- When to use eager (team standards, security rules, etc.)\n- Precedence order\n\n## Depends On\nAll implementation tasks (app-ake, app-kll, app-y2i)","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-08T10:54:04.814822+01:00","updated_at":"2025-12-08T11:17:00.451604+01:00","closed_at":"2025-12-08T11:17:00.451604+01:00","dependencies":[{"issue_id":"app-u71","depends_on_id":"app-0sa","type":"blocks","created_at":"2025-12-08T10:54:12.982819+01:00","created_by":"daemon"}]}
Expand Down
155 changes: 155 additions & 0 deletions .claude/commands/create-slash-command.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,155 @@
---
description: Create a new Claude Code slash command with best practices
argument-hint: <command-name> [description]
allowed-tools: Write, Read, Bash
model: sonnet
commandType: slash-command
---

# 🔨 Slash Command Generator

Create a new Claude Code slash command following best practices and latest features.

## Command to Create

**Name:** $1
**Description:** $2 (or $ARGUMENTS if multi-word)

## Requirements

1. **Location:** Create in `.claude/commands/$1.md`
2. **Structure:** Include proper frontmatter with:
- `description` - Clear, actionable description
- `allowed-tools` - Minimal required tools
- `argument-hint` - If command takes arguments
- `model` - Appropriate model selection
- `commandType: slash-command` - For PRPM compatibility

3. **Features to Consider:**
- **Arguments:** Use `$ARGUMENTS`, `$1`, `$2`, etc. for user input
- **File References:** Use `@filepath` to reference files
- **Bash Execution:** Use `!`command`` for inline bash (requires `Bash` in allowed-tools)
Copy link

@cubic-dev-ai cubic-dev-ai bot Dec 20, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2: Malformed markdown backticks - this will render incorrectly. To show backticks inside inline code, use double backticks with spaces: `` !`command` ``.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At .claude/commands/create-slash-command.md, line 31:

<comment>Malformed markdown backticks - this will render incorrectly. To show backticks inside inline code, use double backticks with spaces: ``` `` !`command` `` ```.</comment>

<file context>
@@ -0,0 +1,155 @@
+3. **Features to Consider:**
+   - **Arguments:** Use `$ARGUMENTS`, `$1`, `$2`, etc. for user input
+   - **File References:** Use `@filepath` to reference files
+   - **Bash Execution:** Use `!`command`` for inline bash (requires `Bash` in allowed-tools)
+   - **Namespacing:** Use subdirectories for organization (`.claude/commands/category/name.md`)
+
</file context>
Fix with Cubic

- **Namespacing:** Use subdirectories for organization (`.claude/commands/category/name.md`)

## Template Structure

```markdown
---
description: [Brief, actionable description]
allowed-tools: [Minimal list: Read, Write, Edit, Bash, etc.]
argument-hint: [Expected arguments format]
model: [sonnet|haiku|opus|inherit]
commandType: slash-command
---

# [Icon] [Title]

[Clear description of what this command does]

## Instructions

- [Specific, actionable steps]
- [What the command should analyze/generate/modify]

## Output Format

[Describe expected output format, with examples if helpful]
```

## Validation Checklist

Before creating, verify:
- [ ] Command name is clear and follows kebab-case
- [ ] Description is specific and actionable (not generic)
- [ ] Tool permissions are minimal and necessary
- [ ] Argument hints provided if arguments expected
- [ ] Model selection appropriate for task complexity
- [ ] Includes helpful examples or output format guidance
- [ ] Uses special features where appropriate (@, !, $ARGUMENTS)

## Examples

### Simple Command (no arguments)
```markdown
---
description: Review current file for security issues
allowed-tools: Read, Grep
---

# 🔒 Security Review

Review the current file for common security vulnerabilities:
- SQL injection
- XSS vulnerabilities
- Authentication issues
- Insecure dependencies
```

### With Arguments
```markdown
---
description: Generate test file for specified source file
argument-hint: <source-file-path>
allowed-tools: Read, Write
---

# 🧪 Test Generator

Generate comprehensive test file for @$1

Include:
- Unit tests for all exported functions
- Edge cases
- Error handling
- Mocking where needed
```

### With Bash Execution
```markdown
---
description: Show git status with context
allowed-tools: Bash(git *)
---

# 📊 Git Context

Current Status:
!`git status --short`

Recent Commits:
!`git log --oneline -5`

Current Branch:
!`git branch --show-current`
```

### Namespaced Command
File: `.claude/commands/db/migrate.md`
```markdown
---
description: Create new database migration
argument-hint: <migration-name>
allowed-tools: Write, Bash
---

# 🗄️ Database Migration

Create migration: $1

Timestamp: !`date +%Y%m%d%H%M%S`

Generate migration file with:
- Up migration
- Down migration
- Type-safe schema changes
```

## Action

Create the slash command file for "$1" with:
1. Proper frontmatter and structure
2. Clear instructions
3. Appropriate use of special features
4. Examples if command is complex

Save to `.claude/commands/$1.md` (or appropriate subdirectory if namespaced).
Loading
Loading