Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -59,8 +59,8 @@ Grok / Claude / Codex는 턴 단위 헤드리스로 실행돼요. `-p` / `exec`

채널에는 멤버 봇, 브리프, 최근 대화가 있어요. 메시지를 보내면 Crew가 누가 답할 차례인지 정해 줘요.

- `@이름` / `@id` → 그 멤버가
- `@everyone` / `@all` / `@here` / `@channel` → 전원이
- `@이름` / `@id` → 그 멤버가. 여러 명이면 적힌 순서대로 한 명씩
- `@everyone` / `@all` / `@here` / `@channel` → 멤버 순서대로 한 명씩
- 멘션이 없으면 → 마지막으로 답한 멤버가, 그마저 없으면 첫 번째 멤버가
- 봇이 멘션 없이 채널에 글을 남기면 → 아무도 답하지 않아요. 봇끼리 끝없이 주고받지 않도록요

Expand All @@ -76,7 +76,7 @@ Grok / Claude / Codex는 턴 단위 헤드리스로 실행돼요. `-p` / `exec`
> 이름을 바꿔 달라면 `crew agent set --name "새 이름"`을 실행해라. 반복 일을 맡기면 `crew routine add`로 루틴을 만들어라.
> 사람에게 고르라고 물으려면 `crew ask --question "..." --option A --option B`를 실행해라. 값을 적으라고 하려면 `--input 아이디`를 보태라. 다른 봇에게 묻지 마라.

그래서 1:1 대화에서 `@리뷰어 이 패치 봐줘`라고 쓰면, 지금 대화 중인 봇이 먼저 일을 하고 필요할 때 리뷰어 봇에게 넘겨요. 봇 사이의 릴레이는 사용자 메시지 하나당 최대 4홉이에요. 이름 변경과 루틴 등록은 채팅에서 시키면 봇이 같은 식으로 `crew`를 실행해요. 사람에게 A / B / C를 고르라고 묻거나 값을 적으라고 할 때도 `crew ask`로 그 봇의 채팅에 카드가 떠요.
그래서 1:1 대화에서 `@리뷰어 이 패치 봐줘`라고 쓰면, 지금 대화 중인 봇이 먼저 일을 하고 필요할 때 리뷰어 봇에게 넘겨요. 이름을 여러 개 적으면 지금 봇이 답을 끝낸 뒤에, 적힌 순서대로 한 명씩 답해요. 봇 사이의 릴레이는 사용자 메시지 하나당 최대 4홉이에요. 이름 변경과 루틴 등록은 채팅에서 시키면 봇이 같은 식으로 `crew`를 실행해요. 사람에게 A / B / C를 고르라고 묻거나 값을 적으라고 할 때도 `crew ask`로 그 봇의 채팅에 카드가 떠요.

### <img src="docs/readme/face-teardrop.png" width="28" height="28" alt=""> 메모리

Expand Down
6 changes: 4 additions & 2 deletions crates/crew/src/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -760,7 +760,7 @@ pub fn team_rules(agent: &AgentConfig, roster: &[AgentConfig]) -> String {
}
}
s.push_str(
"When the user writes @id or @display-name, they are naming a teammate for YOU. Stay in this session. If you need them, actually run `crew tell <id> <text>` (crew is on PATH, CREW_AGENT_ID is set). Do not ask the user to switch chats. Do not pretend.\n",
"When the user writes @id or @display-name, they are naming a teammate for YOU. Stay in this session. If you need them, actually run `crew tell <id> <text>` (crew is on PATH, CREW_AGENT_ID is set). Do not ask the user to switch chats. Do not pretend. If several teammates are named, they are asked after you finish, in the order they were written. A tell you run waits until then too.\n",
);
s.push_str(
"When the user writes #id or #display-name, they are naming a channel. Stay in this session. To post there, run `crew channel send <id> <text>` or `crew tell --channel <id> <text>`.\n",
Expand All @@ -769,7 +769,7 @@ pub fn team_rules(agent: &AgentConfig, roster: &[AgentConfig]) -> String {
"Rooms are yours to make, not only the user's. `crew channel list` prints `id<TAB>name<TAB>members`. `crew channel add --name \"브라우저 QA\" --members alpha,beta` opens one and prints its id. A room only takes posts from its members, so put your own id in `--members` when you will speak there. Pass an explicit id first (`crew channel add browser-qa --name ...`) only when you want to choose it, and then it must be 1-64 of a-z, 0-9, '-' or '_'. `crew channel set <id> --brief \"...\"` gives the room standing rules every member sees on every wake, and `crew channel join <id> <agent>` / `crew channel leave <id> <agent>` change who is in it. Actually run these. Do not describe a room you did not create.\n",
);
s.push_str(
"A channel wake prompt lists that room's `Members:` by id — that is who \"the same people\" means when the user asks for another room with them; your teammate list above is every agent, not this room. Your own post to a room wakes nobody unless you name someone (@id, @display-name, or @everyone), so once a room exists, send the first message there with the mentions that should start the work.\n",
"A channel wake prompt lists that room's `Members:` by id — that is who \"the same people\" means when the user asks for another room with them; your teammate list above is every agent, not this room. Your own post to a room wakes nobody unless you name someone (@id, @display-name, or @everyone), so once a room exists, send the first message there with the mentions that should start the work. A channel message that names several members is handed out one member at a time, in the order the names were written, or in member order for @everyone. You are asked when it is your turn.\n",
);
s.push_str(
"To change your display name, actually run `crew agent set --name \"New Name\"` (id defaults to CREW_AGENT_ID). Do not only claim you renamed yourself.\n",
Expand Down Expand Up @@ -1919,6 +1919,8 @@ mod tests {
assert!(rules.contains("crew channel list"));
assert!(rules.contains("crew channel set <id> --brief"));
assert!(rules.contains("Members:"));
assert!(rules.contains("one member at a time"));
assert!(rules.contains("in the order they were written"));
assert!(rules.contains("crew routine add"));
assert!(rules.contains("crew ask --question"));
assert!(rules.contains("human user"));
Expand Down
Loading
Loading