agents: drop root, run as per-agent unix user with passwordless sudo (#658)
This commit is contained in:
parent
71211e5722
commit
6b6c6775ee
10 changed files with 349 additions and 71 deletions
|
|
@ -1,7 +1,9 @@
|
|||
//! Per-agent path resolution for state and credential directories.
|
||||
//!
|
||||
//! All agents (including the manager "hm1nd") use `/agents/{label}/state`.
|
||||
//! Claude credentials are always at `/root/.claude` for all agents.
|
||||
//! Claude credentials live at `$HOME/.claude` (post-#658:
|
||||
//! `/home/<agent-name>/.claude` because the harness service now runs
|
||||
//! as a non-root unix user matching the agent label).
|
||||
//!
|
||||
//! Both paths can be overridden via env vars (`HYPERHIVE_STATE_DIR`,
|
||||
//! `HYPERHIVE_CLAUDE_DIR`) for dev / test scenarios.
|
||||
|
|
@ -21,12 +23,22 @@ pub fn state_dir() -> PathBuf {
|
|||
PathBuf::from(format!("/agents/{label}/state"))
|
||||
}
|
||||
|
||||
/// Claude credentials directory for the current agent. Always `/root/.claude`
|
||||
/// because the `claude` CLI reads `$HOME/.claude` (uid 0 → `/root`), and
|
||||
/// hive-c0re binds the per-agent credentials dir there for every container.
|
||||
/// Claude credentials directory for the current agent. `$HOME/.claude`
|
||||
/// matches what the `claude` CLI reads at runtime — both binaries see
|
||||
/// the same `$HOME` set by the per-service systemd `environment`
|
||||
/// declaration (`/home/<agent>` post-#658). Falls back to `/root/.claude`
|
||||
/// for dev / test environments where `HOME` isn't set so the previous
|
||||
/// root-by-default shape keeps working without env wiring.
|
||||
/// Overridable via `HYPERHIVE_CLAUDE_DIR` for dev / test scenarios.
|
||||
#[must_use]
|
||||
pub fn claude_dir() -> PathBuf {
|
||||
std::env::var_os("HYPERHIVE_CLAUDE_DIR")
|
||||
.map_or_else(|| PathBuf::from("/root/.claude"), PathBuf::from)
|
||||
if let Some(p) = std::env::var_os("HYPERHIVE_CLAUDE_DIR") {
|
||||
return PathBuf::from(p);
|
||||
}
|
||||
if let Some(home) = std::env::var_os("HOME") {
|
||||
let mut path = PathBuf::from(home);
|
||||
path.push(".claude");
|
||||
return path;
|
||||
}
|
||||
PathBuf::from("/root/.claude")
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue