beachcomber 0.5.1

A centralized daemon that caches shell state (git, battery, hostname, etc.) so every consumer reads from one fast cache instead of independently forking shells
Documentation
---
sidebar_position: 11
---

# Shell Helpers

beachcomber ships a cache-warming hook that fires on directory changes. It is not a fallback script — it requires `comb` and is designed to eliminate the one-time cache miss when you `cd` into a new directory.

> If you are looking for the opposite — a shim that makes integrations work _without_ `comb` installed — see the [Polyfill]../integrating/polyfill.md.

## chpwd hook

`scripts/chpwd.sh` is a directory-change hook that pokes beachcomber whenever you `cd` into a new directory. It sends pokes for `git`, `mise`, `terraform`, `python`, `direnv`, and `asdf` — so by the time you run your first command in a new directory, the cache is already warm. Without this hook, the first query after a `cd` pays the cold-cache synchronous execution cost (see [Troubleshooting → first query is slow](./troubleshooting.md)).

### Install

```sh
mkdir -p ~/.config/beachcomber
curl -fsSL https://beachcomber.sh/scripts/chpwd.sh -o ~/.config/beachcomber/chpwd.sh
```

### Shell setup

| Shell | Method |
|-------|--------|
| zsh | `add-zsh-hook chpwd` |
| bash | `PROMPT_COMMAND` |
| fish | `conf.d/` file that sources the downloaded script |

**zsh** — add to `~/.zshrc`:

```sh
source ~/.config/beachcomber/chpwd.sh
autoload -Uz add-zsh-hook
add-zsh-hook chpwd _beachcomber_chpwd
```

**bash** — add to `~/.bashrc`:

```sh
source ~/.config/beachcomber/chpwd.sh
PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND; }_beachcomber_chpwd"
```

**fish** — create `~/.config/fish/conf.d/beachcomber.fish` that sources the downloaded file and wires it up:

```fish
source ~/.config/beachcomber/chpwd.sh
function _beachcomber_chpwd_hook --on-variable PWD
    _beachcomber_chpwd
end
```

### Behaviour

The hook is a no-op if `comb` is not installed — the `command -v comb` check at the top of the script exits silently when the binary is missing.

All pokes run in the background (`&`), so the hook adds no delay to your prompt or directory change. If the daemon is down, the background poke fails silently; the next foreground `comb g` will surface the error.