원문 캡처 · github.com
원문 캡처 · github.com

Multica for Android (unofficial)는 Multica 서버에 연결해 휴대전화나 태블릿에서 AI 코딩 에이전트와 이슈를 관리하는 안드로이드 앱이다. 알림함, 칸반 보드, 이슈 댓글과 에이전트 채팅을 제공하지만, Multica 팀의 공식 앱은 아니며 v1.0.0 초기 릴리스로 충분한 엔드투엔드 테스트를 거치지 않았다.

이 앱은 사람과 AI 코딩 에이전트가 같은 이슈를 다루는 플랫폼 Multica의 안드로이드 클라이언트다. 공식 Expo·React Native 모바일 클라이언트(apps/mobile)를 포크해 안드로이드 빌드와 안드로이드 관련 수정, 이동 중 작업 관리를 위한 기능을 추가했다. 공식 클라이언트는 iOS만 지원한다.

Multica for Android는 Multica 또는 Index Labs (Hong Kong) Limited와 제휴하거나 이들의 승인을 받은 제품이 아니며, 이들의 지원도 받지 않는다. Multica 이름과 로고는 라이선스 조건에 따라 사용한다. 제작 프로젝트는 자체 백엔드가 없고 APK에 특정 서버 주소를 넣지 않는다. 처음 실행할 때 사용자가 자신의 서버 주소를 입력한다.

주요 기능과 제한

  • 알림함에서 알림을 실시간으로 확인하고 읽지 않음·보관함을 전환할 수 있다. 상태·우선순위·발신자로 필터링하고, 한 항목이나 여러 항목을 처리한다. Done을 누르면 이슈를 완료 처리하고 해당 알림 항목을 보관한다. 알림을 누르면 유형에 따라 이슈 채팅이나 상세 화면이 열리고, 알림을 일으킨 댓글로 이동한다.
  • 선택 기능인 안드로이드 포그라운드 서비스가 사용자가 활성화한 워크스페이스를 위해 서버와 웹소켓(WebSocket) 연결 하나를 유지한다. 이를 통해 파이어베이스나 구글 플레이 서비스 없이 기기 알림을 보낼 수 있다. 워크스페이스별로 켜고 끌 수 있고, 알림 채널과 알림에서 읽음 처리하는 기능을 지원한다. 서비스는 기본적으로 꺼져 있다.
  • My Issues와 All Issues 목록은 상태별로 이슈를 묶어 보여준다. 목록별로 상태 칸을 둔 칸반 보드로 전환할 수 있고, 상태 변경을 되돌릴 수 있다. 가로 화면이나 태블릿에서는 카드를 칸 사이로 끌어 옮길 수 있다. 상태·우선순위·프로젝트·라벨·기한 필터는 목록과 워크스페이스별로 저장된다.
  • 이슈 상세에서 제목과 설명, 상태, 우선순위, 담당자, 라벨, 프로젝트, 시작일과 기한, 단계, 상위 이슈를 관리할 수 있다. 다른 사람이 편집한 내용을 조용히 덮어쓰지 않도록 충돌을 알리고, 하위 이슈를 단계별로 묶어 진행 상황을 표시한다. 중복 표시와 사용자 지정 속성도 지원한다.
  • 댓글은 스레드, 반응, 해결 처리, 편집·삭제, 멘션과 첨부 파일을 지원한다. 오프라인에서 쓴 댓글은 연결이 복구되면 전송한다. 모바일 전용 이슈 채팅 화면에서는 이슈 기록을 채팅 형식으로 볼 수 있다.
  • 이슈에 연결된 에이전트 실행 기록과 비밀 정보를 가린 읽기 전용 대화 기록을 확인하고, 실행을 취소하거나 다시 시작할 수 있다. AI 에이전트와의 채팅에서는 에이전트 선택, 첨부 파일, 멘션, 응답 중단을 지원한다. 응답 중에도 메시지를 대기열에 넣고, 즉시 보내 에이전트의 진행 방향을 바꾸거나 대기열을 비울 수 있다.
  • 프로젝트를 조회·생성·편집·삭제하고 속성, 리소스, 이슈 목록과 보드를 볼 수 있다. 에이전트와 스쿼드는 상태, 실행 환경, 최근 실행, 구성원과 활성 이슈를 읽기 전용으로 볼 수 있다. 워크스페이스를 전환하고 초대를 수락하거나 거절할 수 있다.
  • 세로·가로 화면과 태블릿의 두 패널 이슈 상세 화면을 지원한다. 글자 크기 200%에서 레이아웃을 확인했고, TalkBack 레이블과 최소 48 dp 터치 영역을 제공한다. 인터페이스는 영어, 독일어, 간체 중국어로 제공된다.

워크스페이스 관리, 에이전트·스킬·실행 환경·오토파일럿 설정, 연동, 결제와 분석 기능은 의도적으로 포함하지 않았다. 이 작업에는 Multica 웹 앱을 사용해야 한다.

