Appearance
Project Tools
create_project
Create a new project. Owner only.
Writes to: 02. Projects
Parameters:
| Param | Required | Description |
|---|---|---|
requesting_user_slack_id | ✅ | |
project_name | ✅ | Unique project name |
project_type | ✅ | "Retainer" | "T&M" | "Fixed Price" | "Pro Bono" | "Agile" | "Internal" — never defaulted |
client_name | ✅ | Client org — created automatically if new |
contract_value | Cond. | Required for Fixed Price |
hours_budget | Cond. | Required for Retainer (annual hours). Optional for others. |
billing_rate | Hourly rate billed to client | |
deadline | YYYY-MM-DD | |
notes | ||
project_category | Defaults to "client" |
Rules:
- Never assume a default project type — always ask
- For Agile parents: no contract_value or hours_budget on the parent itself
- After Agile parent creation, offer to set up Sprint 1
delete_project
Delete a project. All entries are reassigned to a fallback project. Owner only.
Parameters:
| Param | Required | Description |
|---|---|---|
requesting_user_slack_id | ✅ | |
project_name | ✅ | Project to delete |
reassign_to | ✅ | Project to move existing time entries to |
rename_project
Rename a project and update all references. Owner only.
Updates: 02. Projects, 01. Time Entries
Parameters:
| Param | Required | Description |
|---|---|---|
requesting_user_slack_id | ✅ | |
old_name | ✅ | |
new_name | ✅ |
list_projects
List all projects (filtered by role).
Reads from: 02. Projects, 04. Clients, 03. Users
Returns: name, client, type, pm_name, status, deadline (Owner/Manager only)
get_project_info
Full project details. Always call this first when checking project status — it tells you the type, which determines whether to follow up with get_project_status or get_retainer_status.
Reads from: 02. Projects, 04. Clients, 03. Users
Returns: name, client, type, budget_hours, status, pm_name, deadline (Owner/Manager), contract_value (Owner), billing_rate (Owner)
get_project_status
Task-level budget status for non-retainer projects.
Reads from: 01. Time Entries, 06. Project_Tasks, 02. Projects
Returns per task: hours_logged, budget_hours, % used, alert status, committed hours (logged + allocated)
Do not use for retainers — use get_retainer_status instead.
get_project_health
Burn rate health for retainer projects, with envelope-aware forecast.
Reads from: 01. Time Entries, 02. Projects, 07. Budgets
Returns: hours_logged, days_elapsed, pace_per_day, projected_eom_hours, allocated_remaining, forecast_with_allocations, variance, utilisation%, status
Status values: critical_overpace, warning_overpace, on_track, warning_underpace, critical_underpace
get_my_projects
Projects where the requesting user is the PM (or all projects if Owner).
Parameters: requesting_user_slack_id
set_project_budget
Set the project-level hours budget (Tier 1). Owner only.
Updates: 02. Projects col D
Parameters:
| Param | Required | Description |
|---|---|---|
requesting_user_slack_id | ✅ | |
project_name | ✅ | |
budget_hours | ✅ | Total hours cap |
set_project_deadline
Set the project delivery date. Owner only.
Updates: 02. Projects col I
Parameters:
| Param | Required | Description |
|---|---|---|
requesting_user_slack_id | ✅ | |
project_name | ✅ | |
deadline | ✅ | YYYY-MM-DD |
list_tasks
All task types with billability flag.
Reads from: 05. Tasks
create_task
Create a new global task type. Owner only.
Writes to: 05. Tasks
Parameters: requesting_user_slack_id, task_name, is_billable (true/false)
rename_task
Rename a task type globally. Owner only.
Updates: 05. Tasks
Parameters: requesting_user_slack_id, old_name, new_name
delete_task
Delete a task type. Owner only.
Parameters:
| Param | Required | Description |
|---|---|---|
requesting_user_slack_id | ✅ | |
task_name | ✅ | |
reassign_to | Task to reassign existing entries to |
get_project_tasks
All enabled tasks for a project, with budget and hours logged.
Reads from: 06. Project_Tasks, 05. Tasks, 01. Time Entries
Returns per task: task_name, is_billable, budget_hours, alert_threshold, hours_logged, % used, budget_summary
budget_summary includes:
tasks_without_budget: count of enabled tasks with no budget setover_project_budget: whether task totals exceed the project budgetunallocated_hours: project budget minus sum of task budgets
enable_task_for_project
Enable a task on a project with optional budget. Owner or project PM.
Writes to: 06. Project_Tasks
Parameters:
| Param | Required | Description |
|---|---|---|
requesting_user_slack_id | ✅ | |
project_name | ✅ | |
task_name | ✅ | |
budget_hours | Optional hours budget for this task | |
alert_threshold | Percent — defaults to 80 |
disable_task_for_project
Disable a task on a project (deletes the row from 06. Project_Tasks). Owner or project PM.
Parameters: requesting_user_slack_id, project_name, task_name
get_retainer_status
Monthly burn rate for a retainer project. See Retainers for interpretation guide.
Reads from: 01. Time Entries, 02. Projects, 07. Budgets
Parameters: requesting_user_slack_id, project_name
Returns: budget_hours, hours_logged, hours_remaining, days_elapsed, days_remaining, pace_per_day, projected_eom_hours, allocated_remaining, forecast_with_allocations, variance, utilisation_percent, exceed_date, unused_hours, unused_value, status
get_pm_retainer_summary
All retainer projects assigned to a PM, with burn status for each. Manager/Owner.
create_sprint
Create a new sprint under an Agile parent. Owner only.
Writes to: 02. Projects
Parameters:
| Param | Required | Description |
|---|---|---|
requesting_user_slack_id | ✅ | |
parent_project_name | ✅ | The Agile parent project |
contract_value | ✅ | Must be asked explicitly — never derived |
hours_budget | ✅ | Sprint hours estimate |
Sprint number is auto-incremented — do not specify manually.
get_agile_summary
All sprints under an Agile project with revenue recognition.
Reads from: 02. Projects, 01. Time Entries
Returns per sprint: sprint_name, sprint_number, status, contract_value (Owner), hours_budget, hours_logged, recognised_revenue (Owner)
update_sprint_status
Transition a sprint from planned to active. Owner only. No confirmation prompt needed.
Updates: 02. Projects col L
Parameters: requesting_user_slack_id, sprint_id, new_status ("active")