<p align="center">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="public/brand/bloks-wordmark-dark.png">
<source media="(prefers-color-scheme: light)" srcset="public/brand/bloks-wordmark-light.png">
<img alt="Bloks" src="https://raw.githubusercontent.com/hamedgitty/bloks/HEAD/public/brand/bloks-wordmark-light.png" width="320">
</picture>
</p>
<p align="center">
사용자의 기기에서 작동하는 개인용 AI 에이전트입니다.<br>
당신의 에이전트, 당신의 키, 당신의 데이터, 그리고 당신이 선택한 사람들을 위한 것입니다.
</p>
<p align="center">
<a href="https://bloks.dev"><img alt="웹사이트: bloks.dev" src="https://img.shields.io/badge/website-bloks.dev-004aad"></a>
<a href="LICENSE"><img alt="FSL-1.1-MIT 라이선스" src="https://img.shields.io/badge/licence-FSL--1.1--MIT-3bc76b"></a>
<a href="https://github.com/hamedgitty/bloks/actions/workflows/ci.yml"><img alt="CI" src="https://github.com/hamedgitty/bloks/actions/workflows/ci.yml/badge.svg"></a>
<img alt="macOS, Windows 및 Linux" src="https://img.shields.io/badge/desktop-macOS%20%C2%B7%20Windows%20%C2%B7%20Linux-6b7280">
<a href="https://apps.apple.com/app/bloks-ai-agents/id6804453451"><img alt="App Store의 iPhone 앱" src="https://img.shields.io/badge/iPhone-App_Store-6b7280"></a>
<img alt="Node 22+" src="https://img.shields.io/badge/node-22%2B-6b7280">
</p>
<p align="center">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="docs/screenshots/hero-dark.png">
<source media="(prefers-color-scheme: light)" srcset="docs/screenshots/hero.png">
<img alt="블록스(Bloks) 작업 공간: 네 명의 에이전트가 함께 런칭 작업을 수행하고, 가장 선임인 에이전트가 그 결과를 검토하는 모습" src="https://raw.githubusercontent.com/hamedgitty/bloks/HEAD/docs/screenshots/hero.png">
</picture>
</p>
Bloks는 개인 AI 에이전트를 위한 데스크톱 앱입니다. 메시징 앱처럼 생겼습니다: 각 에이전트는 대화하는 연락처이며, 각 방은 그룹 채팅이고, 모든 것이 사용자의 컴퓨터에서 실행됩니다. 에이전트들은 사용자가 이미 가지고 있는 파일, 엔진 및 키 옆에서 작동하며, 사용자 승인이 필요한 어떤 작업을 수행하기 전에 멈춰서 질문합니다. 만들 계정이 없고, 저희 서버에 데이터를 보관하는 곳도 없습니다.
근본적으로 모든 에이전트는 실제 엔진 세션입니다: Claude Code, Codex, Gemini CLI 및 도구를 실행하거나 키를 소유한 모든 API가 여기에 해당합니다. 에이전트들은 응답을 스트리밍하고, 무엇을 실행하는지 보여주며, 학습한 내용은 사용자가 읽고 편집할 수 있는 일반 파일에 보관합니다.
iPhone 앱은 데스크톱 앱과 페어링됩니다. 휴대폰에서는 아무것도 실행되지 않습니다: 이는 사용자의 컴퓨터에 있는 에이전트들을 볼 수 있는 창이며, 승인은 잠금 화면이나 손목에서 응답합니다.
📣 Bloks 3 출시
Bloks 3가 Mac, Windows 및 Linux용으로, 그리고 App Store에서 iPhone 및 Apple Watch용으로 출시되었습니다. 안드로이드 앱은 곧 출시될 예정입니다.
이번 릴리스를 위해 버그를 보고하거나, 빌드를 테스트하거나, 코드를 보내주신 모든 분들께 감사드립니다. 여기에 포함된 많은 기능들은 여러분의 문제점 중 하나에서 시작되었으며, 이는 그 모든 경우에 더 나은 앱입니다.
3.0에서 새로 추가된 기능
워크스페이스(Workspaces). 개인용, 비즈니스용 또는 고유한 이름을 가진 워크스페이스가 있으며, 각각은 자체 에이전트, 메모리, 키 및 방을 가진 완전한 Bloks이며, 사용자가 선택하는 마크와 창 상단에 있는 전환기를 통해 이동할 수 있습니다. 하나의 플랜과 하나의 Bloks 키로 모두 커버됩니다.
사람(People). Bloks Team에서 코드, QR 또는 링크를 통해 누군가를 워크스페이스에 초대하고, 동일한 네 단어를 읽어주면 그들이 사용자가 선택한 접근 권한 및 지출 한도를 가지고 옆의 에이전트들과 대화합니다.
사용량(Usage). 모든 에이전트가 어떤 엔진별로 얼마를 사용했는지 확인하고, 자체 API 키로 실행되는 모든 엔진에 월간 한도를 설정할 수 있습니다.
사용자의 휴대폰. 코드를 요청할 때 페어링이 시작되며, iPhone과 Apple Watch 업데이트를 통해 기기 주소나 포트가 변경되어도 휴대폰이 Mac을 다시 찾고, 다른 워크스페이스를 탭 한 번으로 추가하며, 답변을 네이티브하게 생성하고, 에이전트의 브라우저 또는 클라우드 컴퓨터를 실시간으로 보여주어 사용자가 관찰하거나 제어할 수 있게 합니다.
또한 카드, 표(tables), 차트(charts)로 생성되는 답변, 창 어디든 이동할 수 있는 터미널, 크기 조절 및 접을 수 있는 사이드 리스트, 실패 시 스스로 복구되는 창, Plan 페이지, 하나의 검색을 중심으로 재구성된 설정(Settings), 그리고 전체 앱의 새로운 형태가 추가되었습니다. 모든 내용은 3.0 릴리스 노트에서 확인할 수 있습니다.
둘러보기 (A tour)
워크스페이스 (Workspaces)
워크스페이스는 자체적인 Bloks입니다. 즉, 자체 에이전트(agents), 메모리(memory), 키(keys), 공간(rooms), 루틴(routines), 설정(settings)을 가지고 있으며 별도의 폴더에 존재합니다. 따라서 회사 운영에 사용되는 에이전트가 가족의 노트를 읽는 일은 절대 없습니다. 개인용 워크스페이스는 기존에 사용하던 Bloks입니다. 새로운 비즈니스 워크스페이스를 추가하거나 자체 이름을 가진 워크스페이스를 추가하면, 선택한 내용에 맞춰 짧은 환영 화면과 함께 열립니다. 각 워크스페이스에는 컴퓨터나 휴대폰에서 색상과 패턴을 선택하거나 로고를 업로드하여 아무도 모방할 수 없는 고유의 표시(mark)가 부여됩니다. 사용자가 참여하는 워크스페이스에서 선택한 표시는 오직 사용자만의 것입니다.
창 상단의 스위처(switcher)는 워크스페이스를 드래그한 순서대로 나열하며, 대기 중인 항목에는 점이 표시됩니다. Cmd+1부터 Cmd+9까지 단축키를 사용하면 특정 워크스페이스로 바로 이동할 수 있습니다. 다른 워크스페이스를 보고 있을 때도 모든 워크스페이스는 계속 실행되므로, 루틴과 감시자(watchers)가 작동을 지속하며 백그라운드에서 승인 요청이 들어와도 사용자에게 도달합니다.
각 워크스페이스는 일정 기간 동안 음소거(muted)할 수 있으며, 각각의 워크스페이스가 사용자에게 방해를 줄 정도를 설정할 수 있습니다: 모든 알림, 오직 필요한 것만, 또는 아무것도 받지 않기 등입니다.
Bloks Cloud를 사용하면 각 워크스페이스가 자체 스위치로 온라인에서 **접근 가능(reachable online)**하며, 사용자 본인과 초대된 사람들이 이용할 수 있습니다.
<p align="center">
<img alt="The workspace switcher open at the top of the window: Personal, Brightwater with three members and Maple Street Bakery, then Join a workspace, New workspace, Workspace settings, Plan and Mute" src="https://raw.githubusercontent.com/hamedgitty/bloks/HEAD/docs/screenshots/workspaces.png" width="470">
<img alt="New workspace: a name, Just me or Team, and the mark it will wear, with a button to draw another" src="https://raw.githubusercontent.com/hamedgitty/bloks/HEAD/docs/screenshots/new-workspace.png" width="350">
</p>
사람 초대하기 (Bring people in)
파트너, 동료 또는 클라이언트를 워크스페이스에 초대할 수 있습니다. 초대는 QR 코드, 읽을 수 있는 8자리 코드(K7QF-M2XR), 그리고 Messages, Slack 또는 WhatsApp에서 초대 카드 형태로 표시되는 링크로 구성됩니다. 이는 한 사람에게만 유효하며, 한 번 사용하고 하루 동안 지속됩니다. 참여자는 iPhone 앱이나 데스크톱 앱으로 접속할 수 있으며, 입장 전에 두 사람이 동일한 네 단어를 읽어야 하므로, 링크를 가로챈 사람은 문 앞에서 저지당합니다. 컴퓨터에서만 확인 가능한 '참여 비밀번호(join password)'도 추가할 수 있습니다.
<p align="center">
<img alt="Invite to Brightwater: a QR code with the workspace's mark in the middle, an 8 character code and a link, for one person who joins as a member" src="https://raw.githubusercontent.com/hamedgitty/bloks/HEAD/docs/screenshots/invite.png" width="420">
<img alt="Join a workspace: the code typed in, Brightwater found with who sent the invite, and a name to join under" src="https://raw.githubusercontent.com/hamedgitty/bloks/HEAD/docs/screenshots/join.png" width="400">
</p>
<p align="center">
<img alt="Members of Brightwater: Sam Okafor asking to join with four words to compare, and the owner, an admin and a member below" src="https://raw.githubusercontent.com/hamedgitty/bloks/HEAD/docs/screenshots/members.png">
</p>
그들이 얻게 되는 권한은 사용자가 결정합니다:
- 역할(Roles). 사용자는 소유자입니다. 관리자(Admins)는 사람들을 초대하고 관리하며, 멤버(members)는 에이전트(agents), 룸(rooms), 메모리(memory)를 사용합니다.
- 팀 에이전트(Team agents). 각 에이전트는 하나의 공유된 팀 대화방을 가지며, 참여할 사람을 선택합니다: 모두, 일부 사람들만, 또는 소수의 사람들을 제외한 모두. 룸 역시 같은 방식으로 하나씩 선택됩니다.
- 개인 간 대화(Private one to ones). 에이전트에 접근할 수 있는 사람은 누구나 그것과 사적으로 이야기할 수 있습니다. 사용자가 멤버의 개인 대화를 읽는 기능을 켜지 않는 한 다른 누구도 이를 읽을 수 없으며, 이 경우 멤버들에게 어떤 방식으로 이루어지는지 알려줍니다.
- 대신 전송(On your behalf). 팀 대화방이나 룸에서 사용자 또는 관리자는 에이전트에게 누군가에게 메시지를 보내도록 요청할 수 있습니다("Sam에게 초안에 대해 메시지 보내기"). 그러면 그것은 Sam의 개인 대화방에 기록되며, 사용자가 보낸 것으로 표시됩니다.
- 솔로 에이전트(Solo agents). 멤버는 사용자가 허용한 엔진을 사용하여 자신만의 개인적인 에이전트를 만들 수 있습니다.
- 사용자별 제한(Limits per person). 각 멤버가 한 달 동안 사용할 수 있는 API 키 사용량, Bloks AI의 할당량, 그리고 만들 수 있는 솔로 에이전트 개수입니다. 제한에 도달한 멤버는 중단되며, 다른 누구도 알아차리지 못합니다.
그들이 대화하는 모든 에이전트는 사용자의 키를 사용하여 사용자 컴퓨터에서 실행되며, 사용자의 설정, 키 또는 개인 대화에 절대 접근하지 않습니다. 두 명 이상의 사람과의 대화는 버블(bubbles) 형태로 그려지며, 최신 메시지 아래의 얼굴은 누가 얼마나 읽었는지 보여줍니다. 워크스페이스에 있는 멤버들은 Bloks Team과 함께 제공되며; 단일 룸 역시 그 자체로 공유될 수 있으며, 게스트는 해당 룸만 보고 다른 것은 볼 수 없습니다.
<p align="center">
<img alt="A room in Brightwater: the owner, two members and three agents in bubbles, each with a face and a name, and Seen by Tom and Seen by Priya under the messages they have read" src="https://raw.githubusercontent.com/hamedgitty/bloks/HEAD/docs/screenshots/room-people.png">
</p>
에이전트 사용량 (What your agents spend)
**사용량(Usage)**은 메인 레일에서 에이전트들이 지난 7일, 30일 또는 90일 동안 혹은 이번 달에 사용한 비용(cost), 토큰(tokens) 또는 턴(turns)을 모든 에이전트 및 엔진별로 보여줍니다. 또한 클릭하여 세부적으로 확인할 수 있는 분류 내역도 제공됩니다. 비용은 항상 해당 엔진 자체의 가격이거나, 토큰과 가격을 보고하는 엔진의 경우 공개 모델 가격 목록에서 추정한 값으로 작성되며, 이는 '~$4.20'와 같이 표시됩니다. 아무도 가격을 모르는 모델에 대해서는 추정치를 제시하지 않습니다.
<p align="center">
<img alt="Usage over the last 30 days: the cost against the month before, tokens and turns, and a chart by day with a line for each engine" src="https://raw.githubusercontent.com/hamedgitty/bloks/HEAD/docs/screenshots/usage.png">
</p>
본인의 키(key)로 실행되는 모든 엔진에 **월별 지출 한도(monthly spending limit)**를 설정할 수 있습니다. 이 한도에 도달하면, 새로운 턴은 일시 중지되거나 에이전트의 백업 엔진으로 이동합니다. 사용자를 직접 상향 조정하거나 월이 바뀌기 전까지는 이런 상태가 유지됩니다. 그전에 메시지 상자에는 한도가 임박했는지, Claude 또는 ChatGPT 플랜 창, 혹은 Bloks AI가 어느 정도에 도달하는지, 그리고 언제 리셋되는지에 대한 정보가 표시됩니다.
<p align="center">
<img alt="Limits: Claude's five hour and weekly windows, Bloks AI's month and day, and a monthly spending limit on a Gemini key, most of it used" src="https://raw.githubusercontent.com/hamedgitty/bloks/HEAD/docs/screenshots/usage-limits.png" width="540">
</p>
<p align="center">
<img alt="The message box with Approaching spending limit above it, how much is used and when it tops up, and a View usage button" src="https://raw.githubusercontent.com/hamedgitty/bloks/HEAD/docs/screenshots/usage-notice.png" width="560">
</p>
사용할 수 있는 답변
에이전트는 단락 대신 카드(cards), 테이블(tables), 차트(charts), 지표(metrics), 단계(steps), 탭(tabs), 양식(forms) 및 버튼을 사용하여 답변 스트림으로 그릴 수 있습니다. 클릭 한 번으로 에이전트에게 답변하거나, 페이지를 열거나, 심지어 답변 자체를 변경할 수 있습니다. 비교, 가격 또는 선택 옵션은 파일 형태로가 아니라 채팅 내에서 이런 방식으로 돌아옵니다. 모델이 작성한 내용은 화면에 도달하기 전에 폐쇄된 형태(closed set of shapes)와 비교 파싱되며, 답변의 어떤 요소도 다른 것을 가져오지 않습니다(fetches). 이 업데이트를 통해 iPhone은 동일한 답변을 네이티브로 그립니다. [docs/GENERATIVE_UI.md]가 계약서입니다.
<p align="center">
<img alt="An answer drawn as a card: three headline numbers, a bar chart of signups by channel, a table, and two follow-up questions to click" src="https://raw.githubusercontent.com/hamedgitty/bloks/HEAD/docs/screenshots/answer.png" width="560">
</p>
협업하는 에이전트(Agents that work together)
여러 에이전트를 방에 배치하면 서로 말을 끊지 않고 순서를 지키며 번갈아 가며 이야기합니다. 리드(lead)는 누가 임명했든, 혹은 가장 선임인 사람이 마지막으로 말하며 돌아온 내용을 검토하고 결정을 내립니다. 에이전트의 메모리는 방과 일대일 대화 사이에서도 유지되므로, 직속 비서(Chief of Staff)에게 그룹 계획에 대해 개인적으로 무엇을 생각했는지 물어볼 수 있습니다.
방은 아무도 지명하지 않은 메시지에 누가 답변할지 결정합니다: 모두가, 리드만, 또는 Auto입니다. Auto의 경우 작고 빠른 모델이 역할에 맞는 멤버를 선택하며("Scout picked: pricing question"과 같이 답변 위에 표시되며 클릭하면 이유가 열림), 리드는 느리거나, 확신하지 못하거나, 연결되지 않았을 때 답변합니다.
@으로 누군가를 지명하는 것이 항상 승리하며, 이와 같은 선택은 Slack, Discord 또는 WhatsApp로 확장된 방에서도 동일하게 적용됩니다. 이는 사용자가 Settings > Behaviour에서 지정하지 않는 한 에이전트가 이미 실행되고 있는 엔진을 사용합니다.