Hand off the current session to the next one. An agent skill from Soul-Brews-Studio/arra-oracle-skills-cli.

MITAuto-check passedAgent Workflows

Install Forward

skills CLI
$ npx skills add Soul-Brews-Studio/arra-oracle-skills-cli --skill forward -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install Soul-Brews-Studio/arra-oracle-skills-cli forward --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/Soul-Brews-Studio/arra-oracle-skills-cli.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/forward .claude/skills/forward && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
forward
GitHub stars
123
Token cost
~2.9k tokens
SKILL.md length
782 words
Files
2 (incl. scripts)
Skills in repo
31
Repo updated
First seen
Licence
MIT

At a glance

Hand off the current session to the next one. An agent skill from Soul-Brews-Studio/arra-oracle-skills-cli.

  • Works in 6 steps: Extract Items → Filter Actionable Items → Check for Duplicates → …
  • User says forward
  • SKILL.md covers Usage, /forward --bg, Steps and Output, plus 5 more sections
  • Runs Python scripts from its folder; calls git, gh and vault

What it does

Forward is an agent skill from Soul-Brews-Studio/arra-oracle-skills-cli. Hand off the current session to the next one. Use when user says "forward", "handoff", "wrap up", or before ending a session.

Its SKILL.md is about 2.9k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files, including scripts (for example `scripts/dig-session.py`).

It sits in Agent Workflows, covering Session handoff. The repository describes itself as: Install Oracle skills to Claude Code, OpenCode, Cursor, and 12+ AI coding agents. The licence is MIT.

When your agent uses it

  • User says forward
  • Before ending a session

Example prompts

  • “forward”
  • “handoff”
  • “wrap up”
  • “/forward”

Requirements

  • Python 3

Workflow steps

6 steps, taken from the step headings in SKILL.md.

  1. Extract Items
  2. Filter Actionable Items
  3. Check for Duplicates
  4. Show and Confirm
  5. Create Issues
  6. Write to Outbox

What it can do on your machine

Read from SKILL.md and the folder at commit 9feea09. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Ships 1 file in scripts/ (Python), which the agent can run.

    Shell commands in SKILL.md call:

    • git
    • gh
    • vault

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use git and gh, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Forward loads about 2.9k tokens when it runs. Until then it costs about 33 tokens; SKILL.md has 782 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~33
When it runs · the whole SKILL.md, loaded when a task matches
~2.9k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.

SKILL.md

The full file from Soul-Brews-Studio/arra-oracle-skills-cli at commit 9feea09, republished under its MIT licence (© Soul-Brews-Studio). 782 words, ~2,877 tokens.

Download SKILL.mdSave it as .claude/skills/forward/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.
name
forward
description
Hand off the current session to the next one. Use when user says "forward", "handoff", "wrap up", or before ending a session.
argument-hint
[--bg | asap | --only]

/forward - Handoff to Next Session

Create context for next session, then enter plan mode to define next steps.

Usage

/forward              # Create handoff, show plan, wait for approval
/forward --bg         # Hand the whole handoff to a background Haiku — returns instantly
/forward asap         # Create handoff + commit immediately (no approval needed)
/forward --only       # Create handoff only, skip plan mode

/forward --bg

Fire-and-forget. A background Haiku subagent mines the session JSONL and writes the handoff file. Returns immediately — no plan mode, no blocking. Use it to snapshot progress mid-session, or at the end when you'd rather keep moving. For the full interactive flow with plan approval, use plain /forward.

