agentleFS
jabbott-iiijabbott-iii/Tidepool/AGENTS.md

Tidepool

AGENTS.md1 starsChanged 10 days agoApache-2.0View on GitHub

Status: in development, at version 0.1, and still headless: nothing opens a window yet. docs/roadmap.md ticks each task once it is done and verified. - Built: the guarded workspace and its checks (M0.1–M0.4, M0.10, M0.11), the CI supply chain and its check (M0.8), license headers on the source files and their check (M0.7), the foundations in tidepool-core (M0.2), JSON and JSONC (M1.4) and TOML 1.1 (M1.7) in tidepool-codec, and in tidepool-text the rope, positions and grapheme boundaries (M1.1), selections, change…

  • Reads credentials
  • Where files are headingNew AGENTS.md files have more rules about keeping secrets out of the code, and fewer about code style.

    Of the AGENTS.md files we read, the 31,700 first seen in the last six months, against the older ones: the kind of rule that gained most share, and the kind that lost most. About files like this in general, not this one, and an estimate, since a kind is a pattern in the words.

  • In this repository7 other files it gives its agents.

The file

Show its rules and text

We split this AGENTS.md into the rules it gives an agent

13 rules. About 0 are common, 4 are distinctive, and 9 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈4

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 9

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  • could be automatic: a setting could enforce it
  1. Very specific:

    No third-party crates: Do not add any crate outside this workspace to any [dependencies], [dev-dependencies] or [build-dependencies] table, …

    line 74
  2. Very specific:

    Outside programs go through toolchain: Only tidepool-toolchain finds, installs, updates or spawns external programs.

    line 80
  3. Very specific:

    Every unsafe block carries a // SAFETY: comment.

    line 92
  4. Very specific:

    Every pub unsafe fn has a # Safety doc section.

    line 93
  5. Distinctive:

    Never state that a build, test, benchmark or check passed unless you ran it in this session and saw it pass.

    line 112
  6. Distinctive:

    If a command does not exist yet, say so instead of guessing.

    line 114
  7. Very specific:

    Smallest complete change: No unrelated refactors, renames, reformatting or "while I'm here" fixes.

    line 116
  8. Distinctive:

    Git is read-only for agents: Do not commit, amend, rebase, merge, tag, push, force-push or rewrite history.

    line 120
  9. Very specific:

    Parsers: every parser takes Limits, never panics on input, and has a fuzz target (from M1.6).

    line 199
  10. Very specific:

    Docs: every pub item has a doc comment.

    line 206
  11. Very specific:

    License header: every source file (Rust, shell scripts, workflows) starts with the Apache-2.0 notice from LICENSE's appendix, in its …

    line 207
  12. Distinctive:

    Crate READMEs: every member has a README.md saying what it is, its status, its spec and its rules (ADR-0023).

    line 214
  13. Very specific:

    Every acceptance criterion for the task in docs/roadmap.md is met, and its Decide first questions were answered by the user and recorded.

    line 225

≈ “Common” is an estimate: at least 1 in 5 of the 40,246 AGENTS.md files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
AGENTS.md

Tidepool — zero-dependency IDE (Rust; Linux, macOS, Windows)

Status: in development, at version 0.1, and still headless: nothing opens a window yet. docs/roadmap.md ticks each task once it is done and verified.

  • Built: the guarded workspace and its checks (M0.1–M0.4, M0.10, M0.11), the CI supply chain and its check (M0.8), license headers on the source files and their check (M0.7), the foundations in tidepool-core (M0.2), JSON and JSONC (M1.4) and TOML 1.1 (M1.7) in tidepool-codec, and in tidepool-text the rope, positions and grapheme boundaries (M1.1), selections, change sets and the undo tree (M1.2), and encodings, loading and the atomic save (M1.3).
  • Not built: everything else. 22 of the 26 workspace members are empty crates with a doc comment; tidepool (cargo tp) builds a binary that does nothing. Each crate's README.md says what it has and which tasks add the rest.
  • Next: the first unticked task whose dependencies are all ticked, skipping one whose remaining work needs an OS, tool or person this session does not have (/next-task picks it). A task's Decide first line is asked before its code.