보안과 연결 측면에서 서버 주소는 실행 중 입력하고 연결 테스트를 거친다. Cloudflare Zero Trust 뒤에 있는 서버에는 Cloudflare Access 서비스 토큰을 사용할 수 있으며, 헤더는 REST 요청, 업로드, 웹소켓, 사용자가 설정한 출처의 이미지 요청에 전달된다. Local / VPN 연결 모드에서는 기기에 사용자가 설치한 CA 인증서를 신뢰하므로 앱을 다시 빌드하지 않고 사설 CA를 사용할 수 있다. 일반 HTTP는 허용하지 않는다.

비밀 정보는 안드로이드 키스토어(expo-secure-store)에 저장하고, 비밀 정보 화면의 스크린샷을 FLAG_SECURE로 막는다. 비밀 정보를 붙여넣은 뒤 클립보드를 지울 수 있으며 로그에서는 토큰을 가린다. 카메라, 마이크, 저장 공간, 오버레이 권한은 요청하지 않고 이미지는 시스템 Photo Picker를 사용한다. 앱은 설정한 Multica 서버와, Cloudflare Access 모드를 쓸 때는 Cloudflare와 통신한다. Firebase, 구글 플레이 서비스, 분석·추적 기능이나 이 프로젝트의 백엔드는 없다.

이용 조건과 설치

필요한 것은 자체 호스팅 또는 Multica Cloud 인스턴스와 그 계정이다. 앱은 자체 호스팅 Multica 서버 v0.6.1을 대상으로 개발하고 테스트했다. 다른 서버 버전과 Multica Cloud는 작동할 수 있지만 테스트하지 않았다. 기기는 안드로이드 7.0(API 24) 이상과 ARM 프로세서(arm64-v8a 또는 armeabi-v7a)가 필요하다. 배포 APK는 x86·x86_64 기기와 에뮬레이터를 지원하지 않는다. x86_64 에뮬레이터에서는 소스에서 디버그 APK를 빌드할 수 있다.

서명된 APK는 GitHub Releases에서 받을 수 있으며 Play 스토어 배포판은 없다. APK와 함께 .sha256 파일을 내려받아 설치 전에 체크섬을 확인한다. 휴대전화에서는 SHA-256을 표시하는 파일 관리자나 체크섬 앱을 사용할 수 있다. APK를 열면 안드로이드가 해당 출처의 앱 설치를 허용하라고 안내한다. 설정 경로는 제조사에 따라 다르며, 일반적으로 설정 → 앱 → 특별한 앱 액세스 → 출처를 알 수 없는 앱 설치에서 브라우저나 파일 관리자에 허용한다. 안드로이드 7에서는 설정 → 보안 → 알 수 없는 출처를 이용한다. 설치 뒤 권한을 다시 끌 수 있다. 새 버전은 이전 버전과 같은 키로 서명했을 때 기존 설치 위에 설치된다.

처음 실행할 때 연결 모드를 고른다. Local / VPN 모드에서는 https://multica.example.com처럼 직접 접근할 수 있는 서버 주소를 입력한다. LAN, VPN, 인터넷을 통해 접근하는 서버에 사용할 수 있다. Cloudflare Access 모드에서는 서버 주소와 Cloudflare Access 서비스 토큰의 클라이언트 ID·비밀 정보를 입력한다. 토큰은 Zero Trust → Access → Service Auth → Service Tokens에서 만들며, Access 애플리케이션의 Service Auth 정책이 허용해야 한다.

Test connection은 서버에 GET /health 요청을 보내 연결 성공, Cloudflare Access 차단, 호스트 접근 불가 가운데 무엇이 발생했는지 알려준다. 이후 웹 앱과 마찬가지로 이메일 코드로 로그인한다. 사설 CA를 쓰려면 휴대전화에 CA 인증서를 설치한다(설정 → 보안 → 암호화 및 사용자 인증 정보 → 인증서 설치 → CA 인증서). 서버 주소는 나중에 설정 → Server connection에서 바꾸거나 지울 수 있다. 서버를 변경하면 로그아웃되므로 다시 로그인해야 한다.

직접 빌드

빌드 조건은 Node.js 22, package.json의 packageManager에 지정된 버전의 pnpm(corepack enable 사용), JDK 17, Android SDK platform 36, build-tools 36, NDK 27이다. 저장소의 안내에 나온 명령은 다음과 같다.

text
git clone https://github.com/1270011/multica-android-unofficial.git
cd multica-android-unofficial
pnpm install --frozen-lockfile

# Checks (the same as CI)
pnpm --filter @multica/mobile typecheck
pnpm --filter @multica/mobile lint
pnpm --filter @multica/mobile test

# Debug APK for the emulator (x86_64); use --archs arm64-v8a for a phone
export ANDROID_HOME=/path/to/android-sdk JAVA_HOME=/path/to/jdk-17
apps/mobile/scripts/android-build.sh debug
# -> apps/mobile/android/app/build/outputs/apk/debug/app-debug.apk

