fix(background-agent): inherit parent session directory for background tasks

Background tasks were defaulting to $HOME instead of the parent session's
working directory. This caused background agents to scan the entire home
directory instead of the project directory, leading to:
- High CPU/memory load from scanning unrelated files
- Permission errors on system directories
- Task failures and timeouts

The fix retrieves the parent session's directory before creating a new
background session and passes it via the query.directory parameter.

Files modified:
- manager.ts: Look up parent session directory in launch()
- call-omo-agent/tools.ts: Same fix for sync mode
- look-at/tools.ts: Same fix for look_at tool
- sisyphus-task/tools.ts: Same fix + interface update for directory prop
- index.ts: Pass directory to sisyphusTask factory
This commit is contained in:
Oussama Douhou
2026-01-13 06:27:56 +01:00
parent f9fce50144
commit 9e98cef182
5 changed files with 43 additions and 1 deletions
+10 -1
View File
@@ -89,6 +89,7 @@ function resolveCategoryConfig(
export interface SisyphusTaskToolOptions {
manager: BackgroundManager
client: OpencodeClient
directory: string
userCategories?: CategoriesConfig
gitMasterConfig?: GitMasterConfig
}
@@ -113,7 +114,7 @@ export function buildSystemContent(input: BuildSystemContentInput): string | und
}
export function createSisyphusTask(options: SisyphusTaskToolOptions): ToolDefinition {
const { manager, client, userCategories, gitMasterConfig } = options
const { manager, client, directory, userCategories, gitMasterConfig } = options
return tool({
description: SISYPHUS_TASK_DESCRIPTION,
@@ -400,11 +401,19 @@ System notifies on completion. Use \`background_output\` with task_id="${task.id
let syncSessionID: string | undefined
try {
const parentSession = await client.session.get({
path: { id: ctx.sessionID },
}).catch(() => null)
const parentDirectory = parentSession?.data?.directory ?? directory
const createResult = await client.session.create({
body: {
parentID: ctx.sessionID,
title: `Task: ${args.description}`,
},
query: {
directory: parentDirectory,
},
})
if (createResult.error) {