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

faces-cli

v1.21.11

Published

CLI for Faces: compile causal models from source texts, and get their causes

Readme

Faces CLI

Command-line interface for Faces. Faces are causal models: compile one from an author's source texts, and when prompted it returns a cause, the principal why behind that author's response in context. Get the cause alone, or let it steer any supported model through the chat and decision wrappers.

Installation

npm install -g @faces-sh/cli

Requires Node.js >= 18. Formerly published as faces-cli.

Quick start

# Register or log in: you will be asked for your password
faces auth:register --email [email protected] --username you
faces auth:login --email [email protected]

# Create a face
faces face:create --name "Alice" --alias alice --default-model gpt-5.4-mini \
  --attr gender=woman --attr age=29 --attr occupation="Works as a product designer."

# Add source texts and compile: her own writing as a document, an interview as a thread
faces compile:doc alice --file essay.txt --medium essay
faces compile:upload alice --file interview.txt --kind thread --face-speaker Alice

# The cause alone
faces causes alice -m "Should I take the offer?"

# Chat: the face's cause steers the model's answer
faces chat:chat alice -m "What matters most to you?"
faces chat:chat alice -m "Tell me more" --llm claude-sonnet-4-6 --show-cause

# Decide: typed answers, with a cause per question
faces decide alice --state "A colleague asks you to sign a proposal you have not read." \
  --question "Does the speaker sign?"

# Compare and compose
faces face:diff --face alice --face bob
faces face:create --name "Alice-Bob" --alias alice-bob --formula "alice | bob"

Commands

faces auth:login / logout / register / whoami / refresh
faces auth:connect / disconnect / connections

faces face:create / list / get / edit / delete / stats / attributes / sources
faces face:diff / neighbors / lock / unlock / publish / unpublish / share / unshare / groups
faces face:avatar:list / get / make / upload / delete
faces face:tag:add / list / remove / set / all

faces causes                      # a face's cause alone
faces chat:chat / messages / responses / thread
faces decide                      # what a face would decide: yes/no, a choice, or a score
faces session:create / get / compact / close

faces compile:doc / compile:doc:create / list / get / edit / make / pause / reset / delete
faces compile:thread:create / list / get / edit / message / replace / make / pause / reset / delete
faces compile:upload / import / all / status / stats

faces style:upload / make / status / versions / revert / delete

faces models:list                 # the models you can name; --kind takes a list, or all
faces benchmark:start / get / list
faces fidelity:start / turn / pick / get / run / save-thread

faces group:create / list / get / edit / delete / members / add / remove
faces group:tag:add / list / remove / set
faces user:get / follow / unfollow / followers / following

faces catalog:list / doctor / backup / restore

faces keys:create / list / revoke / update

faces billing:balance / usage / llm-costs / topup / cards / card-setup / card:default / card:remove
faces billing:subscription / subscription:activate / subscription:plan / subscription:cancel

faces account:state / preferences

faces config:set / show / clear

Run faces <command> --help for details on any command. Every command takes --json, and --toon for a more compact encoding of the same data.

Documents and threads

A document is the face's own writing: an essay, a letter, a paper, a book, a poem. Every word in it is read as the face's. Writing about the face by someone else can also be a document, with --perspective third-person.

An interview, transcript, dialogue or any other exchange between speakers is a thread. Upload it with --kind thread and --face-speaker naming the face, so only the face's turns are used:

faces compile:upload alice --file interview.txt --kind thread --face-speaker Alice
faces compile:upload alice --file podcast.mp3 --kind thread --face-speaker A

A labelled dialogue uploaded as a document is read as entirely the face's own words, other speakers included. The document commands warn when a text file reads as a transcript.

Styles

A style is built from a face's own writing in one medium, and applied on chat with --style:

faces style:make alice --all
faces chat:chat alice -m "Reply to the note below." --style email

--medium says what the reply is without applying a built style. A style adds roughly 2,000 to 3,500 input tokens per request.

A build runs at no charge on Connect or Pro with a linked ChatGPT account. Anywhere else it is charged to credits at the build model's listed price, so style:make needs --allow-paid.

Sessions

A session groups the turns of one conversation with one face. Compacting it returns a summary under a compaction id, which a later request reads in place of the history you no longer send.

faces session:create alice
faces chat:chat alice -m "Should I take the offer?" --session fs_SESSION_ID
faces session:compact fs_SESSION_ID
faces chat:chat alice -m "So what do I tell them tomorrow?" --compaction fcmp_COMPACTION_ID

Authentication

Login stores a JWT at ~/.faces/config.json. You can also authenticate with environment variables:

export FACES_API_KEY=sk-faces-...
export FACES_TOKEN=your_jwt
export FACES_BASE_URL=https://api.faces.sh   # optional override

Plans

  • Free: a $5 activation, added as credits. Everything is paid as it goes, from credits.
  • Connect ($17/month) and Pro ($49/month): monthly compile and cause allowances. Link a ChatGPT account with faces auth:connect openai, and models that run on a linked ChatGPT plan (faces models:list --chatgpt) run there at /v1/responses. The cause is still billed, from the allowance and then credits.

Answering models are charged at the model's listed price plus 5%. Current prices: faces models:list and faces billing:llm-costs.

License

MIT. Copyright (c) 2026 Headwaters Lab Inc.