---
title: "@henryqw/pi-bark"
seo:
  description: "Send Pi session status and agent output to Bark on iOS."
---

<div class="not-prose my-6 flex flex-wrap items-center gap-3"><a href="https://www.npmjs.com/package/@henryqw/pi-bark" aria-label="View @henryqw/pi-bark version v0.8.5 on npm"><img alt="Version v0.8.5" height="20" src="https://img.shields.io/static/v1?cacheSeconds=7200&amp;color=1d4ed8&amp;label=version&amp;labelColor=6a7282&amp;style=flat-square&amp;message=v0.8.5" width="96"></a><div class="ml-auto flex flex-wrap items-center justify-end gap-3"><a href="https://www.npmjs.com/package/@henryqw/pi-bark" aria-label="View @henryqw/pi-bark on npm"><img alt="Monthly npm downloads" height="20" src="https://img.shields.io/npm/dm/%40henryqw%2Fpi-bark?cacheSeconds=7200&amp;color=1d4ed8&amp;label=downloads&amp;labelColor=6a7282&amp;style=flat-square" width="144"></a><a href="https://github.com/HenryQW/pi-harness/blob/main/extensions/pi-bark/LICENSE" aria-label="View the MIT license for @henryqw/pi-bark"><img alt="MIT license" height="20" src="https://img.shields.io/npm/l/%40henryqw%2Fpi-bark?cacheSeconds=7200&amp;color=1d4ed8&amp;label=license&amp;labelColor=6a7282&amp;style=flat-square" width="78"></a></div></div>

