diff --git a/src/features/team-mode/team-tasklist/get.test.ts b/src/features/team-mode/team-tasklist/get.test.ts
new file mode 100644
index 000000000..815e72ce2
--- /dev/null
+++ b/src/features/team-mode/team-tasklist/get.test.ts
@@ -0,0 +1,45 @@
+///
+
+import { expect, test } from "bun:test"
+
+import { createTask } from "./store"
+import { createTaskInput, createTasklistFixture } from "./test-support"
+import { getTask } from "./get"
+
+test("getTask returns a persisted task", async () => {
+ // given
+ const fixture = await createTasklistFixture()
+
+ try {
+ const createdTask = await createTask(fixture.teamRunId, createTaskInput({ subject: "persisted task" }), fixture.config)
+
+ // when
+ const loadedTask = await getTask(fixture.teamRunId, createdTask.id, fixture.config)
+
+ // then
+ expect(loadedTask).toEqual(createdTask)
+ } finally {
+ await fixture.cleanup()
+ }
+})
+
+test("getTask throws when the task file is missing", async () => {
+ // given
+ const fixture = await createTasklistFixture()
+
+ try {
+ // when
+ let thrownError: unknown = null
+
+ try {
+ await getTask(fixture.teamRunId, "999", fixture.config)
+ } catch (error) {
+ thrownError = error
+ }
+
+ // then
+ expect(thrownError).toBeInstanceOf(Error)
+ } finally {
+ await fixture.cleanup()
+ }
+})
diff --git a/src/features/team-mode/team-tasklist/get.ts b/src/features/team-mode/team-tasklist/get.ts
new file mode 100644
index 000000000..002fca34c
--- /dev/null
+++ b/src/features/team-mode/team-tasklist/get.ts
@@ -0,0 +1,13 @@
+import { readFile } from "node:fs/promises"
+import path from "node:path"
+
+import type { TeamModeConfig } from "../../../config/schema/team-mode"
+import { getTasksDir, resolveBaseDir } from "../team-registry"
+import { TaskSchema } from "../types"
+import type { Task } from "../types"
+
+export async function getTask(teamRunId: string, taskId: string, config: TeamModeConfig): Promise {
+ const tasksDirectory = getTasksDir(resolveBaseDir(config), teamRunId)
+ const taskContent = await readFile(path.join(tasksDirectory, `${taskId}.json`), "utf8")
+ return TaskSchema.parse(JSON.parse(taskContent))
+}