Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
161 commits
Select commit Hold shift + click to select a range
88b1bc8
Add conformance runner and fix 71/71 spec divergences
deepfates Mar 23, 2026
39b3eb5
Add Livebook demo notebook with streaming and loom visualization
deepfates Mar 23, 2026
10f0909
Add telemetry events to entity runtime
deepfates Mar 23, 2026
adba76e
Add Familiar module with repo gates and Mix tasks
deepfates Mar 23, 2026
6dfde38
Add telemetry dashboard section to Livebook notebook
deepfates Mar 23, 2026
0438a75
Auto-transform bare gate calls to dot-calls in code medium
deepfates Mar 23, 2026
3c8a88e
Add ACP mode to Familiar with --acp flag
deepfates Mar 23, 2026
c0f499f
Rebuild Familiar as code-medium orchestrator per spec A.12
deepfates Mar 23, 2026
00cd6cd
Fix Mix tasks to handle non-string results from code medium
deepfates Mar 23, 2026
763271b
Coerce non-string done() results at the gate boundary
deepfates Mar 23, 2026
05a36d5
Expose loom as a data binding in code medium
deepfates Mar 23, 2026
a1b2a89
Update README with familiar, telemetry, Livebook, conformance docs
deepfates Mar 23, 2026
5e1fd10
Fix Livebook notebook Mix.install app name to :cantrip_ex
deepfates Mar 23, 2026
ebf2ebd
Fix Livebook path resolution with __DIR__
deepfates Mar 23, 2026
d84c308
Add ACP wrapper script for Zed editor integration
deepfates Mar 23, 2026
72ff6a0
Add bash medium, fix normalize_opts, fix fork messages
deepfates Mar 24, 2026
da64cfa
Fix ACP session update wire format to match spec
deepfates Mar 24, 2026
286eb7d
Inject cwd into Familiar system prompt via ACP runtime
deepfates Mar 24, 2026
a83d71d
Move ACP startup message to stderr
deepfates Mar 24, 2026
f9e95f6
Merge pull request #1 from deepfates/conformance-telemetry-familiar
deepfates Mar 26, 2026
6480047
Dune sandbox + ReqLLM as default adapter
deepfates Mar 30, 2026
7b2beb8
Replace hand-rolled ACP Protocol with ETS-backed AgentHandler
deepfates Mar 26, 2026
99705de
Replace hand-rolled .env parser with dotenvy
deepfates Mar 26, 2026
6a1faa1
Fix normalize_opts erasing bare values in compile_and_load closure
deepfates Mar 26, 2026
e05b207
Add dotenvy, nimble_options, mox, and agent_client_protocol deps
deepfates Mar 26, 2026
1decec7
Wire EntityServer stream events to ACP session notifications
deepfates Mar 26, 2026
4e4b410
Use nimble_options for retry config validation
deepfates Mar 26, 2026
430fa6b
Fix ward composition, familiar store, ReqLLM base_url, cast_batch errors
deepfates Mar 30, 2026
365e18a
Make mix cantrip.cast use bare conversation cantrip by default
deepfates Mar 30, 2026
1874bd5
Default to conversation medium when none specified (MEDIUM-1)
deepfates Mar 30, 2026
ca61b7c
Inject capability presentation in forked code/bash circles (CIRCLE-11)
deepfates Mar 30, 2026
28af046
Sandbox filesystem gates to root directory (CIRCLE-10)
deepfates Mar 30, 2026
5bff282
Revert MEDIUM-1 to match tests.yaml: omitted medium is an error
deepfates Mar 30, 2026
a66987e
Fix empty-string code extraction and gate descriptions (CIRCLE-10, CI…
deepfates Mar 30, 2026
c8e8dd1
Slim Familiar system prompt to identity + strategy (IDENTITY-1)
deepfates Mar 30, 2026
78f39ee
Return list from list_dir gate instead of joined string
deepfates Mar 30, 2026
b7b6f60
Clean up compiler warnings: remove dead code and unused variables
deepfates Mar 30, 2026
9edac93
Include gate :description in conversation-medium tool definitions
deepfates Mar 30, 2026
bfc3387
Use git ls-files for search, add result limits and dir exclusions
deepfates Mar 30, 2026
b9d3dcb
Coerce non-string intents and remove dead legacy req_llm clause
deepfates Mar 30, 2026
4cb4bc6
Improve Familiar system prompt with practical guidance from TS reference
deepfates Mar 30, 2026
d147ad1
Pass :llm from cantrip config to child entity construction
deepfates Mar 30, 2026
2aeaf39
Pass root: to Familiar in mix cantrip.familiar (match cantrip.cast -f)
deepfates Mar 30, 2026
639a535
Add summon_with/2 for EntityServer opts at summon time
deepfates Mar 30, 2026
63a9360
Add per-call stream_to to send_intent for persistent entities
deepfates Mar 30, 2026
221153f
Add CLI renderer and rewrite Familiar REPL with real streaming (BP2)
deepfates Mar 30, 2026
9645971
Stream text tokens from LLM to terminal in real-time (BP3)
deepfates Mar 30, 2026
d59162f
Add JSONL event stream output with --json flag (BP4)
deepfates Mar 30, 2026
ceac0fb
Stream events in bare cast, handle text_delta in ACP, fix auto-stream
deepfates Mar 30, 2026
40f1512
Emit child_start/child_end events for delegation visibility
deepfates Mar 30, 2026
94e3742
Upgrade CLI renderer to Owl with code boxes and structured colors
deepfates Mar 30, 2026
34db20a
Emit {:code, code} event before eval so the entity's utterance is vis…
deepfates Mar 30, 2026
8649769
Enforce medium contract: code comes through tool calls, not content e…
deepfates Mar 31, 2026
f099932
Replace Owl.Box with left-border code blocks for Tufte-style density
deepfates Mar 31, 2026
b479146
Add event envelope with entity context and semantic gate metadata
deepfates Apr 1, 2026
08049f6
Fix Codex review findings: contract enforcement and protocol consistency
deepfates Apr 2, 2026
7f9de6b
Add timeout to text_delta relay to prevent process accumulation
deepfates Apr 3, 2026
c83e395
Solid V1 runtime cutover
deepfates May 3, 2026
128e998
Address Solid V1 review leftovers
deepfates May 4, 2026
9b8e8c6
Familiar production-grade: substrate + persistence + paradigm (#7)
deepfates May 12, 2026
4ebfaeb
Familiar launcher: Mnesia by default + user intents in the loom (#13)
deepfates May 12, 2026
b2ed72a
[codex] Prevent Familiar loom bloat (#14)
deepfates May 17, 2026
da963af
Expose package-shaped Familiar API (#16)
deepfates May 17, 2026
917097a
[codex] canonicalize Elixir package (#28)
deepfates May 21, 2026
2517058
release: Cantrip v1.0.0
deepfates May 27, 2026
2b65687
fix: align live tests with v1 config
deepfates May 28, 2026
6912fcf
fix: harden boundary validation
deepfates May 28, 2026
16ddcb5
test: pin readme api examples
deepfates May 28, 2026
14c6313
fix: redact boundary error surfaces
deepfates May 28, 2026
25f508b
fix: tighten atom creation boundaries
deepfates May 28, 2026
3a00ada
fix: resolve cleanup blocker seams
deepfates May 28, 2026
fea0f80
docs: add cleanup status tracker
deepfates May 28, 2026
eb84476
test: pin batch and provider contracts
deepfates May 28, 2026
fd5116b
fix: bound compile hot-load modules
deepfates May 28, 2026
7d4f5fc
fix: rewrite bare gate calls via AST
deepfates May 28, 2026
559627a
docs: close cleanup state + document Dune as deliberate variant
deepfates May 28, 2026
eec9909
docs: canonical observability runbook (telemetry events + subscriptions)
deepfates May 28, 2026
b544ede
fix: run entity episodes outside GenServer mailbox
deepfates May 28, 2026
3dc9bd7
docs: mark entity runner cleanup closed
deepfates May 28, 2026
42ca318
docs(status): record cold-review findings + roll back Pass 5 done claim
deepfates May 28, 2026
435db45
fix: complete boundary redaction coverage
deepfates May 28, 2026
51ff725
docs: mark safeformat cleanup closed
deepfates May 28, 2026
39adad7
Fix stream_to restoration when runner crashes
Copilot May 28, 2026
fe4c06b
Harden runner crash stream restore path
Copilot May 28, 2026
17c44d2
fix: reject unsafe compile hot-load policy
deepfates May 28, 2026
4f50e73
docs: mark compile policy cleanup closed
deepfates May 28, 2026
e4cd237
docs(readme): clarify sandbox :dune divergence from :port
deepfates May 28, 2026
04c8dc6
fix: format entity_server.ex indent (CI verify gate)
deepfates May 28, 2026
4a153b1
fix: fail loud on invalid familiar cookie
deepfates May 28, 2026
6697efe
docs: mark familiar cookie cleanup closed
deepfates May 28, 2026
88d7cf6
docs(changelog): draft Unreleased entry for cleanup pass
deepfates May 28, 2026
142a31e
docs(architecture): fix drift on compile wards + Dune variant
deepfates May 28, 2026
1ea10d1
docs(public-api): flag Dune as deliberately smaller-surface variant
deepfates May 28, 2026
78033ab
feat: complete telemetry coverage contract
deepfates May 28, 2026
4939809
feat: emit redaction hit telemetry
deepfates May 28, 2026
e00f17b
docs: mark telemetry cleanup closed
deepfates May 28, 2026
4f7769a
feat: version durable schemas and jsonl loom
deepfates May 28, 2026
9d72e35
docs: mark schema version cleanup closed
deepfates May 28, 2026
09edb15
test(live): pass root dependency to list_dir gate
deepfates May 28, 2026
0d32b15
docs: finalize cleanup release ledger
deepfates May 28, 2026
0f8847c
feat: add first-class mix gate
deepfates May 28, 2026
ea9824e
test(live): pass type: :conversation to real_llm_eval circle
deepfates May 28, 2026
39de752
fix: narrow familiar mix gate defaults
deepfates May 28, 2026
c619dd7
test: stabilize live echo completion
deepfates May 28, 2026
35329b6
docs(architecture): add @derive Inspect convention + process inventory
deepfates May 28, 2026
8e0c062
docs(status): roll back overclaimed 'done' on passes 2, 7, 10, 13, 15
deepfates May 28, 2026
58e2958
ci: add cleanup-guide regression gate (Pass 15)
deepfates May 28, 2026
5bcb985
fix: close supervision trace and secret hardening gaps
deepfates May 28, 2026
1e47a3b
fix: harden boundary validation and atom safety
deepfates May 28, 2026
ee1d020
fix: close final cleanup review gaps
deepfates May 28, 2026
8311df9
chore: prepare 1.1.0 release
deepfates May 28, 2026
d740bdb
fix: give port child startup the deployment timeout budget
deepfates May 28, 2026
ead74c1
docs: mark cleanup verification complete
deepfates May 28, 2026
a421793
Merge PR #33: comprehensive Elixir cleanup hardening
deepfates May 28, 2026
c37a148
feat: add Familiar eval harness
deepfates May 28, 2026
d4478aa
fix: harden eval harness against edge cases found in adversarial review
Copilot May 28, 2026
748ed0a
fix: harden Familiar eval harness review gaps
deepfates May 28, 2026
ef884f7
Merge remote-tracking branch 'origin/feat/familiar-eval-harness' into…
deepfates May 28, 2026
a79d885
Merge PR #38: add Familiar eval harness
deepfates May 28, 2026
7d20ac0
feat: add distributed Familiar support
deepfates May 28, 2026
93fc064
Merge PR #39: distributed Familiar support
deepfates May 28, 2026
1787562
chore: prepare 1.2.0 release (#40)
deepfates May 28, 2026
ee7ceff
fix: add ACP trace correlation and eval signal proof (#50)
deepfates May 28, 2026
5401811
fix: forward provider options through ReqLLM (#57)
deepfates May 28, 2026
76a5edb
fix: preserve trace context in streaming events (#58)
deepfates May 28, 2026
5382f67
Fix ACP meta boundary and JSONL truncation metadata (#66)
deepfates May 28, 2026
321fdc9
fix: harden rpc errors and loom persistence (#70)
deepfates May 28, 2026
8d77b52
fix: add event upcast and serialize jsonl appends (#71)
deepfates May 28, 2026
183cb72
fix: expose read_file to default familiar
deepfates May 28, 2026
b4a3193
fix: compose wards for prebuilt child casts
deepfates May 28, 2026
04222d3
fix: compact persisted code state bindings
deepfates May 28, 2026
627f43a
fix: backpressure streaming event delivery
deepfates May 28, 2026
9d3ea75
fix: normalize llm responses into dto
deepfates May 28, 2026
3a95736
fix: normalize gate args into dto
deepfates May 28, 2026
da40253
fix: enforce declaration-time child wards (#78)
deepfates May 28, 2026
f58477b
fix: project bash gates through sandbox (#79)
deepfates May 28, 2026
f25d6ac
docs: mark stabilization queue empty (#80)
deepfates May 28, 2026
2d7f780
ci: update checkout action for node24 (#81)
deepfates May 28, 2026
fa412c3
fix: harden bash sandbox workloads (#84)
deepfates May 28, 2026
31eafbd
fix: include env example in hex package (#88)
deepfates May 28, 2026
8f7c35b
fix: constrain public API docs surface (#89)
deepfates May 28, 2026
e097448
fix: teach familiar synthesis composition (#90)
deepfates May 28, 2026
f87a625
chore: prepare v1.3.0 release state (#91)
deepfates May 28, 2026
a80df48
fix: fail closed and redact observation args (#94)
deepfates May 28, 2026
21ff718
docs: update cleanup status after v1.3.1 (#95)
deepfates May 28, 2026
c3c377b
docs: refresh migration and package docs (#101)
deepfates May 28, 2026
7332fd4
feat: orient conversation entities (#104)
deepfates May 28, 2026
988e0b3
docs: add spellbook and public module voice (#105)
deepfates May 28, 2026
e4d0e80
chore: prepare v1.3.2 release (#106)
deepfates May 28, 2026
577b6c1
chore: post-v1.3.2 hardening followup
deepfates May 29, 2026
28cf044
docs: add v1.3.2 inhabitant affordance audit
deepfates May 29, 2026
4d9d759
fix: make familiar default sandbox unrestricted
deepfates May 29, 2026
69781d1
Merge pull request #113 from deepfates/codex/post-v132-hardening-foll…
deepfates May 29, 2026
4f451b8
Merge pull request #121 from deepfates/codex/familiar-default-unrestr…
deepfates May 29, 2026
58db1a7
fix: clarify bash filesystem write affordance (#123)
deepfates May 29, 2026
0a06cdb
test: cover Mnesia familiar rehydration (#124)
deepfates May 29, 2026
2658ccd
docs: tighten v1.3.3 familiar guidance
deepfates May 29, 2026
13b58dc
chore: prepare v1.3.3 release
deepfates May 29, 2026
eb453a6
chore: remove resolved v132 audit artifact
deepfates May 29, 2026
d882db6
docs: trim aspirational README paths
deepfates May 29, 2026
fb3c893
fix: reset per-intent turn budget for persistent entities (#126)
deepfates May 29, 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
  •  
  •  
  •  
File renamed without changes.
File renamed without changes.
83 changes: 83 additions & 0 deletions .github/workflows/verify.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
name: verify

on:
push:
branches: [main, 'release/**']
tags: ['v*']
pull_request:

jobs:
verify:
runs-on: ubuntu-latest

steps:
- name: Checkout
uses: actions/checkout@v6

- name: Setup Elixir + Erlang
uses: erlef/setup-beam@v1
with:
elixir-version: '1.19.5'
otp-version: '28.1'

- name: Install shell sandbox workload tools
run: |
sudo apt-get update
sudo apt-get install -y bubblewrap uidmap jq make
sudo chmod u+s "$(command -v bwrap)"

- name: Install dependencies
run: mix deps.get

- name: Verify
run: mix verify

- name: Signer policy checks
run: ./scripts/check_signer_policy.sh

- name: Cleanup guide regression checks
run: ./scripts/check_cleanup_guide.sh

- name: Build docs
run: mix docs

- name: Build Hex package
run: mix hex.build

# Live integration tests against a real provider. Several real bugs in v1
# prep (streaming tool calls dropped, multi-send losing assistant history)
# shipped past unit tests because the mocks didn't match real provider
# behavior. This costs API tokens, so PRs run unit verification only; main,
# release branch, and tag pushes must have the Anthropic secret configured.
live:
runs-on: ubuntu-latest
if: github.event_name == 'push'

steps:
- name: Checkout
uses: actions/checkout@v6

- name: Setup Elixir + Erlang
uses: erlef/setup-beam@v1
with:
elixir-version: '1.19.5'
otp-version: '28.1'

- name: Install dependencies
run: mix deps.get

- name: Live integration (Anthropic)
env:
RUN_REAL_LLM_TESTS: '1'
CANTRIP_LLM_PROVIDER: anthropic
CANTRIP_MODEL: claude-haiku-4-5
ANTHROPIC_MODEL: claude-haiku-4-5
CANTRIP_TIMEOUT_MS: '120000'
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
CANTRIP_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
run: |
if [ -z "$ANTHROPIC_API_KEY" ]; then
echo "ANTHROPIC_API_KEY secret is required for live integration on main/release/tag pushes."
exit 1
fi
mix test test/live_anthropic_test.exs test/real_llm_integration_test.exs test/familiar_eval_signal_test.exs
23 changes: 10 additions & 13 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,30 +1,27 @@
.env
.DS_Store
.cantrip/
.claude/
.claude*/
.clj-kondo/
.lsp/
_investigation/
_review/
SPEC.md.bak
.uv-cache
.venv_check
# TypeScript
node_modules/
dist/
*.tsbuildinfo
# Python
__pycache__/
*.pyc
.venv/
# Clojure
.cpcache/
target/
classes/
# Elixir
_build/
deps/
*.beam
/cover/
/doc/
/tmp/
*.ez
cantrip-*.tar
/cantrip
Mnesia.*/
# Editors
*.swp
*~
erl_crash.dump
scratch/
Loading