// docs/faq.md docs online

FAQ

Short answers, with links to the long ones.


What is vincent, in one sentence?

A local-first control plane for AI coding-agent workloads: a background daemon runs agent CLIs against your git repositories under workflows you write, and every client is a thin consumer of its localhost API.

Does it need an API key or an account?

No. vincent stores no credentials. It runs the agent CLI you already installed and authenticated. There is no vincent account and no telemetry, and vincent reaches the network only on your behalf: whatever your agent CLI and your workflow’s own git commands do, plus reading a GitHub issue when you create a task from one — which uses your existing gh login, or a GITHUB_TOKEN/GH_TOKEN already in the daemon’s environment, stores neither, and is switched off by github.enabled: false.

Which agent CLIs work?

Claude Code (claude), Codex (codex) and Cursor (cursor-agent). Pick one per workflow, per step, or per task. See Agent CLIs.

Does it work on Windows?

Yes — fully, and CI proves it on every pull request alongside macOS and Linux. The one genuine gap is that cursor’s restricted mode requires macOS or Linux, where vincent fails the step rather than silently running it full-auto. See Windows.

Is my repository safe? What does “full-auto” actually mean?

An agent in full-auto can run arbitrary commands as you. The git worktree isolates tasks from each other, not from your machine. Nothing is pushed or merged unless a workflow step does it, everything is transcripted, and any step can be restricted. Read the Security model before pointing it at anything sensitive.

Does it touch my working copy?

No. Each task gets its own git worktree on its own branch — vincent/{id}-{slug} unless you configure a different convention. Your checkout, current branch and stash are untouched.

Does it delete my branches?

Only an empty one. Archiving a task removes its worktree and keeps the record. It keeps the branch too, unless that branch has no commits past the base it was cut from — a workflow that never wrote to the repository leaves nothing on its branch, and archiving deletes it rather than leaving an empty ref behind. A branch carrying any commit is never deleted. Turn the cleanup off with delete_empty_branch_on_archive: false.

The remote counterpart is left alone unless you also set delete_remote_branch_on_archive: true — off by default, and even then it runs only after the local delete succeeded, only for a branch with a configured upstream, and only when you archive the task yourself.

To find what to clean up, ask vincent rather than git — with configurable names a glob no longer finds them all:

vincent task ls --archived      # the branch column lists every branch vincent made

What happens if I close the TUI?

Nothing. The daemon owns all execution; clients are disposable. Close the TUI, close the terminal, log out — tasks keep running (on Linux, surviving logout needs loginctl enable-linger, which the service installer handles).

What happens if the daemon crashes mid-run?

Every transition is persisted before it is acted on. On restart, interrupted step runs are finalized, verified orphan processes are killed (the PID must still exist and still hold the same process, checked against a platform-native identity recorded at spawn — a PID the operating system has since handed to something else is left alone), and the step re-runs as an attempt that does not consume a retry. See Task lifecycle.

Do I have to write YAML?

Not to start: the built-in adhoc workflow is one agent step, and four examples ship ready to copy. You will want your own soon after — Writing workflows is short. If you would rather not write the first one by hand, run the built-in create-workflow against the repository that needs it: describe the workflow in the task, name it in the required workflow_name field, and leave global unset to install into that repo’s .vincent/workflows — or set it to true for {config_dir}/workflows.

How do I make a workflow only apply to one repository?

Put it in .vincent/workflows/ inside the repo. Project scope shadows a global file of the same name, and the file travels with the repository.

Do I need to restart anything after editing a workflow or the config?

No. The daemon watches both directories and reloads on save. An invalid file is reported and the last good version keeps running. The one exception is listen:, which takes effect at the next daemon restart.

My workflow file does not show up in vincent workflow ls

Add --project <id> — without it you see built-in and global scopes only.

Why did a step fail when the agent said it succeeded?

Because a check disagreed. An agent reporting success is a claim; a build is a fact. check_failed is the healthy, common failure: read the transcript, then press E to edit the prompt and retry. See Checks.

A task is stuck in queued

It is waiting for a scheduler slot. Check max_parallel_tasks (default 3) and the per-project cap, and raise the task’s priority to move it up the queue.

A task is stuck in awaiting_input

An agent asked you something. It is pinned to the top of the board with a badge — press enter on the row to answer. Note that awaiting_input holds a concurrency slot, because the agent process is alive mid-step. Set on_input: deny on workflows that must stay unattended.

vincent says my agent CLI is missing, but my shell finds it

Almost always PATH. A service-installed daemon captures PATH at install time on macOS and Linux, so a CLI installed afterwards is invisible to it — rerun vincent service install. Or skip PATH entirely with agents.<name>.path in config.yaml. If it is cursor: vincent resolves cursor-agent, never cursor.

Why does running a cursor step change my cursor model?

Cursor persists whatever --model it is given to ~/.cursor/cli-config.json, and vincent always passes one (defaulting to auto) so runs are reproducible. It is the one place vincent writes outside its own directories, and it is documented rather than discovered.

Can I use it in CI?

vincent workflow validate yes — it needs no daemon, no network and no agent CLI, which makes it ideal for a pre-commit hook or a CI job. Running tasks in CI is possible via the API but was not the design target: vincent is built for a developer machine.

Can I drive it from a script?

Yes. Every subcommand takes --json, exit codes distinguish “fix your request” (1) from “no daemon” (2), and the API is a documented localhost REST + SSE surface. See Scripting vincent.

Is there a web UI?

Not today. The TUI and the CLI are the shipped clients; both are thin consumers of the API, so a web UI is a client someone could write against the same endpoints.

Does it cost anything? Does it show me what a run cost?

vincent is MIT-licensed and free. Your agent CLI’s usage is billed by its vendor. Claude Code reports cost, so the board’s cost column sums every attempt for it; codex and cursor report none, and vincent shows nothing rather than guessing. That figure can also be a limit: max_task_cost_usd blocks a task once it has spent past a ceiling you set. It is off by default, and — for the same reason the column is empty — it cannot see a task that ran on codex or cursor.

How do I stop everything right now?

vincent daemon stop

Graceful: admission stops, running processes get 15 seconds, then they are killed and marked interrupted — the same resume path as a crash, so nothing is lost. --force if it will not go.

How do I remove it completely?

vincent service uninstall, vincent daemon stop, delete the binary, delete the config and data directories, then clean up vincent/* branches in any repository you used.

Where do I report a bug?

GitHub issues. Security issues go through private advisories instead. Include vincent version, your OS, and the relevant part of {data_dir}/logs/daemon.log.

Can I contribute?

Please. CONTRIBUTING.md has the setup, the commit convention, architecture pointers, documentation expectations, and the PR checklist. For substantial changes, open an issue first so the problem and user impact can be agreed before implementation begins.