diff --git a/workshop/16-connect-data-source.md b/workshop/16-connect-data-source.md
index dabe317f..6ed1a58f 100644
--- a/workshop/16-connect-data-source.md
+++ b/workshop/16-connect-data-source.md
@@ -118,7 +118,7 @@ Write a concise, friendly update — two short paragraphs.
Highlight anything that looks urgent in the issue list.
```
-GitHub resolves the step-output expressions before the AI sees the prompt, so the model receives plain text instead of workflow syntax.
+GitHub resolves the step-output [expressions](https://github.github.com/gh-aw/reference/templating/#github-actions-expressions) before the AI sees the prompt, so the model receives plain text instead of workflow syntax.
:thinking: Pause and predict: If the `commit_log` output is empty, does the prompt still make sense to the AI? What one-line change would make the instruction more robust?
@@ -126,7 +126,7 @@ GitHub resolves the step-output expressions before the AI sees the prompt, so th
### [Compile](https://github.github.com/gh-aw/reference/compilation-process/), push, and test
-The `/agentic-workflows` skill recompiles the lock file automatically. If you edited the workflow manually, run `gh aw compile` first, then push:
+The `/agentic-workflows` skill recompiles the [lock file](https://github.github.com/gh-aw/reference/compilation-process/#the-actions-lockjson-cache) automatically. If you edited the workflow manually, run `gh aw compile` first, then push:
```bash
git add .
diff --git a/workshop/17-add-mcp-tools.md b/workshop/17-add-mcp-tools.md
index 4ac5bcb8..b6996acc 100644
--- a/workshop/17-add-mcp-tools.md
+++ b/workshop/17-add-mcp-tools.md
@@ -31,7 +31,7 @@ MCP (Model Context Protocol) connects external tool servers to the agent so it c
> Optional Side Quests:
>
> - Want a deeper look at how the agentic loop changes, what the `tools:` block does, and how to read tool calls in the Actions log? Work through [Side Quest: How MCP Tool Servers Work](side-quest-17-01-mcp-concepts.md).
-> - Want a beginner-friendly security mental model for why sandboxing matters, where the agent runs, and what safe output looks like? Work through [Side Quest: Agentic Workflow Security Architecture (Explain Like You're 5)](side-quest-17-02-security-architecture.md).
+> - Want a beginner-friendly security mental model for why sandboxing matters, where the agent runs, and what [safe output](https://github.github.com/gh-aw/reference/safe-outputs/) looks like? Work through [Side Quest: Agentic Workflow Security Architecture (Explain Like You're 5)](side-quest-17-02-security-architecture.md).
> - Want to understand how malicious content in issues or PRs can try to redirect your agent — and how gh-aw's design limits the damage? Work through [Side Quest: Prompt Injection Attacks in Agentic Workflows](side-quest-17-03-prompt-injection.md).
> - Want to see how an over-powered workflow can give a misdirected agent more authority than the task really needs? Work through [Side Quest: Permission Escalation in Agentic Workflows](side-quest-17-04-permission-escalation.md).
> - Want to understand how a compromised MCP server could feed poisoned data to your agent — and how `network.allowed` and minimal [permissions](https://github.github.com/gh-aw/reference/permissions/) defend against it? Work through [Side Quest: Supply Chain Attacks via MCP Tool Servers](side-quest-17-05-supply-chain-mcp.md).
@@ -117,7 +117,7 @@ The agent will read this brief, decide which MCP tool calls to make, and weave t
### Push and trigger a run
-The `/agentic-workflows` skill recompiles the lock file automatically. Commit both files and push:
+The `/agentic-workflows` skill recompiles the [lock file](https://github.github.com/gh-aw/reference/compilation-process/#the-actions-lockjson-cache) automatically. Commit both files and push:
```bash
git add .
diff --git a/workshop/18-share-and-reuse.md b/workshop/18-share-and-reuse.md
index b9a0971d..f2306498 100644
--- a/workshop/18-share-and-reuse.md
+++ b/workshop/18-share-and-reuse.md
@@ -17,7 +17,7 @@ You'll copy your finished workflow file into a shared location so that teammates
### Understand how gh-aw templates work
-When you run `gh aw add`, the extension fetches a workflow Markdown file directly from a GitHub repository. Any `.md` file in a `.github/workflows/` folder of a public (or accessible) repo can act as a template.
+When you run [`gh aw add`](https://github.github.com/gh-aw/setup/cli/#add), the extension fetches a workflow Markdown file directly from a GitHub repository. Any `.md` file in a `.github/workflows/` folder of a public (or accessible) repo can act as a template.
That means **your workflow is already a template** — you just need to point people at it.
diff --git a/workshop/20-persistent-memory.md b/workshop/20-persistent-memory.md
index b437ca37..43f808ab 100644
--- a/workshop/20-persistent-memory.md
+++ b/workshop/20-persistent-memory.md
@@ -47,7 +47,7 @@ The diagram below shows how `cache-memory` makes deduplication possible across r
- **Compare against a baseline** — "did the number of failing tests increase since yesterday?"
- **Scan incrementally** — skip pull requests you have already reviewed.
-This step uses `cache-memory`; see [Side Quest: Choosing Between Cache Memory and Repo Memory](side-quest-20-01-memory-patterns.md) for a full comparison.
+This step uses `cache-memory`; see [Side Quest: Choosing Between Cache Memory and Repo Memory](side-quest-20-01-memory-patterns.md) for a full comparison with [repo-memory](https://github.github.com/gh-aw/reference/repo-memory/).
## Steps
@@ -124,7 +124,7 @@ have already reported on. On each run:
### [Compile](https://github.github.com/gh-aw/reference/compilation-process/), validate, and push
-The `/agentic-workflows` skill recompiles the lock file automatically. If you edited manually, run `gh aw compile` first to confirm the memory block is valid.
+The `/agentic-workflows` skill recompiles the [lock file](https://github.github.com/gh-aw/reference/compilation-process/#the-actions-lockjson-cache) automatically. If you edited manually, run `gh aw compile` first to confirm the memory block is valid.
Common mistakes include putting `cache-memory:` at the top level instead of nesting it under `tools:`, and omitting the `key:` field for `cache-memory`.
diff --git a/workshop/21-inline-sub-agents.md b/workshop/21-inline-sub-agents.md
index ef6a20a4..e896ca25 100644
--- a/workshop/21-inline-sub-agents.md
+++ b/workshop/21-inline-sub-agents.md
@@ -38,7 +38,7 @@ When your workflow repeats the same small job for many items, keep the parent ag
-A sub-agent is just a helper you define inside the same workflow file. In this step, you only need one syntax rule: start the helper with a level-2 heading that begins with `## agent:` and a backtick-wrapped name. Put the helper brief under that heading. If you want, add a short frontmatter block with fields such as `description` or `model`. Then call that helper by name from the parent workflow brief.
+A sub-agent is just a helper you define inside the same workflow file. In this step, you only need one syntax rule: start the helper with a level-2 heading that begins with `## agent:` and a backtick-wrapped name. Put the helper brief under that heading. If you want, add a short [frontmatter block](https://github.github.com/gh-aw/reference/inline-sub-agents/#frontmatter-fields) with fields such as `description` or `model`. Then call that helper by name from the parent workflow brief.
> :thinking: **Predict:** Look at your current workflow. Which instruction repeats once per issue, pull request, or file? Keep that answer in mind for the next section.
>