diff --git a/howto/herdr-setup-and-config.md b/howto/herdr-setup-and-config.md index c0f4785..3206052 100644 --- a/howto/herdr-setup-and-config.md +++ b/howto/herdr-setup-and-config.md @@ -95,6 +95,29 @@ Only behavior/notification settings were changed; keybindings left at defaults o Apply live after editing: `herdr server reload-config` (returns `status: applied` with a `diagnostics` array — empty means the config is valid). +## Persistence model & reusable workspaces (researched 2026-07-15, docs dated 2026-07-14) + +What survives what ([session-state docs](https://herdr.dev/docs/session-state)): + +| Case | Processes live | Layout+cwd | Scrollback | Agent convo | +|---|---|---|---|---| +| Detach / close window | yes | yes | yes | yes | +| `workspace close` | **no — destroys that workspace's herdr state; cannot be reopened** | no | no | only via agent's own `--resume` | +| Server restart | no | yes (session.json snapshot restore) | only with `[experimental] pane_history = true` | yes if native resume integration installed | + +- **Never "close" a workspace to pause work — detach instead.** Closing is removal, not suspension. Detach is the intended step-away path; the server keeps everything running. +- **No declarative workspace/layout config exists** (confirmed against full config reference). Reusable per-client/per-project layouts are built imperatively: + ```bash + herdr workspace create --cwd PATH --label "Name" [--no-focus] + herdr tab create --workspace --cwd PATH --label "Tab" + herdr pane split --pane --direction right --cwd PATH + herdr pane run "command" + ``` + Wrap these in a per-client bootstrap script, or package as a herdr plugin action (`[[actions]]` in `herdr-plugin-toml`, bindable to a key) — prior art: `dev-layout-bootstrap` in `ogulcancelik/herdr-plugin-examples`. +- Plugin `[[events]]` hooks exist only for events like `worktree.created` — no general "on workspace open, run X" hook. +- **Agent skill file**: `npx skills add ogulcancelik/herdr --skill herdr -g` installs a SKILL.md letting Claude Code *inside a herdr pane* drive herdr (split panes, run commands, read sibling pane output). Gated on `HERDR_ENV=1`. +- Agent detection can't see through tmux nested inside a pane; sandboxes may need `HERDR_AGENT=`. + ## Gotchas / notes - **Notification popups need a daemon on Wayland/Hyprland.** `delivery = "system"` (and often diff --git a/journal/2026-07-15.md b/journal/2026-07-15.md index 2b825fc..3955579 100644 --- a/journal/2026-07-15.md +++ b/journal/2026-07-15.md @@ -287,3 +287,10 @@ tags: [scope/global, type/log] **Reason:** prompt_input_exit **Vault notes touched:** /home/jared/Documents/SecondBrain/howto/herdr-setup-and-config.md + +## Session — 2026-07-15T15:10:34Z + +**Project:** /home/jared/servers +**Reason:** prompt_input_exit +**Vault notes touched:** +(none) diff --git a/reference/gary-steel-client-engagement.md b/reference/gary-steel-client-engagement.md new file mode 100644 index 0000000..6d01f01 --- /dev/null +++ b/reference/gary-steel-client-engagement.md @@ -0,0 +1,40 @@ +--- +type: reference +title: Gary Steel — client engagement map +summary: Where Gary Steel's client work lives locally — the client-management project and the WordPress schema plugin — and how it's organized in the herdr workspace. +tags: + - type/reference + - client/gary-steel + - project/llf-schema + - project/philly-search-engine-marketing + - tool/herdr +scope: client +last_updated: 2026-07-15 +date: 2026-07-15 +source: servers +--- + +# Gary Steel — Client Engagement Map + +Gary Steel is an ongoing client (Philly search engine marketing). Two local working +directories serve this engagement: + +| Directory | Purpose | +|---|---| +| `~/clients/philly-search-engine-marketing/` | Client-management project (git, `main`) — engagement docs, SEM work | +| `~/dev/llf-schema/` | WordPress schema plugin developed and maintained for Gary | + +## Herdr workspace layout + +Work for Gary runs in a herdr workspace named **"Gary Steel - Client"** with two tabs: + +- **Client** → `~/clients/philly-search-engine-marketing/` +- **Schema Plugin** → `~/dev/llf-schema/` + +Pause work by **detaching**, never by closing the workspace (herdr `workspace close` +destroys the workspace state — see [[herdr-setup-and-config]]). + +## Related + +- [[herdr-setup-and-config]] +- [[2026-06-30-llf-schema-gbp-url-cross-link-intentional]] diff --git a/reference/tea-cli-comment-blocks-on-stdin.md b/reference/tea-cli-comment-blocks-on-stdin.md index 79113fd..2f71b0c 100644 --- a/reference/tea-cli-comment-blocks-on-stdin.md +++ b/reference/tea-cli-comment-blocks-on-stdin.md @@ -1,5 +1,5 @@ --- -summary: The tea CLI's `comment` subcommand hangs indefinitely unless stdin is closed, even when the comment body is passed as a positional argument. +summary: "The tea CLI's `comment` and `issues edit --description` subcommands hang indefinitely in non-interactive contexts unless stdin is closed; the Forgejo REST API is a robust bypass." tags: - type/reference - tool/tea @@ -7,7 +7,7 @@ tags: scope: global source: cc-os date: 2026-07-14 -last_updated: 2026-07-14 +last_updated: 2026-07-15 --- # tea CLI: `comment` blocks on stdin @@ -33,8 +33,29 @@ Only `tea comment` was observed hanging. In the same session, these ran **withou - `tea issues --repo ...` (view) - `tea issues edit --repo ... --add-assignees ` -So this is **not** a blanket property of every `tea` subcommand. `tea issues create` and -`tea issues close` were never tested without the guard, so their behavior is unknown. +So this is **not** a blanket property of every `tea` subcommand. + +**Update 2026-07-15 (cc-os wayfinder charting):** + +- `tea issues edit --description ""` **also hangs** without the guard — observed + as the same silent 2-minute timeout in a bash script. (Note `edit --add-assignees` + returned normally on 2026-07-14, so the hang seems tied to body-carrying flags, fitting + the stdin hypothesis.) Not retried with `< /dev/null`; the API route below was used instead. +- `tea issues create --repo ... --title ... --description "$(cat file)"` completed normally + **nine times in a row** inside a bash script without the guard — create appears safe. +- `tea issues close` remains untested without the guard. + +**Robust bypass — the Forgejo REST API.** When a tea subcommand hangs (or for anything +scripted), PATCH/POST directly with tea's own token, read in-process and never printed: + +```python +token = re.search(r'token:\s*(\S+)', open('~/.config/tea/config.yml').read()).group(1) +# PATCH /api/v1/repos/{owner}/{repo}/issues/{n} {"body": ...} — edit body +# PATCH ... /issues/{n} {"state": "closed"} — close +# POST ... /issues/{n}/comments {"body": ...} — comment +``` + +All three returned 201 and behaved correctly where `tea issues edit` had hung. Cheap defensive habit for any agent scripting tea: append `< /dev/null` to tea calls in non-interactive contexts. It is harmless where it isn't needed, and it converts a silent