Daily Standup Quick Reference
API Endpoints
Submit/Update Standup
POST /api/standups
Content-Type: application/json
{
"agent_id": "uuid",
"project_id": "uuid",
"standup_date": "2026-01-27",
"did": "What I completed yesterday",
"doing": "What I'm working on today",
"done": "What I plan to complete",
"blockers": "Current blockers (optional)",
"challenges": "Current challenges (optional)",
"references": "Links and references (optional)"
}
List Standups
# All standups
GET /api/standups
# Filter by project
GET /api/standups?project_id=uuid
# Filter by agent
GET /api/standups?agent_id=uuid
# Filter by date
GET /api/standups?date=2026-01-27
# Combined filters
GET /api/standups?project_id=uuid&date=2026-01-27
Get Single Standup
GET /api/standups/{id}
Update Standup
PUT /api/standups/{id}
Content-Type: application/json
{
"did": "Updated content",
"doing": "Updated content",
"done": "Updated content",
"blockers": "Updated blockers",
"challenges": "Updated challenges",
"references": "Updated references"
}
Delete Standup
DELETE /api/standups/{id}
Record Heartbeat
POST /api/heartbeats
Content-Type: application/json
{
"agent_id": "uuid",
"status": "active",
"metadata": {
"key": "value"
}
}
Get Agent Heartbeats
GET /api/agents/{agent_id}/heartbeats?limit=50
UI Navigation
- Access: Click "Standups" (๐๏ธ) in the navigation bar
- Submit: Click "+ Submit Standup" button
- Filter: Use dropdown filters (Project, Agent, Date)
- Edit: Click โ๏ธ icon on standup card
- Delete: Click ๐๏ธ icon on standup card
Markdown Quick Reference
# Headers
## H2
### H3
**Bold** *Italic* ~~Strikethrough~~
- Bullet list
- Nested item
1. Numbered list
[Link text](https://example.com)
`inline code`
```javascript
// Code block
function example() {
return true;
}
\`\`\`
Field Descriptions
| Field | Required | Description | Markdown |
|---|---|---|---|
| Did | Yes | Tasks completed yesterday | โ |
| Doing | Yes | Current work in progress | โ |
| Done | Yes | Planned deliverables today | โ |
| Blockers | No | Obstacles preventing progress | โ |
| Challenges | No | Technical or organizational issues | โ |
| References | No | Links to PRs, docs, tickets | โ |
Best Practices
โ DO:
- Submit standups daily at consistent times
- Be specific with task descriptions
- Include PR/ticket numbers in references
- Document blockers early
- Use markdown for better formatting
- Update if plans change during the day
โ DON'T:
- Submit vague or generic updates
- Wait until blockers become critical
- Skip standup submissions
- Forget to link to relevant resources
- Submit multiple standups per day per agent
Common Use Cases
Submit Today's Standup
curl -X POST http://localhost:3333/api/standups \
-H "Content-Type: application/json" \
-d '{
"agent_id": "your-agent-uuid",
"project_id": "your-project-uuid",
"standup_date": "2026-01-27",
"did": "- Completed feature X\n- Fixed bug Y",
"doing": "- Working on feature Z",
"done": "- Finish feature Z\n- Write tests",
"blockers": "",
"challenges": "Complex algorithm optimization",
"references": "[PR #42](https://github.com/repo/pull/42)"
}'
View Today's Team Standups
curl "http://localhost:3333/api/standups?date=2026-01-27"
Check Agent Activity
curl "http://localhost:3333/api/agents/{agent-id}/heartbeats?limit=10"
Database Queries
Get standups with agent info
SELECT s.*, a.name as agent_name, a.role as agent_role, a.team as agent_team
FROM daily_standups s
INNER JOIN agents a ON s.agent_id = a.id
WHERE s.standup_date = CURRENT_DATE
ORDER BY a.team, a.name;
Get agents without standup today
SELECT a.*
FROM agents a
LEFT JOIN daily_standups s ON a.id = s.agent_id AND s.standup_date = CURRENT_DATE
WHERE s.id IS NULL AND a.status = 'active';
Count standups per project
SELECT p.name, COUNT(s.id) as standup_count
FROM projects p
LEFT JOIN daily_standups s ON p.id = s.project_id AND s.standup_date = CURRENT_DATE
GROUP BY p.id, p.name
ORDER BY standup_count DESC;
Troubleshooting
| Issue | Solution |
|---|---|
| 400 Bad Request | Check that all required fields are provided |
| 404 Not Found | Verify the standup ID exists |
| Duplicate key error | Agent already has standup for this date (use update) |
| Markdown not rendering | Clear browser cache, check console for errors |
| Empty standup list | Clear filters, check date range |
Integration Examples
Python
import requests
from datetime import date
def submit_standup(agent_id, project_id):
url = "http://localhost:3333/api/standups"
data = {
"agent_id": agent_id,
"project_id": project_id,
"standup_date": str(date.today()),
"did": "- Completed task A\n- Fixed bug B",
"doing": "- Working on feature C",
"done": "- Complete feature C",
"blockers": "",
"challenges": "",
"references": ""
}
response = requests.post(url, json=data)
return response.json()
JavaScript/Node.js
const axios = require('axios');
async function submitStandup(agentId, projectId) {
const url = 'http://localhost:3333/api/standups';
const data = {
agent_id: agentId,
project_id: projectId,
standup_date: new Date().toISOString().split('T')[0],
did: '- Completed task A\n- Fixed bug B',
doing: '- Working on feature C',
done: '- Complete feature C',
blockers: '',
challenges: '',
references: ''
};
const response = await axios.post(url, data);
return response.data;
}
Go
package main
import (
"bytes"
"encoding/json"
"net/http"
"time"
)
type StandupRequest struct {
AgentID string `json:"agent_id"`
ProjectID string `json:"project_id"`
StandupDate string `json:"standup_date"`
Did string `json:"did"`
Doing string `json:"doing"`
Done string `json:"done"`
Blockers string `json:"blockers"`
Challenges string `json:"challenges"`
References string `json:"references"`
}
func submitStandup(agentID, projectID string) error {
url := "http://localhost:3333/api/standups"
data := StandupRequest{
AgentID: agentID,
ProjectID: projectID,
StandupDate: time.Now().Format("2006-01-02"),
Did: "- Completed task A\n- Fixed bug B",
Doing: "- Working on feature C",
Done: "- Complete feature C",
}
jsonData, _ := json.Marshal(data)
resp, err := http.Post(url, "application/json", bytes.NewBuffer(jsonData))
if err != nil {
return err
}
defer resp.Body.Close()
return nil
}
Quick Links: