The problem
A new user installs praxis, runs praxis login, sees a clean success message,
and thinks setup is done.
It isn't. Half the toolchain is missing, and nothing says so.
brew install --cask Facets-cloud/tap/praxis
│
▼
praxis login ── browser flow, user clicks "Create Key"
│
├──▶ API key -> ~/.praxis/credentials
├──▶ installs the praxis-* skills
└──▶ writes ~/.praxis/mcp-tools.json
│
▼
"✓ Logged in" ← looks finished
raptor?
│
▼
not installed. not mentioned. not logged in.
Why it matters
raptor is where the Facets control plane lives — projects, resources,
environments, releases, cloud accounts. Of the shell commands in our seeded
skills, 450 are raptor.
So a user who installs praxis and stops there cannot do most of the real work.
The skills we just installed for them will tell them to run raptor ..., and
the command won't exist.
Two tools, two logins, two credential files
|
praxis |
raptor |
| install |
brew install --cask Facets-cloud/tap/praxis |
nothing tells you |
| login |
praxis login |
raptor login |
| creds |
~/.praxis/credentials |
~/.facets/credentials |
| who does it |
praxis, for you |
you, by hand |
raptor also has no Homebrew formula or cask (checked Facets-cloud/homebrew-tap
— only Casks/praxis.rb exists). Installing it is a manual download:
curl -LO https://github.com/Facets-cloud/raptor-releases/releases/latest/download/raptor-darwin-arm64
chmod +x raptor-darwin-arm64
sudo mv raptor-darwin-arm64 /usr/local/bin/raptor
So praxis is one command and raptor is four, one of which needs sudo.
What praxis does today
It does track whether raptor is on PATH and whether it is out of date.
praxis status --json reports it. If raptor is stale, praxis nudges the user to
run raptor upgrade — and never runs it for them. That part is good.
It does not say anything when raptor is missing entirely.
In cmd/update_check.go:112-118, if raptor is not installed then checkable is
false, so the check short-circuits and returns quietly. The installed: false
flag lands in the JSON and is never printed for a human.
cur, installed, checkable := spec.current()
f := Freshness{Tool: spec.Name, Installed: installed, Current: cur}
if os.Getenv("PRAXIS_NO_UPDATE_CHECK") != "" || !checkable {
return f // <- raptor absent exits here, silently
}
The only place this is mentioned
Two skills mention it, and both punt:
internal/skillinstall/embedded/praxis-onboarding/SKILL.md:36
"Installed? command -v raptor — if missing, ask the user to install it"
- the
praxis meta-skill preflight says the same thing
The AI is told to ask the user to install raptor. The user is never told how.
There is no brew install raptor, no download URL, and no install docs anywhere
in this repo.
AI: "please install raptor"
User: "ok, how?"
AI: nothing in any skill or command answers this
The gap
praxis login reports success while the toolchain is half-installed.
- Nothing tells the user how to install raptor.
- Nothing prompts for
raptor login, so the second auth step is invisible too.
Suggested fix
At the end of praxis login and praxis refresh-skills, check for raptor. If it
is missing or not logged in, print the next steps. This can sit right where the
freshness notice already runs (cmd/login_setup.go:261), which already knows
whether raptor is installed.
Rough shape:
✓ Logged in to profile "acme".
⚠ raptor is not installed. Facets projects, resources and releases need it.
Install:
curl -LO https://github.com/Facets-cloud/raptor-releases/releases/latest/download/raptor-darwin-arm64
chmod +x raptor-darwin-arm64 && sudo mv raptor-darwin-arm64 /usr/local/bin/raptor
Then:
raptor login
And when raptor is installed but raptor whoami fails, print just the
raptor login line.
Open questions for whoever picks this up:
- Should praxis offer to install raptor, or only tell the user how? Current
guidance in the skills is deliberately "never install it yourself", so telling
is probably right.
- Should raptor get a Homebrew cask like praxis has? That would make the message
one line instead of three, and is arguably the better fix.
- Should
praxis status show raptor as "not installed" instead of staying quiet?
🤖 Filed with Claude Code
The problem
A new user installs praxis, runs
praxis login, sees a clean success message,and thinks setup is done.
It isn't. Half the toolchain is missing, and nothing says so.
Why it matters
raptor is where the Facets control plane lives — projects, resources,
environments, releases, cloud accounts. Of the shell commands in our seeded
skills, 450 are raptor.
So a user who installs praxis and stops there cannot do most of the real work.
The skills we just installed for them will tell them to run
raptor ..., andthe command won't exist.
Two tools, two logins, two credential files
brew install --cask Facets-cloud/tap/praxispraxis loginraptor login~/.praxis/credentials~/.facets/credentialsraptor also has no Homebrew formula or cask (checked
Facets-cloud/homebrew-tap— only
Casks/praxis.rbexists). Installing it is a manual download:So praxis is one command and raptor is four, one of which needs sudo.
What praxis does today
It does track whether raptor is on PATH and whether it is out of date.
praxis status --jsonreports it. If raptor is stale, praxis nudges the user torun
raptor upgrade— and never runs it for them. That part is good.It does not say anything when raptor is missing entirely.
In
cmd/update_check.go:112-118, if raptor is not installed thencheckableisfalse, so the check short-circuits and returns quietly. The
installed: falseflag lands in the JSON and is never printed for a human.
The only place this is mentioned
Two skills mention it, and both punt:
internal/skillinstall/embedded/praxis-onboarding/SKILL.md:36"Installed?
command -v raptor— if missing, ask the user to install it"praxismeta-skill preflight says the same thingThe AI is told to ask the user to install raptor. The user is never told how.
There is no
brew install raptor, no download URL, and no install docs anywherein this repo.
The gap
praxis loginreports success while the toolchain is half-installed.raptor login, so the second auth step is invisible too.Suggested fix
At the end of
praxis loginandpraxis refresh-skills, check for raptor. If itis missing or not logged in, print the next steps. This can sit right where the
freshness notice already runs (
cmd/login_setup.go:261), which already knowswhether raptor is installed.
Rough shape:
And when raptor is installed but
raptor whoamifails, print just theraptor loginline.Open questions for whoever picks this up:
guidance in the skills is deliberately "never install it yourself", so telling
is probably right.
one line instead of three, and is arguably the better fix.
praxis statusshow raptor as "not installed" instead of staying quiet?🤖 Filed with Claude Code