This document also describes what is not built yet. Some of what it mentions does not exist, so check before assuming a crate, module, command or file is there.

What we are building

  • An IDE with a native GUI in jabbott.dev's design language, and a terminal UI with vim-style modal editing.
  • First-class first: Rust (rust-analyzer, cargo) and Markdown (preview, outline, link checks). Other languages follow as language packs.
  • Managed toolchains: rust-analyzer, git, the JDK, the Android SDK/NDK, bundletool and Xcode are installed, updated, configured and driven by Tidepool through their official channels (ADR-0002).
  • Mobile: build, sign and verify Android .apk/.aab and iOS .app/.xcarchive/.ipa (iOS on macOS or a remote Mac).
  • AI: language agents over the Tidepool Agent Protocol, plus offline predictive text.
  • Targets: Linux x86_64 (X11/XWayland), macOS 13+ (universal), Windows 10 1809+ x86_64. Development order Linux → macOS → Windows.
  • Built from the ground up: zero third-party crates. We write our own OS bindings, rasterizer, font renderer, UI toolkit, text engine, parsers, protocols and terminal emulator.

Read before working

If you are touching…Read first
Anythingdocs/00-overview.md, then docs/01-architecture.md, then the crate's README.md
Cargo.toml, Cargo.lock, a new cratedocs/02-dependency-policy.md
crates/coredocs/subsystems/core.md
crates/sys, crates/platformdocs/subsystems/sys-and-platform.md, docs/03-platforms.md
crates/text, crates/codec, crates/regexdocs/subsystems/text-and-formats.md
crates/gfx, crates/font, assets/fontsdocs/subsystems/rendering.md
crates/ui, themes/docs/subsystems/ui-and-theme.md
crates/gui, crates/tuidocs/subsystems/frontends.md
crates/editor, crates/workspacedocs/subsystems/editor.md
Vim mode (crates/editor/src/vim)docs/subsystems/vim-mode.md
crates/syntax, crates/markdown, crates/rpc, crates/lang, languages/docs/subsystems/languages.md
crates/toolchain, crates/vcs, crates/term, toolchains/docs/subsystems/toolchains.md
crates/mobiledocs/subsystems/mobile.md
crates/agent, agents/docs/subsystems/agents.md
Tests, CI, xtaskdocs/04-quality.md
.github/ (workflows, Dependabot, templates)docs/04-quality.md ("CI"), ADR-0022
A crate's README.mdADR-0023
CONTRIBUTING.md, SECURITY.mdThis file; they summarize it for people
Packaging Tidepool itselfdocs/05-release.md
docs/roadmap.mdIts "How to use this file", ADR-0024
Why something is the way it isdocs/decisions.md

