Native Runtime: codepilot_schedule_task and related builtin tools not available in any session

Open
#634 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
1-2 days
Newbie friendliness
48/100
Issue type
Bug
Clarity
Mostly clear
Activity status
Quiet
Tech stack
electron, nextjs, typescript
Domain
desktop, tooling

Research direction

Start in src/lib/builtin-tools/index.ts and inspect the notification module and its imports, especially the require('./notification') path and notification.ts. Reproduce the missing tools in a Native Runtime chat, then check why the notification group is not registered. Done means the listed notification tools are available in eligible sessions and the module-loading failure is no longer silent.

Written by the indexing model from the issue text.

Description

needs-repro P1-runtime-session

Description

In CodePilot's Native Runtime, the scheduled task / notification builtin tools (codepilot_schedule_task, codepilot_list_tasks, codepilot_cancel_task, codepilot_notify, codepilot_hatch_buddy) are not available in any chat session — neither in assistant mode nor in any other conversation.

The model prompt lists the harness extensions, and NotificationMcp (Native Runtime) is shown as a plugin (not executable), while all other CodePilot extensions (e.g. DashboardMcp, SessionSearchMcp, CliTools, MemorySearch) correctly show as executable.

Expected Behavior

Per src/lib/builtin-tools/index.ts, getToolGroups() registers codepilot-notify with condition: 'always', so these tools should be available in every non-heartbeat, non-plan session:

  • codepilot_notify — send notification
  • codepilot_schedule_task — create scheduled task (cron / interval / once)
  • codepilot_list_tasks — list scheduled tasks
  • codepilot_cancel_task — cancel a task
  • codepilot_hatch_buddy — hatch buddy

Actual Behavior

The model's tool list does not include any of the above. The harness extension list shows:

- NotificationMcp (Native Runtime) (native plugin) — Detected in builtin-tools. Not executable...

while other Native Runtime tools correctly show:

- DashboardMcp (Native Runtime) (native plugin) — Detected in builtin-tools. Executable in current Runtime

Steps to Reproduce

  1. Open CodePilot desktop app
  2. Start any chat session (assistant mode or normal)
  3. Ask the model to create a scheduled task, e.g. "帮我创建一个10分钟间隔的心跳任务"
  4. The model cannot call any schedule/notify tool

Root Cause Investigation

From the source code (src/lib/builtin-tools/index.ts):

try {
  const { createNotificationTools, NOTIFICATION_SYSTEM_PROMPT } = require('./notification');
  groups.push({
    name: 'codepilot-notify',
    systemPrompt: NOTIFICATION_SYSTEM_PROMPT,
    condition: 'always',
    tools: createNotificationTools({
      sessionId: options.sessionId,
      workingDirectory: options.workspacePath,
    }),
  });
} catch { /* notification module not available */ }

The catch block is silent. It appears the require('./notification') is failing silently, so the group never gets registered.

Other tools with the same pattern (e.g. ./dashboard, ./session-search) work fine, so the issue is likely specific to the notification module — possibly a missing dependency (e.g. @/lib/notification-manager) that throws during require().

Suggested Fix

  1. Add logging to the catch block so the failure is visible in dev/console:
    catch (err) {
      console.warn('[builtin-tools] Failed to load notification module:', err);
    }
    
  2. Check if @/lib/notification-manager or any import in notification.ts has a missing dependency or circular import that causes silent failure.

Environment

  • CodePilot version: latest (as of 2026-06-12)
  • OS: macOS (Darwin, arm64)
  • Runtime: Native Runtime (CodePilot desktop client)
Dominant language
TypeScript
Stars
6.5k
Forks
697
PR merge metrics
No merged PRs in 30d

Getting set up

  • No Dockerfile or Docker Compose file
  • Has a pull request template
  • No contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from op7418/CodePilot

All issues in op7418/CodePilot

Similar issues

More TypeScript issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.