새로운 Agent 확장방법
Jarvis-Agent는 메인 에이전트 하나에 모든 일을 몰지 않고, 각자의 목적을 가진 Agent를 늘려 쓰는 쪽을 지향한다. 이 페이지는 JARVIS 와 같은 층에 에이전트를 하나 더 두는 방법을 다룬다. 코드를 고치지 않고 정의 파일 하나로 늘린다. 에이전트마다 자기 세션, 기억, 약속, 승인 규칙, 메인 색을 가진다. 동작 원리는 Multi agent Orchestration에 있다.
순서는 다음과 같다.
- 팀 디렉터리에 정의 파일을 만든다
- 항목을 채워 이름, 색, 말투, 모델을 정한다
- 쓸 도구를 고른다
- 서버를 다시 띄우고 로그와 화면에서 확인한다
정의 파일 만들기
팀 디렉터리에 <id>.yaml 파일을 하나 만든다. 파일 이름이 에이전트 id 가 된다.
| 실행 방식 | 팀 디렉터리 |
|---|---|
| 로컬 (uv) | ~/.jarvis/team |
| Docker | 저장소의 team/ (컨테이너의 /app/team) |
다른 위치를 쓰려면 JARVIS_TEAM__DIR 을 바꾼다.
id 는 ^[a-z][a-z0-9_-]{0,31}$ 를 따라야 한다. 소문자로 시작하고 32자 이하다. 세션, 기억, 승인 파일 이름에 그대로 들어가므로 나중에 바꾸지 않는다. main.yaml 은 JARVIS 자리라서 읽지 않는다.
# team/friday.yaml
name: F.R.I.D.A.Y.
description: 일정과 할 일을 정리하는 비서 에이전트
quote: Ready when you are
palette: { primary: "#c792ea", accent: "#ffd166" }
persona: |
차분하고 꼼꼼한 비서처럼 말한다. 존댓말로 짧게, 할 일은 시각과 함께 정리한다.
system_prompt: |
당신은 F.R.I.D.A.Y. 입니다. JARVIS 와 같은 팀의 일정 담당 에이전트입니다.
...
model: null
tools: [web_search, read_file]
proactive: false
항목 채우기
정의 파일에 쓸 수 있는 항목은 아래가 전부다. name 만 필수이고, 비운 항목은 표의 "비웠을 때" 값을 쓴다.
| 항목 | 필수 | 비웠을 때 | 설명 |
|---|---|---|---|
name | 필수 | HUD 워드마크이자 다른 에이전트가 부르는 이름 | |
description | 빈 문자열 | 다른 에이전트가 누구에게 일을 맡길지 고를 때 읽는다. 맡은 일을 구체적으로 쓴다 | |
quote | 빈 문자열 | HUD 에 뜨는 명언 | |
palette | JARVIS 기본 색 | primary 는 링, 입자 구, 패널, 에이전트 전환 화살표, AGENDA 라벨 색 | |
persona | 개성 없음 | 말투와 성격. 대화 답변(시스템 프롬프트 맨 앞)과 먼저 건네는 말, filler 에 같이 쓰인다. JARVIS 의 개성은 이어받지 않는다 | |
system_prompt | 비움 | 이 에이전트의 역할과 규칙. 말투는 persona 에 둔다. 모든 에이전트의 시스템 프롬프트 끝에는 "답은 간결하게" 공통 규칙(agent_profile.ANSWER_RULE)이 붙는다 | |
model | JARVIS 모델 | 모델 이름만 바꾼다. 프로바이더, 키, 주소는 JARVIS 것을 쓴다 | |
tools | 앱의 도구 전체 | 쓸 도구 이름 목록 | |
proactive | JARVIS 설정 | false 면 혼자 먼저 말을 걸지 않고 성찰도 건너뛴다 | |
boundaries | 경계 없음 | 스스로 할 때의 경계. ask 는 목표 차례, 스케줄 작업, 먼저 해 두기에서 하지 않는 도구, never 는 어디서도 쓰지 않는 도구다(Goals) | |
memory | 자기 기억만 | read.edm, read.pdm 에 이 에이전트가 더 읽을 에이전트 id 를 적는다. 사용자 프로필은 적지 않아도 모두 읽는다(Memory Management → 읽기 권한) |
목록에 없는 항목을 넣으면 그 파일은 잘못된 파일로 처리된다.
도구 고르기
tools를 비우면 앱에 등록된 도구 전체를 쓴다. 역할이 좁은 에이전트는 필요한 도구만 적는다ask_agent(다른 에이전트에게 맡기기),remember_task_pattern(작업 패턴 저장),recall_episodes(지난 일화 골라 읽기)는 적지 않아도 붙는다- 이 에이전트가 배운 승인된 절차 도구(
procedure_<name>)도 적지 않아도 보인다. 다른 에이전트가 배운 절차는 보이지 않는다. 다만 절차의 단계는 이 에이전트의 도구로 돌므로tools에 없는 도구를 쓰는 단계에서 멈춘다 - KAREN 의
lh_notice,sh_notice,housing_budget,housing_loan,housing_profile,housing_watch처럼 에이전트 전용 도구도 이름을 적으면 쓸 수 있다 tools를 비우고boundaries.never만 적으면 앱의 도구 전체에서 그 도구만 뺀다- 새 전용 도구를 만들려면 코드가 필요하다. 도구를 구현해
app/infra_builder.py의build_agent_tools에 등록한 뒤 정의 파일의tools에 이름을 적는다. 이 도구는tools가 빈 JARVIS 에게는 보이지 않는다
반영하고 확인하기
- 서버를 다시 띄운다. 정의 파일은 서버가 뜰 때 한 번 읽는다. Docker 는
docker compose restart jarvis-backend로 반영한다 - 백엔드 로그에서
[Team] N agent(s) loaded: ...줄에 새 id 가 있는지 본다 - Web HUD 리액터 구체 양옆의 화살표를 눌러 새 에이전트로 넘어가는지 본다. 넘어가면 그 에이전트의 세션이 열리고 화면 색이 바뀐다
jarvis --agent <id>로 띄우면 그 에이전트의 기본 세션(default-<id>)으로 HUD 가 열린다
새 에이전트로 넘어가지 않을 때
로그에서 [Team] skip '<파일명>' 줄을 찾는다. id 규칙 위반이나 YAML 형식 오류가 그 줄에 적힌다. 잘못된 파일 하나만 건너뛰고 나머지 에이전트는 그대로 뜬다.
새 에이전트가 공유하는 것과 따로 갖는 것
새 에이전트도 사용자 모델과 사용자 프로필(사용자에 대한 사실)은 JARVIS 와 공유한다. 턴마다 남는 일화 기억, 작업 패턴, 항상 허용 승인 규칙은 그 에이전트에게만 쌓인다. 다른 에이전트의 일화와 작업 패턴은 memory.read 에 적은 것만 읽는다. 승인된 절차는 memory.read 와 상관없이 배운 에이전트만 쓴다.