> ## Documentation Index
> Fetch the complete documentation index at: https://docs.nomo.gg/llms.txt
> Use this file to discover all available pages before exploring further.

# 在 iPhone 上查看 AI 状态、用量与实时会话

> Nomo 替你在 iPhone 上盯着编程 agent —— 服务状态、套餐用量，以及可以随手答复的实时会话。

export const Screens = ({shots, slide = 240, gap = 24}) => {
  const chevron = back => <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">
      <polyline points={back ? "15 18 9 12 15 6" : "9 18 15 12 9 6"} />
    </svg>;
  const [i, setI] = useState(0);
  const [zoomed, setZoomed] = useState(false);
  const touch = useRef(null);
  const n = shots.length;
  const go = d => setI(p => Math.min(n - 1, Math.max(0, p + d)));
  useEffect(() => {
    const onKey = e => {
      if (e.key === "Escape") setZoomed(false); else if (e.key === "ArrowRight") go(1); else if (e.key === "ArrowLeft") go(-1); else return;
      e.preventDefault();
    };
    if (!zoomed) return;
    const prev = document.body.style.overflow;
    document.body.style.overflow = "hidden";
    window.addEventListener("keydown", onKey);
    return () => {
      document.body.style.overflow = prev;
      window.removeEventListener("keydown", onKey);
    };
  }, [zoomed, n]);
  const offset = ((n - 1) / 2 - i) * (slide + gap);
  return <div className="carousel" onTouchStart={e => {
    touch.current = e.touches[0].clientX;
  }} onTouchEnd={e => {
    const dx = e.changedTouches[0].clientX - touch.current;
    if (Math.abs(dx) > 40) go(dx < 0 ? 1 : -1);
  }}>
      <div className="carousel-viewport">
        <div className="carousel-track" style={{
    gap: `${gap}px`,
    transform: `translateX(${offset}px)`
  }}>
          {shots.map((s, k) => <button key={s.src} type="button" className={k === i ? "carousel-slide is-active" : "carousel-slide"} style={{
    width: `${slide}px`
  }} onClick={() => k === i ? setZoomed(true) : setI(k)} aria-label={k === i ? `Enlarge: ${s.alt}` : s.alt}>
              <img src={s.src} alt={k === i ? s.alt : ""} draggable="false" />
            </button>)}
        </div>
      </div>

      <div className="carousel-controls">
        <button type="button" onClick={() => go(-1)} disabled={i === 0} aria-label="Previous screenshot">
          {chevron(true)}
        </button>
        <div className="carousel-dots">
          {shots.map((s, k) => <button key={s.src} type="button" className={k === i ? "is-active" : ""} onClick={() => setI(k)} aria-label={`Screenshot ${k + 1} of ${n}`} aria-current={k === i} />)}
        </div>
        <button type="button" onClick={() => go(1)} disabled={i === n - 1} aria-label="Next screenshot">
          {chevron(false)}
        </button>
      </div>

      {zoomed && <div className="carousel-lightbox" role="dialog" aria-modal="true" aria-label={shots[i].alt} onClick={() => setZoomed(false)}>
          {}
          <button type="button" className="carousel-lightbox-close" onClick={e => {
    e.stopPropagation();
    setZoomed(false);
  }} aria-label="Close">
            <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" aria-hidden="true">
              <path d="M18 6 6 18M6 6l12 12" />
            </svg>
          </button>

          <button type="button" className="carousel-lightbox-step is-prev" onClick={e => {
    e.stopPropagation();
    go(-1);
  }} disabled={i === 0} aria-label="Previous screenshot">
            {chevron(true)}
          </button>

          <img src={shots[i].src} alt={shots[i].alt} onClick={e => e.stopPropagation()} />

          <button type="button" className="carousel-lightbox-step is-next" onClick={e => {
    e.stopPropagation();
    go(1);
  }} disabled={i === n - 1} aria-label="Next screenshot">
            {chevron(false)}
          </button>
        </div>}
    </div>;
};

Nomo 是一款 iPhone 应用，写给那些工作离不开编程 agent、却又没法整天守着它的人。

<Note>
  中文文档由英文版翻译而来，可能略有滞后。两者说法不一致时，请以[英文文档](/index)为准。
</Note>

<Screens
  shots={[
{ src: "/images/screens/status.jpg", alt: "主屏幕上的状态与用量小组件" },
{ src: "/images/screens/usage.jpg", alt: "用量标签页，显示 Claude 的会话额度与每周额度" },
{ src: "/images/screens/home-screen.jpg", alt: "同样这几个小组件在深色模式下的各种尺寸" },
{ src: "/images/screens/alerts.jpg", alt: "锁定屏幕上的服务故障通知与用量上限通知" },
{ src: "/images/screens/sessions.jpg", alt: "灵动岛中一个正在运行的 Claude Code 会话" },
]}
/>

它由两部分组成，其中第一部分装好就能用。

<CardGroup cols={2}>
  <Card title="状态与用量" href="/zh-Hans/status-usage" icon="signal">
    覆盖五家提供商的主屏幕小组件；服务出故障、或者额度快见底时会通知你。免费。
  </Card>

  <Card title="会话" href="/zh-Hans/sessions/overview" icon="mobile-screen">
    在锁定屏幕上看着 Claude Code 和 Codex 干活，并直接在那里答复它们的权限请求。
  </Card>
</CardGroup>

## 从这里开始

<CardGroup cols={2}>
  <Card title="安装应用" href="/zh-Hans/installation" icon="apple">
    从 App Store 获取 Nomo。
  </Card>

  <Card title="更新内容" href="/zh-Hans/changelog" icon="clock-rotate-left">
    最近的版本。
  </Card>
</CardGroup>
