Skip to content
| Marketplace
Sign in
Visual Studio Code>Other>AI CLI SchedulerNew to Visual Studio Code? Get it now.
AI CLI Scheduler

AI CLI Scheduler

yamapan

|
7 installs
| (0) | Free
Schedule coding agents using your default terminal or custom launch profiles.
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

AI CLI Scheduler: terminal and clock

AI CLI Scheduler

Schedule your AI CLI. See what actually finished.

English | 日本語
Marketplace | Support | Source (access required)

VS Code 1.108+ · English / 日本語 · Version 0.2.0

Features | Getting started | Language support | Development

A separate VS Code extension for scheduling coding agents through your usual terminal environment. Inspired by Copilot Scheduler, but observes command completion rather than treating a submitted prompt as success.

Features

  • Copilot CLI, Codex CLI, Claude Code, and Claude Code via gw claude presets.
  • Custom executable, prefix arguments, prompt binding, environment variables, secret references, aliases and shell functions.
  • One-time and cron schedules, manual runs, cooperative stop and execution history.
  • The default VS Code terminal profile is used automatically. Direct execution and an explicitly selected shell are opt-in alternatives.
  • Japanese/English UI using VS Code theme colors.
  • GitHub Copilot Chat tools for reading and configuring schedules with confirmation.

Install the extension as yamapan.ai-cli-scheduler from Marketplace. The source repository remains private; GitHub documentation and issue links require repository access. See LICENSE for CC BY-NC-SA 4.0 and the copyright holder's supplementary terms. Third-party assets retain their own notices in THIRD_PARTY_NOTICES.md.

Getting started

Use a local VS Code 1.108 or later window with a trusted workspace. Install and authenticate your chosen CLI separately using its official instructions. This extension does not install agents or perform login.

Build the local VSIX using the development commands below, then choose Extensions: Install from VSIX... and select artifacts/vsix/ai-cli-scheduler-0.2.0.vsix. A first installation has no tasks. Existing enabled tasks resume when an already-configured extension starts.

For Marketplace installation, search for AI CLI Scheduler by yamapan in Extensions, or run code --install-extension yamapan.ai-cli-scheduler.

  1. Click the terminal-and-clock AI CLI Scheduler icon in the left Activity Bar. With no tasks, select Open Scheduler in the list. The gear button and AI CLI Scheduler: Open Scheduler in the Command Palette also open the management screen.
  2. Select or duplicate a CLI profile and review its executable, arguments and permissions.
  3. Create a task, enter its prompt and schedule, and explicitly approve its working folder.
  4. Save the task. New tasks are disabled; enable them only when ready for automatic execution.

If the icon is hidden, right-click the Activity Bar and enable AI CLI Scheduler. When upgrading from 0.1.0, VS Code may retain your previous view placement. Run View: Reset View Locations to restore default placements for all views, or use View: Move View to move only the scheduler task view to its dedicated sidebar.

Saving a profile can authorize arbitrary local code, including shell startup files. Run now explicitly starts a task even when its automatic schedule is disabled.

The extension creates a dedicated terminal per run. Your existing terminal is never reused. Shell Integration must support the required execution/output/end events; the UI explains blocked configurations. Aliases/functions must be defined in the selected shell's startup profile, not just typed into another terminal. Do not change execution policy or disable TLS verification to work around an unsupported setup.

PowerShell requires 7.3 or newer; the dedicated terminal uses standard native argument passing. Windows .cmd / .bat targets (including aliases to them) must use stdin rather than prompt arguments. Arbitrary functions/scripts that re-quote arguments internally remain subject to the wrapper contract below.

On Windows, if VS Code omits the detected shell type, the scheduler checks the owned terminal's process through a bounded, read-only OS query. It recognizes PowerShell only when that process has no child processes. If neither observation identifies the shell, no command is sent. Review the terminal profile. Direct mode is an explicit alternative only for native executables, not aliases or scripts. The scheduler does not guess the shell or silently switch modes.

Model and Reasoning Options

Task editors include Model and Reasoning effort. CLI / profile default adds no override and preserves existing CLI configuration. Choose a bundled model or Custom model ID; candidates are not a live account-availability list.

Before selecting reasoning, use Edit profile to confirm its Model options adapter and enter the CLI version (user-declared). The scheduler does not probe or launch the executable for discovery. The conservative compatibility floors are Copilot CLI 1.0.87, Codex CLI 0.147.0 and Claude Code 2.1.229, within the same major version. These are catalog verification floors, not the earliest provider versions that supported the feature. A wrapper or administrative policy may still override a requested setting.

Unverified prerelease versions (for example 0.147.0-beta.1) do not enable effort choices. The specifically observed Copilot CLI 1.0.87-0 is supported.

  • Copilot and Codex: the bundled gpt-5.4 candidate offers low/medium/high/xhigh.
  • Claude Code: claude-opus-5 and claude-sonnet-5 offer low/medium/high/xhigh/max; claude-opus-4-6 offers low/medium/high/max. Aliases and other custom IDs can select a model but inherit effort unless the catalog explicitly covers them.
  • Claude Code via Gateway: preserves IDs such as codex/gpt-5.4; reasoning is unavailable because propagation through the installed bridge is not verified.
  • Existing raw model/effort arguments or conflicting environment settings are not rewritten. Use Default or edit the profile to resolve a conflict. An incompatible selection stays visible and must be explicitly corrected.

Use model and effort defaults clears both overrides in the draft; save to apply it. This recovery action remains available when conflicting profile arguments disable the selectors. Switching profiles preserves a missing candidate as a visible Custom model ID, never silently substituting another model. Unrelated simple Codex -c key=value settings can coexist with model options; model-related or ambiguous config keys remain blocked.

Task summaries, sidebar tooltips and history show requested options, not a claim about the effective model or effort. No CLI login, gateway start or model request occurs when opening the picker or querying candidates.

Storage is upgraded from schema v1 to v2 on the next successful write under the existing lock. A single store.v1.backup.json is kept next to the extension's store.json. Exact unmodified built-ins receive adapter metadata; customized legacy profiles require an explicit adapter choice. Older releases cannot read v2. Recovery is manual: stop all scheduler windows and retain the current store before restoring the backup, which discards subsequent changes. Never restore it over a running scheduler.

If storageMigrationConflict reports that an existing v1 backup differs from the current v1 store, stop all scheduler windows and preserve both files first. Review which v1 store should be retained. If keeping the current store, archive the older backup outside the active backup name, then restart the extension to retry migration. Do not delete either copy to bypass the warning. A failed final replacement can be retried with its unchanged backup; it does not require reset.

Capability sources: GitHub model support, GPT-5.4, Claude effort.

Commands

Command Palette entry Action
AI CLI Scheduler: Open Scheduler Manage tasks, profiles, history and settings
AI CLI Scheduler: Stop Current Run Request a stop for the execution owned by this window
AI CLI Scheduler: Show Diagnostics Open diagnostic logs, not persisted raw agent output
AI CLI Scheduler: Send Feedback Choose a bug report or feature request and preview the GitHub form metadata

Feedback

Use the sidebar's feedback icon, AI CLI Scheduler: Send Feedback, or the management screen's Report a bug / Request a feature buttons. A local confirmation shows the destination and draft before opening the GitHub issue form. Only extension version, VS Code version and OS are prefilled. No prompts, logs, environment values, task names or local paths are automatically included. Review and submit the form yourself; the extension does not create an issue.

The existing issue tracker is a private repository requiring access. This feature does not create a public tracker, change repository visibility or grant access. The source can remain private if a separate public support tracker is chosen later; that destination/publication requires an explicit decision.

Configure from Copilot Chat

In GitHub Copilot Chat's Agent mode, enable the AI CLI Scheduler tools in the tool picker. These are VS Code Language Model Tools, not an external MCP server; no MCP configuration, server process or port is required.

Tool reference Scope
#aiCliSchedulerQuery List tasks, profiles and history; read settings or one task
#aiCliSchedulerConfigure Create disabled tasks, edit/delete tasks, set enabled state, update shared settings

