Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
433 commits
Select commit Hold shift + click to select a range
31b9891
Merge branch 'kriskowal-llm-form' into llm
kriskowal Feb 26, 2026
ef92c83
Merge remote-tracking branch 'origin/llm' into llm
kriskowal Feb 26, 2026
35583c3
WIP reply chain views
kriskowal Feb 27, 2026
69882c8
WIP agent reply chain transcripts
kriskowal Feb 27, 2026
d8b959a
feat(chat): Space color scheme selection
kriskowal Feb 27, 2026
fd15af4
Lint with probable regressions on type specifity to check later
kriskowal Feb 27, 2026
d4b2846
Merge branch 'kriskowal-llm-darkmode' into llm
kriskowal Feb 27, 2026
179e82c
fix(daemon): correctly entwine remote formula fate to peer + fix cleanup
kumavis Feb 26, 2026
29e104d
fix(daemon,chat): tcp-netstring network rework creation + fix cleanup
kumavis Feb 27, 2026
aca9616
fix(daemon): libp2p network uses dht + handles restart
kumavis Feb 27, 2026
9b38ccf
chore: format
kumavis Feb 27, 2026
1ac76d7
chore(chat): remove dead files
kumavis Feb 27, 2026
815e2e7
feat(chat): after submitting message/command show as inflight until done
kumavis Feb 27, 2026
99da0ab
doc(daemon): update multiplayer instructions
kumavis Feb 27, 2026
ec4d528
Some basic cleanup
danfinlay Feb 27, 2026
9276dbf
Libp2p cross-internet connectivity (#3106)
kumavis Feb 27, 2026
b59228a
feat(daemon,chat): Preliminary support for form submission
kriskowal Feb 28, 2026
0ee0cbb
Update design doc dates
kriskowal Feb 28, 2026
b687f0b
Merge branch 'kriskowal-llm-form' into llm
kriskowal Feb 28, 2026
a267f6b
Update design doc for form requests
kriskowal Feb 28, 2026
112c030
Merge branch 'kriskowal-lal-reply-chains' into llm
kriskowal Feb 28, 2026
9aafa0c
Update design docs for Lal reply chains
kriskowal Feb 28, 2026
9fe7950
Merge branch 'kriskowal-llm-reply-chains' into llm
kriskowal Feb 28, 2026
8d3a79f
Update docs to reflect progress on reply visualization
kriskowal Feb 28, 2026
ecccf5a
Measures to force cleanup of sockets from prior daemon runs
kriskowal Mar 1, 2026
b0fa114
Some rudimentary channels and pet names workign
danfinlay Mar 1, 2026
dcd4832
Fix up own pet namingÆ
danfinlay Mar 2, 2026
81a8f09
Improve outstanding invitation management UX
danfinlay Mar 2, 2026
f8968d6
Remove antiquated chat extraction plan
kriskowal Mar 2, 2026
f4d1896
Remove makeshift gateway from Chat dev mode
kriskowal Mar 2, 2026
4f1261e
Progress on form result visualization
kriskowal Mar 2, 2026
1fbbd3e
Fixes for daemon gateway lifecycle
kriskowal Mar 2, 2026
9efccf7
Inline Monaco now that we don't need lockdown to use CapTP
kriskowal Mar 2, 2026
8d22d60
Merge branch 'kriskowal-llm-cursor' into llm
kriskowal Mar 2, 2026
dabdbe0
Migrate chat to use explicit @endo/harden
kriskowal Mar 2, 2026
3a5d99b
Shim HardenedPromise in Chat (since no longer locking down)
kriskowal Mar 2, 2026
3bbcb65
Format
kriskowal Mar 2, 2026
ed40bfd
Membership revoking working about
danfinlay Mar 2, 2026
22e3fc6
Fix re enabling invitations
danfinlay Mar 2, 2026
8d04738
Transitive revocation working
danfinlay Mar 2, 2026
1243e14
Fix user management window width
danfinlay Mar 2, 2026
e0fc505
Cooldown moderation logic working
danfinlay Mar 2, 2026
b6e30be
Fixes for form workflow in daemon and chat
kriskowal Mar 2, 2026
89c5f9f
Merge origin/llm: incorporate inflight submission UI and libp2p netwo…
kriskowal Mar 2, 2026
3b03159
Update chat designs
kriskowal Mar 2, 2026
d435ece
Configurable root space
kriskowal Mar 2, 2026
7417c92
Design for value message
kriskowal Mar 2, 2026
7f5671c
Fix space numbering
kriskowal Mar 2, 2026
ccaf73d
Update design for form generation and submission
kriskowal Mar 3, 2026
4e96b80
Add plan for form-based fae/lal AI agent provisioning
kriskowal Mar 3, 2026
adc02b6
Progress on forms
kriskowal Mar 3, 2026
0e7728f
Update designs for AI agent guest creation form
kriskowal Mar 3, 2026
c69c9d7
Merge branch 'endo-lal-form' into llm
kriskowal Mar 3, 2026
aaad426
Low-attendance project management iteration
kriskowal Mar 3, 2026
4de9360
Add design for bundling AI agents
kriskowal Mar 3, 2026
ee535f5
Update roadmap
kriskowal Mar 3, 2026
cdcb7ae
Auto-provisioning AI agents
kriskowal Mar 3, 2026
c1aa650
Merge remote-tracking branch 'origin/llm' into llm
kriskowal Mar 3, 2026
c3425ba
Add endoclaw assessment
kriskowal Mar 3, 2026
259c28b
message rate cooldown ux
danfinlay Mar 3, 2026
66eddf8
Merge branch 'llm' into danfinlay-channels
danfinlay Mar 3, 2026
5044dbf
Merge branch 'danfinlay-channels' into llm
danfinlay Mar 3, 2026
c4b0dff
Integrate color schemes into chat space
danfinlay Mar 3, 2026
4ff1258
Fix spaces keyboard shortcuts
danfinlay Mar 3, 2026
66a48c4
Fix channel joining
danfinlay Mar 3, 2026
ee0bfc8
Designs for EndoClaw
kriskowal Mar 3, 2026
140e813
Merge remote-tracking branch 'origin/llm' into endo-lal-form
kriskowal Mar 3, 2026
0247f19
feat(daemon): improve libp2p logging
kumavis Mar 3, 2026
7f00375
Go supervisor for daemon
kriskowal Mar 3, 2026
ce6cc6b
Finish implementation of sendValue for value messages
kriskowal Mar 3, 2026
b4cd4eb
Merge remote-tracking branch 'origin/llm' into endo-lal-form
kriskowal Mar 3, 2026
a2ec923
Update progress on value messages
kriskowal Mar 4, 2026
b6286fb
Add designs for minor fixes to chat command vocabulary
kriskowal Mar 4, 2026
2499b7d
Note best practices in development for daemon, fae, and lal in CLAUDE…
kriskowal Mar 4, 2026
3e06500
Increase Chat dev server adaptability to lost gateway, daemon, and purge
kriskowal Mar 4, 2026
e9a3bb9
Merge remote-tracking branch 'origin/llm' into llm
kriskowal Mar 4, 2026
e26eb3b
Update for localhttp design
kriskowal Mar 4, 2026
25d60e8
Yank out current draft of reply chain visualization
kriskowal Mar 4, 2026
f60b3ca
designs/endoclaw: fmt
jcorbin Mar 4, 2026
3dd4586
designs/endoclaw: umm actually homeass
jcorbin Mar 4, 2026
abed2d2
designs/endoclaw: voice and media
jcorbin Mar 4, 2026
bca6fcb
designs/endoclaw: comparative notes
jcorbin Mar 4, 2026
b74f7bc
Merge remote-tracking branch 'origin/llm' into endo-lal-form
kriskowal Mar 5, 2026
7c15a47
Mark familiar app bundling as already completed
Mar 5, 2026
9c45048
Merge remote-tracking branch 'origin/llm' into kriskowal-llm-engo
kriskowal Mar 5, 2026
7592a18
Progress on focus message concept
kriskowal Mar 5, 2026
015de88
More sophisticated choice of indentation of messages, in preparation …
kriskowal Mar 5, 2026
b401a31
Design transcript tree durability
kriskowal Mar 5, 2026
d3e1f56
Add a threads design
danfinlay Mar 5, 2026
f200144
Update progress on form provisioning
kriskowal Mar 5, 2026
8fe17b1
Reimplement visualization of reply chains
kriskowal Mar 5, 2026
5f51b16
Merge remote-tracking branch 'origin/llm' into llm
kriskowal Mar 5, 2026
dc0da2b
Merge remote-tracking branch 'origin/llm' into endo-lal-form
kriskowal Mar 5, 2026
b182540
Merge remote-tracking branch 'origin/llm' into kriskowal-llm-engo
kriskowal Mar 5, 2026
9a03b1b
Bundle lal and fae in Familiar
kriskowal Mar 5, 2026
71f6ddc
Merge
kriskowal Mar 5, 2026
7e5faf5
Merge
kriskowal Mar 5, 2026
4449001
Refactor channel to reuse normal message object
danfinlay Mar 5, 2026
fd06525
Merge branch 'danfinlay-threads' into llm
danfinlay Mar 5, 2026
3c73475
Improve channel self naming
danfinlay Mar 5, 2026
d503744
Format
kriskowal Mar 5, 2026
2835a4f
Gateway remote access configuration (#3116)
kumavis Mar 5, 2026
231b624
Lint fixes
kriskowal Mar 5, 2026
78b5519
Merge remote-tracking branch 'origin/llm' into llm
kriskowal Mar 5, 2026
560a225
Get Agent interface implemented in Channel space
danfinlay Mar 6, 2026
d1ab30d
Allow channel spaces to use connection hints for connections
danfinlay Mar 6, 2026
7667307
familiar: start a bare readme dev survival guide
jcorbin Mar 6, 2026
60cb17f
familiar: unify vitePort declaration
jcorbin Mar 6, 2026
51e0d7d
Resolved merge conflicts
danfinlay Mar 6, 2026
841febb
Merge branch 'llm2' into llm
danfinlay Mar 6, 2026
727e7b4
Improve invitee pet naming
danfinlay Mar 6, 2026
efc4eb5
Fix indication of joining channel failure
danfinlay Mar 6, 2026
36e46f0
Update progress on bundling agents in Familiar
kriskowal Mar 6, 2026
996eddc
Merge remote-tracking branch 'origin/master' into llm
kriskowal Mar 6, 2026
3af01ac
Merge remote-tracking branch 'origin/llm' into llm
kriskowal Mar 6, 2026
05e1099
Merge remote-tracking branch 'origin/llm' into kriskowal-llm-engo
kriskowal Mar 6, 2026
429edc1
Close milestone 0 in designs
kriskowal Mar 6, 2026
fba28db
Prioritize weblet milestone
kriskowal Mar 6, 2026
368a0b9
Merge remote-tracking branch 'origin/llm' into llm
kriskowal Mar 6, 2026
f424a5c
Basic reply thread awareness in channel spaces
danfinlay Mar 6, 2026
2a290e9
Thread view activated
danfinlay Mar 6, 2026
47df9c2
Formula collection disable option (#3119)
kumavis Mar 7, 2026
66a945d
Upgrade Electron, obviate Electron Forge
kriskowal Mar 7, 2026
543c282
Merge remote-tracking branch 'origin/llm' into llm
kriskowal Mar 7, 2026
069d5ec
Progress on gateway auth noted and rate limiting added
kriskowal Mar 7, 2026
e5da4ac
Design CRDT peer retention roots
kriskowal Mar 7, 2026
04275f0
Merge
kriskowal Mar 7, 2026
302fd02
Work toward synced pet store
kriskowal Mar 10, 2026
355fc7f
Fix lal mutable messages
kriskowal Mar 10, 2026
8b8f40d
Fae sub-agent resumption (#3120)
kumavis Mar 10, 2026
5bdaf7c
Merge remote-tracking branch 'origin/llm' into llm
kriskowal Mar 10, 2026
e1a5cda
feat(whylip): whylip interactive storybook
kumavis Mar 11, 2026
c547680
feat(daemon): improve debug logging
kumavis Mar 11, 2026
588dfa3
feat(daemon): daemon --feral-errors debug flag
kumavis Mar 11, 2026
2d3ac9a
feat(fae): fae driver
kumavis Mar 11, 2026
9c4dc14
feat(inventory-graph): endo chat inventory graph
kumavis Mar 11, 2026
0111541
fix(daemon): add missing functions for least-authority guest
kumavis Mar 11, 2026
f7a2a47
chore(daemon): minor cleanups
jcorbin Mar 10, 2026
098ab83
refine(daemon): refine some auto-gened docs
jcorbin Mar 10, 2026
32cc25f
chore(daemon): clarify and flip gcEnabled
jcorbin Mar 10, 2026
1a64130
chore(daemon/cidr): rework allow rule compilation
jcorbin Mar 9, 2026
56095e9
chore(daemon/mail): factor out envelopeRecord
jcorbin Mar 6, 2026
b4cb63b
refine(fae): improve discoverTools
jcorbin Mar 4, 2026
b1d4dbd
chore(daemon): minor changes to DEBUGGING.md
jcorbin Mar 11, 2026
b7e9b74
feat(cli): make `endo where` command just show all
jcorbin Mar 9, 2026
7faf5e0
chore(daemon): cleanups around start
jcorbin Mar 10, 2026
552cf2b
feat(daemon,cli): add foreground start option
jcorbin Mar 9, 2026
a8f2829
daemon/DEBUGGING: mention feral foreground
jcorbin Mar 11, 2026
5165e70
Improve threading
danfinlay Mar 11, 2026
684c522
Merge branch 'llm' into danfinlay-channel-threads
danfinlay Mar 11, 2026
63dc958
Some lightly reviewed lint and test fixes
kriskowal Mar 11, 2026
dfc713b
Adoption tools
kriskowal Mar 11, 2026
861de9b
Merge remote-tracking branch 'origin/kriskowal-llm-synced-pet-store' …
kriskowal Mar 11, 2026
facaf15
chore(lal): cleanup ollama tool call mangling
jcorbin Mar 6, 2026
e14904a
chore(daemon): dedupe purge terminate call
jcorbin Mar 12, 2026
fa9cb0f
refine(daemon): factor out politeEndProcess
Mar 9, 2026
70d1ab2
chore(daemon-node): minor operational fixes
jcorbin Mar 9, 2026
8d9cf68
doc(daemon): move + fix multiplayer instructions
kumavis Mar 13, 2026
eef2339
feat(chat): space for network view
kumavis Mar 13, 2026
ba3ce34
feat: daemon ws relay-server
kumavis Mar 13, 2026
48be234
doc(relay-server): fix instructions
kumavis Mar 13, 2026
bad512c
Merge branch 'llm' into danfinlay-channel-threads
danfinlay Mar 13, 2026
283085f
Merge remote-tracking branch 'origin/llm' into llm
kriskowal Mar 13, 2026
3dd48e7
Merge remote-tracking branch 'origin/llm' into llm
kriskowal Mar 13, 2026
77871fc
feat(genie): package for claw constituency
jcorbin Mar 3, 2026
30ee51e
plan(genie): sketch a plan from the raw design doc
Mar 3, 2026
bb9338b
refine(genie): init system prompt builder
Mar 3, 2026
ffc56f0
Some missing packaging
kriskowal Mar 13, 2026
017bf05
Merge remote-tracking branch 'origin/llm' into llm
kriskowal Mar 13, 2026
60a63bc
Designs update
kriskowal Mar 13, 2026
134533a
Test fixes daemon
kriskowal Mar 13, 2026
ba285b1
Profound change in pet name and special name domains to facilitate fi…
kriskowal Mar 9, 2026
39240f6
fixup: format + additional @-prefix renames in HEAD-only code
kriskowal Mar 14, 2026
78c2ff5
Get ws networking working for channels
danfinlay Mar 14, 2026
f689d64
Merge branch 'llm' into ws-network-debug
danfinlay Mar 14, 2026
9d042c0
Basic type 2 chat threading implemented
danfinlay Mar 14, 2026
658ef66
Fix navigation upon editing a space
danfinlay Mar 14, 2026
658fbd2
Begin pulling normal agent commands into channels
danfinlay Mar 14, 2026
437e43a
Fix base chat actions within channels
danfinlay Mar 14, 2026
a665de4
cleanup(daemon): autofmt churn and unused import
jcorbin Mar 16, 2026
d4a3a05
chore(daemon): rework startEngo => runEngo
jcorbin Mar 16, 2026
1c8c56f
chore(daemon): factor runEndo out of start
jcorbin Mar 16, 2026
6200a4c
feat(cli,daemon): add `endo status` command
jcorbin Mar 16, 2026
a8f9193
feat(cli,daemon): separate `endo run-daemon`
jcorbin Mar 16, 2026
3447c9e
fixup! chore(daemon): factor runEndo out of start
jcorbin Mar 16, 2026
d3fbbd9
fixup! chore(daemon): factor runEndo out of start
jcorbin Mar 16, 2026
5509447
cleanup(docs/get-started): fix minor typos
jcorbin Mar 16, 2026
e90a8af
docs(daemon-lore): some jargon notes from chat
jcorbin Mar 11, 2026
bb24032
feat(daemon): filter ambient env passing
jcorbin Mar 16, 2026
aa1a8f6
Transition from identifiers to locators
Mar 17, 2026
b2d86f8
feat(cli): normalize external termination
jcorbin Mar 17, 2026
1c9447c
feat(daemon): show running workers in status
jcorbin Mar 17, 2026
bdf0b56
feat(demo): start an actual concrete demo module
jcorbin Mar 16, 2026
7ed2116
Daemon: local node is null internally
Mar 17, 2026
0e8d538
Merge remote-tracking branch 'origin/llm' into llm
kriskowal Mar 17, 2026
77d1eef
Chat: renames the dismiss-all command to clear
kriskowal Mar 17, 2026
5bb4770
Add a locate command to Chat
kriskowal Mar 17, 2026
0756bc2
Evolve the timer design
kriskowal Mar 18, 2026
d3357e4
Merge
kriskowal Mar 18, 2026
45d8e2e
Merge branch 'kriskowal-llm-petname-refactor' into llm
kriskowal Mar 18, 2026
3d64046
Bug fixes from locator/id drift
kriskowal Mar 18, 2026
d6ccde5
Add design for zip/fs checkin/checkout
kriskowal Mar 18, 2026
bcb6c37
Virtual file system naming. @-prefix for specials.
kriskowal Mar 18, 2026
9533bae
add more idiomatic invitation flow
danfinlay Mar 18, 2026
bccee28
Networks for each agent
Mar 18, 2026
5ab5e48
Merge
kriskowal Mar 18, 2026
58903ef
Merge
kriskowal Mar 18, 2026
bf82ee4
Conslidate internalize/externalize locator behaviors
kriskowal Mar 18, 2026
f1d88c7
Add design doc for endo locators
kriskowal Mar 18, 2026
c818296
Design notes about assembling exos from banks of methods
kriskowal Mar 18, 2026
3124035
Merge branch 'llm' of ssh://github.com/endojs/endo into llm
kriskowal Mar 18, 2026
1a606d4
Add dm and mentions to channel spaces
danfinlay Mar 18, 2026
6c8371e
Merge remote-tracking branch 'origin/llm' into add-dm-to-channels
danfinlay Mar 18, 2026
3d36031
evolve(designs/endoclaw-timer): interval > cron
jcorbin Mar 4, 2026
4b55df6
fix(lal): use @agent and catchup the setup script
Mar 19, 2026
b1074da
revise(design/sandbox) expand technique mentions
jcorbin Mar 13, 2026
cf91962
feat(cli): group command help by topic
jcorbin Mar 19, 2026
9f216f0
enhance(daemon-lore): clarify 'what is a capability'
jcorbin Mar 19, 2026
eb22d78
Moving generally toward a working lal agent
kriskowal Mar 20, 2026
25bfc50
Merge remote-tracking branch 'origin/llm' into llm
kriskowal Mar 20, 2026
e0dda06
Add @endo/platform package with filesystem types and adapters
kriskowal Mar 20, 2026
d767012
Add design for platform-fs
kriskowal Mar 20, 2026
0d6e702
Daemon: add readable-tree formula type
kriskowal Mar 20, 2026
d60ba38
CLI: add checkin and checkout commands
kriskowal Mar 20, 2026
1bc6504
Tests for readable-tree formula
kriskowal Mar 20, 2026
910868e
Work on messages, particularly secret form fields
kriskowal Mar 21, 2026
67f0fae
Merge branch 'kriskowal-llm-fs' of endolin:rigs/endo into llm
kriskowal Mar 21, 2026
44743a2
refactor(powers): rename --powers flags from AGENT/HOST to @agent
kriskowal Mar 21, 2026
02d11a4
feat(chat,daemon): secret form fields, simplified definitions, value …
kriskowal Mar 21, 2026
4284a37
fix(daemon): add sha256 to ReadableTreeInterface Exo guard
kriskowal Mar 21, 2026
ed234c6
feat(chat): add checkin and checkout commands
kriskowal Mar 21, 2026
f8d9af3
enhance(lal): instruct agent to prefer direct tools over evaluate
kriskowal Mar 21, 2026
0a2b49d
test(chat): tests for checkin/checkout commands and browser tree
kriskowal Mar 21, 2026
ce26032
fix(cli): add checkin and checkout to Storage help group
kriskowal Mar 21, 2026
6b49b03
refactor(cli): rename dismiss-all command to clear
kriskowal Mar 21, 2026
21fdf2c
feat(cli,chat): add mount and scratch commands
kriskowal Mar 21, 2026
8261ee1
fix(captp): use __getMethodNames__ instead of duck-typing for tree/bl…
kriskowal Mar 21, 2026
e22f713
Filesystem mount formulas
kriskowal Mar 21, 2026
9678499
Merge remote-tracking branch 'endolin/kriskowal-llm-fs' into llm
kriskowal Mar 21, 2026
e68df41
Claude notes
kriskowal Mar 22, 2026
5c7e385
Design intent to remove eval-proposal messaging
kriskowal Mar 22, 2026
2691e7d
Add design for view and edit
kriskowal Mar 22, 2026
48ab98e
fix(daemon): forward ENDO_* env vars to forked daemon process
kumavis Mar 22, 2026
0456368
fix(daemon): don't hang on startup when APPS gateway fails
kumavis Mar 22, 2026
4f01e0b
fix(daemon): await server.listen in web-server make() so port errors …
kumavis Mar 22, 2026
edb098f
feat(fae): add Endo daemon CLI skill for Claude Code
danfinlay Mar 23, 2026
ae2b074
Blob view and edit
kriskowal Mar 24, 2026
9f1dca9
chore: Update yarn.lock
kriskowal Mar 24, 2026
803fcd2
Merge remote-tracking branch 'origin/llm' into llm
kriskowal Mar 24, 2026
a294523
Rename scratch commands to mktmp
kriskowal Mar 24, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
50 changes: 50 additions & 0 deletions .claude/skills/endo/skill.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
---
name: endo
description: Interact with the running Endo daemon — inspect agent inboxes, read/post to channels, list names, send messages to agents. Use when debugging agent behavior, checking channel state, or testing agent interactions.
allowed-tools: Bash(node packages/fae/endo-skill.js *)
argument-hint: <command> [args...]
---

# Endo Daemon Skill

Connects to the running Endo daemon via CapTP to inspect and interact with agents, channels, and the inbox. The script lives at `packages/fae/endo-skill.js` — run from the monorepo root.

## Commands

```bash
# Pet name directory
node packages/fae/endo-skill.js names # List all HOST pet names
node packages/fae/endo-skill.js names <agent-profile> # List an agent's pet names
node packages/fae/endo-skill.js lookup <name> # Inspect a value (show methods)

# Inbox
node packages/fae/endo-skill.js inbox # List HOST inbox
node packages/fae/endo-skill.js agent-inbox <profile> [N] # List agent's last N inbox messages
node packages/fae/endo-skill.js read-message <number> # Full message JSON

# Messaging
node packages/fae/endo-skill.js send <to> <text> # Send from HOST
node packages/fae/endo-skill.js agent-send <agent> <text> # Send to an agent

# Channels
node packages/fae/endo-skill.js channel-messages <name> [N] # Last N channel messages
node packages/fae/endo-skill.js channel-members <name> # List channel members
node packages/fae/endo-skill.js channel-post <name> <text> [--reply-to <n>] # Post to channel
```

## Suppress CapTP teardown noise

Add `2>/dev/null` to suppress stderr from the CapTP disconnect.

## Common pet names

- `profile-for-fae` — fae agent's profile (use with `agent-inbox` and `names`)
- `fae-factory` — factory for creating fae agent instances
- `fae` — the fae agent's handle

## Notes

- Run all commands from the monorepo root directory
- Requires a running Endo daemon (`endo start`)
- Channel message numbers are sequential integers
- Agent profiles (e.g. `profile-for-fae`) give access to the agent's namespace
147 changes: 147 additions & 0 deletions .github/workflows/familiar-release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,147 @@
name: Familiar Release

on:
workflow_dispatch:
inputs:
version:
description: 'Release version (e.g. 0.1.0)'
required: false
type: string
push:
tags:
- 'familiar-v*'

permissions:
contents: write

jobs:
build-artifacts:
name: Build bundles and chat dist
runs-on: ubuntu-latest

steps:
- name: Checkout
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4

- run: corepack enable

- name: Use Node.js
uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6
with:
node-version: 22.x
cache: yarn

- name: Install dependencies
run: yarn install --immutable

- name: Build chat dist
run: yarn workspace @endo/chat build

- name: Bundle CLI and gateway
run: yarn workspace @endo/familiar bundle

- name: Upload chat dist
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
with:
name: chat-dist
path: packages/chat/dist/

- name: Upload bundles
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
with:
name: bundles
path: packages/familiar/bundles/

make:
name: Make (${{ matrix.target-os }}-${{ matrix.target-arch }})
needs: build-artifacts
runs-on: ${{ matrix.runner }}

strategy:
matrix:
include:
- runner: macos-14
target-os: darwin
target-arch: arm64
- runner: macos-13
target-os: darwin
target-arch: x64
- runner: ubuntu-latest
target-os: linux
target-arch: x64

steps:
- name: Checkout
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4

- run: corepack enable

- name: Use Node.js
uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6
with:
node-version: 22.x
cache: yarn

- name: Install dependencies
run: yarn install --immutable

- name: Download chat dist
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4
with:
name: chat-dist
path: packages/chat/dist/

- name: Download bundles
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4
with:
name: bundles
path: packages/familiar/bundles/

- name: Download Node.js binary
run: |
cd packages/familiar
./scripts/download-node.sh v20.18.1 ${{ matrix.target-os }} ${{ matrix.target-arch }}

- name: Prepare package
run: |
cd packages/familiar
./scripts/prepare-package.sh ${{ matrix.target-os }} ${{ matrix.target-arch }}

- name: Make distributables
run: yarn workspace @endo/familiar make

- name: Upload make output
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
with:
name: familiar-${{ matrix.target-os }}-${{ matrix.target-arch }}
path: packages/familiar/out/make/

release:
name: Create release
needs: make
runs-on: ubuntu-latest
if: startsWith(github.ref, 'refs/tags/familiar-v') || github.event.inputs.version != ''

steps:
- name: Download all artifacts
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4
with:
path: artifacts/
pattern: familiar-*

- name: Determine version
id: version
run: |
if [ -n "${{ github.event.inputs.version }}" ]; then
echo "tag=familiar-v${{ github.event.inputs.version }}" >> "$GITHUB_OUTPUT"
else
echo "tag=${{ github.ref_name }}" >> "$GITHUB_OUTPUT"
fi

- name: Create GitHub Release
uses: softprops/action-gh-release@da05d552573ad5aba039eaac05058a918a7bf631 # v2
with:
tag_name: ${{ steps.version.outputs.tag }}
name: Familiar ${{ steps.version.outputs.tag }}
draft: true
files: artifacts/**/*
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ build/Release
# Dependency directories
node_modules
jspm_packages/
.yarn-global/

# TypeScript v1 declaration files
typings/
Expand Down
1 change: 1 addition & 0 deletions .prettierignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
bundles
dist
fixtures
out
tmp
/packages/ses-integration-test/transform-tests/output
/packages/test262-runner/prelude
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"type":"worker"}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"type":"known-peers-store"}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"type":"least-authority"}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"host":"46e41fbcad5f1a8b9f744821bd19c31cccaa232c7c7a7f32613434167ead86c56a62c4254f5be59c75ce5d993e83035a18e7c1b4175f25da0a5c216a88df1ddf:d4e9d656e1a1095c7ea025ee485d7203c961818b8303d884d520c5d4861a0ac30db9251d3590c1132fad3cd15e66bc950e80abf073578bc5c3a3c4101901bd0d","leastAuthority":"324203a771fbca70b84f28f28f2a27b11b4d214102b66d60c6fb6cb1c62adcbae8f2f81748bdd6fe83c1ff81be72c903a5821676c80152f7b52bca1db146ec7a:d4e9d656e1a1095c7ea025ee485d7203c961818b8303d884d520c5d4861a0ac30db9251d3590c1132fad3cd15e66bc950e80abf073578bc5c3a3c4101901bd0d","networks":"cd00815a6cfd845bba25619a6e58919aa6aa5f52d0c845fa4f85cbfb72bae69be74712c6c91f4e89964e67658996d5a2be8392f97e1c5b227aa787d93db5bda3:d4e9d656e1a1095c7ea025ee485d7203c961818b8303d884d520c5d4861a0ac30db9251d3590c1132fad3cd15e66bc950e80abf073578bc5c3a3c4101901bd0d","peers":"2ed3975e4fba4919efcac7b3d6feec26f33ecb32818314269517788cb6989e82a3280bb15ad1072474e2037483ff7f17bd0cb7aea7490933174a3e9066cf91f0:d4e9d656e1a1095c7ea025ee485d7203c961818b8303d884d520c5d4861a0ac30db9251d3590c1132fad3cd15e66bc950e80abf073578bc5c3a3c4101901bd0d","pins":"857391ff6ac0b0cd0c7c4a33cc8b9b69b2066faa0a6c234e2ba074086db03e4e729c2ac21257af2fb0b4ef321fcbff20908e01b11b39e8b623b56066d7f537a7:d4e9d656e1a1095c7ea025ee485d7203c961818b8303d884d520c5d4861a0ac30db9251d3590c1132fad3cd15e66bc950e80abf073578bc5c3a3c4101901bd0d","type":"endo"}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"body":"#\"+0\"","slots":[],"type":"marshal"}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"type":"loopback-network"}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"endo":"396e9de1d7bab905eed1c45813f05065d8b0805e57ac244263a8952c9296033cad5fafa34fc2d00ea246f17bfe0da88768587657896a22a79852350355b38361:d4e9d656e1a1095c7ea025ee485d7203c961818b8303d884d520c5d4861a0ac30db9251d3590c1132fad3cd15e66bc950e80abf073578bc5c3a3c4101901bd0d","handle":"d8a8c3f598297de30986965e9ad031e95b6b9d37f1c627ea0067f4fe8be33cdcb42205a49fbc44d6d234d9334f9d82aeee3cba02d789dba999fdeaecaea79d62:d4e9d656e1a1095c7ea025ee485d7203c961818b8303d884d520c5d4861a0ac30db9251d3590c1132fad3cd15e66bc950e80abf073578bc5c3a3c4101901bd0d","hostHandle":"d8a8c3f598297de30986965e9ad031e95b6b9d37f1c627ea0067f4fe8be33cdcb42205a49fbc44d6d234d9334f9d82aeee3cba02d789dba999fdeaecaea79d62:d4e9d656e1a1095c7ea025ee485d7203c961818b8303d884d520c5d4861a0ac30db9251d3590c1132fad3cd15e66bc950e80abf073578bc5c3a3c4101901bd0d","inspector":"c0c9fff2a2ccf7c6e210a2ddae37919fa066049501baeaff9d9d5543d0d8553c9765bb1b754377d305ead9a09eb40496f8a1e2fd52cd62b8b78a6e8bfbcec65d:d4e9d656e1a1095c7ea025ee485d7203c961818b8303d884d520c5d4861a0ac30db9251d3590c1132fad3cd15e66bc950e80abf073578bc5c3a3c4101901bd0d","mailHub":"f73b284e0cf2c5697e34393773e91e2e308198fa2a24cfdd805f41f0c26903cfdc8144124468df7e9f01dd9de2aa8ad1034eeb7bec8fa0e29af2a7365b429c3a:d4e9d656e1a1095c7ea025ee485d7203c961818b8303d884d520c5d4861a0ac30db9251d3590c1132fad3cd15e66bc950e80abf073578bc5c3a3c4101901bd0d","mailboxStore":"7a168b2b6d39db43fe40ca7e809d8c816f7b868a24a742d1ad214253c540fa1c37020c6f9d85f5d945ac46a1da8683074408516c0a374caa8532192db490e3fc:d4e9d656e1a1095c7ea025ee485d7203c961818b8303d884d520c5d4861a0ac30db9251d3590c1132fad3cd15e66bc950e80abf073578bc5c3a3c4101901bd0d","networks":"cd00815a6cfd845bba25619a6e58919aa6aa5f52d0c845fa4f85cbfb72bae69be74712c6c91f4e89964e67658996d5a2be8392f97e1c5b227aa787d93db5bda3:d4e9d656e1a1095c7ea025ee485d7203c961818b8303d884d520c5d4861a0ac30db9251d3590c1132fad3cd15e66bc950e80abf073578bc5c3a3c4101901bd0d","petStore":"f0ce92ec88e084428eba5c936efa1385f3b0250aa738f2af0ff5d56b4bedf7eca122c2dc24068c6936191ab014f481751ce67b87f667371d60fb51412c044d2f:d4e9d656e1a1095c7ea025ee485d7203c961818b8303d884d520c5d4861a0ac30db9251d3590c1132fad3cd15e66bc950e80abf073578bc5c3a3c4101901bd0d","pins":"857391ff6ac0b0cd0c7c4a33cc8b9b69b2066faa0a6c234e2ba074086db03e4e729c2ac21257af2fb0b4ef321fcbff20908e01b11b39e8b623b56066d7f537a7:d4e9d656e1a1095c7ea025ee485d7203c961818b8303d884d520c5d4861a0ac30db9251d3590c1132fad3cd15e66bc950e80abf073578bc5c3a3c4101901bd0d","type":"host","worker":"96ca74dd31179666a0352fa5a20963ee01fb6ec3220a423339c5f412872f6f8ea17111065f664864c76b94c2c3ee90904d2a25509a2bb6a0c15674ebe8cf6768:d4e9d656e1a1095c7ea025ee485d7203c961818b8303d884d520c5d4861a0ac30db9251d3590c1132fad3cd15e66bc950e80abf073578bc5c3a3c4101901bd0d"}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"type":"mailbox-store"}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"petStore":"bf469d3516307f729d8891c44ab390195ae5ac13807d0c0b2d2573954c1a96418e216f85d971fe3bea4153149bde57daf8f9a0cf1e7b0f3b54a9339830398a50:d4e9d656e1a1095c7ea025ee485d7203c961818b8303d884d520c5d4861a0ac30db9251d3590c1132fad3cd15e66bc950e80abf073578bc5c3a3c4101901bd0d","type":"directory"}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"type":"worker"}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"type":"pet-store"}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"type":"pet-store"}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"petStore":"f0ce92ec88e084428eba5c936efa1385f3b0250aa738f2af0ff5d56b4bedf7eca122c2dc24068c6936191ab014f481751ce67b87f667371d60fb51412c044d2f:d4e9d656e1a1095c7ea025ee485d7203c961818b8303d884d520c5d4861a0ac30db9251d3590c1132fad3cd15e66bc950e80abf073578bc5c3a3c4101901bd0d","type":"pet-inspector"}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"petStore":"98579e9c92669c123a80af54bb506d028db3c9808a4bd32965964a814d61d4bf26ede90c567a6b03039e351429e97fca4fa85875a1f67d40dce4714f0eb76828:d4e9d656e1a1095c7ea025ee485d7203c961818b8303d884d520c5d4861a0ac30db9251d3590c1132fad3cd15e66bc950e80abf073578bc5c3a3c4101901bd0d","type":"directory"}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"env":{"ENDO_ADDR":"127.0.0.1:8920","ENDO_WEB_PAGE_BUNDLE_PATH":""},"powers":"396e9de1d7bab905eed1c45813f05065d8b0805e57ac244263a8952c9296033cad5fafa34fc2d00ea246f17bfe0da88768587657896a22a79852350355b38361:d4e9d656e1a1095c7ea025ee485d7203c961818b8303d884d520c5d4861a0ac30db9251d3590c1132fad3cd15e66bc950e80abf073578bc5c3a3c4101901bd0d","specifier":"file:///Users/kris/endo-llm/packages/daemon/src/web-server-node.js","type":"make-unconfined","worker":"13989b67c01d8d5d078ccd5c3d8ed55cea2a1fdc3b9284db54cc357a86ad86335f639df0d7331154e5dc9e72a5452b0c6866dd50fb318bd8de6ae5c61ebdbcd3:d4e9d656e1a1095c7ea025ee485d7203c961818b8303d884d520c5d4861a0ac30db9251d3590c1132fad3cd15e66bc950e80abf073578bc5c3a3c4101901bd0d"}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"agent":"46e41fbcad5f1a8b9f744821bd19c31cccaa232c7c7a7f32613434167ead86c56a62c4254f5be59c75ce5d993e83035a18e7c1b4175f25da0a5c216a88df1ddf:d4e9d656e1a1095c7ea025ee485d7203c961818b8303d884d520c5d4861a0ac30db9251d3590c1132fad3cd15e66bc950e80abf073578bc5c3a3c4101901bd0d","type":"handle"}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"type":"pet-store"}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"store":"7a168b2b6d39db43fe40ca7e809d8c816f7b868a24a742d1ad214253c540fa1c37020c6f9d85f5d945ac46a1da8683074408516c0a374caa8532192db490e3fc:d4e9d656e1a1095c7ea025ee485d7203c961818b8303d884d520c5d4861a0ac30db9251d3590c1132fad3cd15e66bc950e80abf073578bc5c3a3c4101901bd0d","type":"mail-hub"}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
3a479fb255db6de74e9ac8202c07c1434e4e1a8dab1f9b38ea77e56616077185a7cf41432db5eb783e5cf7de0fe78ad06981191f940737b572e1a746c5639be1:d4e9d656e1a1095c7ea025ee485d7203c961818b8303d884d520c5d4861a0ac30db9251d3590c1132fad3cd15e66bc950e80abf073578bc5c3a3c4101901bd0d
1 change: 1 addition & 0 deletions .tmp/endo-cli-test-TIAvKd/state/endo/nonce
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
396e9de1d7bab905eed1c45813f05065d8b0805e57ac244263a8952c9296033cad5fafa34fc2d00ea246f17bfe0da88768587657896a22a79852350355b38361
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
4036e0244e9f356a4ab87f9dc0ba1c78725f4c933801bb181d557d5dfd24e2a06b38e30b780624bf2ebdb9629ce7f97395e333c8d80e7e140d62af4ab87639ea:d4e9d656e1a1095c7ea025ee485d7203c961818b8303d884d520c5d4861a0ac30db9251d3590c1132fad3cd15e66bc950e80abf073578bc5c3a3c4101901bd0d
1 change: 1 addition & 0 deletions .tmp/endo-cli-test-TIAvKd/state/endo/root
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
46e41fbcad5f1a8b9f744821bd19c31cccaa232c7c7a7f32613434167ead86c56a62c4254f5be59c75ce5d993e83035a18e7c1b4175f25da0a5c216a88df1ddf:d4e9d656e1a1095c7ea025ee485d7203c961818b8303d884d520c5d4861a0ac30db9251d3590c1132fad3cd15e66bc950e80abf073578bc5c3a3c4101901bd0d
111 changes: 111 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
# Endo Project Guidelines

## Hardened JavaScript (SES) Conventions

### harden() is mandatory

- Every named export MUST have a corresponding `harden(exportName)` call immediately after the declaration. This is enforced by the `@endo/harden-exports` ESLint rule.
- Objects returned from factory functions should be hardened: `return harden({ ... })`.
- Module-level constant data structures (arrays, objects) should be hardened at declaration: `const foo = harden([...])`.

### @ts-check and JSDoc types

- Every `.js` source file must start with `// @ts-check`.
- Use `@param`, `@returns`, `@typedef`, and `@type` annotations throughout.
- Import types with the `@import` JSDoc tag: `/** @import { FarEndoGuest } from '@endo/daemon/src/types.js' */`
- Prefer `@import` over dynamic `import()` in type positions. Use `/** @import { Foo } from './bar.js' */` at the top of the file instead of inline `/** @type {import('./bar.js').Foo} */`.
- Cast `catch` error variables: `/** @type {Error} */ (e).message`
- Cast untyped inputs from external APIs with inline `/** @type {T} */` assertions.

### Error handling

- Use `@endo/errors` for structured errors: `import { makeError, q, X } from '@endo/errors'`.
- Use `q()` to safely quote values in error messages.
- Use tagged template errors where appropriate: `throw makeError(X\`No formula for ${ref}\`)`.

## Code Style

### Imports

- Group imports: external `@endo/*` packages first, then local imports, separated by a blank line.
- Sort imports within each group.

### Modules and exports

- Unconfined guest modules export `make(powers)` as their entry point.
- Prefer `makeExo()` with an `M.interface()` guard over `Far()` for
remotable objects.
`makeExo` automatically provides `__getMethodNames__()`, which CapTP
introspection relies on, and enforces method guards at the boundary.
`Far()` is still appropriate for lightweight one-off remotables that
do not need runtime type checking.
- The `help()` method is conventional on capabilities and should return
a descriptive string.

### Eventual send

- Always use `E(ref).method()` for remote/eventual calls, never direct
invocation.
- `E()` calls return promises; chain with `await` or further `E()` sends.

### CapTP introspection

- Use `E(ref).__getMethodNames__()` to discover a remote object's
interface rather than duck-typing by calling individual methods.
Duck-typing generates noisy failed CapTP calls for each method that
does not exist on the target.
- `makeExo` objects provide `__getMethodNames__()` automatically.

```js
const methods = await E(ref).__getMethodNames__();
if (methods.includes('followNameChanges')) {
// NameHub — live registry
} else if (methods.includes('list')) {
// ReadableTree — immutable snapshot
}
```

## ESLint

- The project uses `plugin:@endo/internal` which extends `prettier`, `plugin:@jessie.js/recommended`, and `plugin:@endo/strict`.
- This enforces harden-exports, restricts plus operands, and requires PascalCase for interfaces.

## Build and Test

- Yarn 4 via corepack: `npx corepack yarn install`
- Package tests: `cd packages/<name> && npx ava`
- Daemon integration tests: `cd packages/daemon && npx ava test/endo.test.js --timeout=120s`
- Syntax check without SES runtime: `node --check <file.js>`
- Full module loading requires the Endo daemon (SES lockdown provides `harden` as a global).

## Familiar (Electron shell)

### Testing

- **Unit tests**: `npx ava packages/daemon/test/gateway.test.js packages/daemon/test/formula-identifier.test.js --timeout=90s`
- **Build**: `cd packages/familiar && yarn bundle && yarn package`
- **Lint**: `cd packages/familiar && yarn lint`
- Gateway tests fork a full daemon per test. They must be `test.serial` to avoid resource contention.
- Tests set `ENDO_ADDR=127.0.0.1:0` so the gateway binds to an OS-assigned port, avoiding conflicts with a running daemon on the default port 8920.
- Kill leftover daemon processes between test runs: `pkill -f "daemon-node.*packages/daemon/tmp"` and `rm -rf packages/daemon/tmp/`.
- Worker logs are in `packages/daemon/tmp/<test>/state/worker/<id>/worker.log` — check these when the APPS formula hangs silently.

### Architecture constraints

- The Electron main process must **never** import `@endo/init` or `ses`. SES lockdown freezes Electron internals.
- Unconfined plugins (e.g., `web-server-node.js`) run inside an already-locked-down worker and must **not** import `ses` or `@endo/init` themselves; doing so causes double-lockdown errors.
- Electron Forge requires `electron` in `devDependencies` to detect the version. If it's only in `dependencies`, packaging fails with "Could not find any Electron packages in devDependencies".
- Port 0 (OS-assigned) is falsy in JavaScript. Use `port !== '' ? Number(port) : default` instead of `Number(port) || default`.

## Markdown Style

- Wrap lines at 80 to 100 columns.
- Start each sentence on a new line so that diffs are per-sentence.
- See `CONTRIBUTING.md` § "Markdown Style Guide" for full details.

## Package Structure

- Monorepo with `packages/` workspace layout.
- Workspace dependencies use `"workspace:^"` version specifiers.
- Each package has its own `tsconfig.json` and `tsconfig.build.json`.
- No copyright headers in source files; license is declared in `package.json`.
Loading
Loading