npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@trychert/facetime-opensource

v0.1.2

Published

Connect your LiveKit agent to a supervised FaceTime browser guest.

Readme

Chert FaceTime Opensource lets any builder put their AI agent on a live FaceTime call with a simple CLI/SDK. You own the agent's code, personality, voice, model, and avatar, and run it locally or deploy it yourself through services such as LiveKit. The connector runs on your computer and carries audio and video between FaceTime and a LiveKit room. It starts the connection without requiring you to build or host your agent through Chert.

[!NOTE] For managed outbound calling, incoming call monitoring and acceptance, and media bridging through an API, use Chert's managed FaceTime service.

Demo

Watch a LiveKit agent connect to FaceTime through the Chert CLI.

https://github.com/user-attachments/assets/c9d4b252-2afd-4a8e-8a5b-5681e422c918

How to use

Before you start: you need Node.js 22.22+, Google Chrome, a running LiveKit agent, and an iPhone to create a FaceTime link and admit the browser guest. For video, your agent must publish a video track as well as audio. Keep your computer running during the call.

The intended flow is:

  1. Run or deploy your own LiveKit agent.
  2. Have that agent join a LiveKit room.
  3. Give the connector access to the same room and identify the agent participant.
  4. Join the FaceTime link in Chrome and admit the browser guest on your iPhone.
  5. Talk to your agent through FaceTime.

Your model keys stay with your agent. The connector only needs a short-lived room token. You do not need our optional starter agent or its OpenAI setup to bring your own.

CLI: run it from your terminal

npx @trychert/facetime-opensource

Enter these details when prompted:

LiveKit server URL: wss://your-project.livekit.cloud
Room token: [hidden]
Agent participant identity: your-agent
FaceTime link: [hidden]

The token must allow joining, publishing, and subscribing to the agent's room, expire within one hour, and use a different participant identity from the agent. Use the agent's exact room participant identity, not its deployment name.

Chrome opens automatically. Click Join, admit the guest on your iPhone, then press Enter in the terminal to connect LiveKit. Press Enter, Ctrl+C, or Stop test to stop the connector. Your independently hosted agent's lifecycle stays under your control.

SDK: use it in your code

npm install @trychert/facetime-opensource

In a Node.js .mjs file, load the connection details from your private environment configuration:

import { FaceTimeGuest } from '@trychert/facetime-opensource';
import { createInterface } from 'node:readline/promises';

const terminal = createInterface({ input: process.stdin, output: process.stdout });
let guest;
try {
  guest = await FaceTimeGuest.open({
    faceTimeLink: process.env.FACETIME_LINK,
    livekitUrl: process.env.LIVEKIT_URL,
    roomToken: process.env.LIVEKIT_ROOM_TOKEN,
    agentIdentity: 'your-agent',
  });
  await terminal.question('Join in Chrome and admit on your iPhone, then press Enter.');
  await guest.connect();
  terminal.close();
  await guest.closed; // Click Stop test in Chrome when finished.
} finally {
  terminal.close();
  await guest?.close();
}

The SDK opens Chrome on your computer. Call connect() after admission and close() to stop. Keep real tokens and FaceTime links out of committed code. Installing the package alone does not start the connector or your agent.

How this works

The connector has four core files:

| File | Simple explanation | | --- | --- | | src/sdk.mjs | Starts and stops the browser setup. Opens the FaceTime tab and local connector tab. | | src/media.mjs | Supplies the agent's video and speech instead of your webcam and microphone, and receives the caller's audio. | | src/hop.mjs | Connects the two tabs. Carries media between them because FaceTime blocks direct LiveKit connections. | | src/livekit.mjs | Connects to the agent's room. Sends caller audio into LiveKit and receives the agent's speech and video. |

Your voice travels from FaceTime through the connector to your agent's LiveKit room. The agent's speech and video travel back along the same path. The CLI is a terminal interface to this same SDK. Your agent runs separately.

Status: experimental, with a successful live conversation on the tested Mac. The updated local CLI passed a supervised FaceTime call with agent audio and video, alongside offline SDK and media checks. Longer-call reliability, other platforms, and other agents remain unverified. This is an unofficial project, not an Apple-supported integration.

See the detailed guide for the optional starter agent, configuration, tests, and development background. Licensed under Apache-2.0.


Built by Chert Technologies Inc.