Type to search the docs and updates.

Browse documentation

Junie (junie)

Set up this tool

JetBrains Junie reads .junie/AGENTS.md (instructions that point to source specs and rules), the rest of .junie/, and .aiignore.

First rule

Install the client using the official setup guide, then open your project in it.

Select junie in agnostic-ai.yaml, then follow First rule to add the shared commit-prefix rule and sync it. With the default paths, it reaches .junie/AGENTS.md.

Instructions apply to the IDE and CLI. Native subagents and slash commands on this page are CLI features.

For existing files, check what import junie reads before syncing.

Verify

Run agnostic-ai sync --check and inspect .junie/AGENTS.md for the commit-prefix rule. Open the project in Junie and ask for a commit subject for a small fix; it should use fix:.

Next, add a skill.

Output

AGENTS.md                        # root pointer body (shared path; fallback)
.junie/AGENTS.md                 # preferred entry point: pointer body + rules
.junie/agents/<name>.md          # one file per subagent
.junie/skills/<name>/SKILL.md    # one folder per skill, plus any bundled assets
.junie/commands/<name>.md        # one file per slash command
.junie/mcp/mcp.json              # when MCP entries exist
.junie/config.json               # when a settings spec selects a default model or effort
.aiignore                        # when ignore entries exist

Native mappings

Field mappings, discovery, and compatibility

Junie uses the first guidelines source it finds, with no merging (IDE plugin, guidelines):

  1. .junie/AGENTS.md (preferred).
  2. The root AGENTS.md plus .junie/playbook.md and every .junie/rules/*.md, when .junie/ has nothing.
  3. The legacy .junie/guidelines.md / .junie/guidelines/.

sync always writes .junie/AGENTS.md, so Junie uses it exclusively and step 2 never applies.

Rules

A ## Rules block right after the instructions that point to source specs, marked so sync can find it. Each rule is a ### <name> section (source comment, optional description, full body), the same shape every tool that includes rules in instruction files uses.

Agents

(docs): Junie reads .junie/agents/ (the vendor's preferred location and the default here) or .agents/. Junie CLI offers to import .cursor/agents/, .claude/agents/, and .codex/agents/ into it. Set outputs.junie.agents-dir: .agents for the shared alternative, like Codex's outputs.codex.agents-dir: .agents/agents.

  • Names, and filenames when name is missing, must match [a-z][a-z0-9_-]* (underscores allowed, unlike the OpenCode and Zed skill rule). An invalid name such as Deploy_Bot fails sync, and the error shows the required format. Sync does not rename it.
  • Frontmatter is copied as written. The documented fields (name, description, tools, disallowedTools, mcpServers, model, permissionMode, reasoningLevel, maxTurns, skills, allowPromptArgument) use the same spelling as specs, and tools and disallowedTools stay YAML lists.
  • Tool group labels match the Claude names for each documented group, plus AskUserQuestion. There is no WebFetch, Task, TodoWrite, or NotebookEdit.
  • reasoningLevel also accepts the alias effort, which wins when both are set. Both are copied as written.
  • Agent bodies are not copied into .junie/AGENTS.md, as with Augment and Kilo Code.
  • Early Access covers only the automatic model-selection toggle (/settings → Subagents), not the file format or how Junie finds agents.

Commands

(project commands folder): Junie documents description and allowPromptArgument (free-form text through a $prompt placeholder). Other keys are copied as written. Junie fills $argumentName placeholders in the body when you run the command.

CLI only

The IDE plugin docs mention neither subagents nor slash commands.

Skills

Bundled files are copied as they are, and a flat file never loads as a skill. Junie CLI also loads .agents/skills/ in a trusted project (agent-skills), so another tool that writes it gives Junie a harmless second copy.

MCP

.junie/mcp/mcp.json in the standard mcpServers schema (command/args/env local, url/headers remote). The per-server timeout is also preserved in milliseconds for local and remote servers. x-junie.timeout overrides the portable value. Junie defaults to 60000 ms and documents a range of 1000 through 3600000 ms (request timeout). disabled and description are dropped with a sync note. Junie enables imported servers by default. Disable one with /mcp, then → Disable. See disabled support by target.

Settings

A settings spec's default model and effort merge into .junie/config.json, keeping other keys. Junie loads this file only in a trusted project. effort passes through as written, and x-junie.effort overrides it (effort by target). x-junie adds project-config keys that have no portable field.

Ignore

.aiignore in the project root, in .gitignore syntax (IDE plugin). Specs are joined. Override the path with outputs.junie.ignore-file.

  • Junie asks before it views or edits a listed file instead of blocking it, and it protects contents, not names.
  • Brave Mode, or an allowlisted command that names the path, skips the prompt.
  • Only the IDE plugin docs mention .aiignore. No CLI page does.

With sync.target-overview off and another tool that reads AGENTS.md enabled, .junie/AGENTS.md and the root AGENTS.md are identical.

IDE plugin Custom path

The IDE plugin reads an optional Custom path (Settings | Tools | Junie | Project Settings) before .junie/AGENTS.md. The CLI documents --guidelines-filename and JUNIE_GUIDELINES_FILENAME for a custom guidelines file in .junie/ at the project root (environment variables).

Files from older versions

Older versions wrote rules and agents to .junie/rules/, which .junie/AGENTS.md hides. Sync removes generated leftovers there and keeps hand-written files. It also drops an older ## Agents block, because it rewrites .junie/AGENTS.md in full.

Config keys

KeyDefaultNotes
outputs.junie.agents-dir.junie/agents
outputs.junie.skills-dir.junie/skills
outputs.junie.commands-dir.junie/commands
outputs.junie.mcp-file.junie/mcp/mcp.json
outputs.junie.ignore-file.aiignore
outputs.junie.rules-dir.junie/ruleslegacy: only changes where leftover files are removed, for projects that set it

.junie/AGENTS.md is a fixed path.

Import

agnostic-ai import junie reads:

  • The Rules block in .junie/AGENTS.md.
  • Agents from .junie/agents/<name>.md (or .agents/<name>.md).
  • Commands from .junie/commands/<name>.md.
  • Skills, with bundled files, from .junie/skills/<name>/SKILL.md, then .agents/skills/ for names not already found.
  • The default model and effort in .junie/config.json, restored to settings/junie.yaml.
  • MCP servers from .junie/mcp/mcp.json, including request timeouts.

Older layouts still import:

  • With no native agent files, the older Agents block in .junie/AGENTS.md.
  • .junie/rules/, when it exists, wins over .junie/AGENTS.md. Each file is sorted by filename prefix.
  • A legacy flat .junie/rules/skill-<name>.md imports as a skill.

Protected paths

Not enforced. Sync cannot write an edit-blocking rule or hook for this tool, so it prints a protected-path coverage note.