Non-negotiable rules

  1. No third-party crates. Do not add any crate outside this workspace to any [dependencies], [dev-dependencies] or [build-dependencies] table, unless docs/02-dependency-policy.md lists it as Approved. If you believe one is needed, stop, run /evaluate-dependency, and ask the user. cargo xtask deps enforces this, and the Claude Code hook runs it after every manifest edit.
  2. Outside programs go through toolchain. Only tidepool-toolchain finds, installs, updates or spawns external programs. The one exception is the dev-only xtask, which runs cargo itself and nothing else (ADR-0017). Spawn with an argv vector, never through a shell. Installs ask first, verify downloads against pinned SHA-256s, show licenses to the user, and never elevate silently. Never bundle a tool's binary (ADR-0002).
  3. Layering is one-way. A crate may depend only on crates listed for it in docs/01-architecture.md → "Dependency matrix". cargo xtask layers enforces this, reading the matrix from that document.
  4. unsafe lives in two crates only: tidepool-sys and tidepool-platform. Every other crate inherits unsafe_code = "deny".
    • Every unsafe block carries a // SAFETY: comment.
    • Every pub unsafe fn has a # Safety doc section.
    • Raw OS declarations live only in tidepool-sys.
    • cargo xtask unsafe-audit enforces this.
  5. Platform cfg lives in few places: #[cfg(target_os = ...)] appears only in sys, platform, toolchain install plans and xtask packaging. The one exception is a #[cfg(unix)] in text::file that creates the save's temp file private and clears setuid and setgid, plus cfg(unix) in text's tests of modes and links (ADR-0025). No check enforces this yet; review does.
  6. The main thread never waits on I/O, a child process, an LSP server or an agent. Results carry buffer versions; stale ones are dropped.
  7. Secrets never leak. Keystore passwords, signing identities and API keys never go on argv, into logs, settings, test fixtures, snapshots, error messages or agent context. Never read or print keystores, .p12, .p8, .pem, .key, .env files or provisioning profiles. No in-house signing crypto (ADR-0007).
  8. The core binary opens no sockets. Network access happens only in child processes (curl, official installers, git, ssh, agents).
  9. Honest verification.
    • Never state that a build, test, benchmark or check passed unless you ran it in this session and saw it pass.
    • If a command does not exist yet, say so instead of guessing.
    • Report what you did not run. A SKIPPED: test is not a pass.
  10. Smallest complete change. No unrelated refactors, renames, reformatting or "while I'm here" fixes. Preserve public APIs, file formats and protocols unless the task authorizes a break; record breaks in docs/decisions.md.
  11. Git is read-only for agents. Do not commit, amend, rebase, merge, tag, push, force-push or rewrite history. Leave all changes uncommitted for human review, and propose a commit message.

Workspace map

PathPackagePurposeunsafe
crates/coretidepool-coreErrors, logging, test harness, RNG, hashing (incl. SHA-256 for downloads), CLI, time, geometry, color, input types, pathsdeny
crates/systidepool-sysHand-written raw FFI declarations (libc, X11, objc/AppKit, Win32, ConPTY)allowed
crates/platformtidepool-platformWindows, events, waker, present, clipboard, terminal raw mode, PTY, processes, file watching, pathsallowed
crates/codectidepool-codecJSON(C), TOML, XML, plist, YAML subset, CSV, INI, DEFLATE, ZIP, PNG, QOIdeny
crates/texttidepool-textRope, positions (UTF-16 too), selections, transactions, undo tree, encodings, atomic savedeny
crates/regextidepool-regexLinear-time regexdeny
crates/gfxtidepool-gfxCPU rasterizer, backdrop cache, damagedeny
crates/fonttidepool-fontTrueType, rasterizer, glyph atlas, text layoutdeny
crates/markdowntidepool-markdownCommonMark + GFM parserdeny
crates/rpctidepool-rpcJSON-RPC transport; LSP, DAP and TAP messagesdeny
crates/toolchaintidepool-toolchainManaged tools: descriptors, detection, installs, downloads, processes, sessions, secretsdeny
crates/syntaxtidepool-syntaxLexers (Rust, Markdown, TOML), language packs, brackets, indentdeny
crates/termtidepool-termVT parser and terminal griddeny
crates/workspacetidepool-workspaceFolders, trust, settings, files, watching, search, buffers, sessiondeny
crates/uitidepool-uiWidget tree, layout, focus, theme (jabbott.dev), draw lists, accessibility treedeny
crates/langtidepool-langLanguage sessions, LSP features, cargo tasks, Markdown services, DAPdeny
crates/vcstidepool-vcsgit over the managed CLIdeny
crates/agenttidepool-agentAgent host, TAP, context and consent, predictive textdeny
crates/mobiletidepool-mobileAndroid and iOS build, sign, verify, devicesdeny
crates/editortidepool-editorEditor view, modal keymaps and vim mode, all panelsdeny
crates/guitidepool-guiGUI frontenddeny
crates/tuitidepool-tuiTerminal frontenddeny
crates/apptidepoolThe binary: main loop, wiring, startup, crash handlingdeny
crates/testkittidepool-testkitFake LSP server, fake tools, transcripts (dev-only)deny
xtaskxtaskCI checks, Unicode tables; later goldens, fuzz smoke, theme contrast, packagingdeny
benchtidepool-benchOwn benchmark harness and suitesdeny
agents/(separate workspace, from M9.2)Reference language agents: mock, local, Claudedeny