Example: "List my AI CLI Scheduler profiles, then create a disabled weekday 09:00 Asia/Tokyo task using my chosen profile, prompt and working folder." You can also ask to change its schedule, disable it, or change the history limit. Tool availability depends on the Chat client's tool selection and policies.

Query kind: "models" with profileId before choosing a model and effort. This returns bundled candidates, supported effort values and declared-version status, without starting a CLI. Task creation accepts optional model and reasoningEffort. An update omitting either field preserves it; explicitly passing null clears it to CLI/profile default. Clear both when returning to default model selection. Chat cannot change the adapter or declared version; use the profile editor. Confirmation and the saved result include the selection.

Changes request confirmation. Enabling a task allows future automatic CLI runs; it is separate from creating a disabled task. Folder approval, deletion and raw output persistence retain the extension's own confirmation dialogs. The tools cannot run or stop tasks, change executable profiles, set secrets, or bypass Workspace Trust. Use the management screen for those actions.

The model must query first and submit the returned revision as expectedRevision. Concurrent changes return editConflict; query again and review the intended change instead of blindly retrying. Lists are paged (20 by default, at most 50) and omit prompts, profile environments and raw output. Requesting one task's details includes its full prompt and requests separate disclosure confirmation. Names, folders and schedules still reach the model: review sensitive information before using Chat. Stored text is data, not instructions. A successful change means configuration saved, not an executed or completed AI task.

If ok: true includes warning.code: viewRefreshFailed, the change was saved but the view could not refresh. Do not repeat the change; query the current state or reopen the scheduler. An actual save failure still returns ok: false.

Language support

The extension follows VS Code's display language. Japanese (ja, including ja-JP) uses Japanese commands, view text, forms, validation and status messages. English and other display languages use English. After changing VS Code's display language, restart VS Code when prompted. There is no separate extension language setting. CLI output, custom profile names and user-entered prompts are not translated.

Documentation: English | 日本語

Custom profiles

Choose a Terminal

In Profiles > Edit profile, use Choose terminal profile... beside Launch mode. Select the VS Code default, a registered user/built-in profile, or browse for a local PowerShell 7 (pwsh), Bash, Zsh or Fish executable. Selection changes only the draft: review the shell path/arguments and save with the normal profile approval. CLI command, CLI arguments, environment and model options are untouched.

The picker copies explicit path and string-array arguments from VS Code's user/default terminal.integrated.profiles.* definitions; it ignores workspace overrides. A list of candidate paths uses the first existing supported executable. ${userHome} and ${env:NAME} are resolved only in the executable path. Detected profiles that expose a source but no path require you to choose the executable. Contributed terminal providers, environment-bearing profiles, command-line-string arguments and argument variables cannot be imported; use the detailed fields. No executable or version probe runs during selection.

Windows candidates must include a drive letter and root separator; UNC/network, device and drive-relative paths are rejected before file lookup. POSIX double-root paths are also rejected. This is a path-syntax check, not verification that a mapped drive or symlink points to local storage. Use trusted local installations. When you browse for an executable (including a detected/missing-profile fallback), the draft shell arguments start empty: arguments belonging to the old shell are not copied to the newly selected executable. Review and add any needed arguments in the detailed fields. An automatically resolved registered path keeps its args.

While the picker is pending, profile saving and a second picker request are disabled. Cancellation and errors appear beside the picker; the draft remains unchanged and the controls become available for retry. Replies, including errors, are tied to the requesting editor so an old dialog cannot affect a new draft.

Saved choices are snapshots, not live references to VS Code profile names. The default option still follows VS Code's default at execution time. Late picker results never replace another editor or overwrite a changed shell draft. Actual execution still requires Shell Integration and, for PowerShell, version 7.3+. This starts an owned integrated terminal, not an external Windows Terminal window and not an existing shared terminal.

