diff --git a/hive-ag3nt/src/web_ui.rs b/hive-ag3nt/src/web_ui.rs index d4f22ea9..1997265e 100644 --- a/hive-ag3nt/src/web_ui.rs +++ b/hive-ag3nt/src/web_ui.rs @@ -104,11 +104,27 @@ async fn index(State(state): State) -> Html { fn render_online(label: &str) -> String { format!( "

▓█▓▒░ harness alive — turn loop running ▓█▓▒░

\n\ -
\n \ - \n \ + \n \ + \n \ \n\
\n\

enqueued with from: operator on this agent's inbox; the next turn picks it up.

\n\ + \n\ {LIVE_PANEL}", ) } diff --git a/nix/templates/agent-base.nix b/nix/templates/agent-base.nix index 17262a7c..4683023a 100644 --- a/nix/templates/agent-base.nix +++ b/nix/templates/agent-base.nix @@ -7,9 +7,12 @@ environment.systemPackages = with pkgs; [ hyperhive claude-code + bashInteractive git coreutils-full ]; + # claude's Bash tool refuses to run without a POSIX shell + $SHELL set. + environment.variables.SHELL = "${pkgs.bashInteractive}/bin/bash"; systemd.services.hive-ag3nt = { description = "hive-ag3nt harness"; @@ -18,7 +21,12 @@ # The harness shells out to `claude` (turn loop + login flow). systemd # units get a minimal PATH by default, so we have to put claude-code on # it explicitly even though it's in environment.systemPackages above. - path = [ pkgs.claude-code ]; + # bash is on PATH so claude's Bash tool can spawn `$SHELL`. + path = [ + pkgs.claude-code + pkgs.bashInteractive + ]; + environment.SHELL = "${pkgs.bashInteractive}/bin/bash"; serviceConfig = { ExecStart = "${pkgs.hyperhive}/bin/hive-ag3nt serve"; Restart = "on-failure"; diff --git a/nix/templates/manager.nix b/nix/templates/manager.nix index 13ad1919..0859e0b1 100644 --- a/nix/templates/manager.nix +++ b/nix/templates/manager.nix @@ -7,9 +7,12 @@ environment.systemPackages = with pkgs; [ hyperhive claude-code + bashInteractive git coreutils-full ]; + # claude's Bash tool refuses to run without a POSIX shell + $SHELL set. + environment.variables.SHELL = "${pkgs.bashInteractive}/bin/bash"; environment.etc."gitconfig".text = '' [user] @@ -27,9 +30,13 @@ HIVE_PORT = "8000"; HIVE_LABEL = "hm1nd"; }; - # See note in agent-base.nix — `claude` has to be on the service PATH - # explicitly for the harness to shell out to it. - path = [ pkgs.claude-code ]; + # See note in agent-base.nix — `claude` and a POSIX shell have to be on + # the service PATH explicitly for the harness + claude's Bash tool. + path = [ + pkgs.claude-code + pkgs.bashInteractive + ]; + environment.SHELL = "${pkgs.bashInteractive}/bin/bash"; serviceConfig = { ExecStart = "${pkgs.hyperhive}/bin/hive-m1nd serve"; Restart = "on-failure";