Commands

These exist now:

CommandWhat it does
cargo xtask ciThe gate, in order: deps, cargo fmt --check, clippy (-D warnings), cargo test, layers, unsafe-audit, headers, workflows, ucd --check. It ends with a summary; tools and theme show as "not yet implemented"
cargo xtask deps / layers / unsafe-audit / headers / workflowsOne check each (docs/04-quality.md → "xtask checks")
cargo xtask ucd [--check]Regenerates the grapheme tables from the pinned Unicode data, or with --check verifies them (ADR-0018)
cargo xtask --helpLists the commands
sh scripts/check-deps.shThe narrower dependency check the Claude Code hook falls back to when xtask cannot be built
cargo tpBuilds and runs the tidepool binary, which does nothing until M2.6

Planned. Until its task lands, each of the first six exits 1 with "not yet implemented" (bench's message still says it has no task; M1.9 corrects it), and the last is not a command yet and exits 2:

CommandTask
cargo xtask fuzz-smoke [--secs N] [--target T]M1.6
cargo xtask bench [filter]M1.9
cargo xtask golden [--bless]M2.4
cargo xtask themeM3.2
cargo xtask toolsM5.1
cargo xtask package <os>M11.6, M12.4, M14.4
cargo xtask cratesM0.9 (ADR-0023)

cargo tp -- --tui starts the terminal UI from M7.1; until then the binary ignores its arguments and exits 0.

xtask never uploads, publishes, signs with real credentials, reads secrets or opens a socket (docs/04-quality.md).

Conventions

  • Toolchain and edition: Rust edition 2024, stable pinned in rust-toolchain.toml (1.99.0). extern blocks are unsafe extern "C" { ... }.
  • Errors: each crate has its own error enum implementing Display and std::error::Error. No unwrap() in library code; expect("why") only for real invariants.
  • Logging: tidepool_core::log macros; print!/eprint! are denied in library crates. Log command lines through the redacting helper.
  • Parsers: every parser takes Limits, never panics on input, and has a fuzz target (from M1.6).
  • Text positions are byte offsets; lines end at LF, CR LF or a lone CR; a bad position is an error, never a panic (ADR-0019). Every buffer edit goes through its History (ADR-0020).
  • UI: widgets use theme tokens, never literal colors; chrome labels are uppercase, user content never is.
  • Docs: every pub item has a doc comment.
  • License header: every source file (Rust, shell scripts, workflows) starts with the Apache-2.0 notice from LICENSE's appendix, in its comment syntax, then a blank line; after a #! line in a script (ADR-0021). cargo xtask headers checks it, and lists the file it exempts by path: the generated grapheme tables, which keep the Unicode data's notice instead. The root NOTICE holds the project's name and copyright line.
  • Crate READMEs: every member has a README.md saying what it is, its status, its spec and its rules (ADR-0023). A change to what a crate has built updates its README.
  • Tests: unit tests beside the code; integration tests in each crate's tests/; goldens in tests/golden/; real-tool tests gated by TIDEPOOL_IT_* and printing SKIPPED: <reason> otherwise. Committed test data never carries a name the checks read as real (Cargo.toml, .rs; docs/04-quality.md → "Files searched").

Definition of done for a roadmap task

  1. Every acceptance criterion for the task in docs/roadmap.md is met, and its Decide first questions were answered by the user and recorded.
  2. The task's verification commands were run. Report each command and its real result.
  3. The checkbox is ticked only after steps 1 and 2.
  4. Docs are updated where behavior or design changed: the subsystem spec, the crate's README.md status, and this file for a new command, crate or rule. If a decision changed, add an ADR in docs/decisions.md (/record-decision).
  5. The final message summarizes:
    • changes and files affected
    • validation performed
    • checks not run, and why
    • assumptions
    • unresolved issues and residual risks
    • a proposed commit message

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.