indusagi-coding-agent 0.1.28 → 0.1.30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (147) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/LICENSE.md +22 -0
  3. package/README.md +2 -0
  4. package/dist/core/messages.d.ts +1 -76
  5. package/dist/core/messages.d.ts.map +1 -1
  6. package/dist/core/messages.js +1 -122
  7. package/dist/core/messages.js.map +1 -1
  8. package/dist/core/session-manager.d.ts +1 -447
  9. package/dist/core/session-manager.d.ts.map +1 -1
  10. package/dist/core/session-manager.js +1 -1203
  11. package/dist/core/session-manager.js.map +1 -1
  12. package/package.json +2 -2
  13. package/docs/COMPLETE-GUIDE.md +0 -300
  14. package/docs/COMPREHENSIVE-CLI-SUMMARY.md +0 -900
  15. package/docs/MODES-ARCHITECTURE.md +0 -565
  16. package/docs/PRINT-MODE-GUIDE.md +0 -456
  17. package/docs/README.md +0 -78
  18. package/docs/RPC-GUIDE.md +0 -705
  19. package/docs/UTILS-IMPLEMENTATION-SUMMARY.md +0 -647
  20. package/docs/UTILS-MODULE-OVERVIEW.md +0 -1480
  21. package/docs/UTILS-QA-CHECKLIST.md +0 -1061
  22. package/docs/UTILS-USAGE-GUIDE.md +0 -1419
  23. package/docs/compaction.md +0 -390
  24. package/docs/custom-provider.md +0 -538
  25. package/docs/development.md +0 -69
  26. package/docs/extensions.md +0 -1733
  27. package/docs/hooks.md +0 -378
  28. package/docs/images/doom-extension.png +0 -0
  29. package/docs/images/interactive-mode.png +0 -0
  30. package/docs/images/tree-view.png +0 -0
  31. package/docs/json.md +0 -79
  32. package/docs/keybindings.md +0 -162
  33. package/docs/models.md +0 -193
  34. package/docs/packages.md +0 -163
  35. package/docs/prompt-templates.md +0 -67
  36. package/docs/providers.md +0 -147
  37. package/docs/rpc.md +0 -1048
  38. package/docs/sdk.md +0 -969
  39. package/docs/session.md +0 -412
  40. package/docs/settings.md +0 -219
  41. package/docs/shell-aliases.md +0 -13
  42. package/docs/skills.md +0 -226
  43. package/docs/subagents.md +0 -225
  44. package/docs/terminal-setup.md +0 -65
  45. package/docs/themes.md +0 -295
  46. package/docs/tree.md +0 -219
  47. package/docs/tui.md +0 -887
  48. package/docs/web-tools.md +0 -304
  49. package/docs/windows.md +0 -17
  50. package/examples/README.md +0 -25
  51. package/examples/extensions/README.md +0 -192
  52. package/examples/extensions/antigravity-image-gen.ts +0 -414
  53. package/examples/extensions/auto-commit-on-exit.ts +0 -49
  54. package/examples/extensions/bookmark.ts +0 -50
  55. package/examples/extensions/claude-rules.ts +0 -86
  56. package/examples/extensions/confirm-destructive.ts +0 -59
  57. package/examples/extensions/custom-compaction.ts +0 -115
  58. package/examples/extensions/custom-footer.ts +0 -65
  59. package/examples/extensions/custom-header.ts +0 -73
  60. package/examples/extensions/custom-provider-anthropic/index.ts +0 -605
  61. package/examples/extensions/custom-provider-anthropic/package-lock.json +0 -24
  62. package/examples/extensions/custom-provider-anthropic/package.json +0 -19
  63. package/examples/extensions/custom-provider-gitlab-duo/index.ts +0 -350
  64. package/examples/extensions/custom-provider-gitlab-duo/package.json +0 -16
  65. package/examples/extensions/custom-provider-gitlab-duo/test.ts +0 -83
  66. package/examples/extensions/dirty-repo-guard.ts +0 -56
  67. package/examples/extensions/doom-overlay/README.md +0 -46
  68. package/examples/extensions/doom-overlay/doom/build/doom.js +0 -21
  69. package/examples/extensions/doom-overlay/doom/build/doom.wasm +0 -0
  70. package/examples/extensions/doom-overlay/doom/build.sh +0 -152
  71. package/examples/extensions/doom-overlay/doom/doomgeneric_pi.c +0 -72
  72. package/examples/extensions/doom-overlay/doom-component.ts +0 -133
  73. package/examples/extensions/doom-overlay/doom-engine.ts +0 -173
  74. package/examples/extensions/doom-overlay/doom-keys.ts +0 -105
  75. package/examples/extensions/doom-overlay/index.ts +0 -74
  76. package/examples/extensions/doom-overlay/wad-finder.ts +0 -51
  77. package/examples/extensions/event-bus.ts +0 -43
  78. package/examples/extensions/file-trigger.ts +0 -41
  79. package/examples/extensions/git-checkpoint.ts +0 -53
  80. package/examples/extensions/handoff.ts +0 -151
  81. package/examples/extensions/hello.ts +0 -25
  82. package/examples/extensions/inline-bash.ts +0 -94
  83. package/examples/extensions/input-transform.ts +0 -43
  84. package/examples/extensions/interactive-shell.ts +0 -196
  85. package/examples/extensions/mac-system-theme.ts +0 -47
  86. package/examples/extensions/message-renderer.ts +0 -60
  87. package/examples/extensions/modal-editor.ts +0 -86
  88. package/examples/extensions/model-status.ts +0 -31
  89. package/examples/extensions/notify.ts +0 -25
  90. package/examples/extensions/overlay-qa-tests.ts +0 -882
  91. package/examples/extensions/overlay-test.ts +0 -151
  92. package/examples/extensions/permission-gate.ts +0 -34
  93. package/examples/extensions/pirate.ts +0 -47
  94. package/examples/extensions/plan-mode/README.md +0 -65
  95. package/examples/extensions/plan-mode/index.ts +0 -341
  96. package/examples/extensions/plan-mode/utils.ts +0 -168
  97. package/examples/extensions/preset.ts +0 -399
  98. package/examples/extensions/protected-paths.ts +0 -30
  99. package/examples/extensions/qna.ts +0 -120
  100. package/examples/extensions/question.ts +0 -265
  101. package/examples/extensions/questionnaire.ts +0 -428
  102. package/examples/extensions/rainbow-editor.ts +0 -88
  103. package/examples/extensions/sandbox/index.ts +0 -318
  104. package/examples/extensions/sandbox/package-lock.json +0 -92
  105. package/examples/extensions/sandbox/package.json +0 -19
  106. package/examples/extensions/send-user-message.ts +0 -97
  107. package/examples/extensions/session-name.ts +0 -27
  108. package/examples/extensions/shutdown-command.ts +0 -63
  109. package/examples/extensions/snake.ts +0 -344
  110. package/examples/extensions/space-invaders.ts +0 -561
  111. package/examples/extensions/ssh.ts +0 -220
  112. package/examples/extensions/status-line.ts +0 -40
  113. package/examples/extensions/subagent/README.md +0 -172
  114. package/examples/extensions/subagent/agents/planner.md +0 -37
  115. package/examples/extensions/subagent/agents/reviewer.md +0 -35
  116. package/examples/extensions/subagent/agents/scout.md +0 -50
  117. package/examples/extensions/subagent/agents/worker.md +0 -24
  118. package/examples/extensions/subagent/agents.ts +0 -127
  119. package/examples/extensions/subagent/index.ts +0 -964
  120. package/examples/extensions/subagent/prompts/implement-and-review.md +0 -10
  121. package/examples/extensions/subagent/prompts/implement.md +0 -10
  122. package/examples/extensions/subagent/prompts/scout-and-plan.md +0 -9
  123. package/examples/extensions/summarize.ts +0 -196
  124. package/examples/extensions/timed-confirm.ts +0 -70
  125. package/examples/extensions/todo.ts +0 -300
  126. package/examples/extensions/tool-override.ts +0 -144
  127. package/examples/extensions/tools.ts +0 -147
  128. package/examples/extensions/trigger-compact.ts +0 -40
  129. package/examples/extensions/truncated-tool.ts +0 -193
  130. package/examples/extensions/widget-placement.ts +0 -17
  131. package/examples/extensions/with-deps/index.ts +0 -36
  132. package/examples/extensions/with-deps/package-lock.json +0 -31
  133. package/examples/extensions/with-deps/package.json +0 -22
  134. package/examples/sdk/01-minimal.ts +0 -22
  135. package/examples/sdk/02-custom-model.ts +0 -50
  136. package/examples/sdk/03-custom-prompt.ts +0 -55
  137. package/examples/sdk/04-skills.ts +0 -46
  138. package/examples/sdk/05-tools.ts +0 -56
  139. package/examples/sdk/06-extensions.ts +0 -88
  140. package/examples/sdk/07-context-files.ts +0 -40
  141. package/examples/sdk/08-prompt-templates.ts +0 -47
  142. package/examples/sdk/09-api-keys-and-oauth.ts +0 -48
  143. package/examples/sdk/10-settings.ts +0 -38
  144. package/examples/sdk/11-sessions.ts +0 -48
  145. package/examples/sdk/12-full-control.ts +0 -82
  146. package/examples/sdk/13-codex-oauth.ts +0 -37
  147. package/examples/sdk/README.md +0 -144
