### Read Tool
**Tool Name**: `read`
**Tool Description**: Read up to 8 text resources. Accepts workspace file paths, direct `http://` / `https://` URLs, and internal schemes: `skill://<name>`, `skill://<name>/<relative-reference>`, `session://<id>`, `issue://<number>`, `pr://<number>`.
**Tool Arguments**:
- `paths`: required, array of string, min: 1, max: 8. Each item may include selector suffix.
- `offset`: optional, integer, min: 1. Legacy line offset for file reads only when no selector suffix is present.
- `limit`: optional, integer, min: 1, max: 2000. Legacy line limit for file reads only when no selector suffix is present.
**Selector suffixes** apply after resource text is resolved and win over `offset`/`limit`:
- `:N`: line N only
- `:N-M`: inclusive line range N through M
- `:-M`: beginning through line M
- `:N+`: line N through EOF
- `:N+K`: K lines starting at N
- `:raw`: bypass read-level headings/formatting; resource safety limits still apply
- `:raw:N-M`: raw mode plus line range
`read` defaults local file output to hashline mode:
```text
[/absolute/path/to/file.rs#A1B2]
1:first line
2:second line
```
The `#TAG` is whole-file content hash for current session `hash_edit`; line prefixes are 1-indexed anchors. Partial file reads keep same whole-file tag but only shown line numbers are marked as seen. Use the newest tag from the most recent `read` or successful `hash_edit` response for that file; stale-tag failure means re-read the file and retry with fresh anchors. Use `:raw` (for example `file.rs:raw` or `file.rs:raw:20-40`) to bypass hashline formatting and return plain text. Raw reads do not provide hash_edit anchors. Non-file resources never use hashline formatting.
`skill://<name>` reads configured skill `SKILL.md`; `skill://<name>/<relative-reference>` reads a UTF-8 reference file under that skill directory. Skill reference paths must be relative, cannot contain `..`, cannot target symlinks or directories, and stay under the discovered skill directory. `session://` reads current MC_HOME session JSONL by validated id. `issue://` and `pr://` use bounded `gh` subprocess calls with numeric ids only. URL reads use URL-fetch SSRF guards, redaction, byte caps, and current extraction behavior; `:raw` does not bypass those URL protections.