Commit Graph

9967 Commits

Author SHA1 Message Date
Stephen Chin
0c45a4700c Update ct/hermesagent.sh
Removed an unnecessary space.

Co-authored-by: Tobias <96661824+CrazyWolf13@users.noreply.github.com>
2026-05-14 20:49:44 -07:00
Stephen Chin
96d7c7d61d fix(hermesagent): replace ${APP} with literal name in msg lines
Resolve  to 'Hermes Agent' in all msg_info/msg_ok/msg_error
calls per CrazyWolf13 review feedback — improves readability for users
reading install output.
2026-05-11 17:27:51 -07:00
Stephen Chin
c6f22c4038 fix(hermesagent): remove Warning prefix from notes; set config_path to .env
- Drop 'WARNING: '/'Warning: ' prefixes from note texts — the type:warning
  field already communicates severity (per CrazyWolf13 review feedback)
- Set config_path to /home/hermes/.hermes/.env (was directory path)
2026-05-11 17:27:40 -07:00
Stephen Chin
285870baa9 fix(hermes-agent): remove redundant redact_secrets workarounds
hermes-agent v2026.5.7 (PR #21193, merged 2026-05-07) flipped
HERMES_REDACT_SECRETS and DEFAULT_CONFIG security.redact_secrets to
true by default. The explicit HERMES_REDACT_SECRETS=true in .env and
the config.yaml creation block added in commit 1420682e are now
redundant — Hermes writes the same values itself on a fresh install.

Verified on CT 900 (v2026.5.7): _REDACT_ENABLED=True with no env
override; Hermes self-writes redact_secrets: true to config.yaml.

Ref: NousResearch/hermes-agent#17691
2026-05-10 21:36:22 -07:00
Stephen Chin
91104fe71c set security.redact_secrets: true in config.yaml on install 2026-05-10 20:34:02 -07:00
Stephen Chin
84f20e8b15 fix(hermesagent): clean up footer, login hint, JSON notes and config_path 2026-05-10 17:14:48 -07:00
Stephen Chin
0c4678c0b4 fix(hermesagent): remove redundant web dashboard pip install; upstream installer includes web,pty extras in .[all] 2026-05-10 15:44:39 -07:00
Stephen Chin
46746538a0 fix(hermesagent): source /etc/default/hermes via setsid; drop inline env vars and HERMES_HOME 2026-05-10 15:39:22 -07:00
Stephen Chin
c685754144 fix(hermesagent): restore setsid to suppress installer TUI; remove redundant EnvironmentFile for .env 2026-05-10 15:30:20 -07:00
Stephen Chin
b3faacb5e1 fix(hermesagent): split env into /etc/default/hermes and .env; use NODE_OPTIONS from setup_nodejs 2026-05-10 15:18:31 -07:00
Stephen Chin
43cc3c83d2 fix(hermesagent): set XDG_RUNTIME_DIR in hermes .profile for SSH access 2026-05-10 14:10:53 -07:00
Stephen Chin
9919be3dac fix(hermesagent): show API key file location in CT footer 2026-05-10 14:10:39 -07:00
Stephen Chin
6a4c88c4cc fix(hermesagent): slim down login hint to su and dashboard tunnel only 2026-05-10 14:10:26 -07:00
Stephen Chin
1671917bab fix(hermesagent): move systemd env vars to EnvironmentFile 2026-05-10 14:10:09 -07:00
Stephen Chin
0b11ce1681 fix(hermesagent): add external script warning and remove redundant check
Adds third-party script warning with user confirmation before running
the upstream installer (install) and updater (update), matching the
kasm/pihole pattern. Removes redundant binary existence check per
reviewer feedback. Adds corresponding JSON warning note.
2026-05-09 11:50:57 -07:00
Stephen Chin
67d49e0b8a fix(hermesagent): single-line apt install for single dependency 2026-05-09 10:30:59 -07:00
Stephen Chin
434e170ee3 fix(hermesagent): move service details from CT footer to MOTD
Trims the verbose 12-line CT footer to the standard pattern plus
essential first-run setup steps. API server, API key, and dashboard
SSH tunnel details are now displayed on every SSH login via
/etc/profile.d/hermes-hint.sh instead.

Addresses PR feedback from CrazyWolf13.
2026-05-09 10:27:37 -07:00
Stephen Chin
a0bffe7a4f feat(hermesagent): replace shim+system-unit pattern with hermes-native user services
The previous approach used a /usr/bin/hermes shim to proxy commands from root
to the hermes user, and a hand-crafted system-level systemd unit for the
gateway. This worked for the default profile but broke down for named profiles:

- hermes profile create <name> generates an alias script in
  ~/.local/bin/<name> that calls hermes with -p <name>. These aliases live
  in the hermes user's PATH, not root's, so root could not invoke them.
- Maintaining parity would require per-profile shims, a watcher daemon to
  create/remove them, and system-unit mirrors for each profile gateway — all
  of which would need to stay in sync with hermes internals across updates.

New approach — work with hermes, not around it:

- loginctl enable-linger hermes: ensures the hermes user's systemd session
  starts at boot and persists without login. All user-unit gateways (default
  and per-profile) now survive reboots automatically.
- Gateway service management delegated entirely to hermes: 'hermes gateway
  install' / 'hermes setup' create and enable the user unit natively.
  The install script no longer pre-installs the gateway; hermes prompts the
  user to do so at the end of 'hermes setup'.
- hermes-dashboard.service remains a system unit (no native install command
  exists for it). Its After= no longer references hermes-gateway.service
  since there is no system-unit gateway to depend on.
- /usr/bin/hermes shim removed. Root is guided to 'su - hermes' via a two-
  line /etc/profile.d/hermes-hint.sh message on login, with a one-liner to
  make the switch automatic. Once logged in as hermes, all hermes commands,
  profile aliases, and gateway management work natively.
- update_script simplified: only hermes-dashboard (our unit) is stopped and
  restarted. hermes update --yes handles gateway service lifecycle itself.
2026-05-03 15:22:11 -07:00
Stephen Chin
8afb182095 fix(hermesagent): shim handles hermes user invocation
runuser requires root. When the hermes user calls the shim directly
(e.g. via su - hermes), exec the binary directly instead.
2026-05-02 12:30:34 -07:00
Stephen Chin
be8d55fb83 fix(hermesagent): pass --yes to hermes update to avoid interactive prompt
hermes update prompts "Restore local changes now? [Y/n]" when run
in a TTY context. --yes skips all interactive prompts.
2026-05-02 12:21:18 -07:00
Stephen Chin
21dfffd158 fix(hermesagent): correct JSON metadata
- default_credentials: username null/null (no SSH login for hermes
  service account; access is via root like all PVE Helper Scripts)
- Update setup note to reference root instead of hermes user
- Update dashboard tunnel note to use root and -fNL flags
2026-05-02 12:10:09 -07:00
Stephen Chin
aa975798a1 fix(hermesagent): correct SSH access instructions
The hermes service account has no password or SSH keys and cannot
be used to log in. Access is via root (standard PVE Helper Scripts
pattern). Also add -fN flags to the dashboard tunnel command so it
runs in the background without opening a shell session.
2026-05-02 12:09:56 -07:00
Stephen Chin
06d9c62e54 fix(hermes-agent): rename files to match NSAPP derivation
APP='Hermes Agent' produces NSAPP='hermesagent' via build.func's
lowercase+strip-spaces logic. Rename ct/, install/, json/, and
header files to match.
2026-05-02 09:45:59 -07:00
Stephen Chin
edf1a9604a fix(hermes-agent): harden .hermes directory permissions
The response_store.db and session JSON files under ~/.hermes/ are stored
in plaintext and readable by any process with filesystem access. Set
~/.hermes to 0700 (owner-only) and ~/home/hermes to 0750 to restrict
access to conversation history, credentials, and session data.

Ref: https://github.com/NousResearch/hermes-agent/issues/7486
2026-05-02 08:09:21 -07:00
Stephen Chin
e0aaacdb96 fix(hermes-agent): restrict /proc access in systemd services
Hermes strips sensitive env vars from tool subprocesses, but child
processes can recover them by reading /proc/<parent_pid>/environ. Add
ProtectProc=invisible and ProcSubset=pid to both systemd services to
hide other processes' /proc entries and limit /proc to the service's
own PID namespace.

Ref: https://github.com/NousResearch/hermes-agent/issues/4427
2026-05-02 08:09:00 -07:00
Stephen Chin
16e774083f fix(hermes-agent): set UMask=0077 on systemd services
The Anthropic OAuth helper writes credential files with the process
default umask, resulting in 0644 permissions on sensitive files. Set
UMask=0077 on both hermes-gateway and hermes-dashboard services so all
files created at runtime are owner-only (0600/0700).

Ref: https://github.com/NousResearch/hermes-agent/issues/11003
2026-05-02 08:08:41 -07:00
Stephen Chin
ed9630a783 fix(hermes-agent): enable secret redaction by default
HERMES_REDACT_SECRETS is off by default, exposing API keys in chat output
and session JSON files. Add HERMES_REDACT_SECRETS=true to the .env file
created by the installer.

Ref: https://github.com/NousResearch/hermes-agent/issues/17691
2026-05-02 08:08:23 -07:00
Stephen Chin
adbfd66056 feat: add Hermes Agent LXC
Adds container scripts for Hermes Agent (Nous Research), a self-improving
AI agent with LLM provider integration, terminal execution, web browsing,
and multi-platform messaging support.

Files:
- ct/hermes-agent.sh
- install/hermes-agent-install.sh
- json/hermes-agent.json
- ct/headers/hermes-agent

Deviations from standard patterns (justified):

1. Uses upstream installer (curl-pipe) instead of fetch_and_deploy_gh_release:
   Hermes is a uv-managed Python application with complex dependency
   resolution, virtualenv management, and binary placement—not a single
   binary or tarball from GitHub Releases.

2. Dedicated 'hermes' service user (not running as root):
   The agent executes arbitrary terminal commands on behalf of the user.
   Running as root would give the AI unrestricted system access. This
   follows the protonmail-bridge service-user pattern for isolation.

3. Dashboard (port 9119) bound to localhost only, requiring SSH tunnel:
   The web UI provides admin access to an AI that can execute commands.
   SSH tunnel provides an authentication/authorization boundary.

4. /usr/bin/hermes shim script:
   The hermes CLI validates cwd permissions; running 'hermes' as root
   from /root fails. The shim cd's to /home/hermes and exec's as the
   hermes user via runuser.

5. setsid --wait wrapping of upstream installer:
   The upstream installer probes /dev/tty for interactive prompts even
   with --skip-setup; setsid detaches the controlling terminal.
2026-05-02 06:25:28 -07:00
tremor021
b0cb194bd5 soulsync: fix Micks stuff again 2026-04-30 18:53:22 +02:00
CanbiZ (MickLesk)
6d9d44642c Merge pull request #1645 from WaffleThief123/forgejo-runner-fix
forgejo-runner (FIX): support generated/unattended mode and configurable runner labels
2026-04-30 15:39:37 +02:00
CanbiZ (MickLesk)
0d04c568ad fix(invidious): companion key must be exactly 16 chars (rand -hex 8) 2026-04-30 15:30:21 +02:00
CanbiZ (MickLesk)
7aa3343e1f fix(ente): match actual subscriptions schema (storage column, attributes jsonb, no transaction_id) 2026-04-30 15:03:23 +02:00
CanbiZ (MickLesk)
8a10bfe155 fix(garmin-grafana): pass --homepath to grafana-cli plugin install 2026-04-30 15:02:14 +02:00
CanbiZ (MickLesk)
ca8ddd34a7 fix(ente): replace fragile HMAC email lookup with user_id-based admin/subscription setup 2026-04-30 15:00:56 +02:00
CanbiZ (MickLesk)
8058b92558 fix(invidious): bump RAM to 4GB / disk to 8GB (Crystal compile needs >=2.5GB free) 2026-04-30 14:57:00 +02:00
CanbiZ (MickLesk)
c7bc06aaa5 fix(garmin-grafana): avoid set -e abort on ((retries++)) returning 0 2026-04-30 14:51:02 +02:00
CanbiZ (MickLesk)
01376b3e51 fix(paperclip): trim notes to fit Discord 2000 char limit 2026-04-30 14:50:33 +02:00
CanbiZ (MickLesk)
59331708a5 fix(invidious): broken sed address, key typo, wrong service paths, missing logrotate path 2026-04-30 14:46:36 +02:00
CanbiZ (MickLesk)
328561e64d fix(invidious): use ~ as sed delimiter and anchor-based replacement (pipe in pattern broke sed) 2026-04-30 14:43:43 +02:00
CanbiZ (MickLesk)
50af211392 fix(garmin-grafana): revert chronograf to fetch_and_deploy_from_url (no .deb in GH releases) 2026-04-30 14:42:50 +02:00
CanbiZ (MickLesk)
cbd38c581e fix(authentik): align install with two-volume layout from ct/authentik.sh
- drop redundant curl of default.yml (file is part of release tarball)
- stop creating /opt/authentik-data dirs in install (mounted later as separate volume)
- enable services without --now in install (started after data volume is attached)
2026-04-30 14:37:57 +02:00
CanbiZ (MickLesk)
501b2145f1 fix(ente): use HMAC-SHA-256 email_hash for user lookup (schema has no plain email column) 2026-04-30 14:36:07 +02:00
CanbiZ (MickLesk)
90f77a81ca fix(plane): set anonymous download on MinIO uploads bucket, raise upload limits 2026-04-30 14:36:02 +02:00
CanbiZ (MickLesk)
8cf1ff11e1 docs(blinko): add note about F5 refresh after signup 2026-04-30 14:36:02 +02:00
CanbiZ (MickLesk)
e84dca5efa fix(invidious): strip git invocations from invidious.cr before make 2026-04-30 14:35:57 +02:00
CanbiZ (MickLesk)
7dfe23a785 refactor(garmin-grafana): use fetch_and_deploy_gh_release for Chronograf, split config blocks 2026-04-30 14:35:52 +02:00
CanbiZ (MickLesk)
b920412247 fix(clickhouse): clarify URL labels (Play UI / HTTP API on 8123) 2026-04-30 14:35:47 +02:00
CanbiZ (MickLesk)
720b077c22 Update nagios-install.sh 2026-04-30 14:13:52 +02:00
CanbiZ (MickLesk)
5b84bd9742 Update nagios.sh 2026-04-30 14:01:24 +02:00
CanbiZ (MickLesk)
bfc3b8b617 simplify nagios 2026-04-30 14:00:30 +02:00