Project Tracker
Use this skill to make project execution operationally complete across two systems:
- ticket tracking (Jira, ClickUp, or both)
- time tracking (Everhour, Jira worklog, ClickUp tracking, other providers, or internal timer fallback)
The goal is to remove manual workflow drift. When this skill is active, the agent must not start implementation work before ticket/time context is resolved.
When to use
Activate this skill when the user:
- starts a prompt with
/ProjectTracker
- asks to work under a ticket, sprint, board, epic, story, or subtask
- asks to keep parent and child ticket systems synchronized
- asks to track, start, stop, or log time with project/ticket linkage
- gives ticket-like IDs such as
AIA-123 or SL-7007
Non-negotiable rules
- Do not begin implementation before project mapping exists in
~/.agent-project-time-map.yaml.
- Do not guess tracker ownership when both Jira and ClickUp are configured.
- Do not create child tickets unless the mapping indicates replication is enabled.
- Do not start any tracker timer unless the selected system has
useTimeTracking: true or equivalent provider-level enablement in the project map.
- Do not start a timer without first binding it to a concrete task/ticket.
- Do not close execution without transitioning ticket status and stopping/logging time.
- If required MCP connectors are missing, first ask the user for permission to install them, then install/configure them when permission is granted.
- Do not ask the user for details that are already unambiguous from existing mapping plus provided ticket context.
- Do not require user intervention for routine ticket/time actions when the agent can execute them directly.
Required setup command
Run this setup script when mapping does not exist for the current project:
bash /mnt/skills/user/project-tracker/scripts/setup-project-map.sh
Local repo path while authoring/testing this skill:
bash .agents/skills/project-tracker/scripts/setup-project-map.sh
Supported systems
Primary built-in support:
- Jira via Atlassian Rovo MCP
- ClickUp via ClickUp MCP
- Everhour via direct/vendor/self-hosted MCP if available, or API-backed configuration
Do not default to MCP bridges that require third-party aggregator account signup. Prefer direct Everhour MCP providers from the MCP marketplace/registry or self-hosted Everhour MCP servers, then Everhour API, then internal fallback.
This skill must also support additional trackers/time systems by discovery:
- detect configured providers from
~/.agent-project-time-map.yaml
- discover available MCP/API support for each configured provider
- map newly discovered providers into routing rules instead of assuming only Jira/ClickUp/Everhour
Workflow
Follow this exact sequence.
1. Resolve project and mapping
- Determine canonical project identity using, in order:
- current git root path
- git origin
- configured
PROJECT_NAME key in ~/.agent-project-time-map.yaml
- Load project entry from the map.
- If missing, run setup script and collect mapping details.
- Confirm active trackers/time providers before continuing.
- Build a capability matrix for configured providers:
- provider name
- MCP available now
- MCP source class (
direct, vendor, self-hosted, or third-party-bridge)
- API fallback available
- time tracking enabled flag(s)
- If mapping exists and matches current project, do not re-run setup questions.
2. Resolve task intent and ticket selection
- Parse
/ProjectTracker invocation payload.
- If a ticket ID is present, match it against configured patterns:
- Jira default pattern:
^[A-Z][A-Z0-9]+-[0-9]+$
- ClickUp custom ID pattern from mapping for ClickUp custom-id matching (for example
^SL-[0-9]+$)
- If no ticket ID is present, ask the user what work item to use or create.
- If both trackers can match, use
parentTracker from mapping and ask before override.
- If mapping exists and ticket identity is clear, do not ask additional clarifying questions.
3. Prepare or create work items
- Locate parent ticket/task in the configured tracker.
- Decide whether to reuse the parent ticket or create subtasks:
- reuse parent for self-contained bugfixes
- create subtasks for multi-step implementation
- If replication is configured, create/locate child ticket and store a durable cross-reference linkage:
- Jira: issue link, remote link, or configured custom field
- ClickUp: custom field, task link, or description marker
- Assign current user and move task status to in-progress state.
- Ensure current sprint/list placement is correct when the system supports it.
4. Start time tracking
Timer gating policy is mandatory:
- if
ticketTracking.<provider>.useTimeTracking: false, do not attempt that provider's timer/worklog start
- if provider-level time tracking is disabled and no enabled fallback provider exists, track elapsed time internally only
- always record and report why timer start was skipped when disabled by configuration
- Select time provider from mapping.
- Filter providers to those enabled by configuration:
- dedicated
timeTracking.*.enabled providers
- ticket systems with
useTimeTracking: true
- Prefer provider-native tracking in this order:
- Everhour MCP or Everhour API
- configured dedicated time-tracking MCP/API provider
- Jira worklog/timer workflow when
ticketTracking.jira.useTimeTracking: true
- ClickUp timer when
ticketTracking.clickup.useTimeTracking: true
- If no live timer exists for the selected enabled provider, start one.
- If no enabled provider supports live timers, record internal
started_at timestamp and continue.
5. Execute user-requested implementation work
- Perform the requested engineering task.
- Keep ticket states and replication links in sync if work scope changes.
- If additional subtasks emerge, create them under the active parent and move to in progress only when started.
- Keep not-started subtasks in todo/backlog state.
6. Close operational workflow
This phase is the workflow closeout and must keep parent/child tracker states synchronized.
- Transition tickets from in-progress to target state (
In Review, Done, Complete, etc.) based on project workflow.
- Stop timer or add explicit time log entry with ticket/task association.
- Add final work notes/comments linking code changes and validation evidence.
- Report final operational state:
- parent ticket
- child ticket(s)
- status transition results
- time logged or fallback timing used
MCP and API routing
Use references/mcp-and-api-mapping.md for provider-specific tool routing.
If a required connector is not available:
- tell the user exactly which connector is missing
- ask for permission to install/configure it now
- if permission granted, install/configure it and verify tool availability
- if installation fails or is declined, use approved fallback and report degraded automation scope explicitly
Automation posture
Default posture is autonomous execution for tracker/time actions.
- Automatically execute create/update/transition/log-time operations when scope and target are clear.
- Do not ask for confirmation on routine tracker/time operations.
- Ask the user only when one of the following is true:
- required connector is missing and installation permission is needed
- target project/ticket cannot be resolved confidently
- workflow transition is unknown or invalid in the current board/list
- action fails and safe retry strategy is unclear
UI prompt minimization policy
The skill should avoid avoidable end-user approval interruptions for tracker/time actions.
- Prefer pre-configured, non-interactive auth paths where possible.
- Prefer deterministic tool calls over exploratory flows that trigger repeated approval UX.
- Cache/reuse resolved project identifiers (
cloudId, workspace/list IDs, provider IDs) from mapping to reduce interactive churn.
- If a platform-controlled approval widget still appears and cannot be suppressed by available configuration, continue with the least-interruptive path and report the blocker once.
Map schema
Map format is defined in references/project-map-schema.md.
Final output contract
When this skill is used, report:
- mapped project identity used (
name, path, git)
- selected parent tracker and ticket
- whether subtasks/replicas were created
- ticket transitions performed
- explicit timer gating decisions (
enabled or skipped) per provider checked
- time tracking provider used and duration logged
- any fallback taken due to missing MCP/API access
References
references/project-map-schema.md
references/mcp-and-api-mapping.md
evals/evals.json
scripts/setup-project-map.sh
1---2name: project-tracker3description: Coordinate ticket tracking and time tracking before, during, and after implementation work. Use whenever a prompt starts with `/ProjectTracker`, includes Jira keys like `AIA-123`, includes ClickUp custom IDs like `SL-7007`, or asks to sync work across parent and child boards while logging time.4license: Apache-2.05---67# Project Tracker89Use this skill to make project execution operationally complete across two systems:1011- ticket tracking (Jira, ClickUp, or both)12- time tracking (Everhour, Jira worklog, ClickUp tracking, other providers, or internal timer fallback)1314The goal is to remove manual workflow drift. When this skill is active, the agent must not start implementation work before ticket/time context is resolved.1516## When to use1718Activate this skill when the user:1920- starts a prompt with `/ProjectTracker`21- asks to work under a ticket, sprint, board, epic, story, or subtask22- asks to keep parent and child ticket systems synchronized23- asks to track, start, stop, or log time with project/ticket linkage24- gives ticket-like IDs such as `AIA-123` or `SL-7007`2526## Non-negotiable rules2728- Do not begin implementation before project mapping exists in `~/.agent-project-time-map.yaml`.29- Do not guess tracker ownership when both Jira and ClickUp are configured.30- Do not create child tickets unless the mapping indicates replication is enabled.31- Do not start any tracker timer unless the selected system has `useTimeTracking: true` or equivalent provider-level enablement in the project map.32- Do not start a timer without first binding it to a concrete task/ticket.33- Do not close execution without transitioning ticket status and stopping/logging time.34- If required MCP connectors are missing, first ask the user for permission to install them, then install/configure them when permission is granted.35- Do not ask the user for details that are already unambiguous from existing mapping plus provided ticket context.36- Do not require user intervention for routine ticket/time actions when the agent can execute them directly.3738## Required setup command3940Run this setup script when mapping does not exist for the current project:4142```bash43bash /mnt/skills/user/project-tracker/scripts/setup-project-map.sh44```4546Local repo path while authoring/testing this skill:4748```bash49bash .agents/skills/project-tracker/scripts/setup-project-map.sh50```5152## Supported systems5354Primary built-in support:5556- Jira via Atlassian Rovo MCP57- ClickUp via ClickUp MCP58- Everhour via direct/vendor/self-hosted MCP if available, or API-backed configuration5960Do not default to MCP bridges that require third-party aggregator account signup. Prefer direct Everhour MCP providers from the MCP marketplace/registry or self-hosted Everhour MCP servers, then Everhour API, then internal fallback.6162This skill must also support additional trackers/time systems by discovery:6364- detect configured providers from `~/.agent-project-time-map.yaml`65- discover available MCP/API support for each configured provider66- map newly discovered providers into routing rules instead of assuming only Jira/ClickUp/Everhour6768## Workflow6970Follow this exact sequence.7172### 1. Resolve project and mapping73741. Determine canonical project identity using, in order:75 - current git root path76 - git origin77 - configured `PROJECT_NAME` key in `~/.agent-project-time-map.yaml`782. Load project entry from the map.793. If missing, run setup script and collect mapping details.804. Confirm active trackers/time providers before continuing.815. Build a capability matrix for configured providers:82 - provider name83 - MCP available now84 - MCP source class (`direct`, `vendor`, `self-hosted`, or `third-party-bridge`)85 - API fallback available86 - time tracking enabled flag(s)876. If mapping exists and matches current project, do not re-run setup questions.8889### 2. Resolve task intent and ticket selection90911. Parse `/ProjectTracker` invocation payload.922. If a ticket ID is present, match it against configured patterns:93 - Jira default pattern: `^[A-Z][A-Z0-9]+-[0-9]+$`94 - ClickUp custom ID pattern from mapping for ClickUp custom-id matching (for example `^SL-[0-9]+$`)953. If no ticket ID is present, ask the user what work item to use or create.964. If both trackers can match, use `parentTracker` from mapping and ask before override.975. If mapping exists and ticket identity is clear, do not ask additional clarifying questions.9899### 3. Prepare or create work items1001011. Locate parent ticket/task in the configured tracker.1022. Decide whether to reuse the parent ticket or create subtasks:103 - reuse parent for self-contained bugfixes104 - create subtasks for multi-step implementation1053. If replication is configured, create/locate child ticket and store a durable cross-reference linkage:106 - Jira: issue link, remote link, or configured custom field107 - ClickUp: custom field, task link, or description marker1084. Assign current user and move task status to in-progress state.1095. Ensure current sprint/list placement is correct when the system supports it.110111### 4. Start time tracking112113Timer gating policy is mandatory:114115- if `ticketTracking.<provider>.useTimeTracking: false`, do not attempt that provider's timer/worklog start116- if provider-level time tracking is disabled and no enabled fallback provider exists, track elapsed time internally only117- always record and report why timer start was skipped when disabled by configuration1181191. Select time provider from mapping.1202. Filter providers to those enabled by configuration:121 - dedicated `timeTracking.*.enabled` providers122 - ticket systems with `useTimeTracking: true`1233. Prefer provider-native tracking in this order:124 - Everhour MCP or Everhour API125 - configured dedicated time-tracking MCP/API provider126 - Jira worklog/timer workflow when `ticketTracking.jira.useTimeTracking: true`127 - ClickUp timer when `ticketTracking.clickup.useTimeTracking: true`1284. If no live timer exists for the selected enabled provider, start one.1295. If no enabled provider supports live timers, record internal `started_at` timestamp and continue.130131### 5. Execute user-requested implementation work1321331. Perform the requested engineering task.1342. Keep ticket states and replication links in sync if work scope changes.1353. If additional subtasks emerge, create them under the active parent and move to in progress only when started.1364. Keep not-started subtasks in todo/backlog state.137138### 6. Close operational workflow139140This phase is the workflow closeout and must keep parent/child tracker states synchronized.1411421. Transition tickets from in-progress to target state (`In Review`, `Done`, `Complete`, etc.) based on project workflow.1432. Stop timer or add explicit time log entry with ticket/task association.1443. Add final work notes/comments linking code changes and validation evidence.1454. Report final operational state:146 - parent ticket147 - child ticket(s)148 - status transition results149 - time logged or fallback timing used150151## MCP and API routing152153Use [references/mcp-and-api-mapping.md](references/mcp-and-api-mapping.md) for provider-specific tool routing.154155If a required connector is not available:1561571. tell the user exactly which connector is missing1582. ask for permission to install/configure it now1593. if permission granted, install/configure it and verify tool availability1604. if installation fails or is declined, use approved fallback and report degraded automation scope explicitly161162## Automation posture163164Default posture is autonomous execution for tracker/time actions.165166- Automatically execute create/update/transition/log-time operations when scope and target are clear.167- Do not ask for confirmation on routine tracker/time operations.168- Ask the user only when one of the following is true:169 - required connector is missing and installation permission is needed170 - target project/ticket cannot be resolved confidently171 - workflow transition is unknown or invalid in the current board/list172 - action fails and safe retry strategy is unclear173174## UI prompt minimization policy175176The skill should avoid avoidable end-user approval interruptions for tracker/time actions.177178- Prefer pre-configured, non-interactive auth paths where possible.179- Prefer deterministic tool calls over exploratory flows that trigger repeated approval UX.180- Cache/reuse resolved project identifiers (`cloudId`, workspace/list IDs, provider IDs) from mapping to reduce interactive churn.181- If a platform-controlled approval widget still appears and cannot be suppressed by available configuration, continue with the least-interruptive path and report the blocker once.182183## Map schema184185Map format is defined in [references/project-map-schema.md](references/project-map-schema.md).186187## Final output contract188189When this skill is used, report:190191- mapped project identity used (`name`, `path`, `git`)192- selected parent tracker and ticket193- whether subtasks/replicas were created194- ticket transitions performed195- explicit timer gating decisions (`enabled` or `skipped`) per provider checked196- time tracking provider used and duration logged197- any fallback taken due to missing MCP/API access198199## References200201- `references/project-map-schema.md`202- `references/mcp-and-api-mapping.md`203- `evals/evals.json`204- `scripts/setup-project-map.sh`