Skip to content
Agentmart
Submit a tool

files

Bounded filesystem reading, writing, exact editing, search, discovery, and listing.

Skill by clankerwrangler

IndexedMIT
Write a review

Install

Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.

npx agentmarket install skill/clankerwrangler-files

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Bounded filesystem reading, writing, exact editing, search, discovery, and listing.

Use cases: writing

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.

Tools
No tools found
Secrets
None asked for
Install scripts
None found
Runs as
Python package

Network hosts it talks to 1

  • codeload.github.com · found in install command

Files it touches

  • ~/.claude/skills/files

What's inside

Skill name
files
Description
Bounded filesystem reading, writing, exact editing, search, discovery, and listing.
License
MIT
Instructions
30 lines in SKILL.md · view on GitHub

Before installing

  • Ships executable scripts

Files (3)

  • SKILL.md
  • pyproject.toml
  • __init__.py · src/harness_files/

SKILL.md (first lines)

# Files

## API

Import with `import harness_files as files` (the kernel also preloads `files`).

Use `files.read(path, offset=1, limit=2000)` for text, `files.list(path)` for directory entries, `files.find(path, pattern)` for names, and `files.grep(pattern, path)` for matching lines. `grep` keeps JavaScript regular-expression compatibility but evaluates the complete search in a disposable worker with a 2-second hard deadline. It opens the root and every traversed child descriptor-relative with `O_NOFOLLOW`, never trusts cached directory-entry types after a swap, and visits at most 10,000 entries/files, streams line-bounded matches (8 KiB per displayed line) instead of loading a file as one blob, skips `*.map` during directory walks while still searching an explicit `.map` path, streams `.jsonl` even when larger than 1 MiB, skips other files over 1 MiB and stops at 32 MiB total, returns at most 64 KiB of match records, and deterministically skips NUL-containing or invalid-UTF-8 content. Symlink, binary, and 2-second deadline bounds are unchanged. Its `stats` field reports inspected and skipped content.

Use `files.attachment(path)` to emit a bounded image or binary attachment MIME bundle. Explicit `display(files.attachment(path))` images appear in the root WebUI conversation for the user; other displayed or final-expression PNG/JPEG images stay folded in its activity log. Assignment or `print(...)` alone does not emit an image. To show an image to the user only, use `display(files.show(path))`: the user sees it in the conversation, and you receive a note instead of the image.

Mutations use `files.write(path, content)` and `files.edit(path, old_text, new_text, replace_all=False)`. `files.write` is atomic create-only/no-replace: a flushed private same-directory inode is published with `link(2)` only while the destination is absent, so an existing file or concurrent creator wins and is never overwritten. `files.edit` requires an existing ordinary regular UTF-8 file and an exact unique `old_text` match unless `replace_all=True` is explicit. It rejects invalid UTF-8, missing/ambiguous matches, symlink or non-regular leaves, sources over 1 MiB, and setuid/setgid/sticky mode bits without changing the source.

The 1 MiB source-file limit is separate from the 1 MiB RPC frame limit. The
complete serialized request includes both `old_text` and `new_text`, JSON
escaping, and envelope fields. For a large edit, use one unique bounded
contiguous replacement that reconstructs the complete intended result. Verify
the whole preimage hash and reconstructed target hash before the call, keep the
serialized request within the frame limit, and verify the whole final hash
afterward. This preserves one atomic edit rather than splitting an atomic
transition into several calls.

A successful edit opens and snapshots the source without following the leaf, builds the bounded replacement, writes and fsyncs a private same-directory temp, preserves ordinary permission bits and UID/GID (or fails before publication when ownership cannot be preserved), then immediately revalidates the canonical parent plus source identity, metadata, and bytes before atomic `rename(2)` replacement. It fsyncs the publication directory where supported and verifies the published inode, content, and metadata. Cancellation and pre-publication failure clean private temps.

The edit precondition is deliberately **not** described as kernel compare-and-swap. POSIX/Node cannot couple an expected source inode with replace-existing `rename(2)` in one commit, so an arbitrary external writer that does not coordinate can still change the pathname after the final validation and before rename and may be replaced. The supported guarantee is an atomic whole-file replacement with immediate best-effort race detection, not expected-inode CAS. Parent/leaf changes observed before publication fail without mutation; failures observed after publication are reported as committed.

After either create or edit publication, any verification, durability, or cleanup failure raises the fixed path-independent committed error `code="ERR_ATOMIC_FILE_COMMITTED"`, `committed=true`, `phase="post-publication"`. Its message never includes the underlying OS error or a request-controlled pathname.

All operations are bounded and return a `SkillResult` containing structured metadata. Filesystem access is not sandboxed beyond the kernel process's OS permissions.

From clankerwrangler/persistent-harness, MIT.

More from clankerwrangler/persistent-harness

Signals

Stars
0
Forks
0
Open issues
0
Last commit (this folder)
Oct 15, 2026 (14 days ago)

From GitHub (fetched Oct 24, 2026).

Details

License
MIT
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

More from clankerwrangler

Cite this page

files skill. Agent Mart. https://agentmart.dev/skills/clankerwrangler-files (last updated 2026-10-24)