안내에 따르면 빌드할 때는 반드시 scripts/android-build.sh를 사용해야 한다. 이 스크립트는 expo prebuild를 실행한다. android/ 디렉터리는 생성되는 파일이라 저장소에 포함되지 않는다. 스크립트는 patches/의 네이티브 패치가 적용됐는지 확인하고 완성된 APK에서도 이를 검증한다. 매번 pull한 뒤 pnpm install --frozen-lockfile을 다시 실행해야 하며, 패치된 네이티브 의존성이 오래됐으면 빌드가 중단된다.

서명된 릴리스 빌드에는 자체 키스토어와 apps/mobile/scripts/build-release.sh를 사용한다. RB_SIGNING_ENV가 RB_RELEASE_* 값이 들어 있는 비공개 파일을 가리키도록 설정하고, 서명 인증서의 SHA-256을 apps/mobile/release-signer.sha256에 넣는다. 키스토어나 비밀번호를 커밋해서는 안 된다.

초기 릴리스와 알려진 제약

v1.0.0은 빠르게 만든 초기 릴리스다. 기능은 사용할 수 있지만 다듬어지지 않은 부분이 있을 수 있고, 광범위한 엔드투엔드 테스트를 거치지 않았다. v2.0.0에서는 알려진 문제를 수정하고 엔드투엔드 테스트와 웹 앱의 필터·설정·관리 기능을 더하는 데 초점을 둔다. 일정은 공개되지 않았다. v1.0.0에서는 오프라인 표시가 항상 정확하지 않을 수 있다. 콘텐츠가 오래됐거나 오프라인 표시가 잘못된 것 같으면 새로고침할 수 있으며, 오프라인에서 작성한 댓글은 연결 복구 후 전송된다.

배포 APK는 ARM 기기용이며, 개발과 테스트에는 안드로이드 16 에뮬레이터를 사용했다. 실제 기기에서의 테스트 범위는 제한적이다. 알림이 백그라운드에서 오지 않으면 설정 → Notifications에서 알림 서비스를 켜고 대상 워크스페이스를 활성화한 뒤, 안드로이드 설정에서 앱 알림을 허용해야 한다. 일부 제조사는 백그라운드 서비스를 적극적으로 종료하므로 배터리 최적화 대상에서 앱을 제외해야 할 수 있다.

연결 테스트에서 호스트에 접근할 수 없다고 나오면 주소가 https://로 시작하는지, VPN·네트워크와 서버가 작동하는지 확인한다. 일반 HTTP는 지원하지 않는다. Cloudflare Access가 요청을 막으면 서비스 토큰이 없거나 잘못됐는지, Access 애플리케이션에 허용하는 Service Auth 정책이 있는지 확인한다. 사설 CA 인증서 오류가 나면 CA 인증서를 휴대전화에 설치하고 Local / VPN 모드를 사용한다.

APK가 설치되지 않으면 브라우저나 파일 관리자에 출처별 설치 권한을 허용했는지, 기기가 ARM인지 확인하고 SHA-256 체크섬을 검증한다. 직접 빌드한 앱과 릴리스 APK의 서명 키가 다르면 업데이트로 설치할 수 없으므로 직접 빌드한 앱을 삭제해야 한다. 키보드가 붙여넣기 버튼을 가리면 키보드를 닫거나 입력란을 길게 눌러 붙여넣을 수 있다.

라이선스와 프로젝트 정보

이 앱은 OSI 승인 오픈소스 라이선스가 아니라 소스 공개(source-available) 프로젝트다. Multica License는 Apache License 2.0에 추가 조건을 더한 라이선스다. 조건에 따라 Multica 이름·로고·표시 문구는 유지해야 하며, Index Labs의 상업용 라이선스 없이 제삼자에게 Multica 기반 호스팅 서비스를 운영할 수 없다. 소스는 읽고 빌드하고 수정하고 기여할 수 있으며, 전체 조건은 라이선스에 적혀 있다. 변경·추가된 파일은 MODIFICATIONS.md, 변경 사항은 CHANGELOG.md에서 확인할 수 있다.

앱은 Multica 웹 앱의 대체품이 아니라 모바일 클라이언트다. 웹 앱에는 워크스페이스 관리와 에이전트 설정이 있지만, 이 앱에서는 에이전트와 스쿼드 정보를 읽기만 할 수 있다. 반대로 이 앱은 작은 화면에 맞춘 이슈 채팅, 오프라인 댓글 작성, 에이전트 응답 중 메시지 대기열 기능을 제공한다. Multica 서버가 Claude Code 같은 에이전트를 실행할 수는 있지만, 이 앱 자체가 에이전트를 실행하는 것은 아니다.

문제를 제보할 때는 저장소의 알려진 문제를 먼저 확인하고, 안드로이드 버전, 기기, 앱 버전, Multica 서버 버전과 재현 절차를 포함해 이 앱의 저장소에 이슈를 열면 된다. Multica 저장소가 아니라 이 앱 저장소에 보고해야 하며, 토큰·서비스 토큰 비밀 정보·공개하고 싶지 않은 서버 주소를 올려서는 안 된다. 프로젝트는 Recordingbeats가 관리한다. 상위 프로젝트는 Multica 저장소이며, 이 앱은 상위 모바일 클라이언트의 v0.6.1 태그를 기반으로 한다.