diff --git a/.claude/skills/changelog/watermark b/.claude/skills/changelog/watermark
index 755034a00..c3deb8952 100644
--- a/.claude/skills/changelog/watermark
+++ b/.claude/skills/changelog/watermark
@@ -1 +1 @@
-4ee215cadaa28fd335d5ab2d306740574d5b8b32
+8b948a2d6852023eb41eed3a99e9b402da3f5fbe
diff --git a/docs/changelog/2026-03-14.mdx b/docs/changelog/2026-03-14.mdx
index 58bdb0002..f24c6c641 100644
--- a/docs/changelog/2026-03-14.mdx
+++ b/docs/changelog/2026-03-14.mdx
@@ -1,8 +1,28 @@
---
-title: "fabro rewind, workflow list, and Dark Factory"
+title: "fabro logs, background runs, and workflow scaffolding"
date: "2026-03-14"
---
+## View run logs with fabro logs
+
+Previously, the only way to follow a workflow's progress was through the terminal that started it. The new `fabro logs` command lets you view event logs for any run — active or completed — from any terminal. With `--pretty`, agent conversations render with formatted messages and tool calls instead of raw JSON.
+
+```bash
+fabro logs my-workflow --pretty
+fabro logs -f abc123 -p
+```
+
+You can reference runs by name, ID prefix, or workflow slug. The `-f` flag follows live events as they happen.
+
+## Background workflows with --detach
+
+You can now fork a workflow into a background process with `fabro run --detach`, then reconnect later with `fabro logs -f`. This is useful for long-running workflows where you don't want to keep a terminal open.
+
+```bash
+fabro run my-workflow --detach
+fabro logs -f my-workflow
+```
+
## Rewind workflow runs
You can now rewind a workflow run to an earlier checkpoint and resume from there. This is useful when a later stage goes off-track and you want to try again from a known-good point without restarting the entire workflow.
@@ -11,25 +31,28 @@ You can now rewind a workflow run to an earlier checkpoint and resume from there
fabro rewind my-run plan@2
```
-Target a specific node by name, `node@visit` for a particular visit count, or `@ordinal` for a checkpoint index. The command rewinds both the metadata and run branch refs, and optionally pushes to the remote.
-
-## fabro workflow list
-
-A new `fabro workflow list` command shows all available workflows in your project. Workflows are grouped by source (project vs. user-level), with descriptions pulled from each workflow's goal.
-
-```bash
-fabro workflow list
-```
+Target a specific node by name, `node@visit` for a particular visit count, or `@ordinal` for a checkpoint index.
## More
+
+- Added `fabro workflow create ` subcommand to scaffold new workflows from a template
+- Added `fabro workflow list` command showing all available workflows grouped by source
+- Added `fabro inspect` command to display detailed JSON data for a workflow run
+- Added project-level run defaults in `fabro.toml` (model, environment, sandbox image, etc.)
+- Added `~/.fabro/` fallback for `@` file references
+
+
- Default Daytona sandbox now uses the `daytona-medium` snapshot with standard dev tools pre-installed
-- Workflow list output shows grouped sections with aligned columns and truncated descriptions
-- Added Dark Factory documentation page
-- Added workflow diagram to README
+- Run resolution now matches workflow slugs and display names, not just run IDs
+- Routing events now include context about why an edge was selected
+- Fixed `fabro logs --pretty` wrapping past terminal edge on long assistant messages
+- Fixed empty `run_id` on sandbox events in `progress.jsonl`
+- Fixed credential-embedded GitHub URLs not being parsed correctly
+- Fixed logo SVG viewBox clipping the right edge of the O
- Fixed missing `git_commit_sha` in run branch commit messages
diff --git a/docs/changelog/2026-03-15.mdx b/docs/changelog/2026-03-15.mdx
new file mode 100644
index 000000000..679b540ce
--- /dev/null
+++ b/docs/changelog/2026-03-15.mdx
@@ -0,0 +1,42 @@
+---
+title: "fabro ps overhaul, fabro rm, and GitHub token injection"
+date: "2026-03-15"
+---
+
+## Docker-style process listing with fabro ps
+
+`fabro ps` has been rebuilt to behave like `docker ps`. It now shows a table with run ID, status, workflow name, goal, and timing — making it easy to see what's running at a glance. The GOAL column shows the first line of each run's goal, so you can distinguish between multiple runs of the same workflow.
+
+```bash
+fabro ps # active runs
+fabro ps -a # all runs including completed
+```
+
+Run status is now tracked via a proper state machine, so status transitions are reliable and `fabro ps` always reflects the current state.
+
+## GitHub token injection for sandboxes
+
+When a GitHub App is configured, Fabro now automatically injects an installation access token into sandboxes as `GITHUB_TOKEN`. Agents running inside sandboxes can use this token to clone private repos, push branches, and create pull requests without any manual credential setup.
+
+## More
+
+
+- Added `fabro rm` command to remove runs by ID with sandbox cleanup
+- Added `-p` short alias for `--pretty` in `fabro logs`
+- Added progress spinner during `run --preflight`
+
+
+
+- Metadata branch renamed from `refs/fabro/{run_id}` to `fabro/meta/{run_id}` for cleaner ref namespace
+- Added granular git checkpoint events and retro lifecycle events (`RetroStarted`, `RetroCompleted`, `RetroFailed`)
+- `goal` field now included in `WorkflowRunStarted` event and rendered in `fabro logs --pretty`
+- Run completion events now include final status and usage totals
+
+
+
+- Fixed `--dry-run` executing command/script nodes instead of simulating them
+- Fixed `--dry-run` pushing branches to remote
+- Fixed `--goal-file` not expanding `~` to the home directory
+- Fixed race condition between `fabro run --detach` and `fabro logs -f`
+- Fixed dry-run runs cluttering `fabro ps -a` output (now uses temp directory)
+
diff --git a/docs/docs.json b/docs/docs.json
index 265289a25..ddf1ed539 100644
--- a/docs/docs.json
+++ b/docs/docs.json
@@ -270,6 +270,7 @@
"group": "March 2026",
"icon": "clock-rotate-left",
"pages": [
+ "changelog/2026-03-15",
"changelog/2026-03-14",
"changelog/2026-03-13",
"changelog/2026-03-12",