Integrates with TimeDoctor API to pull employee time tracking data, worklogs, statistics, and productivity metrics using simple Python scripts
---
name: timedoctor
description: Integrates with TimeDoctor API to pull employee time tracking data, worklogs, statistics, and productivity metrics using simple Python scripts
version: 1.0.0
author: JehadurRE
metadata:
clawdbot:
emoji: "⏱️"
requires:
bins: ["python3"]
install:
pip: ["httpx>=0.27.0"]
homepage: "https://github.com/JehadurRE/timedoctor-openclaw-skill"
keywords: ["timetracking", "productivity", "employee-monitoring", "timedoctor", "workforce-analytics"]
---
# TimeDoctor Skill
Interact with TimeDoctor API for employee time tracking, activity logs, productivity statistics, and workforce analytics using simple Python CLI commands.
## What This Skill Does
Provides direct access to TimeDoctor's time tracking API through a Python CLI tool. Execute commands, get JSON data, present formatted results to users.
## Setup Instructions
### For Users: Getting TimeDoctor Credentials
**Option 1: Easy Setup (Recommended)**
Just provide your TimeDoctor email and password:
```bash
python3 timedoctor.py login --email "your-email@company.com" --password "your-password"
```
This returns a JWT token valid for 6 months. Copy the token and set it:
```bash
export TIMEDOCTOR_TOKEN="your-jwt-token-from-login-response"
```
**Option 2: Manual Token Setup**
If you already have a token or prefer manual setup:
```bash
# Required
export TIMEDOCTOR_TOKEN="your-jwt-token"
# Optional (can be discovered via get_authorization)
export TIMEDOCTOR_COMPANY_ID="your-company-id"
```
**For Multiple Accounts**: Users can switch accounts by changing the token:
```bash
# Account 1
export TIMEDOCTOR_TOKEN="token-for-account-1"
export TIMEDOCTOR_COMPANY_ID="company-id-1"
# Account 2
export TIMEDOCTOR_TOKEN="token-for-account-2"
export TIMEDOCTOR_COMPANY_ID="company-id-2"
```
**Quick Setup Workflow**:
```bash
# 1. Login to get token
python3 timedoctor.py login --email "user@company.com" --password "password"
# 2. Copy token from response and set it
export TIMEDOCTOR_TOKEN="1jxExVs9WGsWccrq2ysMKMZVZlTVyTZc15tlgcWF_Qns"
# 3. Discover available companies
python3 timedoctor.py get_authorization
# 4. Set company ID (optional)
export TIMEDOCTOR_COMPANY_ID="aFtR8crWxHTeLzIm"
# 5. Start using commands
python3 timedoctor.py get_today_worklog --company-id $TIMEDOCTOR_COMPANY_ID
```
## How to Use This Skill
### Core Command Pattern
All commands follow this pattern:
```bash
python3 timedoctor.py COMMAND [--company-id ID] [OPTIONS]
```
The script is located in the skill directory and returns JSON output.
### Key Commands
**Login** (Get JWT Token):
```bash
python3 timedoctor.py login --email "user@company.com" --password "password"
```
Returns: JWT token valid for 6 months
**Discover Available Companies**:
```bash
python3 timedoctor.py get_authorization
```
Returns: User info and list of accessible companies with IDs
**Today's Activity**:
```bash
python3 timedoctor.py get_today_worklog --company-id COMPANY_ID
```
**This Week's Stats**:
```bash
python3 timedoctor.py get_this_week_stats --company-id COMPANY_ID
```
**This Month's Stats**:
```bash
python3 timedoctor.py get_this_month_stats --company-id COMPANY_ID
```
**Custom Date Range**:
```bash
python3 timedoctor.py get_worklog \
--company-id COMPANY_ID \
--from-date "2024-03-01T00:00:00Z" \
--to-date "2024-03-31T00:00:00Z"
```
**List Users**:
```bash
python3 timedoctor.py get_users --company-id COMPANY_ID
```
**List Projects**:
```bash
python3 timedoctor.py get_projects --company-id COMPANY_ID
```
**Filter by Users**:
```bash
python3 timedoctor.py get_today_worklog --company-id COMPANY_ID --user-ids "123,456,789"
```
## Understanding TimeDoctor Account Structure
### Account Hierarchy
```
TimeDoctor User Account (requires TIMEDOCTOR_TOKEN)
└── Company A (ID: 12345)
├── User 1
├── User 2
└── Projects...
└── Company B (ID: 67890)
├── User 3
├── User 4
└── Projects...
└── Company C (ID: 11111)
└── Users...
```
### Key Concepts
1. **One Token = One User Account**
- Each TIMEDOCTOR_TOKEN represents one TimeDoctor user login
- Example: john@acme.com has one token
2. **One Account Can Access Multiple Companies**
- A user can be part of multiple companies
- Same token works for all companies they have access to
- Switch companies using different `--company-id`
3. **Different User Accounts Need Different Tokens**
- john@acme.com has token A
- jane@beta.com has token B
- To switch from John to Jane, change TIMEDOCTOR_TOKEN
### Example Scenarios
**Scenario 1: User with Multiple Companies**
```
User: "Show my companies"
Agent: Runs get_authorization
Response shows:
- Acme Corp (12345)
- Beta Startup (67890)
- Gamma LLC (11111)
Agent: "You have access to 3 companies. Which one?"
User: "Acme Corp"
Agent: Uses --company-id 12345 for all subsequent requests
```
**Scenario 2: Switching Companies**
```
User: "Now show me Beta Startup's data"
Agent: Remembers Beta Startup = 67890 from earlier
Agent: Uses --company-id 67890
No token change needed!
```
**Scenario 3: Switching User Accounts**
```
User: "I want to use my other TimeDoctor account"
Agent: "You need to update your token. Run:
export TIMEDOCTOR_TOKEN='your-other-token'"
User: Updates token
Agent: Runs get_authorization with new token
Agent: Shows new list of companies for that account
```
## Agent Instructions
### When User Asks About TimeDoctor Data
Follow this workflow:
1. **Check if User Has Token**
- If `TIMEDOCTOR_TOKEN` is not set, help them login:
```
"To get started, I need your TimeDoctor credentials.
I'll run: python3 timedoctor.py login --email YOUR_EMAIL --password YOUR_PASSWORD
What's your TimeDoctor email and password?"
```
- After getting credentials, run login command
- Extract token from response
- Tell user to set: `export TIMEDOCTOR_TOKEN="extracted-token"`
- Explain token is valid for 6 months
2. **Discover and Present Available Companies**
- ALWAYS run `get_authorization` first if company_id is not known
- Parse the response to extract all accessible companies
- Present to user in a clear format:
```
You have access to these TimeDoctor companies:
1. Company A (ID: 12345)
2. Company B (ID: 67890)
3. Company C (ID: 11111)
Which company would you like to use?
```
- Wait for user to select
- Remember the selected company_id for subsequent requests in this session
3. **Execute Appropriate Command**
- Match user's request to the right command
- Use convenience commands when possible (get_today_worklog, get_this_week_stats, etc.)
- Always include `--company-id` parameter with the selected company
4. **Handle Multiple Accounts**
- One TIMEDOCTOR_TOKEN = One user account
- One user account can have access to multiple companies
- To switch to a completely different TimeDoctor user account, user must update TIMEDOCTOR_TOKEN
- To switch between companies under same account, just use different --company-id
5. **Parse and Format Output**
- Check for `{"error": "..."}` first
- Convert JSON to readable format (tables, lists, summaries)
- Highlight key metrics (total hours, productive time, etc.)
- Format durations as "X hours Y minutes"
6. **Error Recovery**
- `"TIMEDOCTOR_TOKEN environment variable not set"` → Help user login with email/password
- `"company_id required"` → Run get_authorization to discover companies
- `"401 Unauthorized"` → Token expired, user needs to login again (6-month validity)
### Date Format Rules
ALWAYS use ISO 8601 format: `YYYY-MM-DDTHH:MM:SSZ`
**Examples**:
- Start of day: `2024-03-22T00:00:00Z`
- End of day: `2024-03-23T00:00:00Z`
- For single day: from `2024-03-22T00:00:00Z` to `2024-03-23T00:00:00Z`
**Calculating Dates**:
- Today: Use `get_today_worklog` (automatic)
- This week: Use `get_this_week_stats` (automatic, Monday to today)
- This month: Use `get_this_month_stats` (automatic, 1st to today)
- Custom: Calculate dates and use `get_worklog` or `get_stats_total`
### Response Formatting Guidelines
**For Worklogs**:
- Show as table: User | Start Time | End Time | Duration | Activity
- Group by user or by date depending on context
- Summarize total hours at bottom
**For Statistics**:
- Show key metrics: Total Time, Productive Time, Unproductive Time, Idle Time
- Calculate percentages (e.g., "75% productive")
- Highlight outliers or unusual patterns
**For Lists** (users, projects, tasks):
- Show as numbered or bulleted list
- Include relevant IDs for follow-up queries
- Limit to top 10-20 unless user asks for more
## Common Workflows
### Workflow 0: First Time Setup - Login and Get Token
```
User: "I want to use TimeDoctor"
Steps:
1. Check if TIMEDOCTOR_TOKEN is set
2. If not, ask for credentials:
"To get started, I need your TimeDoctor login credentials.
What's your TimeDoctor email and password?"
3. User provides: "email@company.com" and "password123"
4. Run: python3 timedoctor.py login --email "email@company.com" --password "password123"
5. Parse response and extract token
6. Tell user:
"Great! I got your token. It's valid for 6 months (until September 2026).
Please set it in your environment:
export TIMEDOCTOR_TOKEN='1jxExVs9WGsWccrq2ysMKMZVZlTVyTZc15tlgcWF_Qns'
Once set, I can pull your TimeDoctor data."
7. After user confirms, proceed to Workflow 1 to discover companies
```
### Workflow 1: First Time Setup - Discover Companies
```
User: "Show me today's activity"
Steps:
1. Check if you know the company_id for this session
2. If not, run: python3 timedoctor.py get_authorization
3. Parse response and present companies:
"I found these TimeDoctor companies you have access to:
1. Acme Corp (ID: 12345) - 45 users
2. Beta Inc (ID: 67890) - 12 users
3. Gamma LLC (ID: 11111) - 8 users
Which company would you like to check?"
4. User responds: "Acme Corp" or "1" or "12345"
5. Remember company_id = 12345 for this session
6. Run: python3 timedoctor.py get_today_worklog --company-id 12345
7. Parse JSON and create table:
| User | Hours Worked | Productive % | Projects |
8. Add summary: "Total: X hours across Y users"
```
### Workflow 2: Daily Team Report (Company Already Known)
```
User: "Show today's activity for the team"
Steps:
1. Use remembered company_id from session
2. Run: python3 timedoctor.py get_today_worklog --company-id COMPANY_ID
3. Parse JSON and create table:
| User | Hours Worked | Productive % | Projects |
4. Add summary: "Total: X hours across Y users"
```
### Workflow 3: Switching Between Companies
```
User: "Show me stats for Beta Inc instead"
Steps:
1. Run: python3 timedoctor.py get_authorization
2. Find "Beta Inc" in the companies list
3. Extract company_id (67890)
4. Update session to remember new company_id
5. Confirm: "Switched to Beta Inc (ID: 67890)"
6. Run requested command with new company_id
```
### Workflow 4: Individual User Report
```
User: "Show today's activity for the team"
Steps:
1. Check if TIMEDOCTOR_COMPANY_ID is set in environment
2. If not, run: python3 timedoctor.py get_authorization
3. Extract company_id from response
4. Run: python3 timedoctor.py get_today_worklog --company-id COMPANY_ID
5. Parse JSON and create table:
| User | Hours Worked | Productive % | Projects |
6. Add summary: "Total: X hours across Y users"
```
### Workflow 2: Individual User Report
```
User: "How much did John work this week?"
Steps:
1. Run: python3 timedoctor.py get_users --company-id COMPANY_ID
2. Find John's user_id in response
3. Run: python3 timedoctor.py get_this_week_stats --company-id COMPANY_ID --user-ids "JOHN_ID"
4. Parse and present:
- Total hours: X
- Productive time: Y (Z%)
- Top projects: ...
- Daily breakdown: Mon: X hrs, Tue: Y hrs, ...
```
### Workflow 5: Project Time Analysis
```
User: "How much time was spent on Project Alpha last month?"
Steps:
1. Run: python3 timedoctor.py get_projects --company-id COMPANY_ID
2. Find "Project Alpha" and get its project_id
3. Calculate last month's date range (1st to last day)
4. Run: python3 timedoctor.py get_stats_total \
--company-id COMPANY_ID \
--from-date "YYYY-MM-01T00:00:00Z" \
--to-date "YYYY-MM-31T23:59:59Z" \
--project-id PROJECT_ID
5. Present breakdown by user and total
```
### Workflow 6: Switching TimeDoctor User Accounts
```
User: "I want to use my other TimeDoctor account"
Steps:
1. Explain: "To switch to a different TimeDoctor user account, you need to update your token."
2. Provide instructions:
"Please run these commands with your other account's token:
export TIMEDOCTOR_TOKEN="your-other-account-token"
Then let me know when you're ready."
3. After they confirm, run: python3 timedoctor.py get_authorization
4. Present available companies for the new account:
"Now connected as [User Name]. You have access to:
1. Company X (ID: 99999)
2. Company Y (ID: 88888)
Which company would you like to use?"
5. Remember the selected company_id for this session
```
## Session Management
### Remember Company Selection
Once a user selects a company, remember it for the entire conversation session:
```
Session State:
- current_company_id: 12345
- current_company_name: "Acme Corp"
- current_token_user: "john@acme.com"
```
### When to Re-prompt for Company
Ask user to select company again when:
- First request in a new session
- User explicitly asks to switch companies
- User says "use a different company"
- Error indicates wrong company access
### Don't Re-prompt When
- User makes multiple requests in same session
- Company is already known and working
- User hasn't indicated they want to change
## Presenting Company Lists
### Format 1: Numbered List (Preferred)
```
You have access to these TimeDoctor companies:
1. Acme Corporation (ID: 12345)
- 45 active users
- Role: Admin
2. Beta Startup (ID: 67890)
- 12 active users
- Role: Manager
3. Gamma Consulting (ID: 11111)
- 8 active users
- Role: User
Which company would you like to use? (Enter number, name, or ID)
```
### Format 2: Simple List
```
Available companies:
• Acme Corporation (12345)
• Beta Startup (67890)
• Gamma Consulting (11111)
Which one?
```
### Format 3: Single Company
```
You have access to: Acme Corporation (ID: 12345)
I'll use this company for your requests.
```
## Handling User Selection
Accept any of these formats:
- Number: "1" or "2"
- Name: "Acme Corporation" or "Acme" or "acme"
- ID: "12345"
Match flexibly:
- Case-insensitive name matching
- Partial name matching (if unambiguous)
- Direct ID matching
## Available Commands Reference
### Authentication
- `login` - Login with email/password to get JWT token (valid 6 months)
- `get_authorization` - Get user info and available companies
- `get_companies` - List all accessible companies
- `get_company` - Get specific company details
### Users
- `get_users` - List users in company
- `get_user` - Get specific user details
- `get_managed_users` - Get users managed by a manager
### Activity & Worklogs
- `get_activity_worklog` - Detailed work activity log
- `get_activity_timeuse_stats` - Time usage statistics
- `get_disconnectivity` - Offline/disconnected periods
- `get_today_worklog` - Today's worklog (convenience)
### Statistics
- `get_stats_total` - Aggregated total statistics
- `get_stats_category` - Stats by productivity category (4=Productive, 3=Neutral, 2=Unproductive, 0=Unrated)
- `get_stats_summary` - Summary stats over time
- `get_stats_work_life` - Work-life balance stats
- `get_stats_shift` - Shift compliance stats
- `get_stats_outliers` - Unusual activity patterns
- `get_this_week_stats` - This week's stats (convenience)
- `get_this_month_stats` - This month's stats (convenience)
### Timesheet
- `get_timesheet_total` - Timesheet totals
- `get_timesheet_summary` - Timesheet summary
### Projects & Tasks
- `get_projects` - List projects
- `get_project` - Get project details
- `get_tasks` - List tasks
- `get_task` - Get task details
### Groups & Schedules
- `get_groups` - List groups/teams
- `get_group` - Get group details
- `get_work_schedules` - List work schedules
- `get_work_schedule` - Get schedule details
- `get_work_schedule_issues` - Schedule violations
- `get_leave_stats` - Leave/time-off stats
### Payroll & Files
- `get_users_payroll` - User payroll info
- `get_company_payroll_settings` - Company payroll settings
- `get_files` - Screenshots/screencasts
- `get_categories` - Productivity categories
- `get_unrated_categories_count` - Count of unrated items
## Command Options
Common options across commands:
- `--company-id COMPANY_ID` - Required for most commands
- `--user-ids "123,456"` - Filter by specific users (comma-separated)
- `--from-date "2024-03-01T00:00:00Z"` - Start date (ISO 8601)
- `--to-date "2024-03-31T00:00:00Z"` - End date (ISO 8601)
- `--project-id PROJECT_ID` - Filter by project
- `--page 1` - Page number for pagination
- `--limit 100` - Results per page (max 1000)
## Tips for Effective Use
1. **Always check for errors first** - Look for `{"error": "..."}` in JSON output
2. **Use convenience commands** - `get_today_worklog` is easier than calculating today's dates
3. **Cache company_id** - Once discovered, remember it for the session
4. **Format for readability** - Convert JSON to tables, charts, or summaries
5. **Provide context** - When showing stats, explain what they mean
6. **Handle pagination** - For large datasets, use `--page` and `--limit`
7. **Multiple accounts** - Each token accesses one user account, but can access multiple companies under that account
## Troubleshooting
| Error | Cause | Solution |
|-------|-------|----------|
| `TIMEDOCTOR_TOKEN environment variable not set` | Token not configured | User needs to set `export TIMEDOCTOR_TOKEN="..."` |
| `company_id required` | Missing company ID | Run `get_authorization` to discover company_id |
| `401 Unauthorized` | Token expired or invalid | User needs new token (6-month validity) |
| `httpx module not found` | Dependencies not installed | Run `pip3 install -r requirements.txt` |
| No data returned | No activity in date range | Check date range and verify users have activity |
## Author
**JehadurRE** (Jehadur Rahman Emran)
- Student, Developer, and Learner
- GitHub: https://github.com/JehadurRE
- Created simple Python CLI tool for TimeDoctor API integration
## License
MIT
don't have the plugin yet? install it then click "run inline in claude" again.