Field Meaning
Name / agent kind Display name and optional known result parser; independent of executable name
Launch mode Default terminal, direct executable, or explicit shell
Command One executable or alias name, not an entire shell command line
Arguments JSON array of literal arguments; use one complete "{prompt}" element for argument input
Input argument or stdin; stdin mode must not also contain "{prompt}"
Environment Non-secret values for this run; never evaluated as shell expressions
Secret environment Environment name to secret-entry name; store the actual secret via the password prompt
Shell path / arguments Used only for the explicit-shell launch mode
Timeout Minutes before requesting cooperative stop; default 30, configurable

For gw claude, use the included Claude Code via Gateway profile:

{
  "kind": "claude",
  "mode": "terminal",
  "command": "gw",
  "args": [
    "claude",
    "-p",
    "--output-format",
    "json",
    "--no-session-persistence"
  ],
  "input": "stdin"
}

This is a partial configuration example, not a task to run during installation. The gateway remains a separately installed project. Stdin keeps prompt text out of its Windows argument re-quoting layer. PowerShell piping may append a newline. For a new agent, choose generic; you still get exit-state and output recording, without claiming a vendor-specific final-answer parser.

Scheduling policies

Task, profile and settings editors distinguish Saving, Saved, cancellation and failure. While a save is pending, repeated submissions, draft reset and terminal selection are disabled. Confirmation updates the edit baseline from the committed record; new tasks/profiles keep the assigned ID so continuing to edit does not create a duplicate. Input typed after submission remains in the draft and is marked unsaved. Errors/cancellation retain the input and allow a deliberate retry. If the list cannot refresh after a successful write, the save remains successful with a refresh warning. Do not repeat it as a new creation. If no result can be confirmed, reopen the scheduler and inspect the saved list before retrying; there is no automatic retry or claim of durable request deduplication across windows.

Settings edits keep the last confirmed baseline. If another window changes the settings before or during saving, the save is rejected rather than overwriting it or re-enabling output persistence. Successful saves can be followed by further edits in the same form. Use Reset draft after a conflict to load the latest settings, then reapply any intended changes. Reset draft discards unsaved input. History-only updates do not invalidate a UI settings draft; Chat changes still require the current store revision.

Setting Default Alternative
While another run is active Skip and record the occurrence Queue only the latest occurrence per task, run serially
Missed while asleep/closed Record as missed; do not replay Run the latest missed occurrence per task
Raw output persistence Off; show in the current extension session Explicitly opt in to bounded disk retention
History limit 100 records 10–500
Captured output 1 MiB per run 64 KiB–4 MiB
Per-profile timeout 30 minutes 1–1440 minutes

Retained output and final answers share an additional 4 MiB per-run budget and 16 MiB aggregate budget, separately for memory and persisted history (including JSON escaping). Oldest payloads are evicted first while history metadata remains; the UI marks affected output as truncated.

Only one managed run is active across windows using the same extension storage. Manual runs do not consume the next scheduled occurrence. There are no automatic AI retries. The extension must be running; there is no OS scheduler registration. An invalid timezone blocks that task rather than silently changing its execution time.

Results and stopping

succeeded means the observed command exited successfully (and no parsed agent failure was reported), not that the requested coding task is correct. Terminal output is a combined stream; it is not labeled as separated stdout and stderr. Known structured CLI results can provide a final-answer view.

Stop and timeout request cancellation of the owned run only. The scheduler never calls gw down or kills all processes named node, claude, etc. Unknown termination, a closed terminal or an abandoned run can require inspection and explicit acknowledgment before another task may start. Check that the task is no longer running before acknowledging. A custom wrapper must wait for its task and propagate the result; arbitrary detached descendants cannot be guaranteed.

Privacy and limitations

Profiles, task prompts and approved folders are stored in VS Code's user-local extension storage, not in the opened repository. Secrets use VS Code SecretStorage. Raw output may contain sensitive data; persistence is off by default. Native CLI histories and VS Code terminal history are controlled separately. Explicit secret values are redacted, but output is not guaranteed to be free of every possible secret.

