Skip to content

docs: add CodeWhale to supported agents (native AGENTS.md reader, zero setup)#124

Merged
DietrichGebert merged 1 commit into
DietrichGebert:mainfrom
ousamabenyounes:feat/codewhale-support
Jun 18, 2026
Merged

docs: add CodeWhale to supported agents (native AGENTS.md reader, zero setup)#124
DietrichGebert merged 1 commit into
DietrichGebert:mainfrom
ousamabenyounes:feat/codewhale-support

Conversation

@ousamabenyounes

@ousamabenyounes ousamabenyounes commented Jun 16, 2026

Copy link
Copy Markdown
Contributor

Adds CodeWhale to the supported-agents list. CodeWhale (the rebranded DeepSeek-TUI, 38k★, Rust) reads AGENTS.md from the project root natively — ponytail works with zero adapter file.

What changes

  • README: agent badge 13 → 14, a ### CodeWhale install section, and CodeWhale added to the instruction-only adapter list.
  • docs/agent-portability.md: one table row for CodeWhale.

Docs-only. No code.

Why it's accurate

CodeWhale's own docs/CONFIGURATION.md: "AGENTS.md — cross-agent project instructions … the canonical file … CLAUDE.md and .claude/instructions.md are read as compatibility fallbacks." Loader: crates/tui/src/project_context.rs::load_project_context reads AGENTS.md from the workspace root and as_system_block() wraps it as <project_instructions> for the system prompt.

I dropped an earlier "~/.codewhale/AGENTS.md for global use" line: the installed binary (v0.8.61) still resolves the global path to ~/.deepseek/AGENTS.md (rename incomplete), so that claim was wrong. Only the verified project-root path is documented.

Test verification (RED → GREEN)

Installed CodeWhale 0.8.61 (npm i -g codewhale) and added a test to CodeWhale's own loader that drops ponytail's real AGENTS.md into a workspace root and asserts CodeWhale ingests it into the <project_instructions> block.

The test (in crates/tui/src/project_context.rs):

#[test]
fn test_load_real_ponytail_overlay() {
    let src = std::env::var("PONYTAIL_AGENTS_MD")
        .expect("set PONYTAIL_AGENTS_MD to the ponytail AGENTS.md path");
    let overlay = fs::read_to_string(&src).expect("read ponytail AGENTS.md");

    let tmp = tempdir().expect("tempdir");
    fs::write(tmp.path().join("AGENTS.md"), &overlay).expect("write");

    let ctx = load_project_context(tmp.path());

    assert!(ctx.has_instructions(), "overlay not loaded");
    let block = ctx.as_system_block().expect("system block");
    assert!(block.starts_with("<project_instructions"), "not wrapped: {block:.80}");
    assert!(block.contains("lazy senior dev"), "ponytail signature missing");
}

GREEN — overlay written as AGENTS.md, CodeWhale discovers it natively:

$ PONYTAIL_AGENTS_MD=.../AGENTS.md cargo test -p deepseek-tui --bins test_load_real_ponytail_overlay
     Running unittests src/main.rs (target/debug/deps/deepseek_tui-4fcdc7140bad2d94)
test project_context::tests::test_load_real_ponytail_overlay ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 3221 filtered out; finished in 0.00s

RED — same test, overlay written as NOPE.md (a filename CodeWhale does not read) → native discovery misses it:

test project_context::tests::test_load_real_ponytail_overlay ... FAILED
---- project_context::tests::test_load_real_ponytail_overlay stdout ----
thread 'project_context::tests::test_load_real_ponytail_overlay' panicked at crates/tui/src/project_context.rs:734:9:
overlay not loaded
test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 3221 filtered out; finished in 0.00s

RED proves the green isn't a tautology — it's specifically the AGENTS.md filename CodeWhale keys on. Flipping the name back to AGENTS.md returns to GREEN.

🤖 Generated with Claude Code

CodeWhale reads AGENTS.md from project root per its CONFIGURATION.md —
ponytail already works with no adapter file needed. Added dedicated install
section, agent count bump (13→14), and portability table row.

Also adds Zed to the grouped instruction-only adapter list (same
mechanism: reads AGENTS.md natively).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@DietrichGebert DietrichGebert merged commit e7e09f8 into DietrichGebert:main Jun 18, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants