For Agents¶
This page is a condensed reference for AI agents interacting with HoneyDew. You can drop this content into a system prompt or attach it as context.
When to Use¶
Use the HoneyDew API when the user asks you to:
- Create, update, move, or delete tasks (cards)
- List boards, columns, or cards
- Transfer cards between user and agent profiles
- Manage labels (create, assign, remove)
- Check board summaries, overdue cards, or urgent items
- Move cards across boards
Tracking Tasks¶
The user can open the HoneyDew board in their browser (http://localhost:5173) to see all tasks, their status, and what work you have completed. Encourage the user to check the board regularly for updates.
Assigning Work to the User¶
When you need something from the user — a review, approval, input, or any manual step — create a task (or transfer an existing one) to the user's profile so it appears on their board. Let the user know you have assigned them a task and they should check HoneyDew.
Connection¶
| Property | Value |
|---|---|
| Base URL | http://localhost:8000 (override with env SMARTIFY_API_URL) |
| Auth | None — no API key required |
| Health check | GET /health → {"status": "healthy"} |
If the API is unreachable, ask the user to start HoneyDew: ./start.sh in the project root.
Priority Values¶
| Value | Name |
|---|---|
| 1 | Low |
| 2 | Medium (default) |
| 3 | High |
| 4 | Urgent |
API Quick Reference¶
All endpoints are prefixed with /api.
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/config | Get user/agent profile configuration |
| GET | /api/boards | List all boards |
| POST | /api/boards | Create a board (optional columns array) |
| GET | /api/boards/{id} | Get board with columns and cards (optional ?profile= filter) |
| DELETE | /api/boards/{id} | Delete a board |
| POST | /api/columns | Create a column (board_id, name) |
| PATCH | /api/columns/{id} | Update column name or position |
| DELETE | /api/columns/{id} | Delete a column |
| GET | /api/cards | List cards (filters: board_id, column_id, profile, priority, has_due_date) |
| POST | /api/cards | Create a card (column_id, title, priority, profile, optional description, due_date) |
| GET | /api/cards/{id} | Get card details |
| PATCH | /api/cards/{id} | Update card fields |
| DELETE | /api/cards/{id} | Delete a card |
| POST | /api/cards/{id}/move | Move card (column_id, position) |
| POST | /api/cards/{id}/move-to-board | Move card to another board (board_id, optional column_name) |
| POST | /api/cards/{id}/transfer | Transfer card to another profile (target_profile) |
| GET | /api/labels | List all labels |
| POST | /api/labels | Create a label (name, color) |
| POST | /api/cards/{id}/labels/{label_id} | Add label to card |
| DELETE | /api/cards/{id}/labels/{label_id} | Remove label from card |
Card descriptions and Epic plans support GitHub-flavored Markdown in the HoneyDew UI. Use headings, lists, task lists, emphasis, links, quotes, tables, and fenced code blocks when they improve readability. Raw HTML is intentionally displayed as text rather than rendered.
| GET | /api/cards/{id}/comments | List comments on a card |
| POST | /api/cards/{id}/comments | Add a comment (body, required profile) |
Task Comments¶
Both users and agents can add comments to any task. Comments appear in the task detail view in the UI. Always add a comment when:
Always send the acting profile explicitly. Agent-originated comments must use the configured agent profile from GET /api/config; HoneyDew rejects omitted profiles instead of silently attributing activity to the user.
- You are blocked: Explain specifically what you need from the user (e.g. "Need API credentials for the staging environment before I can proceed").
- You complete a task: Leave a brief summary of what you did and any decisions you made (e.g. "Refactored auth module into middleware, added 12 unit tests, all passing").
- You need review or input: Describe what to look at and any open questions.
- You hand off work: Note the current state so the next person (user or agent) has context.
curl -X POST http://localhost:8000/api/cards/3/comments \
-H "Content-Type: application/json" \
-d '{"body": "Finished the first pass, needs review.", "profile": "jarvis"}'
Examples¶
Create a task¶
curl -X POST http://localhost:8000/api/cards \
-H "Content-Type: application/json" \
-d '{"column_id": 1, "title": "Write docs", "priority": 2, "profile": "jarvis"}'
Get the board to find column IDs¶
Move a card to "In Progress"¶
curl -X POST http://localhost:8000/api/cards/3/move \
-H "Content-Type: application/json" \
-d '{"column_id": 2, "position": 0}'
Move a card to another board¶
curl -X POST http://localhost:8000/api/cards/3/move-to-board \
-H "Content-Type: application/json" \
-d '{"board_id": 2, "column_name": "To Do"}'
Transfer a card to the user¶
curl -X POST http://localhost:8000/api/cards/3/transfer \
-H "Content-Type: application/json" \
-d '{"target_profile": "tony"}'
Create a label and attach it¶
# Create label
curl -X POST http://localhost:8000/api/labels \
-H "Content-Type: application/json" \
-d '{"name": "frontend", "color": "#06b6d4"}'
# Attach label (id 1) to card (id 3)
curl -X POST http://localhost:8000/api/cards/3/labels/1
Python Tools (optional)¶
If you have access to the HoneyDew repo, tools/kanban_tools.py provides convenience methods:
from kanban_tools import KanbanTools, Priority
kanban = KanbanTools()
card = kanban.create_task(title="Write docs", priority=Priority.HIGH)
kanban.move_card_to_column(card["id"], board_id=1, column_name="In Progress")
kanban.assign_to_user(card["id"])
kanban.mark_done(card["id"])
Key methods: create_task, assign_to_user, assign_to_agent, move_card_to_column, move_card_to_board, mark_todo, mark_in_progress, mark_blocked, mark_done, get_board_summary, get_overdue_cards, get_urgent_cards.
See Python Tools for the full reference.
Completion and Archival¶
Move work into a Done-equivalent column only when it is genuinely complete.
HoneyDew automatically records completed_at on that transition. Moving the
card out of Done clears its completion/archive state so a later completion gets
a fresh timestamp. To correct the time, PATCH completed_at with an ISO 8601
datetime.
Completed cards are soft-archived after the configured retention period
(72 hours by default). Normal board and card lists omit them; use
GET /api/cards?include_archived=true for history. Archival is not deletion.
Task leases¶
Before starting a task, atomically acquire its lease with
POST /api/cards/{id}/lease/acquire. Keep the returned task_lease_id private
to the worker contract, renew it during milestones and at least every ten
minutes, and stop immediately if renewal returns 409. Moving the card to Done
or Blocked clears the lease atomically with the column transition. If work ends
without a terminal move, release the matching lease explicitly. If the worker
crashes, do not guess at cleanup: the lease expires and a later worker can
safely take over.
An In Progress column is status, not mutual exclusion. A live
task_lease_active value is the authoritative indication that an agent owns
the work.
Agent Progress and Completion Metadata¶
On every task update and progress comment, report agent_tokens_used when a measured count is available, including partial or in-progress work. This is the cumulative total for this task so far, not a delta: repeated reports replace the total and do not add tokens. Omit it when unknown; zero means measured zero. On comments, omission or null preserves the existing total; use PATCH with null only to explicitly clear incorrect data. The board and open task subtitle refresh the last reported total every five seconds; HoneyDew does not read model-provider counters automatically.
At task start, check the harness for task-scoped usage or an exact cumulative counter and record a baseline if needed. Recheck at each milestone before omitting usage; availability must be checked, not assumed. Rounded display counts alone cannot establish an exact task total. Record the measurement source and baseline in the start comment when available.
For a resumed task, retain its previously reported total and add only newly measured task usage. When using a session counter, record a baseline at task start and subtract it; never attribute unrelated session work or double-count cached tokens already included in the harness total. Set agent_completed_at only at completion, not on a progress report.
Example progress report (REST; the MCP add_comment tool and Python helper accept the same optional field):
Submit to POST /api/cards/{id}/comments, using the installation's configured agent profile. Read the card back to verify the reported total.
When you complete a task, report the completion metadata available from the harness or task run. Token usage is optional: never invent it and never withhold a verified Done transition because it is unavailable. If one long-lived run spans multiple tasks, explain the missing per-task measurement in the completion comment and record measured aggregate usage on the Epic or run summary.
| Field | Type | Description |
|---|---|---|
agent_tokens_used |
int | Total tokens consumed. |
agent_model |
string | Model name (e.g. gpt-4o). |
agent_execution_time_seconds |
float | Wall-clock execution time. |
agent_started_at |
string | ISO 8601 datetime when work started. |
agent_completed_at |
string | ISO 8601 datetime when work finished. |
Example — mark done and report metadata:
# Move to Done
curl -X POST http://localhost:8000/api/cards/5/move \
-H "Content-Type: application/json" \
-d '{"column_id": 3, "position": 0}'
# Attach completion metadata
curl -X PATCH http://localhost:8000/api/cards/5 \
-H "Content-Type: application/json" \
-d '{
"agent_tokens_used": 4200,
"agent_model": "gpt-4o",
"agent_execution_time_seconds": 12.8,
"agent_started_at": "2026-02-22T10:30:00Z",
"agent_completed_at": "2026-02-22T10:30:12Z"
}'
With Python tools:
kanban.mark_done(
card["id"],
agent_tokens_used=4200,
agent_model="gpt-4o",
agent_execution_time_seconds=12.8,
agent_started_at="2026-02-22T10:30:00Z",
agent_completed_at="2026-02-22T10:30:12Z",
)
Only provided fields are displayed. agent_completed_at and the Done transition do not require token usage.
File attachments and storage¶
See Attachments and S3-compatible storage for issue/Epic uploads, managed-object APIs, native MCP, host file roots, limits, retention and backup/restore.