Haiku is the right tier here: this is bullet extraction from structured JSONL, not writing. (Its sibling /rrr --bg uses Sonnet — a retro's diary and lessons are writing.)

Resolve first, then spawn
bash
ORACLE_ROOT=$(git rev-parse --show-toplevel 2>/dev/null || pwd)
ENCODED_PWD=$(echo "$ORACLE_ROOT" | sed 's|^/|-|; s|[/.]|-|g')
PROJECT_DIR="$HOME/.claude/projects/${ENCODED_PWD}"
LATEST_JSONL=$(ls -t "$PROJECT_DIR"/*.jsonl 2>/dev/null | head -1)
SESSION_ID=$(basename "$LATEST_JSONL" .jsonl | cut -c1-8)
PSI=$(readlink -f "$ORACLE_ROOT/ψ" 2>/dev/null || echo "$ORACLE_ROOT/ψ")
REPO_NAME=$(basename "$ORACLE_ROOT")
DATE_SLUG=$(date +%Y-%m-%d_%H-%M)

Substitute every <PLACEHOLDER> with the real value before spawning — the subagent cannot see your shell. Check whether the handoff directory exists; if not, tell the subagent to mkdir -p it.

Spawn ONE background Agent (model: "haiku", run_in_background: true)
You are a session archivist. Write a handoff file for the current session.

JSONL path: <LATEST_JSONL>
Vault path (PSI): <PSI>
Session ID: <SESSION_ID>
Repo: <REPO_NAME>
Date: <YYYY-MM-DD HH:MM>

Steps:
1. Run: python3 "$(ls ~/.claude/skills/forward/scripts/dig-session.py \
             ~/.claude/plugins/marketplaces/*/skills/forward/scripts/dig-session.py \
             ~/.claude/plugins/cache/*/*/*/skills/forward/scripts/dig-session.py \
             ~/.claude/skills/forward/dig-session.py 2>/dev/null | head -1)" "<LATEST_JSONL>"
2. From the JSON output, write 4-8 bullets summarizing what happened. Be specific:
   skills invoked, teammates used, files changed, key outputs.
3. Run: git -C <ORACLE_ROOT> status --short
4. Write the handoff to: <PSI>/inbox/handoff/<DATE_SLUG>_bg-forward.md

Format:

# Handoff: [session focus from the JSONL]

**Date**: <YYYY-MM-DD HH:MM>
**Source**: /forward --bg (JSONL-mined, not memory)
📡 Session: <SESSION_ID> | <REPO_NAME>

## What We Did
<bullets from the JSONL analysis>

## Uncommitted Files
<from git status --short, or "none">

## Pending
<infer from the session: what was in progress? what was mentioned but not done?>

## Next Session
<1-3 specific actions based on where the session ended>

After writing, print: "📤 Handoff written: <absolute_path>"
Do NOT enter plan mode. Do NOT commit anything.
After spawning

Tell the user where it will land, then keep working — don't wait:

📤 /forward --bg launched — handoff writing in background.
   Session: <SESSION_ID>
   Will write to: <PSI>/inbox/handoff/<DATE_SLUG>_bg-forward.md

Sibling: /rrr --bg (retrospective). Run both at session end — /rrr --bg looks back, /forward --bg looks forward.

Steps

  1. Git status: Check uncommitted work
  2. Detect session: Current session ID for traceability
  3. Session summary: What we did (from memory)
  4. Pending items: What's left
  5. Next steps: Specific actions
Session Detection
bash
ORACLE_ROOT=$(git rev-parse --show-toplevel 2>/dev/null || pwd)
ENCODED_PWD=$(echo "$ORACLE_ROOT" | sed 's|^/|-|; s|[/.]|-|g')
PROJECT_DIR="$HOME/.claude/projects/${ENCODED_PWD}"
LATEST_JSONL=$(ls -t "$PROJECT_DIR"/*.jsonl 2>/dev/null | head -1)
if [ -n "$LATEST_JSONL" ]; then
  SESSION_ID=$(basename "$LATEST_JSONL" .jsonl)
  echo "SESSION: ${SESSION_ID:0:8}"
fi

Include in handoff header if detected:

markdown
📡 Session: 74c32f34 | repo-name | Xh XXm

Skip silently if detection fails.

Output

Resolve vault path first:

bash
ORACLE_ROOT=$(git rev-parse --show-toplevel 2>/dev/null)
if [ -n "$ORACLE_ROOT" ] && [ -f "$ORACLE_ROOT/CLAUDE.md" ] && { [ -d "$ORACLE_ROOT/ψ" ] || [ -L "$ORACLE_ROOT/ψ" ]; }; then
  PSI=$(readlink -f "$ORACLE_ROOT/ψ" 2>/dev/null || echo "$ORACLE_ROOT/ψ")
else
  PSI=$(readlink -f ψ 2>/dev/null || echo "ψ")
fi

Write to: $PSI/inbox/handoff/YYYY-MM-DD_HH-MM_slug.md

IMPORTANT: Always use the resolved $PSI path, never the ψ/ symlink directly. This ensures handoffs go to the project's vault (wherever ψ points). Do NOT git add vault files — they are shared state, not committed to repos.

markdown
# Handoff: [Session Focus]

**Date**: YYYY-MM-DD HH:MM
**Context**: [%]

## What We Did
- [Accomplishment 1]
- [Accomplishment 2]

## Pending
- [ ] Item 1
- [ ] Item 2

## Next Session
- [ ] Specific action 1
- [ ] Specific action 2

## Key Files
- [Important file 1]
- [Important file 2]
Confirm handoff write (announce-mode — absolute paths required)

announce-mode → absolute path (no ψ/, no ~/, no $VAR, no ...).

Use: echo "marker: $RESOLVED_PATH" — bash substitutes. See CONVENTIONS.md.

bash
HANDOFF_FILE="$PSI/inbox/handoff/$(date +%Y-%m-%d_%H-%M)_${SLUG}.md"
echo "📤 Handoff: $HANDOFF_FILE"

Then: Create Issues from Pending Items

After writing the handoff file, extract actionable items and offer to create GitHub issues.

Step 1: Extract Items

From the handoff you just wrote, collect all - [ ] items from Pending and Next Session sections.

Step 2: Filter Actionable Items

Skip items that are NOT actionable:

  • Items containing "monitor", "watch", "track", "deferred", "maybe", "consider"
  • Items that are vague (less than 4 words after the checkbox)
Step 3: Check for Duplicates
bash
# For each item, check if an issue already exists with a similar title
gh issue list --state open --search "ITEM_TITLE" --json title --jq '.[].title' 2>/dev/null

Skip items that already have a matching open issue (case-insensitive title match).

Step 4: Show and Confirm

Display the list of new issues to create:

📋 Create GitHub issues from pending items?

  1. Fix awaken git push auth
  2. /rrr --deep time-based

Create these 2 issues? [y/N]

NEVER auto-create issues without user approval.

If user declines, skip issue creation and continue to plan mode.

Step 5: Create Issues

If user approves:

bash
# Detect repo for issue creation
REMOTE=$(git remote get-url origin 2>/dev/null)
# Extract owner/repo from remote URL
REPO=$(echo "$REMOTE" | sed -E 's|.*[:/]([^/]+/[^/]+?)(\.git)?$|\1|')

# For each actionable item:
gh issue create --repo "$REPO" --title "ITEM_TITLE" --body "From /forward handoff on YYYY-MM-DD"

Show results:

Created #115: Fix awaken git push auth
Created #116: /rrr --deep time-based
Step 6: Write to Outbox

Regardless of whether issues were created, write items to the outbox:

bash
ORACLE_ROOT=$(git rev-parse --show-toplevel 2>/dev/null)
if [ -n "$ORACLE_ROOT" ] && [ -f "$ORACLE_ROOT/CLAUDE.md" ] && { [ -d "$ORACLE_ROOT/ψ" ] || [ -L "$ORACLE_ROOT/ψ" ]; }; then
  PSI=$(readlink -f "$ORACLE_ROOT/ψ" 2>/dev/null || echo "$ORACLE_ROOT/ψ")
else
  PSI=$(readlink -f ψ 2>/dev/null || echo "ψ")
fi
OUTBOX_DIR="$PSI/outbox"
mkdir -p "$OUTBOX_DIR"

Write to: $PSI/outbox/YYYY-MM-DD_pending.md

markdown
# Pending Items — YYYY-MM-DD

## From: [repo-name] /forward

- [ ] Item 1 (issue #115)
- [ ] Item 2 (issue #116)
- [ ] Item 3 (no issue — skipped: vague)
Confirm outbox write (announce-mode — absolute paths required)

announce-mode → absolute path (no ψ/, no ~/, no $VAR, no ...).

Use: echo "marker: $RESOLVED_PATH" — bash substitutes. See CONVENTIONS.md.

bash
OUTBOX_FILE="$OUTBOX_DIR/$(date +%Y-%m-%d)_pending.md"
echo "📋 Outbox: $OUTBOX_FILE"
Show full SKILL.md (330 more words)Show less
Silent Failures
  • If gh is not available: write to outbox only, skip issue creation silently
  • If repo has no GitHub remote: skip issue creation silently, write to outbox only
  • If gh auth status fails: skip issue creation silently, write to outbox only

Then: MUST Show Plan Approval Box

CRITICAL — DO NOT SKIP: The whole point of /forward is the plan approval UI. You MUST do ALL 3 steps in order. If you skip any step, the user cannot approve and clear the session.

  1. EnterPlanMode — enters plan mode
  2. Write plan file — session summary + next steps
  3. ExitPlanMode — THIS shows the approval box where user can approve/reject/clear

If you only do EnterPlanMode without ExitPlanMode, the user sees nothing. If you skip EnterPlanMode entirely, the user sees nothing. ALL 3 STEPS ARE REQUIRED.

Do NOT commit the handoff file — it lives in the vault, not the repo. After writing the handoff, gather cleanup context:

bash
# Check for things next session might need to clean up
git status --short
git branch --list | grep -v '^\* main$' | grep -v '^  main$'
gh pr list --state open --json number,title,headRefName --jq '.[] | "#\(.number) \(.title) (\(.headRefName))"' 2>/dev/null
gh issue list --state open --limit 5 --json number,title --jq '.[] | "#\(.number) \(.title)"' 2>/dev/null

Then:

  1. Call EnterPlanMode tool
  2. In plan mode, write a plan file with:
    • What we accomplished this session
    • Pending items carried forward
    • Cleanup needed (stale branches, open PRs, uncommitted files)
    • Next session goals and scope
    • Reference to handoff file path
    • Always end plan with a choice table:
markdown
## Next Session: Pick Your Path

| Option | Command | What It Does |
|--------|---------|--------------|
| **Continue** | `/recap` | Pick up where we left off |
| **Clean up first** | See cleanup list below, then `/recap` | Merge PRs, delete branches, close issues, then continue |
| **Fresh start** | `/recap --quick` | Minimal context, start something new |

### Cleanup Checklist (if any)
- [ ] [Open PR to merge]
- [ ] [Stale branch to delete]
- [ ] [Issue to close]
- [ ] [Uncommitted work to commit or stash]
  1. Call ExitPlanMode — user sees the built-in plan approval UI

The user gets the standard plan approval screen with options to approve, modify, or reject. This is the proper way to show plans.

If user calls /forward again — just show the existing plan, do not re-create the handoff file.

Wizard v2 Context in Handoff

If CLAUDE.md contains demographics from /awaken wizard v2, include in handoff:

markdown
## Context
**Oracle**: [name] ([pronouns]) | **Human**: [name] ([pronouns])
**Mode**: [Fast/Full Soul Sync] | **Memory**: [auto/manual]
**Team**: [solo/team context]

This helps the next session orient faster. If demographics not present, skip.


ASAP Mode

If user says /forward asap or /forward now:

  • Write handoff file
  • Immediately commit and push — no approval needed
  • Skip plan mode
  • User wants to close fast

Skip Plan Mode

If user says /forward --only:

  • Skip plan mode after commit
  • Just tell user: "💡 Run /plan to plan next session"

ARGUMENTS: $ARGUMENTS

© Soul-Brews-Studio, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 1 other file (scripts) in skills/forward of Soul-Brews-Studio/arra-oracle-skills-cli.

  • SKILL.md
  • scripts/dig-session.py

Open the folder on GitHubat commit 9feea09

Compare with similar skills

Forward next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Forward compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Forward this skillSoul-Brews-Studio/arra-oracle-skills-cli123—~2.9kAutomated safety check: PassMIT
Orca CLIstablyai/orca88k2 repos~593Automated safety check: PassMIT
Beads Task Memorygastownhall/beads28k—~1.2kAutomated safety check: PassMIT
Session History Searchslopus/happy24k—~3.1kAutomated safety check: PassMIT
Paseo Agent Handoffgetpaseo/paseo20k1 repos~606Automated safety check: PassCustom licence
Memori Long-Term MemoryMemoriLabs/Memori17k—~2kAutomated safety check: NotesCustom licence

Similar skills

  • Orca CLI

    stablyai/orca

    Operate Orca-managed worktrees, folder contexts, terminals, repos, automations, artifacts, skill sharing, worktree comments, and Orca's embedded browser…

    88k GitHub starsUsed in 2 repos~593 tokens
    Agent WorkflowsAuto-check passed
  • Beads Task Memory

    gastownhall/beads

    Tracks multi-session work with dependencies in the bd issue tracker so the agent can find ready tasks and recover its context after conversation compaction.

    28k GitHub stars~1.2k tokensUpdated today
    Agent WorkflowsAuto-check passed
  • Searches past Claude Code, Codex and Cursor sessions and summarizes what was worked on, tried or decided, using extraction scripts instead of reading raw logs.

    24k GitHub stars~3.1k tokensUpdated today
    Agent WorkflowsAuto-check passed
  • Paseo Agent Handoff

    getpaseo/paseo

    Hands off the current task, including context, decisions and failed attempts, to a fresh agent through Paseo by writing a self-contained briefing prompt and launching that agent.

    20k GitHub starsUsed in 1 repo~606 tokens
    Agent WorkflowsAuto-check passed
  • Memori Long-Term Memory

    MemoriLabs/Memori

    Connects Claude Code to Memori Cloud for long-term memory, recalling stored context before substantive replies and saving new context afterward.

    17k GitHub stars~2k tokensUpdated 6 days ago
    Agent WorkflowsAuto-check: notes
  • Beads

    liwp/again

    A skill your agent uses when working in a repository that uses bd or Beads for durable project task tracking, issue dependencies, blocker management, multi-session handoff, or shared work memory.

    118 GitHub starsUsed in 6 repos~537 tokens
    Agent WorkflowsAuto-check passed

More from Soul-Brews-Studio/arra-oracle-skills-cli

All 31 skills in this repo
  • Dig

    Soul-Brews-Studio/arra-oracle-skills-cli

    Mine Claude Code sessions — timeline, gaps, repo attribution, session history.

    123 GitHub stars~1.8k tokensUpdated 6 days ago
    Auto-check passed
  • Project

    Soul-Brews-Studio/arra-oracle-skills-cli

    Clone and track external repos. An agent skill from Soul-Brews-Studio/arra-oracle-skills-cli.

    123 GitHub stars~1.4k tokensUpdated 6 days ago
    Auto-check passed
  • Round Table

    Soul-Brews-Studio/arra-oracle-skills-cli

    Convene a Round Table (โต๊ะกลม): 3–8 souls — persona files, Oracles, or real people's DNA — debate ONE stakes-bearing decision over exactly 4 rounds (OPEN, DEEPEN, CONVERGE, VOTE), one subagent per…

    123 GitHub stars~2.1k tokensUpdated 6 days ago
    Auto-check passed
  • Soul

    Soul-Brews-Studio/arra-oracle-skills-cli

    Bring an Oracle into the current repo — its soul, ALL its skills and its expertise — by link, never by copy.

    123 GitHub stars~1.3k tokensUpdated 6 days ago
    Auto-check passed
  • Trace

    Soul-Brews-Studio/arra-oracle-skills-cli

    Find projects, code, and knowledge across git history, repos, docs, and Oracle.

    123 GitHub stars~2.9k tokensUpdated 6 days ago
    Auto-check passed
  • Recap

    Soul-Brews-Studio/arra-oracle-skills-cli

    Session orientation and awareness — retro summaries, handoffs, git state, focus.

    123 GitHub stars~2.7k tokensUpdated 6 days ago
    Auto-check passed

Categories

Questions about Forward

What does Forward do?

Hand off the current session to the next one. An agent skill from Soul-Brews-Studio/arra-oracle-skills-cli. Forward is an agent skill from Soul-Brews-Studio/arra-oracle-skills-cli. Hand off the current session to the next one.

When should I use Forward?

Forward fits situations like: user says forward; before ending a session.

How do I install Forward in Claude Code?

Run `npx skills add Soul-Brews-Studio/arra-oracle-skills-cli --skill forward -a claude-code`. Or copy the skill folder (skills/forward in Soul-Brews-Studio/arra-oracle-skills-cli) into .claude/skills/forward in your project. Claude Code loads it when a task matches its description.

How do I install Forward in Codex?

Run `npx skills add Soul-Brews-Studio/arra-oracle-skills-cli --skill forward -a codex`. Or copy the skill folder (skills/forward in Soul-Brews-Studio/arra-oracle-skills-cli) into .agents/skills/forward in your project. Codex loads it when a task matches its description.

Can I use Forward in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add Soul-Brews-Studio/arra-oracle-skills-cli --skill forward -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/forward, .gemini/skills/forward, .github/skills/forward and .opencode/skills/forward in your project.

What does Forward need to run?

Going by SKILL.md and its folder, Forward needs Python for the scripts in its folder and the command-line tools its instructions call (git, gh and vault). Our summary lists: Python 3.

Does Forward access the network?

SKILL.md contains no URLs. Its commands use git and gh, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Forward safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.

What licence does Forward use?

Forward is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Forward use?

About 2.9k tokens (SKILL.md is roughly 12k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Forward?

Skills that share tags, products or a category with Forward: Orca CLI (stablyai/orca, 88k stars), Beads Task Memory (gastownhall/beads, 28k stars), Session History Search (slopus/happy, 24k stars) and Paseo Agent Handoff (getpaseo/paseo, 20k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Forward?

Soul-Brews-Studio (a GitHub organization) maintains it in Soul-Brews-Studio/arra-oracle-skills-cli, which has 123 GitHub stars. The repository holds 31 skills in this directory. The repository was last updated on October 3, 2026.

Source: Soul-Brews-Studio/arra-oracle-skills-cli on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.