Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

For Engineering Managers

Alloy is API-first, which means everything — sprint planning, reporting, permissions, workflow enforcement — is automatable. No more clicking through a UI to get a status update. This guide shows how an EM can use Alloy to run their team, track progress, and report up, all from the command line or through integrations.

1. Why Alloy for EMs

Traditional project management tools make you the bottleneck. You click through boards, chase people for updates, and manually assemble reports. Alloy flips that:

  • Everything is an API call. Standup summaries, sprint reports, and budget tracking can all be scripted or wired into Slack/CI.
  • Workflow enforcement is built in. Set strict mode and the system rejects invalid transitions — no more tickets jumping from Backlog to Done.
  • Multi-tenant by design. One Alloy instance serves every team in your org, with role-based access keeping things clean.
  • MCP integration. Use natural language via the MCP server to query project status, create sprints, and generate reports without memorizing endpoints.

2. Sprint Planning

Create a sprint, assign tickets, and set a goal. Start with a two-week iteration:

curl -s -X POST "$BASE_URL/api/v1/projects/$PROJECT_ID/sprints" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOKEN" \
  -d '{
    "name": "Sprint 1 — Onboarding Flow",
    "goal": "Ship user onboarding end-to-end",
    "start_date": "2026-04-01",
    "end_date": "2026-04-15"
  }' | jq .
{
  "id": "...",
  "project_id": "...",
  "name": "Sprint 1 — Onboarding Flow",
  "goal": "Ship user onboarding end-to-end",
  "start_date": "2026-04-01",
  "end_date": "2026-04-15",
  "status": "Planned",
  "created_at": "...",
  "updated_at": "..."
}

Start the sprint when the team is ready:

curl -s -X POST "$BASE_URL/api/v1/sprints/$SPRINT_ID/start" \
  -H "Authorization: Bearer $TOKEN" | jq .
{
  "id": "...",
  "project_id": "...",
  "name": "Sprint 1 — Onboarding Flow",
  "goal": "Ship user onboarding end-to-end",
  "start_date": "2026-04-01",
  "end_date": "2026-04-15",
  "status": "Active",
  "created_at": "...",
  "updated_at": "..."
}

CLI shortcut: alloy sprint create --project PROJ --name "Sprint 1" --goal "Ship onboarding" --start 2026-04-01 --end 2026-04-15

See the Sprints & Boards guide for the full sprint lifecycle including boards, burndowns, and completion.

3. Team Visibility

See who is working on what by listing project tickets:

curl -s "$BASE_URL/api/v1/projects/$PROJECT_ID/tickets?limit=5" \
  -H "Authorization: Bearer $TOKEN" | jq .
{
  "items": [
    {
      "id": "...",
      "project_id": "...",
      "ticket_number": "...",
      "title": "...",
      "status": "...",
      "priority": "...",
      "assignee_id": "...",
      "reporter_id": "...",
      "created_at": "...",
      "updated_at": "..."
    }
  ],
  "next_cursor": "..."
}

Filter by status (?status=InProgress) or assignee (?assignee_id=...) to narrow results.

For a quick snapshot, use the MCP server’s /alloy:standup prompt or the get_project_summary tool, which aggregates ticket counts by status and lists active sprints in one call.

MCP shortcut: Ask your AI assistant: “Give me a summary of the PROJ project” — it calls get_project_summary behind the scenes.

See the Projects & Tickets guide for filtering, searching, and bulk operations.

4. Standup Automation

Instead of asking each engineer for updates, pull standup data from Alloy directly. The MCP /alloy:standup prompt generates a summary from recent ticket activity — transitions, comments, and time logged.

You can also build your own standup script. List tickets updated in the last 24 hours:

curl -s "$BASE_URL/api/v1/projects/$PROJECT_ID/tickets?status=InProgress&limit=50" \
  -H "Authorization: Bearer $TOKEN" | jq '.items | length'

Pipe the output into Slack or your team channel. Because it is just an API, you can run this on a cron job or as a CI step.

See the MCP Tools Reference for the full list of MCP prompts and tools available for automation.

5. Workflow Enforcement

Prevent tickets from skipping steps by setting your workflow to strict mode. Create a workflow with defined transitions and enforcement:

