{"record":{"id":"c532be5db2c078a4","repo":"atuinsh/atuin","slug":"atuin-history-tail-requires-atuin-to-be-built-wi","errorCode":null,"errorMessage":"`atuin history tail` requires Atuin to be built with the `daemon` feature","messagePattern":"`atuin history tail` requires Atuin to be built with the `daemon` feature","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/atuin/src/command/client/history.rs","lineNumber":1138,"sourceCode":"                )\n                .await?\n                {\n                    println!(\"{id}\");\n                }\n\n                Ok(())\n            }\n            Self::End {\n                id, exit, duration, ..\n            } => end_history_entry(settings, id, exit, duration).await,\n            Self::Tail => {\n                #[cfg(feature = \"daemon\")]\n                {\n                    return Self::handle_tail(settings).await;\n                }\n\n                #[cfg(not(feature = \"daemon\"))]\n                bail!(\"`atuin history tail` requires Atuin to be built with the `daemon` feature\");\n            }\n            cmd => {\n                let context = current_context().await?;\n\n                let db_path = &settings.db_path;\n                let record_store_path = &settings.record_store_path;\n\n                let db = Sqlite::new(db_path, settings.local_timeout).await?;\n                let store = SqliteStore::new(record_store_path, settings.local_timeout).await?;\n\n                let encryption_key = paseto_v4::Key::try_load_or_generate(&settings.key_path)\n                    .context(\"could not load or generate encryption key\")?;\n\n                let host_id = Settings::host_id().await?;\n                let history_store = HistoryStore::new(store.clone(), host_id, encryption_key);\n\n                match cmd {\n                    Self::List {","sourceCodeStart":1120,"sourceCodeEnd":1156,"githubUrl":"https://github.com/atuinsh/atuin/blob/900007c48045867e7f44b0f9bc55ad9dbe99ee0d/crates/atuin/src/command/client/history.rs#L1120-L1156","documentation":"`atuin history tail` is implemented on top of the daemon's streaming RPC and only exists when the binary is compiled with the `daemon` feature. Running a build without that feature bails with this message instead of attempting the command.","triggerScenarios":"Invoking `atuin history tail` on an atuin binary built without `--features daemon` (e.g. some distro packages or a default `cargo install atuin` depending on default features).","commonSituations":"Installing atuin from a source that strips optional features; building with `--no-default-features`; distro packages that exclude the daemon.","solutions":["Install/build atuin with the daemon feature: `cargo install atuin --features daemon` (or ensure default features are on).","Use a distro/official package that includes daemon support.","Verify features with `atuin history tail --help` after reinstalling."],"exampleFix":"// before\ncargo install atuin --no-default-features --features client\n\n// after\ncargo install atuin --features daemon","handlingStrategy":"validation","validationCode":"// shell check before invoking:\natuin history tail --help >/dev/null 2>&1 \\\n  || echo \"this atuin build lacks the daemon feature; reinstall with --features daemon\"","typeGuard":null,"tryCatchPattern":"match run_history_tail().await {\n    Err(e) if e.to_string().contains(\"daemon` feature\") => {\n        eprintln!(\"reinstall atuin with the daemon feature enabled\");\n    }\n    other => other,\n}","preventionTips":["Install atuin with default features or `--features daemon`.","Prefer official packages with daemon support.","Avoid `--no-default-features` builds for interactive machines."],"tags":["feature-flag","compile-time","daemon","cli"],"backgroundTag":"feature-not-enabled","analyzedSha":"900007c48045867e7f44b0f9bc55ad9dbe99ee0d","analyzedAt":"2026-09-19T12:52:51.491Z","contentChangedAt":"2026-09-19T12:52:51.491Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}