package/docs/skills.md DELETED
@@ -1,226 +0,0 @@
1
- > indusagi can create skills. Ask it to build one for your use case.
2
-
3
- # Skills
4
-
5
- Skills are self-contained capability packages that the agent loads on-demand. A skill provides specialized workflows, setup instructions, helper scripts, and reference documentation for specific tasks.
6
-
7
- Indusagi implements the [Agent Skills standard](https://agentskills.io/specification), warning about violations but remaining lenient.
8
-
9
- ## Table of Contents
10
-
11
- - [Locations](#locations)
12
- - [How Skills Work](#how-skills-work)
13
- - [Skill Commands](#skill-commands)
14
- - [Skill Structure](#skill-structure)
15
- - [Frontmatter](#frontmatter)
16
- - [Validation](#validation)
17
- - [Example](#example)
18
- - [Skill Repositories](#skill-repositories)
19
-
20
- ## Locations
21
-
22
- > **Security:** Skills can instruct the model to perform any action and may include executable code the model invokes. Review skill content before use.
23
-
24
- Indusagi loads skills from:
25
-
26
- - Global: `~/.indusagi/agent/skills/`
27
- - Project: `.indusagi/skills/`
28
- - Packages: `skills/` directories or `indusagi.skills` entries in `package.json`
29
- - Settings: `skills` array with files or directories
30
- - CLI: `--skill <path>` (repeatable, additive even with `--no-skills`)
31
-
32
- Discovery rules:
33
- - Direct `.md` files in the skills directory root
34
- - Recursive `SKILL.md` files under subdirectories
35
-
36
- Disable discovery with `--no-skills` (explicit `--skill` paths still load).
37
-
38
- ### Using Skills from Other Harnesses
39
-
40
- To use skills from Claude Code or OpenAI Codex, add their directories to settings:
41
-
42
- ```json
43
- {
44
- "skills": [
45
- "~/.claude/skills",
46
- "~/.codex/skills"
47
- ]
48
- }
49
- ```
50
-
51
- For project-level Claude Code skills, add to `.indusagi/settings.json`:
52
-
53
- ```json
54
- {
55
- "skills": ["../.claude/skills"]
56
- }
57
- ```
58
-
59
- ## How Skills Work
60
-
61
- 1. At startup, indusagi scans skill locations and extracts names and descriptions
62
- 2. The system prompt includes available skills in XML format per the [specification](https://agentskills.io/integrate-skills)
63
- 3. When a task matches, the agent uses `read` to load the full SKILL.md (models don't always do this; use prompting or `/skill:name` to force it)
64
- 4. The agent follows the instructions, using relative paths to reference scripts and assets
65
-
66
- This is progressive disclosure: only descriptions are always in context, full instructions load on-demand.
67
-
68
- ## Skill Commands
69
-
70
- Skills register as `/skill:name` commands:
71
-
72
- ```bash
73
- /skill:brave-search # Load and execute the skill
74
- /skill:pdf-tools extract # Load skill with arguments
75
- ```
76
-
77
- Arguments after the command are appended to the skill content as `User: <args>`.
78
-
79
- Toggle skill commands via `/settings` in interactive mode or in `settings.json`:
80
-
81
- ```json
82
- {
83
- "enableSkillCommands": true
84
- }
85
- ```
86
-
87
- ## Skill Structure
88
-
89
- A skill is a directory with a `SKILL.md` file. Everything else is freeform.
90
-
91
- ```
92
- my-skill/
93
- ├── SKILL.md # Required: frontmatter + instructions
94
- ├── scripts/ # Helper scripts
95
- │ └── process.sh
96
- ├── references/ # Detailed docs loaded on-demand
97
- │ └── api-reference.md
98
- └── assets/
99
- └── template.json
100
- ```
101
-
102
- ### SKILL.md Format
103
-
104
- ```markdown
105
- ---
106
- name: my-skill
107
- description: What this skill does and when to use it. Be specific.
108
- ---
109
-
110
- # My Skill
111
-
112
- ## Setup
113
-
114
- Run once before first use:
115
- \`\`\`bash
116
- cd /path/to/skill && npm install
117
- \`\`\`
118
-
119
- ## Usage
120
-
121
- \`\`\`bash
122
- ./scripts/process.sh <input>
123
- \`\`\`
124
- ```
125
-
126
- Use relative paths from the skill directory:
127
-
128
- ```markdown
129
- See [the reference guide](references/REFERENCE.md) for details.
130
- ```
131
-
132
- ## Frontmatter
133
-
134
- Per the [Agent Skills specification](https://agentskills.io/specification#frontmatter-required):
135
-
136
- | Field | Required | Description |
137
- |-------|----------|-------------|
138
- | `name` | Yes | Max 64 chars. Lowercase a-z, 0-9, hyphens. Must match parent directory. |
139
- | `description` | Yes | Max 1024 chars. What the skill does and when to use it. |
140
- | `license` | No | License name or reference to bundled file. |
141
- | `compatibility` | No | Max 500 chars. Environment requirements. |
142
- | `metadata` | No | Arbitrary key-value mapping. |
143
- | `allowed-tools` | No | Space-delimited list of pre-approved tools (experimental). |
144
- | `disable-model-invocation` | No | When `true`, skill is hidden from system prompt. Users must use `/skill:name`. |
145
-
146
- ### Name Rules
147
-
148
- - 1-64 characters
149
- - Lowercase letters, numbers, hyphens only
150
- - No leading/trailing hyphens
151
- - No consecutive hyphens
152
- - Must match parent directory name
153
-
154
- Valid: `pdf-processing`, `data-analysis`, `code-review`
155
- Invalid: `PDF-Processing`, `-pdf`, `pdf--processing`
156
-
157
- ### Description Best Practices
158
-
159
- The description determines when the agent loads the skill. Be specific.
160
-
161
- Good:
162
- ```yaml
163
- description: Extracts text and tables from PDF files, fills PDF forms, and merges multiple PDFs. Use when working with PDF documents.
164
- ```
165
-
166
- Poor:
167
- ```yaml
168
- description: Helps with PDFs.
169
- ```
170
-
171
- ## Validation
172
-
173
- Indusagi validates skills against the Agent Skills standard. Most issues produce warnings but still load the skill:
174
-
175
- - Name doesn't match parent directory
176
- - Name exceeds 64 characters or contains invalid characters
177
- - Name starts/ends with hyphen or has consecutive hyphens
178
- - Description exceeds 1024 characters
179
- - Unknown frontmatter fields
180
-
181
- **Exception:** Skills with missing description are not loaded.
182
-
183
- Name collisions (same name from different locations) warn and keep the first skill found.
184
-
185
- ## Example
186
-
187
- ```
188
- brave-search/
189
- ├── SKILL.md
190
- ├── search.js
191
- └── content.js
192
- ```
193
-
194
- **SKILL.md:**
195
- ```markdown
196
- ---
197
- name: brave-search
198
- description: Web search and content extraction via Brave Search API. Use for searching documentation, facts, or any web content.
199
- ---
200
-
201
- # Brave Search
202
-
203
- ## Setup
204
-
205
- \`\`\`bash
206
- cd /path/to/brave-search && npm install
207
- \`\`\`
208
-
209
- ## Search
210
-
211
- \`\`\`bash
212
- ./search.js "query" # Basic search
213
- ./search.js "query" --content # Include page content
214
- \`\`\`
215
-
216
- ## Extract Page Content
217
-
218
- \`\`\`bash
219
- ./content.js https://example.com
220
- \`\`\`
221
- ```
222
-
223
- ## Skill Repositories
224
-
225
- - [Anthropic Skills](https://github.com/anthropics/skills) - Document processing (docx, pdf, pptx, xlsx), web development
226
- - [Indusagi Skills](https://github.com/badlogic/indusagi-skills) - Web search, browser automation, Google APIs, transcription
package/docs/subagents.md DELETED
@@ -1,225 +0,0 @@
1
- # Subagents
2
-
3
- Subagents are specialized agents that run in isolated contexts with their own system prompts, tools, and model configurations. They're useful for delegating complex or multi-step tasks while keeping the primary context clean.
4
-
5
- ## Overview
6
-
7
- The subagent system consists of:
8
-
9
- - **Task Tool** - Built-in `task` tool that the LLM can call to spawn subagents
10
- - **Subagent Definitions** - Markdown files defining subagent behavior, tools, and model
11
- - **SubagentStore** - Discovers and manages available subagent definitions
12
-
13
- ## Using Subagents
14
-
15
- The LLM can spawn subagents via the `task` tool:
16
-
17
- ```
18
- Use the explore subagent to search for authentication-related code
19
- ```
20
-
21
- The task tool parameters:
22
-
23
- | Parameter | Type | Description |
24
- |-----------|------|-------------|
25
- | `description` | string | Short (3-5 words) description of the task |
26
- | `prompt` | string | The task for the subagent to perform |
27
- | `subagent_type` | string | Type of subagent (e.g., "general", "explore") |
28
- | `task_id` | string? | Resume a previous task by ID |
29
-
30
- ## Built-in Subagents
31
-
32
- ### general
33
-
34
- General-purpose subagent for multi-step tasks and research.
35
-
36
- - **Tools**: read, bash, edit, write, grep, find, ls
37
- - **Mode**: subagent only
38
-
39
- ### explore
40
-
41
- Specialized in codebase exploration and search.
42
-
43
- - **Tools**: read, grep, find, ls (read-only)
44
- - **Mode**: subagent only
45
-
46
- ## Custom Subagent Definitions
47
-
48
- Create subagent definitions in:
49
-
50
- - **Global**: `~/.indusagi/agent/agents/*.md`
51
- - **Project**: `.indusagi/agents/*.md`
52
-
53
- ### Definition Format
54
-
55
- ```markdown
56
- ---
57
- name: my-agent
58
- description: What this agent does and when to use it
59
- tools: read, grep, find, ls
60
- model: anthropic/claude-sonnet-4-5
61
- thinkingLevel: medium
62
- mode: subagent
63
- hidden: false
64
- ---
65
-
66
- System prompt for the agent goes here. This becomes the subagent's
67
- system prompt, replacing the default.
68
-
69
- Use this space to define:
70
- - The agent's specialization
71
- - How it should approach tasks
72
- - Output format expectations
73
- - Any constraints or guidelines
74
- ```
75
-
76
- ### Frontmatter Fields
77
-
78
- | Field | Required | Description |
79
- |-------|----------|-------------|
80
- | `name` | Yes | Unique identifier (lowercase, hyphens allowed) |
81
- | `description` | No | Brief description of the agent's purpose |
82
- | `tools` | No | Comma-separated list of tools: `read, bash, edit, write, grep, find, ls` |
83
- | `model` | No | Model in `provider/id` format (e.g., `anthropic/claude-sonnet-4-5`) |
84
- | `thinkingLevel` | No | Thinking level: `off`, `minimal`, `low`, `medium`, `high`, `xhigh` |
85
- | `mode` | No | Visibility: `subagent` (default), `primary`, `all` |
86
- | `hidden` | No | Hide from LLM discovery (default: `false`) |
87
-
88
- ### Mode Values
89
-
90
- | Mode | Description |
91
- |------|-------------|
92
- | `subagent` | Only available as a subagent via task tool (default) |
93
- | `primary` | Only available as primary agent (not as subagent) |
94
- | `all` | Available in both contexts |
95
-
96
- ### Tool Options
97
-
98
- Available tools for subagents:
99
-
100
- | Tool | Description |
101
- |------|-------------|
102
- | `read` | Read file contents |
103
- | `bash` | Execute shell commands |
104
- | `edit` | Edit files by replacing text |
105
- | `write` | Create or overwrite files |
106
- | `grep` | Search file contents |
107
- | `find` | Find files by pattern |
108
- | `ls` | List directory contents |
109
-
110
- ## SubagentStore API
111
-
112
- For programmatic access:
113
-
114
- ```typescript
115
- import { SubagentStore } from "indusagi-coding-agent";
116
-
117
- const store = new SubagentStore({
118
- cwd: process.cwd(),
119
- agentDir: "~/.indusagi/agent",
120
- });
121
-
122
- // List all available subagents
123
- const agents = store.list();
124
- // [{ name: "general", description: "...", tools: [...], ... }, ...]
125
-
126
- // Get specific subagent
127
- const agent = store.get("explore");
128
-
129
- // Refresh after adding new definitions
130
- store.refresh();
131
- ```
132
-
133
- ## How It Works
134
-
135
- 1. **Discovery**: SubagentStore scans `agents/` directories for `.md` files
136
- 2. **Registration**: Available subagents are listed in the task tool description
137
- 3. **Invocation**: When the LLM calls the task tool, a new `indusagi` subprocess is spawned
138
- 4. **Isolation**: The subagent runs with its own context, system prompt, and tool set
139
- 5. **Streaming**: Progress updates stream back to the primary session
140
- 6. **Completion**: Final result is returned to the primary agent
141
-
142
- ## Example: Code Review Agent
143
-
144
- Create `.indusagi/agents/reviewer.md`:
145
-
146
- ```markdown
147
- ---
148
- name: reviewer
149
- description: Code review specialist. Use for reviewing pull requests, patches, or changes.
150
- tools: read, grep, find, ls, bash
151
- model: anthropic/claude-sonnet-4-5
152
- ---
153
-
154
- You are a code review specialist. Your job is to:
155
-
156
- 1. Review code changes for correctness, security, and best practices
157
- 2. Identify potential bugs, performance issues, or code smells
158
- 3. Suggest improvements with specific, actionable feedback
159
- 4. Check for proper error handling and edge cases
160
-
161
- Output format:
162
- - Summary of changes reviewed
163
- - Critical issues (if any)
164
- - Suggestions for improvement
165
- - Overall assessment
166
-
167
- Be thorough but concise. Focus on actionable feedback.
168
- ```
169
-
170
- Use it:
171
-
172
- ```
173
- Have the reviewer agent review the changes in src/auth/login.ts
174
- ```
175
-
176
- ## Example: Documentation Agent
177
-
178
- Create `~/.indusagi/agent/agents/docs-writer.md`:
179
-
180
- ```markdown
181
- ---
182
- name: docs-writer
183
- description: Technical documentation writer. Use for creating or updating documentation.
184
- tools: read, grep, find, ls, write
185
- model: anthropic/claude-sonnet-4-5
186
- ---
187
-
188
- You are a technical documentation specialist. Write clear, comprehensive documentation.
189
-
190
- Guidelines:
191
- - Use proper markdown formatting
192
- - Include code examples where helpful
193
- - Structure with clear headings and sections
194
- - Add usage examples and common patterns
195
- - Document parameters, return values, and edge cases
196
-
197
- Do not modify code files - only create or update documentation (.md files).
198
- ```
199
-
200
- ## Task Tool in SDK
201
-
202
- When creating tools programmatically:
203
-
204
- ```typescript
205
- import { createTaskTool, SubagentStore } from "indusagi-coding-agent";
206
-
207
- const subagentStore = new SubagentStore({ cwd: process.cwd() });
208
-
209
- const taskTool = createTaskTool({
210
- cwd: process.cwd(),
211
- settingsManager,
212
- modelRegistry,
213
- subagentStore,
214
- getDefaultModel: () => model,
215
- getDefaultThinkingLevel: () => "medium",
216
- contextFiles: [],
217
- skills: [],
218
- });
219
- ```
220
-
221
- ## Related
222
-
223
- - [SDK Documentation](sdk.md) - Programmatic usage
224
- - [Extensions](extensions.md) - Building custom extensions
225
- - [Skills](skills.md) - On-demand capability packages
@@ -1,65 +0,0 @@
1
- # Terminal Setup
2
-
3
- Indusagi uses the [Kitty keyboard protocol](https://sw.kovidgoyal.net/kitty/keyboard-protocol/) for reliable modifier key detection. Most modern terminals support this protocol, but some require configuration.
4
-
5
- ## Kitty, iTerm2
6
-
7
- Work out of the box.
8
-
9
- ## Ghostty
10
-
11
- Add to your Ghostty config (`~/.config/ghostty/config`):
12
-
13
- ```
14
- keybind = alt+backspace=text:\x1b\x7f
15
- keybind = shift+enter=text:\n
16
- ```
17
-
18
- ## WezTerm
19
-
20
- Create `~/.wezterm.lua`:
21
-
22
- ```lua
23
- local wezterm = require 'wezterm'
24
- local config = wezterm.config_builder()
25
- config.enable_kitty_keyboard = true
26
- return config
27
- ```
28
-
29
- ## VS Code (Integrated Terminal)
30
-
31
- Add to `keybindings.json` to enable `Shift+Enter` for multi-line input:
32
-
33
- ```json
34
- {
35
- "key": "shift+enter",
36
- "command": "workbench.action.terminal.sendSequence",
37
- "args": { "text": "\u001b[13;2u" },
38
- "when": "terminalFocus"
39
- }
40
- ```
41
-
42
- ## Windows Terminal
43
-
44
- Add to `settings.json` (Ctrl+Shift+, or Settings → Open JSON file):
45
-
46
- ```json
47
- {
48
- "actions": [
49
- {
50
- "command": { "action": "sendInput", "input": "\u001b[13;2u" },
51
- "keys": "shift+enter"
52
- }
53
- ]
54
- }
55
- ```
56
-
57
- If you already have an `actions` array, add the object to it.
58
-
59
- ## IntelliJ IDEA (Integrated Terminal)
60
-
61
- The built-in terminal has limited escape sequence support. Shift+Enter cannot be distinguished from Enter in IntelliJ's terminal.
62
-
63
- If you want the hardware cursor visible, set `INDUSAGI_HARDWARE_CURSOR=1` before running indusagi (disabled by default for compatibility).
64
-
65
- Consider using a dedicated terminal emulator for the best experience.