Get [Bark](https://bark.day.app) push notifications when Pi finishes, fails, or needs input.

## Install

```bash
pi install npm:@henryqw/pi-bark
```

1. Open the Bark App.
2. Copy its test URL.
3. Get the Device Key after the host, without sample content such as `/Test`.
4. Run `/set-bark` in Pi.

For `https://api.day.app/your-device-key/Test`, use:

```text
/set-bark your-device-key
```

For a self-hosted server, use:

```text
/set-bark your-device-key https://bark.example.com
```

Treat the Device Key as a secret. Anyone with it can send push notifications to your device.

## Works with

| Package | Relationship | Purpose |
| --- | --- | --- |
| [`@henryqw/pi-herdr-tools`](https://pi.henry.wang/extensions/pi-herdr-tools) | Improves | Adds the same Pi session title to automatic Bark status notifications. |

## Use

Run `/copyb` without arguments to copy the latest Pi response to your clipboard and send it to Bark.

| Surface | Type | Purpose |
| --- | --- | --- |
| `/bark <on\|off\|inherit> \| default <on\|off>` | command | Sets the current CWD override or notification default. |
| `/copyb` | command | Copies and sends the last agent message. |
| `/set-bark <device-key> [server-url]` | command | Saves the Device Key and Server URL. |
| `pi-bark-key [--force \| --disable]` | command | Generates, replaces, or disables the Custom Encryption Key. |

All commands are for users. Run `/` commands in Pi and `pi-bark-key` in a terminal.

`/copyb` selects the same text as Pi's `/copy`, then trims outer whitespace. Markdown, code blocks, internal spacing, and line breaks stay unchanged. After copying, it sends a Bark V2 request to `<serverUrl>/push`. Without Push Encryption, the JSON uses standard Bark parameters:

```json
{
  "device_key": "your-device-key",
  "body": "the last agent message"
}
```

![Manual /copyb and automatic notifications share a sender. Push Encryption protects content; device_key stays plaintext. HTTPS protects transport.](data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iMTI4MCIgaGVpZ2h0PSI3MjAiIHZpZXdCb3g9IjAgMCAxMjgwIDcyMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiByb2xlPSJpbWciIGFyaWEtbGFiZWxsZWRieT0icHVzaC1lbmNyeXB0aW9uLWZsb3ctdGl0bGUgcHVzaC1lbmNyeXB0aW9uLWZsb3ctZGVzYyIgaWQ9InB1c2gtZW5jcnlwdGlvbi1mbG93LXJvb3QiPgogICAgICA8dGl0bGUgaWQ9InB1c2gtZW5jcnlwdGlvbi1mbG93LXRpdGxlIj5Ib3cgcGktYmFyayBwcm90ZWN0cyBwdXNoIGNvbnRlbnQ8L3RpdGxlPgogICAgICA8ZGVzYyBpZD0icHVzaC1lbmNyeXB0aW9uLWZsb3ctZGVzYyI+TWFudWFsIC9jb3B5YiBvdXRwdXQgYW5kIGF1dG9tYXRpYyBQaSBuZWVkcy1pbnB1dCwgZmFpbGVkLCBhbmQgZmluaXNoZWQgbm90aWZpY2F0aW9ucyBzaGFyZSBvbmUgc2VuZGVyIHRoYXQgZW5jcnlwdHMgb25seSBjb250ZW50IHdpdGggQUVTMjU2LUdDTSB3aGVuIGEgQ3VzdG9tIEVuY3J5cHRpb24gS2V5IGlzIHNldCwgc2VuZHMgZGV2aWNlX2tleSBhcyBwbGFpbnRleHQgcm91dGluZyBtZXRhZGF0YSBpbiB0aGUgc2FtZSBKU09OIHJlcXVlc3QsIGFuZCB1c2VzIFRMUyBvbmx5IHdpdGggSFRUUFMuPC9kZXNjPgogICAgICA8ZGVmcz4KICAgICAgPHN0eWxlPkBpbXBvcnQgdXJsKCdodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2NzczI/ZmFtaWx5PUluc3RydW1lbnQrU2VyaWY6aXRhbEAwOzEmYW1wO2ZhbWlseT1HZWlzdDp3Z2h0QDQwMDs1MDA7NjAwJmFtcDtmYW1pbHk9R2Vpc3QrTW9ubzp3Z2h0QDQwMDs1MDA7NjAwJmFtcDtmYW1pbHk9Tm90bytTZXJpZjppdGFsQDA7MSZhbXA7ZmFtaWx5PU5vdG8rU2FucytLUjp3Z2h0QDQwMDs1MDA7NjAwJmFtcDtmYW1pbHk9Tm90bytTZXJpZitLUjp3Z2h0QDQwMCZhbXA7ZmFtaWx5PU5vdG8rU2FucytUQzp3Z2h0QDQwMDs1MDA7NjAwJmFtcDtmYW1pbHk9Tm90bytTZXJpZitUQzp3Z2h0QDQwMCZhbXA7ZGlzcGxheT1zd2FwJyk7CiAgICAgICNwdXNoLWVuY3J5cHRpb24tZmxvdy1yb290IC5kaWFncmFtLWV5ZWJyb3cgeyBmaWxsOiAjNGM1NjY1OyBmb250OiA1MDAgOHB4ICdHZWlzdCBNb25vJywgbW9ub3NwYWNlOyBsZXR0ZXItc3BhY2luZzogLjE2ZW07IH0KICAgICAgI3B1c2gtZW5jcnlwdGlvbi1mbG93LXJvb3QgLmhlYWRpbmcgeyBmaWxsOiAjMTAxODI4OyBmb250OiA0MDAgMjhweCAnSW5zdHJ1bWVudCBTZXJpZicsIHNlcmlmOyB9CiAgICAgICNwdXNoLWVuY3J5cHRpb24tZmxvdy1yb290IC5pbnRybyB7IGZpbGw6ICM0YzU2NjU7IGZvbnQ6IDQwMCAxMnB4ICdHZWlzdCcsIHNhbnMtc2VyaWY7IH0KICAgICAgI3B1c2gtZW5jcnlwdGlvbi1mbG93LXJvb3QgLnpvbmUgeyBmaWxsOiAjZTZlNGRlOyBzdHJva2U6ICMxMDE4Mjg7IHN0cm9rZS1vcGFjaXR5OiAuMTQ7IHN0cm9rZS13aWR0aDogMTsgfQogICAgICAjcHVzaC1lbmNyeXB0aW9uLWZsb3ctcm9vdCAuem9uZS1sYWJlbCB7IGZpbGw6ICM2YTcyODI7IGZvbnQ6IDUwMCA4cHggJ0dlaXN0IE1vbm8nLCBtb25vc3BhY2U7IGxldHRlci1zcGFjaW5nOiAuMTZlbTsgfQogICAgICAjcHVzaC1lbmNyeXB0aW9uLWZsb3ctcm9vdCAuYm91bmRhcnkgeyBmaWxsOiBub25lOyBzdHJva2U6ICMxZDRlZDg7IHN0cm9rZS1vcGFjaXR5OiAuNTA7IHN0cm9rZS13aWR0aDogMTsgc3Ryb2tlLWRhc2hhcnJheTogNCA0OyB9CiAgICAgICNwdXNoLWVuY3J5cHRpb24tZmxvdy1yb290IC5ib3VuZGFyeS1sYWJlbCB7IGZpbGw6ICM0YzU2NjU7IGZvbnQ6IDUwMCA4cHggJ0dlaXN0IE1vbm8nLCBtb25vc3BhY2U7IGxldHRlci1zcGFjaW5nOiAuMTJlbTsgfQogICAgICAjcHVzaC1lbmNyeXB0aW9uLWZsb3ctcm9vdCAubm9kZS1tYXNrIHsgZmlsbDogI2YwZWVlOTsgfQogICAgICAjcHVzaC1lbmNyeXB0aW9uLWZsb3ctcm9vdCAubm9kZSB7IGZpbGw6ICNmZmZmZmY7IHN0cm9rZTogIzEwMTgyODsgc3Ryb2tlLXdpZHRoOiAxOyB9CiAgICAgICNwdXNoLWVuY3J5cHRpb24tZmxvdy1yb290IC5ub2RlLWlucHV0IHsgZmlsbDogIzRjNTY2NTsgZmlsbC1vcGFjaXR5OiAuMTA7IHN0cm9rZTogIzZhNzI4Mjsgc3Ryb2tlLXdpZHRoOiAxOyB9CiAgICAgICNwdXNoLWVuY3J5cHRpb24tZmxvdy1yb290IC5ub2RlLXN0b3JlIHsgZmlsbDogIzEwMTgyODsgZmlsbC1vcGFjaXR5OiAuMDU7IHN0cm9rZTogIzRjNTY2NTsgc3Ryb2tlLXdpZHRoOiAxOyB9CiAgICAgICNwdXNoLWVuY3J5cHRpb24tZmxvdy1yb290IC5ub2RlLWV4dGVybmFsIHsgZmlsbDogIzEwMTgyODsgZmlsbC1vcGFjaXR5OiAuMDM7IHN0cm9rZTogIzEwMTgyODsgc3Ryb2tlLW9wYWNpdHk6IC4zMDsgc3Ryb2tlLXdpZHRoOiAxOyB9CiAgICAgICNwdXNoLWVuY3J5cHRpb24tZmxvdy1yb290IC5ub2RlLWZvY2FsIHsgZmlsbDogIzFkNGVkODsgZmlsbC1vcGFjaXR5OiAuMDg7IHN0cm9rZTogIzFkNGVkODsgc3Ryb2tlLXdpZHRoOiAxLjI7IH0KICAgICAgI3B1c2gtZW5jcnlwdGlvbi1mbG93LXJvb3QgLnRhZyB7IGZpbGw6IG5vbmU7IHN0cm9rZTogIzEwMTgyODsgc3Ryb2tlLW9wYWNpdHk6IC4zNDsgc3Ryb2tlLXdpZHRoOiAuODsgfQogICAgICAjcHVzaC1lbmNyeXB0aW9uLWZsb3ctcm9vdCAudGFnLWZvY2FsIHsgZmlsbDogbm9uZTsgc3Ryb2tlOiAjMWQ0ZWQ4OyBzdHJva2Utb3BhY2l0eTogLjU1OyBzdHJva2Utd2lkdGg6IC44OyB9CiAgICAgICNwdXNoLWVuY3J5cHRpb24tZmxvdy1yb290IC50YWctdGV4dCB7IGZpbGw6ICM2YTcyODI7IGZvbnQ6IDUwMCA4cHggJ0dlaXN0IE1vbm8nLCBtb25vc3BhY2U7IGxldHRlci1zcGFjaW5nOiAuMDhlbTsgdGV4dC1hbmNob3I6IG1pZGRsZTsgfQogICAgICAjcHVzaC1lbmNyeXB0aW9uLWZsb3ctcm9vdCAudGFnLXRleHQtZm9jYWwgeyBmaWxsOiAjMWQ0ZWQ4OyBmb250OiA1MDAgOHB4ICdHZWlzdCBNb25vJywgbW9ub3NwYWNlOyBsZXR0ZXItc3BhY2luZzogLjA4ZW07IHRleHQtYW5jaG9yOiBtaWRkbGU7IH0KICAgICAgI3B1c2gtZW5jcnlwdGlvbi1mbG93LXJvb3QgLm5hbWUgeyBmaWxsOiAjMTAxODI4OyBmb250OiA2MDAgMTJweCAnR2Vpc3QnLCBzYW5zLXNlcmlmOyB0ZXh0LWFuY2hvcjogbWlkZGxlOyB9CiAgICAgICNwdXNoLWVuY3J5cHRpb24tZmxvdy1yb290IC5zdWIgeyBmaWxsOiAjNGM1NjY1OyBmb250OiA0MDAgOHB4ICdHZWlzdCBNb25vJywgbW9ub3NwYWNlOyB0ZXh0LWFuY2hvcjogbWlkZGxlOyB9CiAgICAgICNwdXNoLWVuY3J5cHRpb24tZmxvdy1yb290IC5zdWItZm9jYWwgeyBmaWxsOiAjMWQ0ZWQ4OyBmb250OiA1MDAgOHB4ICdHZWlzdCBNb25vJywgbW9ub3NwYWNlOyB0ZXh0LWFuY2hvcjogbWlkZGxlOyB9CiAgICAgICNwdXNoLWVuY3J5cHRpb24tZmxvdy1yb290IC5lZGdlIHsgZmlsbDogbm9uZTsgc3Ryb2tlOiAjNGM1NjY1OyBzdHJva2Utd2lkdGg6IDEuMjsgbWFya2VyLWVuZDogdXJsKCNwdXNoLWVuY3J5cHRpb24tZmxvdy1wdXNoLWVuY3J5cHRpb24tYXJyb3cpOyB9CiAgICAgICNwdXNoLWVuY3J5cHRpb24tZmxvdy1yb290IC5lZGdlLXNlY3VyZSB7IGZpbGw6IG5vbmU7IHN0cm9rZTogIzFkNGVkODsgc3Ryb2tlLXdpZHRoOiAxLjI7IG1hcmtlci1lbmQ6IHVybCgjcHVzaC1lbmNyeXB0aW9uLWZsb3ctcHVzaC1lbmNyeXB0aW9uLWFycm93LWFjY2VudCk7IH0KICAgICAgI3B1c2gtZW5jcnlwdGlvbi1mbG93LXJvb3QgLmxhYmVsLW1hc2sgeyBmaWxsOiAjZjBlZWU5OyB9CiAgICAgICNwdXNoLWVuY3J5cHRpb24tZmxvdy1yb290IC5sYWJlbCB7IGZpbGw6ICM0YzU2NjU7IGZvbnQ6IDUwMCA4cHggJ0dlaXN0IE1vbm8nLCBtb25vc3BhY2U7IGxldHRlci1zcGFjaW5nOiAuMDRlbTsgdGV4dC1hbmNob3I6IG1pZGRsZTsgfQogICAgICAjcHVzaC1lbmNyeXB0aW9uLWZsb3ctcm9vdCAubGFiZWwtc2VjdXJlIHsgZmlsbDogIzFkNGVkODsgZm9udDogNTAwIDhweCAnR2Vpc3QgTW9ubycsIG1vbm9zcGFjZTsgbGV0dGVyLXNwYWNpbmc6IC4wNGVtOyB0ZXh0LWFuY2hvcjogbWlkZGxlOyB9CiAgICAgICNwdXNoLWVuY3J5cHRpb24tZmxvdy1yb290IC5sZWdlbmQtdGl0bGUgeyBmaWxsOiAjNmE3MjgyOyBmb250OiA1MDAgOHB4ICdHZWlzdCBNb25vJywgbW9ub3NwYWNlOyBsZXR0ZXItc3BhY2luZzogLjE2ZW07IH0KICAgICAgI3B1c2gtZW5jcnlwdGlvbi1mbG93LXJvb3QgLmxlZ2VuZC10ZXh0IHsgZmlsbDogIzRjNTY2NTsgZm9udDogNDAwIDhweCAnR2Vpc3QgTW9ubycsIG1vbm9zcGFjZTsgfTwvc3R5bGU+CiAgICAgICAgPHN0eWxlPgogICAgICAgICAgLmRpYWdyYW0tZXllYnJvdyB7IGZpbGw6ICM0YzU2NjU7IGZvbnQ6IDUwMCA4cHggJ0dlaXN0IE1vbm8nLCBtb25vc3BhY2U7IGxldHRlci1zcGFjaW5nOiAuMTZlbTsgfQogICAgICAgICAgLmhlYWRpbmcgeyBmaWxsOiAjMTAxODI4OyBmb250OiA0MDAgMjhweCAnSW5zdHJ1bWVudCBTZXJpZicsIHNlcmlmOyB9CiAgICAgICAgICAuaW50cm8geyBmaWxsOiAjNGM1NjY1OyBmb250OiA0MDAgMTJweCAnR2Vpc3QnLCBzYW5zLXNlcmlmOyB9CiAgICAgICAgICAuem9uZSB7IGZpbGw6ICNlNmU0ZGU7IHN0cm9rZTogIzEwMTgyODsgc3Ryb2tlLW9wYWNpdHk6IC4xNDsgc3Ryb2tlLXdpZHRoOiAxOyB9CiAgICAgICAgICAuem9uZS1sYWJlbCB7IGZpbGw6ICM2YTcyODI7IGZvbnQ6IDUwMCA4cHggJ0dlaXN0IE1vbm8nLCBtb25vc3BhY2U7IGxldHRlci1zcGFjaW5nOiAuMTZlbTsgfQogICAgICAgICAgLmJvdW5kYXJ5IHsgZmlsbDogbm9uZTsgc3Ryb2tlOiAjMWQ0ZWQ4OyBzdHJva2Utb3BhY2l0eTogLjUwOyBzdHJva2Utd2lkdGg6IDE7IHN0cm9rZS1kYXNoYXJyYXk6IDQgNDsgfQogICAgICAgICAgLmJvdW5kYXJ5LWxhYmVsIHsgZmlsbDogIzRjNTY2NTsgZm9udDogNTAwIDhweCAnR2Vpc3QgTW9ubycsIG1vbm9zcGFjZTsgbGV0dGVyLXNwYWNpbmc6IC4xMmVtOyB9CiAgICAgICAgICAubm9kZS1tYXNrIHsgZmlsbDogI2YwZWVlOTsgfQogICAgICAgICAgLm5vZGUgeyBmaWxsOiAjZmZmZmZmOyBzdHJva2U6ICMxMDE4Mjg7IHN0cm9rZS13aWR0aDogMTsgfQogICAgICAgICAgLm5vZGUtaW5wdXQgeyBmaWxsOiAjNGM1NjY1OyBmaWxsLW9wYWNpdHk6IC4xMDsgc3Ryb2tlOiAjNmE3MjgyOyBzdHJva2Utd2lkdGg6IDE7IH0KICAgICAgICAgIC5ub2RlLXN0b3JlIHsgZmlsbDogIzEwMTgyODsgZmlsbC1vcGFjaXR5OiAuMDU7IHN0cm9rZTogIzRjNTY2NTsgc3Ryb2tlLXdpZHRoOiAxOyB9CiAgICAgICAgICAubm9kZS1leHRlcm5hbCB7IGZpbGw6ICMxMDE4Mjg7IGZpbGwtb3BhY2l0eTogLjAzOyBzdHJva2U6ICMxMDE4Mjg7IHN0cm9rZS1vcGFjaXR5OiAuMzA7IHN0cm9rZS13aWR0aDogMTsgfQogICAgICAgICAgLm5vZGUtZm9jYWwgeyBmaWxsOiAjMWQ0ZWQ4OyBmaWxsLW9wYWNpdHk6IC4wODsgc3Ryb2tlOiAjMWQ0ZWQ4OyBzdHJva2Utd2lkdGg6IDEuMjsgfQogICAgICAgICAgLnRhZyB7IGZpbGw6IG5vbmU7IHN0cm9rZTogIzEwMTgyODsgc3Ryb2tlLW9wYWNpdHk6IC4zNDsgc3Ryb2tlLXdpZHRoOiAuODsgfQogICAgICAgICAgLnRhZy1mb2NhbCB7IGZpbGw6IG5vbmU7IHN0cm9rZTogIzFkNGVkODsgc3Ryb2tlLW9wYWNpdHk6IC41NTsgc3Ryb2tlLXdpZHRoOiAuODsgfQogICAgICAgICAgLnRhZy10ZXh0IHsgZmlsbDogIzZhNzI4MjsgZm9udDogNTAwIDhweCAnR2Vpc3QgTW9ubycsIG1vbm9zcGFjZTsgbGV0dGVyLXNwYWNpbmc6IC4wOGVtOyB0ZXh0LWFuY2hvcjogbWlkZGxlOyB9CiAgICAgICAgICAudGFnLXRleHQtZm9jYWwgeyBmaWxsOiAjMWQ0ZWQ4OyBmb250OiA1MDAgOHB4ICdHZWlzdCBNb25vJywgbW9ub3NwYWNlOyBsZXR0ZXItc3BhY2luZzogLjA4ZW07IHRleHQtYW5jaG9yOiBtaWRkbGU7IH0KICAgICAgICAgIC5uYW1lIHsgZmlsbDogIzEwMTgyODsgZm9udDogNjAwIDEycHggJ0dlaXN0Jywgc2Fucy1zZXJpZjsgdGV4dC1hbmNob3I6IG1pZGRsZTsgfQogICAgICAgICAgLnN1YiB7IGZpbGw6ICM0YzU2NjU7IGZvbnQ6IDQwMCA4cHggJ0dlaXN0IE1vbm8nLCBtb25vc3BhY2U7IHRleHQtYW5jaG9yOiBtaWRkbGU7IH0KICAgICAgICAgIC5zdWItZm9jYWwgeyBmaWxsOiAjMWQ0ZWQ4OyBmb250OiA1MDAgOHB4ICdHZWlzdCBNb25vJywgbW9ub3NwYWNlOyB0ZXh0LWFuY2hvcjogbWlkZGxlOyB9CiAgICAgICAgICAuZWRnZSB7IGZpbGw6IG5vbmU7IHN0cm9rZTogIzRjNTY2NTsgc3Ryb2tlLXdpZHRoOiAxLjI7IG1hcmtlci1lbmQ6IHVybCgjcHVzaC1lbmNyeXB0aW9uLWZsb3ctcHVzaC1lbmNyeXB0aW9uLWFycm93KTsgfQogICAgICAgICAgLmVkZ2Utc2VjdXJlIHsgZmlsbDogbm9uZTsgc3Ryb2tlOiAjMWQ0ZWQ4OyBzdHJva2Utd2lkdGg6IDEuMjsgbWFya2VyLWVuZDogdXJsKCNwdXNoLWVuY3J5cHRpb24tZmxvdy1wdXNoLWVuY3J5cHRpb24tYXJyb3ctYWNjZW50KTsgfQogICAgICAgICAgLmxhYmVsLW1hc2sgeyBmaWxsOiAjZjBlZWU5OyB9CiAgICAgICAgICAubGFiZWwgeyBmaWxsOiAjNGM1NjY1OyBmb250OiA1MDAgOHB4ICdHZWlzdCBNb25vJywgbW9ub3NwYWNlOyBsZXR0ZXItc3BhY2luZzogLjA0ZW07IHRleHQtYW5jaG9yOiBtaWRkbGU7IH0KICAgICAgICAgIC5sYWJlbC1zZWN1cmUgeyBmaWxsOiAjMWQ0ZWQ4OyBmb250OiA1MDAgOHB4ICdHZWlzdCBNb25vJywgbW9ub3NwYWNlOyBsZXR0ZXItc3BhY2luZzogLjA0ZW07IHRleHQtYW5jaG9yOiBtaWRkbGU7IH0KICAgICAgICAgIC5sZWdlbmQtdGl0bGUgeyBmaWxsOiAjNmE3MjgyOyBmb250OiA1MDAgOHB4ICdHZWlzdCBNb25vJywgbW9ub3NwYWNlOyBsZXR0ZXItc3BhY2luZzogLjE2ZW07IH0KICAgICAgICAgIC5sZWdlbmQtdGV4dCB7IGZpbGw6ICM0YzU2NjU7IGZvbnQ6IDQwMCA4cHggJ0dlaXN0IE1vbm8nLCBtb25vc3BhY2U7IH0KICAgICAgICA8L3N0eWxlPgogICAgICAgIDxtYXJrZXIgaWQ9InB1c2gtZW5jcnlwdGlvbi1mbG93LXB1c2gtZW5jcnlwdGlvbi1hcnJvdyIgbWFya2VyV2lkdGg9IjgiIG1hcmtlckhlaWdodD0iNiIgcmVmWD0iNyIgcmVmWT0iMyIgb3JpZW50PSJhdXRvIj4KICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMCAwLDggMywwIDYiIGZpbGw9IiM0YzU2NjUiLz4KICAgICAgICA8L21hcmtlcj4KICAgICAgICA8bWFya2VyIGlkPSJwdXNoLWVuY3J5cHRpb24tZmxvdy1wdXNoLWVuY3J5cHRpb24tYXJyb3ctYWNjZW50IiBtYXJrZXJXaWR0aD0iOCIgbWFya2VySGVpZ2h0PSI2IiByZWZYPSI3IiByZWZZPSIzIiBvcmllbnQ9ImF1dG8iPgogICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIwIDAsOCAzLDAgNiIgZmlsbD0iIzFkNGVkOCIvPgogICAgICAgIDwvbWFya2VyPgogICAgICA8L2RlZnM+CgogICAgICA8cmVjdCB3aWR0aD0iMTI4MCIgaGVpZ2h0PSI3MjAiIGZpbGw9IiNmMGVlZTkiLz4KCiAgICAgIDx0ZXh0IGNsYXNzPSJkaWFncmFtLWV5ZWJyb3ciIHg9IjQwIiB5PSI0OCI+QVJDSElURUNUVVJFIMK3IFBJLUJBUks8L3RleHQ+CiAgICAgIDx0ZXh0IGNsYXNzPSJoZWFkaW5nIiB4PSI0MCIgeT0iODQiPlB1c2ggZW5jcnlwdGlvbiBwcm90ZWN0cyBjb250ZW50LCBub3QgdGhlIERldmljZSBLZXk8L3RleHQ+CiAgICAgIDx0ZXh0IGNsYXNzPSJpbnRybyIgeD0iNDAiIHk9IjExMiI+QSBDdXN0b20gRW5jcnlwdGlvbiBLZXkgYXBwbGllcyB0byBtYW51YWwgb3V0cHV0IGFuZCBhdXRvbWF0aWMgc3RhdHVzIG5vdGlmaWNhdGlvbnMuPC90ZXh0PgoKICAgICAgPCEtLSBMb2NhbCB0cnVzdCB6b25lIGFuZCBvdXRib3VuZCBKU09OIGJvdW5kYXJ5IC0tPgogICAgICA8cmVjdCBjbGFzcz0iem9uZSIgeD0iNDAiIHk9IjE1MiIgd2lkdGg9IjgxNiIgaGVpZ2h0PSI0MTYiIHJ4PSI4Ii8+CiAgICAgIDxyZWN0IGNsYXNzPSJsYWJlbC1tYXNrIiB4PSI1MiIgeT0iMTU2IiB3aWR0aD0iODAiIGhlaWdodD0iMTYiIHJ4PSIyIi8+CiAgICAgIDx0ZXh0IGNsYXNzPSJ6b25lLWxhYmVsIiB4PSI2MCIgeT0iMTY4Ij5MT0NBTCBQSTwvdGV4dD4KCiAgICAgIDxsaW5lIGNsYXNzPSJib3VuZGFyeSIgeDE9Ijg4MCIgeTE9IjE3NiIgeDI9Ijg4MCIgeTI9IjU0NCIvPgogICAgICA8cmVjdCBjbGFzcz0ibGFiZWwtbWFzayIgeD0iODkyIiB5PSIxODAiIHdpZHRoPSIyNDAiIGhlaWdodD0iMTYiIHJ4PSIyIi8+CiAgICAgIDx0ZXh0IGNsYXNzPSJib3VuZGFyeS1sYWJlbCIgeD0iOTAwIiB5PSIxOTIiPk9ORSBQT1NUIC9wdXNoIEpTT048L3RleHQ+CgogICAgICA8IS0tIENvbm5lY3RvcnMgYXJlIGRyYXduIGJlZm9yZSBub2RlcyAtLT4KICAgICAgPHBhdGggY2xhc3M9ImVkZ2UiIGQ9Ik0yNTIgMjQ4IEgyOTIgUTMwMCAyNDggMzAwIDI1NiBWMzA4IFEzMDAgMzE2IDMwOCAzMTYgSDM1MiIvPgogICAgICA8cGF0aCBjbGFzcz0iZWRnZSIgZD0iTTI1MiA0MDAgSDMwNCBRMzEyIDQwMCAzMTIgMzkyIFYzNzIgUTMxMiAzNjQgMzIwIDM2NCBIMzUyIi8+CiAgICAgIDxsaW5lIGNsYXNzPSJlZGdlIiB4MT0iNDUyIiB5MT0iNDUyIiB4Mj0iNDUyIiB5Mj0iMzk2Ii8+CiAgICAgIDxsaW5lIGNsYXNzPSJlZGdlLXNlY3VyZSIgeDE9IjU1MiIgeTE9IjM0MCIgeDI9IjY0OCIgeTI9IjM0MCIvPgogICAgICA8bGluZSBjbGFzcz0iZWRnZS1zZWN1cmUiIHgxPSI4NDgiIHkxPSIzNDAiIHgyPSI5MjAiIHkyPSIzNDAiLz4KICAgICAgPGxpbmUgY2xhc3M9ImVkZ2UiIHgxPSIxMDYwIiB5MT0iMzQwIiB4Mj0iMTEwMCIgeTI9IjM0MCIvPgogICAgICA8cGF0aCBjbGFzcz0iZWRnZSIgZD0iTTQ5NiAyODQgVjI0NCBRNDk2IDIzNiA1MDQgMjM2IEg5NTYgUTk2NCAyMzYgOTY0IDI0NCBWMjg0Ii8+CiAgICAgIDxwYXRoIGNsYXNzPSJlZGdlIiBzdHJva2UtZGFzaGFycmF5PSI1IDQiIGQ9Ik01NTIgMzcyIEg1OTIgUTYwMCAzNzIgNjAwIDM4MCBWNDUyIFE2MDAgNDYwIDYwOCA0NjAgSDEwMDggUTEwMTYgNDYwIDEwMTYgNDUyIFYzOTYiLz4KCiAgICAgIDwhLS0gQ29ubmVjdG9yIGxhYmVscyAtLT4KICAgICAgPHJlY3QgY2xhc3M9ImxhYmVsLW1hc2siIHg9IjQ2NCIgeT0iNDE2IiB3aWR0aD0iNzIiIGhlaWdodD0iMTIiIHJ4PSIyIi8+CiAgICAgIDx0ZXh0IGNsYXNzPSJsYWJlbCIgeD0iNTAwIiB5PSI0MjQiPkxPQUQgRUFDSCBQVVNIPC90ZXh0PgoKICAgICAgPHJlY3QgY2xhc3M9ImxhYmVsLW1hc2siIHg9IjU2NCIgeT0iMzIwIiB3aWR0aD0iNzIiIGhlaWdodD0iMTIiIHJ4PSIyIi8+CiAgICAgIDx0ZXh0IGNsYXNzPSJsYWJlbC1zZWN1cmUiIHg9IjYwMCIgeT0iMzI4Ij5DVVNUT00gS0VZIFNFVDwvdGV4dD4KCiAgICAgIDxyZWN0IGNsYXNzPSJsYWJlbC1tYXNrIiB4PSI4NTYiIHk9IjMyMCIgd2lkdGg9IjU2IiBoZWlnaHQ9IjEyIiByeD0iMiIvPgogICAgICA8dGV4dCBjbGFzcz0ibGFiZWwtc2VjdXJlIiB4PSI4ODQiIHk9IjMyOCI+Q0lQSEVSVEVYVDwvdGV4dD4KCiAgICAgIDxyZWN0IGNsYXNzPSJsYWJlbC1tYXNrIiB4PSI2OTIiIHk9IjIxNiIgd2lkdGg9Ijc2IiBoZWlnaHQ9IjEyIiByeD0iMiIvPgogICAgICA8dGV4dCBjbGFzcz0ibGFiZWwiIHg9IjczMCIgeT0iMjI0Ij5kZXZpY2Vfa2V5PC90ZXh0PgoKICAgICAgPHJlY3QgY2xhc3M9ImxhYmVsLW1hc2siIHg9IjcwOCIgeT0iNDQwIiB3aWR0aD0iODAiIGhlaWdodD0iMTIiIHJ4PSIyIi8+CiAgICAgIDx0ZXh0IGNsYXNzPSJsYWJlbCIgeD0iNzQ4IiB5PSI0NDgiPk5PIENVU1RPTSBLRVk8L3RleHQ+CgogICAgICA8IS0tIE9wYXF1ZSBub2RlIG1hc2tzIC0tPgogICAgICA8cmVjdCBjbGFzcz0ibm9kZS1tYXNrIiB4PSI3MiIgeT0iMjA4IiB3aWR0aD0iMTgwIiBoZWlnaHQ9IjgwIiByeD0iNiIvPgogICAgICA8cmVjdCBjbGFzcz0ibm9kZS1tYXNrIiB4PSI3MiIgeT0iMzYwIiB3aWR0aD0iMTgwIiBoZWlnaHQ9IjgwIiByeD0iNiIvPgogICAgICA8cmVjdCBjbGFzcz0ibm9kZS1tYXNrIiB4PSIzNTIiIHk9IjI4NCIgd2lkdGg9IjIwMCIgaGVpZ2h0PSIxMTIiIHJ4PSI2Ii8+CiAgICAgIDxyZWN0IGNsYXNzPSJub2RlLW1hc2siIHg9IjM1MiIgeT0iNDUyIiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjgwIiByeD0iNiIvPgogICAgICA8cmVjdCBjbGFzcz0ibm9kZS1tYXNrIiB4PSI2NDgiIHk9IjI4NCIgd2lkdGg9IjIwMCIgaGVpZ2h0PSIxMTIiIHJ4PSI2Ii8+CiAgICAgIDxyZWN0IGNsYXNzPSJub2RlLW1hc2siIHg9IjkyMCIgeT0iMjg0IiB3aWR0aD0iMTQwIiBoZWlnaHQ9IjExMiIgcng9IjYiLz4KICAgICAgPHJlY3QgY2xhc3M9Im5vZGUtbWFzayIgeD0iMTEwMCIgeT0iMjg0IiB3aWR0aD0iMTQwIiBoZWlnaHQ9IjExMiIgcng9IjYiLz4KCiAgICAgIDwhLS0gSW5wdXRzIC0tPgogICAgICA8cmVjdCBjbGFzcz0ibm9kZS1pbnB1dCIgeD0iNzIiIHk9IjIwOCIgd2lkdGg9IjE4MCIgaGVpZ2h0PSI4MCIgcng9IjYiLz4KICAgICAgPHJlY3QgY2xhc3M9InRhZyIgeD0iODQiIHk9IjIyMCIgd2lkdGg9IjU2IiBoZWlnaHQ9IjE2IiByeD0iMiIvPgogICAgICA8dGV4dCBjbGFzcz0idGFnLXRleHQiIHg9IjExMiIgeT0iMjMyIj5DT01NQU5EPC90ZXh0PgogICAgICA8dGV4dCBjbGFzcz0ibmFtZSIgeD0iMTYyIiB5PSIyNTYiPi9jb3B5YjwvdGV4dD4KICAgICAgPHRleHQgY2xhc3M9InN1YiIgeD0iMTYyIiB5PSIyNzYiPkxBU1QgQUdFTlQgTUVTU0FHRTwvdGV4dD4KCiAgICAgIDxyZWN0IGNsYXNzPSJub2RlLWlucHV0IiB4PSI3MiIgeT0iMzYwIiB3aWR0aD0iMTgwIiBoZWlnaHQ9IjgwIiByeD0iNiIvPgogICAgICA8cmVjdCBjbGFzcz0idGFnIiB4PSI4NCIgeT0iMzcyIiB3aWR0aD0iNDgiIGhlaWdodD0iMTYiIHJ4PSIyIi8+CiAgICAgIDx0ZXh0IGNsYXNzPSJ0YWctdGV4dCIgeD0iMTA4IiB5PSIzODQiPkVWRU5UPC90ZXh0PgogICAgICA8dGV4dCBjbGFzcz0ibmFtZSIgeD0iMTYyIiB5PSI0MDgiPlBpIHN0YXR1czwvdGV4dD4KICAgICAgPHRleHQgY2xhc3M9InN1YiIgeD0iMTYyIiB5PSI0MjgiPk5FRURTIElOUFVUIMK3IEZBSUxFRCDCtyBGSU5JU0hFRDwvdGV4dD4KCiAgICAgIDwhLS0gU2hhcmVkIHNlbmRlciBhbmQgY29uZmlnIC0tPgogICAgICA8cmVjdCBjbGFzcz0ibm9kZSIgeD0iMzUyIiB5PSIyODQiIHdpZHRoPSIyMDAiIGhlaWdodD0iMTEyIiByeD0iNiIvPgogICAgICA8cmVjdCBjbGFzcz0idGFnIiB4PSIzNjQiIHk9IjI5NiIgd2lkdGg9IjQ4IiBoZWlnaHQ9IjE2IiByeD0iMiIvPgogICAgICA8dGV4dCBjbGFzcz0idGFnLXRleHQiIHg9IjM4OCIgeT0iMzA4Ij5TSEFSRUQ8L3RleHQ+CiAgICAgIDx0ZXh0IGNsYXNzPSJuYW1lIiB4PSI0NTIiIHk9IjM0MCI+UHVzaCBzZW5kZXI8L3RleHQ+CiAgICAgIDx0ZXh0IGNsYXNzPSJzdWIiIHg9IjQ1MiIgeT0iMzY0Ij5DT05URU5UIFRPIEFFUyBJRiBLRVkgU0VUPC90ZXh0PgogICAgICA8dGV4dCBjbGFzcz0ic3ViIiB4PSI0NTIiIHk9IjM4MCI+ZGV2aWNlX2tleSBUTyBKU09OLCBOT1QgQUVTPC90ZXh0PgoKICAgICAgPHJlY3QgY2xhc3M9Im5vZGUtc3RvcmUiIHg9IjM1MiIgeT0iNDUyIiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjgwIiByeD0iNiIvPgogICAgICA8cmVjdCBjbGFzcz0idGFnIiB4PSIzNjQiIHk9IjQ2NCIgd2lkdGg9IjQ4IiBoZWlnaHQ9IjE2IiByeD0iMiIvPgogICAgICA8dGV4dCBjbGFzcz0idGFnLXRleHQiIHg9IjM4OCIgeT0iNDc2Ij5DT05GSUc8L3RleHQ+CiAgICAgIDx0ZXh0IGNsYXNzPSJuYW1lIiB4PSI0NTIiIHk9IjUwMCI+cGktYmFyayBjb25maWc8L3RleHQ+CiAgICAgIDx0ZXh0IGNsYXNzPSJzdWIiIHg9IjQ1MiIgeT0iNTIwIj5ERVZJQ0UgS0VZIMK3IENVU1RPTSBLRVk8L3RleHQ+CgogICAgICA8IS0tIEVuY3J5cHRpb24gZm9jYWwgcG9pbnQgLS0+CiAgICAgIDxyZWN0IGNsYXNzPSJub2RlLWZvY2FsIiB4PSI2NDgiIHk9IjI4NCIgd2lkdGg9IjIwMCIgaGVpZ2h0PSIxMTIiIHJ4PSI2Ii8+CiAgICAgIDxyZWN0IGNsYXNzPSJ0YWctZm9jYWwiIHg9IjY2MCIgeT0iMjk2IiB3aWR0aD0iNTYiIGhlaWdodD0iMTYiIHJ4PSIyIi8+CiAgICAgIDx0ZXh0IGNsYXNzPSJ0YWctdGV4dC1mb2NhbCIgeD0iNjg4IiB5PSIzMDgiPkNPTlRFTlQ8L3RleHQ+CiAgICAgIDx0ZXh0IGNsYXNzPSJuYW1lIiB4PSI3NDgiIHk9IjM0MCI+QUVTMjU2LUdDTTwvdGV4dD4KICAgICAgPHRleHQgY2xhc3M9InN1Yi1mb2NhbCIgeD0iNzQ4IiB5PSIzNjQiPkZSRVNIIDEyLUJZVEUgSVYgU0VOVDwvdGV4dD4KICAgICAgPHRleHQgY2xhc3M9InN1Yi1mb2NhbCIgeD0iNzQ4IiB5PSIzODAiPkFVVEggVEFHIEFQUEVOREVEPC90ZXh0PgoKICAgICAgPCEtLSBFeHRlcm5hbCBkZWxpdmVyeSAtLT4KICAgICAgPHJlY3QgY2xhc3M9Im5vZGUtZXh0ZXJuYWwiIHg9IjkyMCIgeT0iMjg0IiB3aWR0aD0iMTQwIiBoZWlnaHQ9IjExMiIgcng9IjYiLz4KICAgICAgPHJlY3QgY2xhc3M9InRhZyIgeD0iOTMyIiB5PSIyOTYiIHdpZHRoPSI0OCIgaGVpZ2h0PSIxNiIgcng9IjIiLz4KICAgICAgPHRleHQgY2xhc3M9InRhZy10ZXh0IiB4PSI5NTYiIHk9IjMwOCI+U0VSVkVSPC90ZXh0PgogICAgICA8dGV4dCBjbGFzcz0ibmFtZSIgeD0iOTkwIiB5PSIzNDAiPkJhcmsgc2VydmVyPC90ZXh0PgogICAgICA8dGV4dCBjbGFzcz0ic3ViIiB4PSI5OTAiIHk9IjM2NCI+Uk9VVEVTIEJZIGRldmljZV9rZXk8L3RleHQ+CiAgICAgIDx0ZXh0IGNsYXNzPSJzdWIiIHg9Ijk5MCIgeT0iMzgwIj5DT05URU5UIEhJRERFTiBJRiBLRVk8L3RleHQ+CgogICAgICA8cmVjdCBjbGFzcz0ibm9kZSIgeD0iMTEwMCIgeT0iMjg0IiB3aWR0aD0iMTQwIiBoZWlnaHQ9IjExMiIgcng9IjYiLz4KICAgICAgPHJlY3QgY2xhc3M9InRhZyIgeD0iMTExMiIgeT0iMjk2IiB3aWR0aD0iMzIiIGhlaWdodD0iMTYiIHJ4PSIyIi8+CiAgICAgIDx0ZXh0IGNsYXNzPSJ0YWctdGV4dCIgeD0iMTEyOCIgeT0iMzA4Ij5BUFA8L3RleHQ+CiAgICAgIDx0ZXh0IGNsYXNzPSJuYW1lIiB4PSIxMTcwIiB5PSIzNDAiPkJhcmsgQXBwPC90ZXh0PgogICAgICA8dGV4dCBjbGFzcz0ic3ViIiB4PSIxMTcwIiB5PSIzNjQiPjMyLUJZVEUgS0VZIElGIEVOQ1JZUFRFRDwvdGV4dD4KICAgICAgPHRleHQgY2xhc3M9InN1YiIgeD0iMTE3MCIgeT0iMzgwIj5ERUNSWVBUUyBMT0NBTExZIElGIFNFVDwvdGV4dD4KCiAgICAgIDx0ZXh0IGNsYXNzPSJpbnRybyIgeD0iNDAiIHk9IjU5NiI+ZGV2aWNlX2tleSBpcyBhIHJvdXRpbmcgc2VjcmV0IGFuZCBzdGF5cyBwbGFpbnRleHQgaW4gSlNPTi4gSFRUUFMgcHJvdGVjdHMgdHJhbnNwb3J0IHdpdGggVExTOyBIVFRQIGRvZXMgbm90LjwvdGV4dD4KCiAgICAgIDwhLS0gTGVnZW5kIC0tPgogICAgICA8bGluZSB4MT0iNDAiIHkxPSI2MTYiIHgyPSIxMjQwIiB5Mj0iNjE2IiBzdHJva2U9IiMxMDE4MjgiIHN0cm9rZS1vcGFjaXR5PSIuMTQiIHN0cm9rZS13aWR0aD0iLjgiLz4KICAgICAgPHRleHQgY2xhc3M9ImxlZ2VuZC10aXRsZSIgeD0iNDAiIHk9IjY1MiI+TEVHRU5EPC90ZXh0PgogICAgICA8bGluZSB4MT0iMTQ0IiB5MT0iNjQ4IiB4Mj0iMTg0IiB5Mj0iNjQ4IiBzdHJva2U9IiM0YzU2NjUiIHN0cm9rZS13aWR0aD0iMS4yIiBtYXJrZXItZW5kPSJ1cmwoI3B1c2gtZW5jcnlwdGlvbi1mbG93LXB1c2gtZW5jcnlwdGlvbi1hcnJvdykiLz4KICAgICAgPHRleHQgY2xhc3M9ImxlZ2VuZC10ZXh0IiB4PSIxOTYiIHk9IjY1MiI+SU5QVVQgLyBST1VUSU5HIC8gREVMSVZFUlk8L3RleHQ+CiAgICAgIDxsaW5lIHgxPSIzNDQiIHkxPSI2NDgiIHgyPSIzODQiIHkyPSI2NDgiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIxLjIiIG1hcmtlci1lbmQ9InVybCgjcHVzaC1lbmNyeXB0aW9uLWZsb3ctcHVzaC1lbmNyeXB0aW9uLWFycm93LWFjY2VudCkiLz4KICAgICAgPHRleHQgY2xhc3M9ImxlZ2VuZC10ZXh0IiB4PSIzOTYiIHk9IjY1MiI+RU5DUllQVEVEIENPTlRFTlQ8L3RleHQ+CiAgICAgIDxsaW5lIHgxPSI1NjgiIHkxPSI2NDgiIHgyPSI2MDgiIHkyPSI2NDgiIHN0cm9rZT0iIzRjNTY2NSIgc3Ryb2tlLXdpZHRoPSIxLjIiIHN0cm9rZS1kYXNoYXJyYXk9IjUgNCIgbWFya2VyLWVuZD0idXJsKCNwdXNoLWVuY3J5cHRpb24tZmxvdy1wdXNoLWVuY3J5cHRpb24tYXJyb3cpIi8+CiAgICAgIDx0ZXh0IGNsYXNzPSJsZWdlbmQtdGV4dCIgeD0iNjIwIiB5PSI2NTIiPkNPTlRFTlQgV0lUSE9VVCBLRVk8L3RleHQ+CiAgICAgIDxsaW5lIGNsYXNzPSJib3VuZGFyeSIgeDE9IjgxNiIgeTE9IjY0MCIgeDI9IjgxNiIgeTI9IjY1NiIvPgogICAgICA8dGV4dCBjbGFzcz0ibGVnZW5kLXRleHQiIHg9IjgzNiIgeT0iNjUyIj5QSSBCT1VOREFSWTwvdGV4dD4KICAgIDwvc3ZnPgo=)

### Automatic status notifications

| Notification | When it sends |
| --- | --- |
| **Pi needs input** | Pi opens a blocking prompt, including `ask_question`. Closing a prompt sends nothing. |
| **Pi failed** | The run ends with an unrecovered failure and will not continue automatically. |
| **Pi finished** | The run ends normally and will not continue automatically. |

The last agent response decides the outcome: provider errors mean failure; successful retries clear them. Failed compaction during a run, including overflow recovery, also means failure. Each run starts clean; earlier runs and other branches do not affect it. Failed idle `/compact` sends nothing.

Cancelled runs, including Escape, and cancelled compactions send no settled notification. Input notifications and `/copyb` remain available. A new run cancels a pending settled notification.

Status notifications contain the Pi session name (`Unnamed` if unset), but no prompt, agent output, or error text. With `pi-herdr-tools`, Herdr shows the same name. pi-bark never calls Herdr or reads its state.

Automatic notifications default to enabled. Run `/bark off` or `/bark on` for a CWD override; `/bark inherit` removes it. `/bark default off` changes the default for CWDs without overrides. These global config settings do not affect `/copyb`.

## Config

Package-owned: `~/.pi/agent/config/pi-bark/config.json`

| Name | Description | Values | Default |
| --- | --- | --- | --- |
| `serverUrl` | Bark server base URL. | HTTP or HTTPS URL; optional path, no query or fragment delimiter. | Required. `/set-bark` writes `"https://api.day.app"` if omitted. |
| `deviceKey` | Receiving Bark App installation. | Non-empty string. | Required. |
| `encryption` | Custom Encryption Key and Bark settings. | AES256-GCM object or `null`. | Required. Commands write `null` to new files to disable Push Encryption. |
| `statusNotifications` | Notification default and CWD overrides. | Global boolean default; absolute-CWD boolean overrides. | Enabled; no overrides. |

Changes apply on the next command or status event without restart. Queued notifications retain event-time settings.

### Push Encryption

Optional Push Encryption prevents the Bark server and Apple Push Notification service from reading content in all pushes, including `/copyb` and status notifications.

1. Configure the Device Key with `/set-bark`.
2. Generate and save a Custom Encryption Key:

   ```bash
   npx --yes --package=@henryqw/pi-bark -- pi-bark-key
   ```

   `npx` temporarily downloads the package and runs `pi-bark-key`. It saves the key to config and prints it once.

3. Open **Bark App → Push Encryption**.
4. Enter these settings:

   | Setting | Value |
   | --- | --- |
   | Algorithm | `AES256` |
   | Mode | `GCM` |
   | Padding | `noPadding` |
   | Key | Generated 32-character, 32-byte ASCII key. |

5. If Bark requires an IV, enter any 12 ASCII characters, such as `000000000000`.
6. Save the settings.
7. Run `/copyb`; confirm Bark shows the exact last agent message, not `Decryption Failed`.

The saved IV is an older-version placeholder. Each push uses a new 12-byte IV, sent with Ciphertext. Bark uses this per-push value. pi-bark appends the GCM authentication tag before Base64 encoding.

Never paste key command output into shared logs: the Custom Encryption Key can decrypt your push content.

The command preserves existing keys. To replace one, run this command and update the Bark App:

```bash
npx --yes --package=@henryqw/pi-bark -- pi-bark-key --force
```

To disable Push Encryption, run this command and disable it in the Bark App:

```bash
npx --yes --package=@henryqw/pi-bark -- pi-bark-key --disable
```

App and pi-bark settings must match. Config has this shape; use `"encryption": null` to disable encryption:

```json
{
  "serverUrl": "https://api.day.app",
  "deviceKey": "your-device-key",
  "encryption": {
    "algorithm": "AES256",
    "mode": "GCM",
    "padding": "noPadding",
    "key": "your-32-character-custom-key"
  },
  "statusNotifications": {
    "defaultEnabled": true,
    "cwdOverrides": {
      "/srv/quiet-project": false
    }
  }
}
```

Use HTTPS. HTTP exposes the Device Key and, without Push Encryption, push content. Push Encryption never protects the Device Key.

Missing config stays missing until a command writes it. `/set-bark` preserves encryption and notification settings. Running `pi-bark-key` first writes `"deviceKey": null`; pi-bark stays disabled until `/set-bark`. Writes are private and atomic. Pi commands never print the Device Key, Server URL, or Custom Encryption Key.

## Limits and recovery

Bark and Apple Push Notification service limit payload size. pi-bark never truncates content; oversized messages return a Bark error. `/copyb` waits at most 15 seconds. Failed pushes do not undo the clipboard copy.

Config checks occur at startup and each read. For the shared rules, see [Config files](https://pi.henry.wang/overview#config-files). Results for pi-bark:

| Problem | Result and recovery |
| --- | --- |
| Unknown key or invalid `statusNotifications` | Warns, ignores unknown keys or uses the affected value's default, and continues sending. |
| Missing file or invalid/missing `deviceKey` | Disables sending. Run `/set-bark`. |
| Invalid/missing `serverUrl`, including `serverURL` | Disables sending, never substitutes the public server that would receive your Device Key. Run `/set-bark` with the correct URL. |
| Invalid/missing `encryption`, including `encyption` | Disables sending, never substitutes unencrypted content. Run `pi-bark-key --force` or `pi-bark-key --disable`. |
| File problem, such as malformed JSON | Disables sending. Fix or move the file. |

Disabled pi-bark reports errors. `/set-bark` and `pi-bark-key` remain available; `/bark` reports the problem without writing. Notification settings cannot enable a disabled configuration.

Before writing, commands report new problems through Pi notifications or key-script stderr. Repairable files are replaced; unknown keys and invalid notification entries are removed. Concurrent file changes stop the write with an error; run the command again.

Commands preserve malformed files. They stop if a required key is invalid or missing and the command cannot set it. `/set-bark` sets `serverUrl` and `deviceKey`; `pi-bark-key --force` and `pi-bark-key --disable` set `encryption`. Fix the file or use the matching repair command.

See Bark's [Push Encryption documentation](https://github.com/Finb/Bark/blob/master/docs/en-us/encryption.md).