curl -s -X POST "$BASE_URL/api/v1/orgs/$ORG_ID/workflows" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOKEN" \
  -d '{
    "name": "EM Strict Flow",
    "statuses": [
      {"name": "Backlog", "category": "todo"},
      {"name": "Ready", "category": "todo"},
      {"name": "InProgress", "category": "in_progress"},
      {"name": "Review", "category": "in_progress"},
      {"name": "Done", "category": "done"}
    ],
    "transitions": [
      {"from": "Backlog", "to": "Ready"},
      {"from": "Ready", "to": "InProgress"},
      {"from": "InProgress", "to": "Review"},
      {"from": "Review", "to": "Done"},
      {"from": "Review", "to": "InProgress"}
    ],
    "enforcement": "strict"
  }' | jq .
{
  "id": "...",
  "org_id": "...",
  "name": "EM Strict Flow",
  "statuses": [
    {"name": "Backlog", "category": "todo"},
    {"name": "Ready", "category": "todo"},
    {"name": "InProgress", "category": "in_progress"},
    {"name": "Review", "category": "in_progress"},
    {"name": "Done", "category": "done"}
  ],
  "transitions": [
    {"from": "Backlog", "to": "Ready"},
    {"from": "Ready", "to": "InProgress"},
    {"from": "InProgress", "to": "Review"},
    {"from": "Review", "to": "Done"},
    {"from": "Review", "to": "InProgress"}
  ],
  "enforcement": "strict",
  "created_at": "...",
  "updated_at": "..."
}

With strict enforcement, any attempt to transition a ticket outside the allowed paths returns a 422 error. No more tickets jumping from Backlog to Done.

See the Workflows & Statuses guide for assigning workflows to projects, enforcement modes, and handling rejected transitions.

6. Reporting

Pull capitalization reports grouped by team for leadership reviews. The report aggregates approved time entries with labor rates:

curl -s "$BASE_URL/api/v1/reports/capitalization?period=2026-03&group_by=team" \
  -H "Authorization: Bearer $TOKEN" | jq .
{
  "period": "2026-03",
  "teams": []
}

When there are approved time entries with labor rates configured, each team entry includes team_id, team_name, total_hours, total_amount_cents, and a projects breakdown. Add include_budget=true to track spend against budget.

For CSV exports (useful for finance reviews and spreadsheets):

curl -s "$BASE_URL/api/v1/reports/capitalization/export?period=2026-03&group_by=team" \
  -H "Authorization: Bearer $TOKEN" -o report.csv

Tip: Schedule the CSV export as a weekly cron job and email it to leadership automatically.

See the Time Tracking & Finance guide for labor rates, approval workflows, and the full reporting API.

7. Permissions

Set up roles so the right people have the right access:

RoleWhoWhat they can do
OwnerYou (the EM)Everything — manage members, billing, settings
AdminTech leadsCreate projects, manage sprints, approve time
MemberEngineersCreate/edit tickets, log time, comment
ReporterStakeholdersCreate tickets and comments, view everything
ViewerExecs, auditorsRead-only access to projects, tickets, reports

Invite a stakeholder as a Reporter:

curl -s -X POST "$BASE_URL/api/v1/orgs/$ORG_ID/invites" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOKEN" \
  -d "{
    \"email\": \"stakeholder-em@example.com\",
    \"role\": \"Reporter\",
    \"created_by\": \"$USER_ID\"
  }" | jq .
{
  "id": "...",
  "invite_code": "...",
  "invite_link": "...",
  "email": "stakeholder-em@example.com",
  "role": "Reporter",
  "expires_at": "..."
}

See the Teams, Roles & Permissions guide for the full permission matrix, team management, and project membership.

8. Getting Started — Day 1 Checklist

Here is what to do when you first set up Alloy for your team:

  1. Create your organizationPOST /api/v1/orgs with your team name
  2. Create a project for each workstream — POST /api/v1/projects
  3. Set up a workflow — Create a strict workflow matching your process and assign it to your projects
  4. Invite your team — Send invites with appropriate roles (Admin for leads, Member for engineers)
  5. Create your first sprint — Plan a two-week iteration with a clear goal
  6. Add tickets — Break work into tickets with priorities and assignees
  7. Configure labor rates — Set hourly rates for capitalization reporting (POST /api/v1/users/{id}/orgs/{org_id}/labor-rates)
  8. Automate standups — Wire up the MCP /alloy:standup prompt or build a cron script that queries ticket activity

Each step links to its respective guide above. Start with steps 1–4 and iterate from there.


Further reading: