/track-estimate - Manual Estimate Capture
SkillMonitoring & opsManually log a time estimate.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the /track-estimate - Manual Estimate Capture skill
What this skill tells your AI
The instructions your AI receives, as published by indigoai-us/hq-core in .claude/skills/track-estimate/SKILL.md and read by ahel’s review.
Append a time estimate to workspace/estimate-log/log.jsonl. Use this when:
- The auto-capture hook missed something (vague phrasing, deeply nested in a code block, etc.)
- You want to attach a structured
taskdescription to a freshly-captured estimate - The estimate is being made conversationally before any assistant message has logged it
Input: $ARGUMENTS
The argument should be a free-form phrase containing both a task description and a duration. Examples:
"port resolve-conflicts skill to hq-core-staging" "1-2h""npm release of hq-cloud@5.7.1, including verification" "30m""HQ Desktop App Tauri build + sign + notarize" "10-30m"
Steps
-
Parse arguments
- Extract the duration token (
30m,1-2h,2 days,~5min, etc.) - Treat everything else as the task description
- Fall back to interactive prompts if either is missing
- Extract the duration token (
-
Normalize duration Use the same logic as
parse-estimates.pl:m/min/minutes→ minutes (1×)h/hr/hours→ minutes (60×)d/day/days→ minutes (480× — 8-hour workday)s/sec→ minutes (1/60×)- Ranges like
1-2h:min_minutes=60, max_minutes=120, expected_minutes=90
-
Categorize Run the same keyword classifier from
parse-estimates.plagainst the task description. If unclear, ask the user to confirm or pick from:release,pr,build,deploy,tauri,infra,script,refactor,docs,debug,cli,unknown. -
Generate ID
est_<sha1(session_id + iso_ts + task)[0..10]>— same format as auto-capture. -
Append entry to log
cat >> workspace/estimate-log/log.jsonl <<EOF {"id":"est_...","timestamp":"...","session_id":"manual","message_uuid":"manual-<short>","offset":0,"raw":"<duration token>","kind":"estimate","min_minutes":...,"max_minutes":...,"expected_minutes":...,"category":"...","surrounding":"<task>","status":"pending","task":"<task>"} EOFField order should match canonical (alphabetical) so it sorts identically to auto-capture entries.
-
Report
Tracked: <task> ID: est_... Estimate: <human-readable> (<expected_minutes> min, range <min>-<max>) Category: <category> When done, run: /finish-estimate <id> <actual-duration>
Notes
- This command is the escape hatch for the auto-capture hook. Most estimates should land via the Stop hook automatically; this is for the cases the hook misses.
- The
session_idis set to"manual"to distinguish manual entries from auto-captured ones in/calibration-report. - If the user provides only a duration with no task, prompt for the task — never log an estimate without context.
See also
/finish-estimate— close it with the actual time/calibration-report— see estimate accuracy
Signals
- GitHub stars
- 84
- Forks
- 15
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
track-estimate- Source
- github.com/indigoai-us/hq-core