Skip to main content

Customizing jaan.to

Adapt paths, templates, learning, language, and tech context to your project.


Overview

jaan.to uses a 3-layer configuration system. Each layer overrides the one below it:

LayerSourceScope
1 (Base)Plugin defaultsAll projects
2 (Project)jaan-to/config/settings.yamlThis repo
3 (Machine)$JAAN_* environment variablesThis machine

You can customize: output paths, template files, learning behavior, language preference, and tech context.


Prerequisites

  • jaan.to v3.0.0+ installed
  • Bootstrap has run (jaan-to/ directory exists in your project)

Step 1: Project Settings

Edit jaan-to/config/settings.yaml to override defaults for your repo.

SettingDefaultDescription
paths_outputsjaan-to/outputsWhere generated files go
paths_templatesjaan-to/templatesWhere templates live
paths_learningjaan-to/learnWhere lessons accumulate
paths_contextjaan-to/contextWhere context files live
learning_strategymergeHow lessons combine
languageaskConversation and report language
language_{skill}(global)Per-skill language override

Example — move outputs to artifacts/:

# jaan-to/config/settings.yaml
paths_outputs: "artifacts/jaan-to"

All paths are relative to the project root. Use forward slashes on all platforms.


Step 2: Language Preference

Set the language for plugin conversation, questions, and report .md files.

SettingDefaultEffect
languageaskPrompts once on first skill run, saves your choice
language_{skill-name}(global)Override for one specific skill

Example — set فارسی globally, keep PRDs in English:

# jaan-to/config/settings.yaml
language: "fa"
language_pm-prd-write: "en"

Options: en, fa, tr, or any language name/code. Set to ask to re-prompt.

What changes: Section headings, labels, prose, questions, and confirmations switch to the chosen language.

What stays English: Code, file paths, variable names, YAML keys, technical terms, template variables.

What's unaffected: Generated code output, product localization (localization.md), /jaan-to:ux-microcopy-write multi-language output.


Step 3: Path Variables

Override paths per-machine using environment variables in .claude/settings.json:

{
"env": {
"JAAN_OUTPUTS_DIR": "build/artifacts"
}
}
VariableOverrides
JAAN_OUTPUTS_DIRpaths_outputs
JAAN_TEMPLATES_DIRpaths_templates
JAAN_LEARN_DIRpaths_learning
JAAN_CONTEXT_DIRpaths_context

When to use: Environment variables override settings.yaml. Use settings.yaml for team-wide config (committed to repo). Use env vars for machine-specific overrides (not committed).


Step 4: Custom Templates

Override any skill's template by pointing to your own file:

# jaan-to/config/settings.yaml
templates_jaan_to_pm_prd_write_path: "./docs/templates/enterprise-prd.md"

Templates support 4 variable types:

SyntaxResolves To
{{field}}Value from skill context
{{env:VAR_NAME}}Environment variable
{{config:key}}Value from settings.yaml
{{import:path#section}}Markdown section from another file

Place your custom template at the path you specified. The skill uses it instead of the plugin default.


Step 5: Learning Strategy

Skills accumulate lessons over time. Two strategies control how plugin lessons and your project lessons combine:

StrategyBehavior
merge (default)Combines plugin lessons with your project lessons
overrideUses only your project lessons, ignores plugin defaults

Change in settings.yaml:

learning_strategy: "override"

Use merge when starting out. Switch to override when your team has enough project-specific lessons that plugin defaults add noise.


Step 6: Tech Stack

Edit jaan-to/context/tech.md to describe your project's technology. Skills reference this file when generating outputs.

Key sections to fill in:

SectionWhat to Include
Current StackLanguages, frameworks, databases, infrastructure
ConstraintsHard rules (latency, compliance, API format)
PatternsAuth, error handling, data access conventions

When you run /jaan-to:pm-prd-write, the PRD references your stack in technical sections. When you run /jaan-to:data-gtm-datalayer, it uses your event naming conventions.


Scenario: SaaS Team Setup

A SaaS team with a Next.js frontend and FastAPI backend customizes jaan.to:

1. settings.yaml — Custom output path and enterprise template:

# jaan-to/config/settings.yaml
paths_outputs: "artifacts/product"
templates_jaan_to_pm_prd_write_path: "./docs/templates/enterprise-prd.md"
learning_strategy: "merge"
language: "fa"

2. .claude/settings.json — Machine-specific override for CI:

{
"env": {
"JAAN_OUTPUTS_DIR": "build/artifacts"
}
}

3. tech.md — Stack context:

## Current Stack \{#current-stack}
### Backend
- **Language**: Python 3.12
- **Framework**: FastAPI 0.110
### Frontend
- **Framework**: Next.js 14 + React 18

Result: PRDs land in artifacts/product/pm/, use the enterprise template, merge plugin + team lessons, reference FastAPI/Next.js in technical sections, and conversation runs in فارسی.


Verification

After customizing, verify your setup:

  1. Run any skill (e.g., /jaan-to:pm-prd-write "test feature")
  2. Check the output lands in your custom path
  3. Confirm the template matches your custom file
  4. Review the learning merge in the skill's output header
  5. Set language: "ask" → run a skill → confirm language prompt appears
  6. Choose a language → verify settings.yaml updated and next skill uses it without re-prompting

Tips

  • Commit jaan-to/config/settings.yaml to share settings with your team
  • Restart the Claude session after changing settings.yaml or env vars
  • Keep merge strategy until project lessons outgrow plugin defaults
  • Use {{import:path#section}} in templates to pull in your tech context

Troubleshooting

Outputs in wrong path: Check layer priority. Env vars override settings.yaml, which overrides defaults.

Template not found: Verify the path is relative to the project root, not absolute.

Learning not merging: Confirm learning_strategy: "merge" in settings.yaml. The override value skips plugin lessons.

Language not switching: Check language value in settings.yaml. Set to ask to re-prompt. Per-skill overrides (language_{skill-name}) take priority over the global setting.