# 使用 jca 进行交互式代码开发

## 概述

`jca`（Jarvis Code Agent）是 Jarvis 系统的代码代理工具，专门用于处理代码修改、重构和开发任务。交互式模式允许你与 Agent 进行多轮对话，逐步完善代码实现。

## 使用方法

直接运行 `jca` 命令（不带参数），进入交互式会话。在交互式会话中：

- 可以连续输入多个任务，Agent 会依次执行
- 输入空行退出会话

## 多行输入

在交互式会话中，支持多行输入：

- **换行**：按 `Enter` 键换行
- **提交**：按 `Ctrl+J` 或 `Ctrl+]` 确认提交
- **查看历史**：按 `Ctrl+O` 查看并复制历史对话
- **退出程序**：按 `Ctrl+X` 退出程序

## 引用文件上下文

在输入中使用 `@` 或 `#` 符号可以引用文件：

- **`@`**：引用 Git 仓库中的文件（通过 `git ls-files` 获取）
- **`#`**：引用所有文件（排除 `.git` 目录）

输入 `@` 或 `#` 后会自动触发文件补全，选择文件后会自动插入文件路径。Agent 会自动读取这些文件的内容作为上下文。

## 内置 @ 指令

在输入中使用 `'<指令名>'` 格式可以调用内置指令：

### 会话管理指令

- **`'<Summary>'`**：总结当前对话历史并清理，开始新会话
- **`'<Clear>'`**：清除当前对话历史
- **`'<Pin>'`**：固定内容，将标记后的内容固定到会话顶部

  ```
  > '<Pin>' 这是需要固定的重要信息
  ```

- **`'<SaveSession>'`**：保存当前会话到 `.jarvis/saved_session.json`
- **`'<RestoreSession>'`**：从 `.jarvis/saved_session.json` 恢复会话
- **`'<ListSessions>'`**：列出所有已保存的会话文件

### 工具和功能指令

- **`'<ToolUsage>'`**：显示工具使用说明
- **`'<FixToolCall>'`**：修复上一次工具调用错误
- **`'<ReloadConfig>'`**：重新加载配置文件

### 模式切换指令

- **`'<Quiet>'`**：切换到无人值守模式（非交互模式）

### 规则引用指令

- **`'<rule:规则名>'`**：动态引用规则

### 快捷模板指令

这些指令会替换为对应的提示词模板：

- **`'<Web>'`**：网页搜索模板
- **`'<Dev>'`**：开发需求模板
- **`'<Fix>'`**：修复问题模板
- **`'<Check>'`**：静态代码检查模板
- **`'<FindRelatedFiles>'`**：查找相关文件模板

## 中断 LLM 输出

当 Agent 正在生成响应时，可以按 `Ctrl+C` 中断输出。中断后：

1. Agent 会停止当前响应生成
2. 如果当前处于无人值守模式，会自动退出无人值守模式，切换到交互模式
3. 提示输入用户干预信息
4. 可以输入新的指令或补充信息
5. 如果检测到有工具调用，会询问是否继续处理工具调用

**使用场景**：

- Agent 输出不符合预期，需要立即停止
- 需要补充重要信息
- 需要改变任务方向

## 无人值守模式

在交互式会话中，可以使用 `'<Quiet>'` 指令切换到无人值守模式：

```
> '<Quiet>' 执行这个任务，不要询问我任何问题
```

无人值守模式的特点：

- Agent 不会询问用户确认
- 自动决策所有选择
- 适合自动化任务执行
- **会自动进行代码审查（review）**，除非使用 `--disable-review` 参数禁用

**注意事项**：

- 使用 `-n` 或 `--non-interactive` 参数启动时，默认就是无人值守模式
- 在交互式会话中使用 `'<Quiet>'` 可以临时切换到无人值守模式
- 无人值守模式下，Agent 会尽可能自动完成所有操作
- **交互模式下会跳过代码审查**，只有在无人值守模式下才会自动进行代码审查

## 注意事项

- 使用 `-n` 或 `--non-interactive` 参数时，执行完一个任务后会自动退出
- 使用 `--task` 或 `--task-file` 参数指定任务时，会直接执行该任务
- Agent 会记住当前会话中的对话历史，可以在后续任务中引用之前的上下文

---

**文档版本**：v1.0  
**最后更新**：2025-01-12  
**维护者**：Jarvis Team
