89 lines
3.2 KiB
Markdown
89 lines
3.2 KiB
Markdown
---
|
|
name: project
|
|
aliases: [proj]
|
|
description: >
|
|
Project management — long-running things with notes, next-steps, and status.
|
|
Use when user mentions "project".
|
|
---
|
|
|
|
# Project
|
|
|
|
File-backed project store in `projects/`. Each project is one markdown file
|
|
with YAML frontmatter (`status`, `priority`, `created`, `slug`) and a free-form
|
|
body for notes and next-steps.
|
|
|
|
## Backend
|
|
|
|
`skills/project/scripts/project.py` — deterministic CRUD for frontmatter and
|
|
basic operations. Agent handles all body edits via `edit_file` / `apply_patch`.
|
|
|
|
## Commands
|
|
|
|
### `project add <název>` — create
|
|
|
|
1. Run: `uv run skills/project/scripts/project.py add "<název>" [--priority high|medium|low]`
|
|
2. Default priority is `medium`.
|
|
3. Echo: `Created project '<slug>' (priority: <priority>)`
|
|
|
|
### `project list` — list active
|
|
|
|
1. Run: `uv run skills/project/scripts/project.py list`
|
|
2. Echo JSON output. Format as:
|
|
```
|
|
Active projects:
|
|
- <slug> (priority: high) — <first line of body / project name>
|
|
```
|
|
3. If empty → "No active projects."
|
|
|
|
### `project show <slug>` — display
|
|
|
|
1. Run: `uv run skills/project/scripts/project.py show <slug>`
|
|
2. Echo the full markdown file.
|
|
|
|
### `project status <slug> <active|paused|done>` — change status
|
|
|
|
1. Run: `uv run skills/project/scripts/project.py status <slug> <status>`
|
|
2. Echo: `Project '<slug>' is now <status>.`
|
|
|
|
### `project next <slug> <text>` — set next step
|
|
|
|
1. Read the project file.
|
|
2. Use `edit_file` to replace the content under `## Další krok` with the new text.
|
|
3. If the section does not exist, add it before the end of the file.
|
|
4. Echo: `Next step for '<slug>' updated.`
|
|
|
|
### `project note <slug> <text>` — add a note
|
|
|
|
1. Read the project file.
|
|
2. Use `edit_file` to append a bullet under `## Poznámky`:
|
|
`- <today>: <text>`
|
|
3. If `## Poznámky` does not exist, add it after the first heading.
|
|
4. Echo: `Note added to '<slug>'.`
|
|
|
|
### `project switch <slug>` — session context
|
|
|
|
1. Run `my(action="set", key="project_context", value="<slug>")`.
|
|
2. Echo: `Switched to project '<slug>'. Next project commands without slug will use this context.`
|
|
3. If a command is missing a slug and `project_context` is set, use it automatically.
|
|
|
|
## Rules
|
|
|
|
- **Slug** = kebab-case from first 4 words of the name. Used as filename (`<slug>.md`).
|
|
- **Frontmatter** is read-only for the agent — never edit it directly in the file.
|
|
Use `project.py status` to change status.
|
|
- **Body edits** (notes, next-step, structure changes) are always done by the agent
|
|
via `edit_file` / `apply_patch`.
|
|
- **No database** — pure markdown files. Git-friendly, one commit per change.
|
|
- **Session context** (`project switch`) lives only in `my` scratchpad and is lost
|
|
on restart. Re-run `project switch` after restart if needed.
|
|
- **Priority** = `high` | `medium` | `low`. `list` sorts by priority (high first).
|
|
- **Status** = `active` | `paused` | `done`. `list` shows only `active`.
|
|
|
|
## Edge cases
|
|
|
|
- `project add` with existing slug → error, do not overwrite.
|
|
- `project show` / `project status` / `project next` / `project note` with
|
|
missing slug → "Project '<slug>' not found."
|
|
- Missing `## Poznámky` or `## Další krok` → agent creates the section.
|
|
- Empty `projects/` → `list` returns empty array.
|