프로젝트 소개
# Iris
Iris는 LLM 우선, 소스 비종속적 메시징 시스템으로, Telegram, SMS, Email, WhatsApp, Instagram 등 여러 플랫폼의 메시지를 단일 쿼리 가능한 API로 통합하도록 설계되었습니다. 자체 호스팅이 가능하며 MIT 라이선스로 배포되고 Rust로 구축되었습니다.
## 주요 기능
- **통합 모델**: 모든 메시지를 일관된 `Message`, `Thread`, `Contact` 구조로 정규화합니다.
- **소스 비종속적 쿼리**: 출처를 알지 못해도 모든 소스를 대상으로 쿼리할 수 있습니다 (예: "읽지 않은 모든 스레드").
- **LLM 우선 설계**: MCP 지원, 구조화된 JSON, 기능 광고를 통해 에이전트 소비에 최적화되었습니다.
- **코드 생성**: CLI, HTTP, MCP 표면이 단일 API 정의에서 생성되어 일관성을 보장합니다.
- **자체 호스팅 가능**: 클라우드 의존성이 없으며 Rust가 실행되는 모든 곳에서 작동합니다.
- **확장 가능**: 새 공급자를 추가하려면 단일 트레이트를 구현하기만 하면 됩니다.
## 빠른 시작
```bash
cargo build
cargo run -- threads
cargo run -- messages <thread-id>
cargo run -- contacts
cargo run -- serve
```
## Docker로 자체 호스팅
게시된 이미지는 `ghcr.io/techgodhq/iris:<version>` (또는 `:latest`)에서 사용할 수 있습니다. 인터넷에 연결된 배포의 경우 `IRIS_API_TOKEN`을 높은 엔트로피 비밀로 설정하세요. `GET /health`를 제외한 모든 HTTP 엔드포인트는 Bearer 토큰 인증이 필요합니다. 토큰이 없으면 서버는 공개 또는 와일드카드 바인드 주소를 거부합니다.
예시:
```bash
docker run --rm \
--name iris \
--publish 127.0.0.1:9876:9876 \
--volume iris-data:/data \
--env IRIS_ENABLED_PROVIDERS=telegram \
--env IRIS_TELEGRAM_BOT_TOKEN="${IRIS_TELEGRAM_BOT_TOKEN}" \
ghcr.io/techgodhq/iris:latest
```
## 구성
Iris는 TOML 파일, 네이티브 환경 변수 또는 둘 다를 지원합니다. 환경 변수 값은 TOML을 재정의하고, TOML은 기본값을 재정의합니다. 주요 변수로는 `IRIS_ENABLED_PROVIDERS`, `IRIS_TELEGRAM_BOT_TOKEN`, 다양한 `IRIS_EMAIL_*` 설정이 있습니다.
공급자 유형의 여러 인스턴스가 지원됩니다 (예: `email.ops-codefold`). 각 인스턴스는 독립적인 구성과 환경 변수 명명 규칙을 갖습니다.
## 아키텍처
Iris는 크레이트로 구성된 워크스페이스로 구성됩니다:
- `iris-core`: 도메인 모델 및 `MessageProvider` 트레이트 (I/O 의존성 없음)
- `iris-providers`: 공급자 구현 (Telegram, SMS, Email 등)
- `iris-server`: Axum HTTP 서버 (REST API)
- `iris-cli`: 명령줄 인터페이스 (clap)
- `iris-mcp`: MCP 서버 표면
- `iris-codegen`: CLI/HTTP/MCP 동기화를 위한 코드 생성
## 공급자 추가
1. `iris-providers/src/`에 모듈을 생성합니다.
2. `MessageProvider` 트레이트를 구현합니다.
3. 서버/CLI 시작 시 등록합니다.
## 개발
```bash
cargo build --all-targets
cargo test --all-targets
cargo clippy --all-targets -- -D warnings
cargo fmt --all -- --check
```
사전 커밋 훅은 lefthook을 통해 구성됩니다.
## 라이선스
MIT
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.