Scheduler-managed output removes terminal control sequences and normalizes CRLF before matching registered secret values, including across chunk boundaries. Direct execution masks stdout and stderr independently before merging them. Color or hyperlink sequences cannot split a registered value around this check. This does not detect arbitrary encoded/transformed secrets, alter native terminal scrollback, or erase CLI-owned logs. With persistence disabled, bounded output can still be displayed in the owning window's memory; it is not written to disk.

Acknowledging an unknown/interrupted run rechecks Workspace Trust and cancellation inside the save transaction after confirmation. A declined or revoked confirmation does not mark the run acknowledged or free its execution slot.

Terminal input/environment transport has a 24,000-character limit; direct execution supports larger input subject to platform limits. Direct execution does not resolve aliases or Windows .cmd / .ps1 wrappers: select a terminal/shell profile for those.

Remote/WSL/container windows, existing chat continuation, automatic worktrees and execution after VS Code exits are not included. Shell support depends on runtime capability checks. Development uses dummy agents only: real AI/gateway end-to-end execution is not implied by fixture tests, nor is cross-OS support implied by a Windows run.

See architecture and research sources for the execution contract, CLI permission prerequisites and detailed boundaries.

Development

npm ci
npm run typecheck
npm run compile
npm test
npm run test:extension
npm run lint
npm run verify:nls
npm run package
npm run verify:vsix

npm run verify:lockfile checks that locked dependencies include fixed versions, integrity hashes and public npm tarball URLs; packaging runs this guard as well. Clean release checkouts use npm ci --registry=https://registry.npmjs.org so personal registry configuration is not required to reproduce a build.

F5 launches an isolated Extension Development Host through the provided launch configuration, retaining its development-only data under artifacts/dev-user-data. It does not inherit your usual VS Code settings, but terminal shells can still load their normal startup files. Integration tests use their own user-data/extensions/workspace directories and must never invoke a real AI CLI. For an installed VS Code binary, set VSCODE_EXECUTABLE_PATH for the extension test runner.

Do not publish, push release tags, register a daemon, or run AI tasks as part of setup. Local VSIX artifacts belong under artifacts/ and are not committed.

To regenerate the original extension icon on Windows, run ./scripts/New-ExtensionIcon.ps1 -Apply in PowerShell. Without -Apply, the script only reports its intended output.

Feedback and related projects

  • Report a bug or request a feature. Include the extension version, OS, shell and reproduction steps; never include secrets, real prompts or raw agent output.
  • Changelog tracks changes; third-party notices preserve upstream attribution.
  • Copilot Scheduler is the related extension that inspired this separate project.

Repository and issue links require access to this private repository. For public questions, use Marketplace Q&A.

日本語

GitHub Copilot CLI、Codex CLI、Claude Code を VS Code から予約実行する拡張です。 VS Code の表示言語が日本語なら、コマンド・フォーム・実行履歴も日本語になります。

  1. Marketplace から AI CLI Scheduler / yamapan をインストールします。
  2. 左端の AI CLI Scheduler アイコンをクリックし、タスク一覧上部の歯車から管理画面を開きます。コマンドパレットの AI CLI Scheduler: スケジューラを開く も利用できます。
  3. CLI の導入・認証を別途済ませ、プロファイル、プロンプト、作業フォルダと日時を設定します。
  4. 新規タスクは無効で保存されます。内容とフォルダ承認を確認してから有効にしてください。

単発・cron 予約、手動実行、停止要求、実行履歴に対応します。予約は VS Code 起動中だけ動作します。 「成功」はコマンドの終了コード等の確認結果であり、回答やコードの正しさの保証ではありません。 生出力の永続保存は既定で無効、秘密値は SecretStorage で管理します。 PowerShell は 7.3 以降が必要です。Windows で shell 種別の通知がない場合は、専用端末の実プロセスを 読み取り確認します。確認できない場合は実行しません。実 AI や gateway を使う検証は行っていません。

詳細: 日本語 README(リポジトリへのアクセス権が必要)。 公開の問い合わせ先は Marketplace Q&A です。

  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
  • Your Privacy Choices
  • Consumer Health Privacy
© 2026 Microsoft