paperclipai/paperclip · error · Error
is still loaded after uninstall.
Error message
${manager.serviceName} is still loaded after uninstall. What it means
After service uninstall the manager still reports the service as loaded, meaning the service-manager unload failed to take effect; a post-condition guard on uninstall.
Solutions
- Uninstall the service again after the manager fully reloads, or remove it via the service manager directly.
Defensive patterns
Strategy: try-catch
When it happens
Trigger: Thrown at cli/src/commands/service.ts:191 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of paperclipai/paperclip@120ae5428f (2026-08-18).
Data as JSON: /api/errors/83c25ffcda82c3b0.
Report an issue: GitHub.
Appendix: source
Thrown at cli/src/commands/service.ts:191
.action(async (opts) => {
const manager = await resolveManager(opts); if (!manager) return;
const result = await manager.install({ startNow: opts.startNow, startOnLogin: opts.startOnLogin });
let lingerEnabled = false;
if (manager.enableLinger) {
let consent = opts.enableLinger === true;
if (!consent && process.stdin.isTTY && process.stdout.isTTY) {
consent = await p.confirm({ message: "Allow Paperclip to run without an active login session? This runs 'loginctl enable-linger' for your user and may request system authorization.", initialValue: false }) === true;
}
if (consent) { await manager.enableLinger(); lingerEnabled = true; }
}
output({ installed: true, changed: result.changed, platform: manager.platform, serviceName: manager.serviceName, definitionPath: manager.definitionPath, lingerEnabled }, opts.json);
});
common(service.command("uninstall").description("Stop, disable, and remove the background service")).action(async (opts) => {
const manager = await resolveManager(opts); if (!manager) return;
await manager.uninstall();
const status = await manager.status();
if (status.installed || status.active) throw new Error(`${manager.serviceName} is still loaded after uninstall.`);
output({ uninstalled: true, serviceName: manager.serviceName }, opts.json);
});
for (const verb of ["start", "stop"] as const) {
common(service.command(verb).description(`${verb === "start" ? "Start" : "Stop"} the background service`)).action(async (opts) => {
const manager = await resolveManager(opts); if (!manager) return;
await manager[verb]();
output(await manager.status(), opts.json);
});
}
common(service.command("restart").description("Hot-restart the service while preserving active agent runs"))
.option("--wait", "Wait for active runs to drain instead of adopting them", false)
.option("--expected-version <version>", "Require the restarted server to report this version")
.action(async (opts) => output(await restartManagedService({ instanceId: opts.instance, expectedVersion: opts.expectedVersion, waitForDrain: opts.wait }), opts.json));
common(service.command("status").description("Show supervisor and health status")).action(async (opts) => {
const manager = await resolveManager(opts); if (!manager) return;View on GitHub (pinned to 120ae5428f)