Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
7f1e78e
feat: add command mediation with admin approval and audit trail
kipz Apr 9, 2026
6bfb71e
feat: add Swift menu bar app for nono privilege control
kipz Apr 9, 2026
ab9dbb9
docs: document command mediation
kipz Apr 9, 2026
e8e09f7
feat(mediation): add keychain_access option to per-command sandbox
christine-at-datadog Apr 17, 2026
b8f40d7
ignore missing commands when resolving mediation policy
gharryg Apr 15, 2026
dbdc7d4
feat(profile): expand generic $VAR tokens in sandbox paths
kipz Apr 20, 2026
d38c1ac
feat(profile): expand env vars in mediation args_prefix and TLS paths
kipz Apr 20, 2026
a42fa92
feat(mediation): add session/pid context to audit log entries
christine-at-datadog Apr 8, 2026
000da54
feat(mediation): stream stdio via SCM_RIGHTS for passthrough commands
kipz Apr 27, 2026
be2a238
feat(mediation): add caller_policy to gate which callers may invoke a…
kipz Apr 27, 2026
f288be2
chore: untrack Swift build artifacts and add to .gitignore
kipz Apr 28, 2026
3219660
fix(mediation): batch stdio fds into single SCM_RIGHTS message
kipz Apr 29, 2026
076119f
fix(mediation): spawn mediated commands in caller's cwd, not server's
kipz Apr 30, 2026
a77431f
style: cargo fmt across mediation crates
kipz May 6, 2026
b45b9c0
fix(mediation): record audit-shim source paths to survive PATH munging
kipz May 6, 2026
7ffd37a
Merge pull request #30 from kipz/kipz/audit-shim-source-paths
kipz May 6, 2026
6a62f33
feat(linux): wire BPF-LSM filesystem deny-within-allow into rebased m…
May 6, 2026
18ac8cb
fix(linux): address clippy lints and complete SupervisedRuntimeContex…
May 6, 2026
43e8530
fix(audit): populate command and path for allow_unmediated audit entries
drewmchugh May 7, 2026
7ccf135
fix(mediation): stream stdio through Approve action
drewmchugh May 8, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
233 changes: 197 additions & 36 deletions Cargo.lock

Large diffs are not rendered by default.

2 changes: 2 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@ resolver = "2"
members = [
"crates/nono",
"crates/nono-cli",
"crates/nono-approve",
"crates/nono-proxy",
"crates/nono-shim",
"bindings/c",
]

Expand Down
36 changes: 33 additions & 3 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -6,19 +6,26 @@
# make check Run clippy and format check
# make release Build release binaries

.PHONY: all build build-lib build-cli build-ffi build-arm64 test test-lib test-cli test-ffi check clippy fmt clean install audit help
# Local code-signing certificate name (created once with: make setup-signing-cert)
SIGN_CERT ?= nono-dev

.PHONY: all build build-lib build-cli build-approve build-ffi build-arm64 test test-lib test-cli test-approve test-ffi check clippy fmt clean install audit sign setup-signing-cert help

# Default target
all: build

# Build targets
build: build-lib build-cli
build: build-lib build-cli build-approve

build-lib:
cargo build -p nono

build-cli:
cargo build -p nono-cli
@$(MAKE) sign --no-print-directory 2>/dev/null || true

build-approve:
cargo build -p nono-approve

build-ffi:
cargo build -p nono-ffi
Expand All @@ -41,14 +48,17 @@ build-arm64:
@cross build --release --target aarch64-unknown-linux-gnu -p nono-cli

# Test targets
test: test-lib test-cli test-ffi
test: test-lib test-cli test-approve test-ffi

test-lib:
cargo test -p nono

test-cli:
cargo test -p nono-cli

test-approve:
cargo test -p nono-approve

test-ffi:
cargo test -p nono-ffi

Expand Down Expand Up @@ -102,6 +112,26 @@ doc:
doc-lib:
cargo doc -p nono --no-deps --open

# Code signing — signs debug binaries so macOS Keychain "Always Allow" persists across rebuilds.
# Requires a local certificate created once with: make setup-signing-cert
sign:
@if security find-certificate -c "$(SIGN_CERT)" ~/Library/Keychains/login.keychain-db >/dev/null 2>&1; then \
codesign -f -s "$(SIGN_CERT)" target/debug/nono target/debug/nono-shim 2>/dev/null && \
echo "Signed debug binaries with '$(SIGN_CERT)'"; \
fi

# One-time setup: create a local self-signed code-signing certificate.
# After running this, 'make build' will automatically sign the binaries.
setup-signing-cert:
@echo "Creating local code-signing certificate '$(SIGN_CERT)'..."
@TMPD=$$(mktemp -d) && \
printf '[req]\ndefault_bits=2048\nprompt=no\ndefault_md=sha256\ndistinguished_name=dn\nx509_extensions=v3\n[dn]\nCN=$(SIGN_CERT)\n[v3]\nkeyUsage=critical,digitalSignature\nextendedKeyUsage=critical,codeSigning\nbasicConstraints=CA:FALSE\n' > $$TMPD/cert.conf && \
openssl req -x509 -newkey rsa:2048 -days 3650 -nodes -keyout $$TMPD/key.pem -out $$TMPD/cert.pem -config $$TMPD/cert.conf 2>/dev/null && \
openssl pkcs12 -export -in $$TMPD/cert.pem -inkey $$TMPD/key.pem -out $$TMPD/cert.p12 -passout pass:nono -legacy -macalg SHA1 2>/dev/null && \
security import $$TMPD/cert.p12 -k ~/Library/Keychains/login.keychain-db -P nono -T /usr/bin/codesign -A && \
rm -rf $$TMPD && \
echo "Done. Run 'make build' to sign binaries automatically."

# Security audit
audit:
cargo audit
Expand Down
Loading