From projekt-skills
Estimate Projekt issues and report plan-vs-actual. Fills missing estimated_hours by asking the AI estimator (story_points only) and converting points→hours, with a median-of-siblings fallback when the AI daily quota is spent; then rolls up planned vs logged hours per assignee. Use when the user asks to estimate / estimación / estimaciones, story points / puntos de historia, capacity or plan-vs-actual, or to read/create roadmap milestones for a Projekt project. Soporta español: estimaciones, puntos, horas, planificado vs real, hoja de ruta. Requires the `projekt` skill's auth + context first.
How this skill is triggered — by the user, by Claude, or both
Slash command
/projekt-skills:projekt-estimateThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Fill missing issue estimates and report planned vs logged hours. One script, three
Fill missing issue estimates and report planned vs logged hours. One script, three
subcommands: estimate, rollup, roadmap. Dry-run by default; --apply to write.
SK="${CLAUDE_SKILL_DIR}/scripts" — use it for every command below.
projekt skill)bash "${CLAUDE_SKILL_DIR}/../projekt/scripts/auth_check.sh" # resolves token + org → .projekt-run/context.json
bash "${CLAUDE_SKILL_DIR}/../projekt/scripts/context_sync.sh" # caches projects + members
This script resolves project/member names → ids from .projekt-run/context.json and
never re-queries that. If context is missing it warns and project lookups fail fast.
# 1) ESTIMATE — fill issues missing estimated_hours (project = id | key | name)
python3 "$SK/estimate_rollup.py" estimate --project WEB # DRY-RUN: proposed table, 0 writes
python3 "$SK/estimate_rollup.py" estimate --project WEB --apply # PUT estimated_hours + flag AI values
python3 "$SK/estimate_rollup.py" estimate --project WEB --sprint <sid> --limit 20
python3 "$SK/estimate_rollup.py" estimate --project WEB --no-ai # skip AI; median-of-siblings only
python3 "$SK/estimate_rollup.py" estimate --project WEB --include-zero # also re-estimate 0h issues
# 2) ROLLUP — deterministic planned vs logged hours per assignee (no model tokens)
python3 "$SK/estimate_rollup.py" rollup --project WEB
python3 "$SK/estimate_rollup.py" rollup --project WEB --date-from 2026-06-01 --date-to 2026-06-30
# 3) ROADMAP (optional) — list items, or create one
python3 "$SK/estimate_rollup.py" roadmap --project WEB # list (read-only)
python3 "$SK/estimate_rollup.py" roadmap --project WEB --name "Q3 launch" --start-date 2026-07-01 --end-date 2026-09-30 --apply
estimate --project WEB prints a table — issue · points · hours · source · title — plus a count
of how many values are AI/heuristic-derived. It writes nothing. Re-run with --apply
to PUT /issues/{id} {estimated_hours} and tag each touched issue with the ai-estimated
label so a human can confirm. Re-running --apply dedupes via the ledger (writes 0).
POST /ai/suggest-estimation returns story_points ONLY — never hours. The script:
ai, throttled to ≤10/min, ~6s between calls).skills/projekt/assets/points_hours.json (Fibonacci defaults;
nearest-point match if a value isn't in the table). Calibrate that file per org.estimated_hours of sibling issues (same project/sprint/type; widens to
any sibling with an estimate, else default_hours).ai-estimated label + a ledger note.Source labels in the table: ai (points→hours), median (sibling median), default
(no siblings). Full rationale: skills/projekt/references/units.md.
rollup computes planned = Σ estimated_hours per assignee and logged from
GET /workload (preferred aggregate) or, if unavailable, by summing
GET /projects/{pid}/issues/{iid}/time-summary per issue. Delta and logged/plan % are
plain arithmetic — no model tokens are spent on the numbers. Time-summary is in minutes;
the script converts to hours.
estimated_hours is the #1 mistake.
Always convert via points_hours.json; the script does this and flags the result.default rows.Backlog/To Do. Estimating
doesn't move them, but a blank assignee shows as (unassigned) in both tables — assign via
the projekt-issues skill before relying on the per-assignee roll-up.skills/projekt/references/errors.md..projekt-run/<ts>.jsonl; interrupt and re-run.projekt-issues), log time (projekt-time), or
write docs (projekt-docs)./ai/suggest-estimation and the
shared points_hours.json; with --no-ai it uses only sibling medians./workload//capacity aggregates; it reads them.Shared references: skills/projekt/references/units.md (points→hours),
errors.md (422/429/503/403), endpoints.md (paths). Conversion table:
skills/projekt/assets/points_hours.json.
Guides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.
npx claudepluginhub 3xadesign/projekt-skills --plugin projekt-skills