Seek is a cross-platform command-line file searcher built as a faster alternative to find.
It uses a concurrent worklist algorithm that is orders of magnitude faster than conventional file-tree walks. There are no indexes. No daemons. No warm-up ritual. Just point it at a directory and let it rip.
- Searches full paths, not just filenames.
- Supports both plain substring search and regex.
- Works well for source trees, logs, monorepos, and large developer workspaces.
- Ships as a clean
.NETglobal tool.
Seek is for developers, power users, and anyone tired of waiting on filesystem search.
A real-world full-path regex benchmark for mp4 paths under the root directory showed Seek running 2.5-3.5x faster than rust-based fd:
- C# on .NET 10
- Console UI by PrettyConsole
- CLI and argument parsing by ConsoleAppFramework
- winget:
winget install dusrdev.Seek - GitHub: latest release binaries
- NuGet:
dotnet tool install Seek --global
On supported runtimes, NuGet resolves Seek's native AOT package for the current machine automatically. A framework-dependent Seek.any fallback package is also published for unsupported or generic environments.
This repo includes a reusable agent skill for path search with seek:
- Skill path:
.agents/skills/seek-file-search
The bundled metadata is directly usable by Codex and other agents that understand the same skill layout. For agents that use a different schema, the skill content can still be copied and adapted.
To install it into a global skills folder, copy that directory into your agent skills directory, for example:
cp -R .agents/skills/seek-file-search ~/.agents/skills/seek-file-searchThe skill guides agents to prefer seek for filesystem path lookup instead of find, fd, or ls | grep, and to use rg only for file-content search. Cursor, Claude, and other agents with different skill formats will require user-side customization for now.
The positional argument is the search query.
By default, Seek matches against the path relative to --root and prints results relative to that root.
Search from the current directory:
seek reportSearch from a specific root:
seek report --root /path/to/rootExample output:
src/Seek.Cli/Program.cs
tests/Seek.Core.Tests/FileSystemSearchTests.cs
Emit absolute paths instead:
seek report --root /path/to/root --absoluteRegex search:
seek ".*\\.cs$" --regexOnly files:
seek report --filesOnly directories:
seek report --directoriesShort flags:
seek report -f
seek report -dMachine-readable output for piping:
seek report --null | xargs -0 rm--null always emits plain absolute paths terminated by \0, so it is safe for piping even when names contain spaces or newlines.
Built-in delete command:
seek delete report
seek delete report --apply
seek delete ".*\\.tmp$" --regex --applyseek delete uses the same search-selection options as the default search command: --regex, --case-sensitive, --hidden, --system, --files, --directories, and --root.
Without --apply, seek delete prints the final candidate list and a No changes were made... hint. With --apply, it deletes each candidate sequentially and prints a SUCCESS or FAIL status line for each path.
Add --no-progress to disable the live progress bar during apply runs.
Other useful options:
--case-sensitive--absoluteto emit absolute paths instead of root-relative paths-f, --filesto emit only file matches-d, --directoriesto emit only directory matches--plainfor plain paths without ANSI escape sequences--nullfor NUL-terminated absolute paths that are safe to pipe into tools likexargs -0seek delete ... --applyfor built-in deletion after previewseek delete ... --apply --no-progressfor durable status lines without the live progress bar-h, --hiddento include hidden files-s, --systemto include system files
dotnet build Seek.slnx