Compare commits
225 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 89d8189c43 | |||
| 1025290dad | |||
| 97e6af85a2 | |||
| 835d638bf3 | |||
| 6c0e0f4d8d | |||
| a7233931f9 | |||
| 85cb951816 | |||
| bd959df78c | |||
| 9ce0f7b5b2 | |||
| 9351b1c74d | |||
| 5bd20cb7b3 | |||
| f774f53cbd | |||
| aefd3421d3 | |||
| e663663e49 | |||
| 1edf3c3347 | |||
| 6a252d989a | |||
| 6f6ea7a967 | |||
| cf67171940 | |||
| 26093f43d5 | |||
| 966b6b8016 | |||
| 6a0bb91f8c | |||
| bfd54d3a44 | |||
| 139cc417a7 | |||
| 95232f6663 | |||
| 0b71f98f37 | |||
| dcbb1279d4 | |||
| d0117e495a | |||
| caabb7f10b | |||
| 101b9174df | |||
| 4a7ed5ed90 | |||
| 2c7a2ee345 | |||
| ee36d35785 | |||
| ad33e1bde3 | |||
| 45e3c2bc02 | |||
| b6137e0eff | |||
| 8606370c79 | |||
| 89c66af5f4 | |||
| 898dd11cbd | |||
| cf350b2754 | |||
| a8efd03c2c | |||
| 7065d190ab | |||
| 069276b8ee | |||
| 252229593d | |||
| 00f7675fb5 | |||
| 5b664ea739 | |||
| 595672466e | |||
| 36c62625fa | |||
| 724faad29d | |||
| a707f1be71 | |||
| 05d4342810 | |||
| f6da30f2a8 | |||
| eaabac375b | |||
| 8725822179 | |||
| af56cfe789 | |||
| 5b75527e31 | |||
| 7e65580958 | |||
| a0005850d1 | |||
| 4a3d04e251 | |||
| 24b89a1513 | |||
| 85202fd4f8 | |||
| c43412f390 | |||
| ac052440b7 | |||
| dbf3a81962 | |||
| 76a0fd407b | |||
| a7cd6c9aac | |||
| b396cdac60 | |||
| 4f34969224 | |||
| 44a1b43cba | |||
| cb783530e5 | |||
| 0168281c8c | |||
| bef72ed55f | |||
| a9be1d99b3 | |||
| d5b62ee642 | |||
| f858b86b64 | |||
| 15e45e57e8 | |||
| d68bdb2d2f | |||
| 1886b7ed5d | |||
| 622b85dd94 | |||
| 4b04266c16 | |||
| 1adc80bcfb | |||
| 213c9f8c90 | |||
| 492c84f881 | |||
| cf5f0d13d0 | |||
| dfa13d359c | |||
| 42e5c9060e | |||
| 0121082bc6 | |||
| 6f548aa7ac | |||
| 315ef305e9 | |||
| aa70766a4f | |||
| a842f10b35 | |||
| 478e5b88bc | |||
| 38f1dfec4e | |||
| bdb4b30012 | |||
| 5e68db2464 | |||
| d1b1e1c4bb | |||
| 6a90e43067 | |||
| 4317eff40e | |||
| cc6c552d5a | |||
| 43c225a4b5 | |||
| e87ae0c517 | |||
| 08803640a4 | |||
| 5f48f07b77 | |||
| c5c524d335 | |||
| b11b028245 | |||
| ced260dd0f | |||
| 1a87c72f7d | |||
| 284de44dcd | |||
| fd6c621eeb | |||
| 34af90e7e5 | |||
| 1f736aabe5 | |||
| 609b2fcac3 | |||
| f48f38400d | |||
| e49b68287b | |||
| de23523200 | |||
| dde4796d23 | |||
| 7f0d195017 | |||
| e98a68f32c | |||
| 7815717346 | |||
| 61191ac03e | |||
| 1866695eca | |||
| 05c2730c61 | |||
| a97a3d1ba9 | |||
| 41598c3542 | |||
| 5d3ab60adf | |||
| 18a802c2e2 | |||
| c1cfde1e4b | |||
| b78b32bda9 | |||
| bc51a5e586 | |||
| a32524ec64 | |||
| d03914053f | |||
| b1c2884254 | |||
| 0239b4f8d7 | |||
| 04f7e248b4 | |||
| 0c1bdc0418 | |||
| 71d3016a1c | |||
| 913a81b0bd | |||
| c0f3ab1cf2 | |||
| 44319bece1 | |||
| f3c5de68b6 | |||
| 50eaef0a9d | |||
| c84b82fd1f | |||
| c711512689 | |||
| 54a76e71f0 | |||
| c7b7c4fc9d | |||
| 727d56dbda | |||
| d7a4421464 | |||
| e69bc16f0c | |||
| 1e74331428 | |||
| 52593cb2ef | |||
| 879ff3c2c5 | |||
| 0893d5e959 | |||
| 94361997ff | |||
| dd834e55bd | |||
| d4cdb0aa1d | |||
| 89581e08ab | |||
| fc5069908b | |||
| 417ff56f67 | |||
| 6d571c93c8 | |||
| 643ecf17be | |||
| e4fccdbcb9 | |||
| fd70333f3f | |||
| 84cdb374c4 | |||
| 8b3526d8cb | |||
| 3c8a709549 | |||
| f53a02c13b | |||
| 4f74624e73 | |||
| 7657969147 | |||
| 0ec48197ba | |||
| 563c661555 | |||
| fbc2719ff4 | |||
| df86c1d1be | |||
| a5f81ad9ab | |||
| 9ebbbae15e | |||
| 619d8871f2 | |||
| d02812f95c | |||
| 0f51b32680 | |||
| 1873525c4a | |||
| a7f61908c2 | |||
| 02169a7ad3 | |||
| 446c66f101 | |||
| a3506551ea | |||
| 2518d4778c | |||
| 78ec8240d4 | |||
| d9f89bba7b | |||
| ec87c36908 | |||
| 01bd848244 | |||
| 7cbf723d04 | |||
| f76360fae7 | |||
| cf50300be6 | |||
| 3a4c15a448 | |||
| 4b19d7d743 | |||
| 90f91ce082 | |||
| b5e6912cc4 | |||
| e83e297843 | |||
| 0447c8495d | |||
| 032fedc549 | |||
| 0760c8c126 | |||
| 4dda5d2a97 | |||
| a7b01cbf0b | |||
| 2f6b32c2c7 | |||
| d86ace0bf3 | |||
| 8c99cc785e | |||
| b807402dba | |||
| e922c04226 | |||
| 2265fb3e21 | |||
| ad6dee1dcd | |||
| 03883e7e4f | |||
| 4ff4ac7961 | |||
| b49f83a891 | |||
| 7ede631db4 | |||
| 3a031ba8a2 | |||
| 8597b34792 | |||
| 729a8e8d8a | |||
| 0cf2a8d386 | |||
| bb6238bfa6 | |||
| 562ba063cb | |||
| a08bba8a3d | |||
| 4c818ccd86 | |||
| 12f11ce5b0 | |||
| e29ca5679e | |||
| 34a210228e | |||
| df9c47ad03 | |||
| 3900e3c8fc | |||
| 6c88a66273 | |||
| 614907613e |
18
.gitmodules
vendored
@@ -1,9 +1,9 @@
|
||||
[submodule "org-agent"]
|
||||
path = org-agent
|
||||
url = ssh://git@10.10.10.201:2222/amr/org-agent.git
|
||||
[submodule "projects/org-agent"]
|
||||
path = projects/org-agent
|
||||
url = ssh://git@10.10.10.201:2222/amr/org-agent.git
|
||||
[submodule "projects/org-agent-contrib"]
|
||||
path = projects/org-agent-contrib
|
||||
url = ssh://git@10.10.10.201:2222/amr/org-agent-contrib.git
|
||||
[submodule "opencortex"]
|
||||
path = opencortex
|
||||
url = ssh://git@10.10.10.201:2222/amr/opencortex.git
|
||||
[submodule "projects/passepartout"]
|
||||
path = projects/passepartout
|
||||
url = ssh://10.10.10.201:2222/amr/opencortex.git
|
||||
[submodule "projects/passepartout-contrib"]
|
||||
path = projects/passepartout-contrib
|
||||
url = ssh://git@10.10.10.201:2222/amr/opencortex-contrib.git
|
||||
|
||||
179
AGENTS.md
Normal file
@@ -0,0 +1,179 @@
|
||||
# AGENTS.md — OpenCode Tool Usage Guide
|
||||
|
||||
This file tells AI coding agents which tools are available and when to use them.
|
||||
It is read by agents working on the Memex / Passepartout project.
|
||||
|
||||
## Development Workflow (Must Follow)
|
||||
|
||||
All development MUST follow this cycle, beginning to end:
|
||||
|
||||
1. **Start in REPL** — Everything begins and ends in the Passepartout REPL (port 9105)
|
||||
2. **TDD in REPL** — Red-Green-Refactor cycle:
|
||||
1. Write a FAILING test first (use `(passepartout:deftest name ...)` or `fiveam:test`)
|
||||
2. **Prove RED**: Run `(passepartout:run-test 'test-name)` — it MUST fail.
|
||||
If it passes before code exists, the test is broken or testing nothing.
|
||||
Record the failure output.
|
||||
3. Develop code in REPL to make the test pass
|
||||
4. Use lisp-structural-check to validate code while developing
|
||||
5. Evaluate forms with `eval-defun` or equivalent
|
||||
6. Run tests again → they should PASS
|
||||
7. Repeat until feature is complete
|
||||
3. **Reflect in Org** — Once code works in REPL, reflect it in the .org literate source file
|
||||
4. **Tangle with Emacs** — Use `org-babel-tangle` to generate .lisp from .org
|
||||
5. **Validate tangled lisp** — Run `lisp-structural-check` on the result
|
||||
6. **Commit** — Only after validation passes
|
||||
|
||||
**When tools fail**:
|
||||
- If any recommended tool fails, you MUST explain:
|
||||
- Why it failed (specific error, missing dependency, etc.)
|
||||
- How we can make it work (fix, configuration, alternative approach)
|
||||
- Then **PAUSE** and ask for permission before trying a different method
|
||||
|
||||
**Rule**: Do not leave the REPL to develop. If something can't be done in REPL, explain why and ask before proceeding otherwise.
|
||||
|
||||
---
|
||||
|
||||
## Available Tools — Use These First
|
||||
|
||||
### 1. Passepartout REPL (port 9105)
|
||||
The daemon runs with ALL skills loaded. Use it instead of the deploy-crash-cycle.
|
||||
|
||||
**Send forms via Python bridge:**
|
||||
```python
|
||||
import socket
|
||||
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||
s.connect(("127.0.0.1", 9105))
|
||||
msg = '(:type :event :payload (:sensor :repl-eval :code "(+ 1 2)"))'
|
||||
s.sendall(f"{len(msg):06x}".encode() + msg.encode())
|
||||
```
|
||||
|
||||
**Or via SBCL directly (attached to daemon):**
|
||||
```lisp
|
||||
(sb-bsd-sockets:socket-send sock payload len)
|
||||
```
|
||||
|
||||
**Key functions available:**
|
||||
- `(passepartout:lisp-structural-check "code-string")` — returns (values t nil) or (values nil "error")
|
||||
- `(passepartout:lisp-validate "code-string" :semantic t)` — full validation
|
||||
- `(passepartout:log-message "format ~a" arg)` — write to daemon log
|
||||
- Any exported symbol from `passepartout` package
|
||||
|
||||
### 2. Lisp Structural Tools (pre-deploy validation)
|
||||
**ALWAYS run these before tangling/deploying Lisp changes.**
|
||||
|
||||
`lisp-structural-check` works on ANY Lisp string, not just Org blocks:
|
||||
```lisp
|
||||
;; Via REPL — send to port 9105:
|
||||
(passepartout:lisp-structural-check "<lisp-code-string>")
|
||||
;; Returns: (values t nil) on success, (values nil "error details") on failure
|
||||
```
|
||||
|
||||
For Org files:
|
||||
```lisp
|
||||
(passepartout:literate-block-balance-check "/path/to/file.org")
|
||||
```
|
||||
|
||||
These catch paren mismatches in <1 second vs. the 60-second deploy-crash cycle.
|
||||
|
||||
### 3. Emacs Interactive
|
||||
Use Emacs for interactive Lisp development:
|
||||
- `forward-sexp` / `backward-sexp` — navigate balanced expressions
|
||||
- `show-paren-mode` — visual paren matching
|
||||
- `eval-defun` (C-M-x) — evaluate the current top-level form
|
||||
- `eval-region` — evaluate selected region
|
||||
- `org-babel-tangle` — tangle a single file: `M-x org-babel-tangle`
|
||||
- Batch tangle: `emacs --batch --eval "(progn (require 'org) (find-file \"file.org\") (org-babel-tangle) (kill-buffer))"`
|
||||
|
||||
### 4. Tmux (for TUI testing)
|
||||
```bash
|
||||
# Start TUI in detached session
|
||||
tmux new-session -d -s test "passepartout tui 2>&1 | tee /tmp/tui.log"
|
||||
|
||||
# Send keys
|
||||
tmux send-keys -t test "hello world" Enter
|
||||
|
||||
# Capture output
|
||||
tmux capture-pane -t test -p -S -200
|
||||
|
||||
# Clean up
|
||||
tmux kill-session -t test
|
||||
```
|
||||
|
||||
### 5. Pre-Commit Hook
|
||||
Validates staged org files by tangling + compiling in daemon:
|
||||
```
|
||||
ln -sf ../../scripts/pre-commit-repl-check .git/hooks/pre-commit
|
||||
```
|
||||
Run manually: `passepartout setup` or `git commit` (hook auto-runs).
|
||||
|
||||
### 6. TUI REPL (via /eval + Swank)
|
||||
The TUI process has its own REPL for live development:
|
||||
|
||||
**Built-in /eval command** — type in the TUI input:
|
||||
- `/eval (+ 1 2)` → `=> 3` displayed in chat
|
||||
- `/eval *state*` → inspect full TUI state plist
|
||||
- `/eval (view-status sw)` → force status bar re-render
|
||||
- `/eval (add-msg :system "test")` → inject a test message
|
||||
|
||||
**Emacs + Swank REPL** — connect Emacs to the TUI process:
|
||||
1. Start TUI: `passepartout tui`
|
||||
2. In Emacs: `M-x slime-connect RET 127.0.0.1 RET 4006`
|
||||
3. `C-M-x` any form from `org/gateway-tui.org` → evaluates in live TUI process
|
||||
4. Configure port: `export TUI_SWANK_PORT=4009` (default: 4006)
|
||||
|
||||
**Croatoan note**: Rendering functions (`view-status`, `view-chat`, `view-input`) write to the terminal and can't be fully tested from Emacs. Inspect return values instead, and test rendering with `/eval` commands in the TUI itself.
|
||||
|
||||
---
|
||||
|
||||
## Commands
|
||||
|
||||
- Validate code: Send to REPL at port 9105 using socket bridge (see Development Workflow)
|
||||
- Run tests: `(passepartout:run-tests)` in REPL
|
||||
- Tangle org: `emacs --batch --eval "(progn (require 'org) (find-file \"file.org\") (org-babel-tangle) (kill-buffer))"`
|
||||
|
||||
## Project Structure
|
||||
|
||||
- Source (literate): `org/`
|
||||
- Source (tangled): `lisp/`
|
||||
- Tests: `tests/`
|
||||
- Scripts: `scripts/`
|
||||
- Deployment: `~/.local/share/passepartout/`
|
||||
- TODO tracking: `docs/ROADMAP.org`
|
||||
|
||||
## When Done Means
|
||||
|
||||
- Red proof recorded: Test was run and confirmed FAILING before implementation code existed
|
||||
- Tests pass: `(passepartout:run-tests)` returns success
|
||||
- Code validated: `lisp-structural-check` returns `(values t nil)`
|
||||
- Org reflected: Code exists in .org source file
|
||||
- Org tangled: .lisp generated from .org
|
||||
- Committed: Only after all above pass
|
||||
|
||||
## Boundaries
|
||||
|
||||
- **Always do**: Use REPL first for all development, use TDD, prove tests fail FIRST before writing code, validate with lisp-structural-check
|
||||
- **Ask first**: Before editing .lisp directly (skip org), before deploying, before git commit
|
||||
- **Never do**: Edit .lisp files manually (they're autogenerated), skip validation before commit
|
||||
|
||||
## Iteration
|
||||
|
||||
When the agent makes the same mistake twice, add a rule to this file to prevent recurrence.
|
||||
|
||||
---
|
||||
|
||||
## Project Architecture
|
||||
|
||||
- **Thin harness, fat skills** — core provides hooks (`defskill`, `register-actuator`, `*probabilistic-backends*`), skills provide handlers
|
||||
- **Org is source of truth** — `.org` files tangle to `.lisp`. Never edit `.lisp` directly
|
||||
- **Package:** `passepartout` exports all symbols in `lisp/core-defpackage.lisp`
|
||||
- **XDG data dir:** `~/.local/share/passepartout/` (deployed lisp/org files)
|
||||
- **Config:** `~/.config/passepartout/.env`
|
||||
|
||||
---
|
||||
|
||||
## Key Libraries
|
||||
|
||||
- **Croatoan** — 0-based coordinates, `(setf (cursor-position win) '(y x))` for cursor, `add-string` with `:y`/`:x` keyword args. Source: `~/quicklisp/dists/quicklisp/software/croatoan-20241012-git/src/`
|
||||
- **Babel** — string encoding/decoding
|
||||
- **usocket** — TCP sockets
|
||||
- **bordeaux-threads** — threading primitives
|
||||
@@ -2,10 +2,10 @@
|
||||
#+AUTHOR: Amr
|
||||
#+CREATED: [2026-03-17 Tue]
|
||||
#+UPDATED: [2026-04-08 Wed]
|
||||
#+FILETAGS: :memex:psf:org-agent:lisp:sovereignty:
|
||||
#+FILETAGS: :memex:psf:passepartout:lisp:sovereignty:
|
||||
|
||||
* Overview
|
||||
The *Master Memex* is a sovereign, neurosymbolic intelligence organization system. It is not merely a collection of notes, but a live, programmable environment—a **Personal Software Foundry (PSF)**—where a human (the Sovereign Executive) and agentic co-processes (the `org-agent` kernel and Gemini CLI) collaborate within a shared address space.
|
||||
The *Master Memex* is a sovereign, neurosymbolic intelligence organization system. It is not merely a collection of notes, but a live, programmable environment—a **Personal Software Foundry (PSF)**—where a human (the Sovereign Executive) and agentic co-processes (the `passepartout` kernel and opencode) collaborate within a shared address space.
|
||||
|
||||
This system synthesizes three core organizational methodologies into a unified "Lisp Machine" experience:
|
||||
- *Zettelkasten:* For atomic, evergreen, and interlinked knowledge.
|
||||
@@ -33,10 +33,10 @@ The workspace is strictly divided into these zones to facilitate both human ergo
|
||||
* The Agentic Inhabitants
|
||||
The Memex is inhabited by autonomous agents that operate as "Probabilistic" (probabilistic/neural) and "Deterministic" (deterministic/symbolic) layers:
|
||||
|
||||
** [[file:projects/org-agent/README.org][org-agent (The Kernel)]]
|
||||
** [[file:projects/passepartout/README.org][passepartout (The Kernel)]]
|
||||
A Common Lisp microkernel that maintains a live, threaded Object-Store in RAM. It uses Org-mode as its native Abstract Syntax Tree (AST), allowing it to "perceive" and "act" on the Memex with structural precision.
|
||||
|
||||
** Gemini CLI
|
||||
** opencode
|
||||
A strategic orchestrator that handles large-scale batch tasks, research, and planning. It operates according to the *PSF Consensus Loop* (Demand -> Blueprint -> Success -> Build -> Chaos -> Memory).
|
||||
|
||||
* The Cognitive Architecture: A Session-less Mind
|
||||
|
||||
@@ -1,36 +0,0 @@
|
||||
# Implementation Plan: The Micro-Loader (Boot Sequence Refactor)
|
||||
|
||||
## Objective
|
||||
Consolidate and harden the kernel's skill-loading logic into a stateful "Micro-Loader." This improves boot reliability, provides clear error reporting for malformed skills, and centralizes all capability management within the `skills` module.
|
||||
|
||||
## Key Files & Context
|
||||
- **Target:** `projects/org-agent/literate/skills.org` (Consolidating logic here).
|
||||
- **Target:** `projects/org-agent/literate/core.org` (Moving `load-all-skills` out of here).
|
||||
- **Mandate:** Syntax Pre-flight and Dependency Assertion.
|
||||
|
||||
## Implementation Steps
|
||||
|
||||
### 1. Define the Skill Catalog
|
||||
- Introduce `*skill-catalog*` in `skills.lisp` to track metadata and load status for every skill file found in `SKILLS_DIR`.
|
||||
- Statuses: `:discovered`, `:loading`, `:ready`, `:failed`.
|
||||
|
||||
### 2. Refactor `load-skill-from-org` (Harden)
|
||||
- **Syntax Check:** Invoke `validate-lisp-syntax` before evaluation.
|
||||
- **Dependency Check:** If `#+DEPENDS_ON` refers to a skill that failed or is missing, mark this skill as `:failed` immediately with a clear error.
|
||||
- **Detailed Logging:** Record the specific reason for failure (syntax, timeout, runtime error) in the catalog.
|
||||
|
||||
### 3. Implement `initialize-all-skills` (The Orchestrator)
|
||||
- Move the directory scanning and loop logic from `core.lisp` into `skills.lisp`.
|
||||
- This function will:
|
||||
1. Scan `SKILLS_DIR`.
|
||||
2. Populate the catalog.
|
||||
3. Run the topological sort.
|
||||
4. Execute the load loop with timeouts.
|
||||
5. Print a final "Boot Summary" report.
|
||||
|
||||
### 4. Simplify Kernel Boot
|
||||
- Update `start-daemon` in `core.lisp` to call `(initialize-all-skills)` instead of the old `load-all-skills`.
|
||||
|
||||
## Phase E: Chaos (Verification)
|
||||
- **Integrity Test:** Add a test that verifies `initialize-all-skills` correctly identifies a missing dependency and prevents the dependent skill from attempting to load.
|
||||
- **Report Test:** Verify that the skill catalog correctly reflects the status of loaded vs. failed skills.
|
||||
18
check.lisp
Normal file
@@ -0,0 +1,18 @@
|
||||
(handler-case
|
||||
(with-open-file (s "/home/user/memex/projects/passepartout/skills/org-skill-config-manager.org")
|
||||
(loop for line = (read-line s nil)
|
||||
while line
|
||||
do (when (search "#+begin_src lisp" line)
|
||||
(let ((block ""))
|
||||
(loop for l = (read-line s nil)
|
||||
while (and l (not (search "#+end_src" l)))
|
||||
do (setf block (concatenate 'string block l (string #\Newline))))
|
||||
(handler-case
|
||||
(with-input-from-string (in block)
|
||||
(loop for form = (read in nil :eof)
|
||||
until (eq form :eof)))
|
||||
(error (c)
|
||||
(format t "Error in block beginning with ~a: ~a~%"
|
||||
(subseq block 0 (min 30 (length block)))
|
||||
c)))))))
|
||||
(error (c) (format t "General error: ~a~%" c)))
|
||||
@@ -27,10 +27,10 @@ Chronological record of all meetings, fleeting notes, and raw conversation logs
|
||||
## Major System Developments
|
||||
|
||||
### Three OpenClaw Skills Deployed
|
||||
Created and deployed three integrated skills for the org-agent-memex system:
|
||||
- *org-agent-memex-zettlekasten*: Nightly distillation of daily logs into atomic notes
|
||||
- *org-agent-memex-gtd*: Automated task promotion and GTD workflow management
|
||||
- *org-agent-memex-workbreakdown*: Meta-cognitive skill for task decomposition to prevent context saturation
|
||||
Created and deployed three integrated skills for the opencortex-memex system:
|
||||
- *opencortex-memex-zettlekasten*: Nightly distillation of daily logs into atomic notes
|
||||
- *opencortex-memex-gtd*: Automated task promotion and GTD workflow management
|
||||
- *opencortex-memex-workbreakdown*: Meta-cognitive skill for task decomposition to prevent context saturation
|
||||
|
||||
All skills follow the established pattern: SKILL.md with YAML frontmatter, README.md for users, and integration with the PARA + Atomic Notes (Zettelkasten) + GTD workflow.
|
||||
|
||||
@@ -93,10 +93,10 @@ Awaiting pressure-testing session for 21-layer audit assumptions. All building p
|
||||
## Major System Developments
|
||||
|
||||
### Three OpenClaw Skills Deployed
|
||||
Created and deployed three integrated skills for the org-agent-memex system:
|
||||
- *org-agent-memex-zettlekasten*: Nightly distillation of daily logs into atomic notes
|
||||
- *org-agent-memex-gtd*: Automated task promotion and GTD workflow management
|
||||
- *org-agent-memex-workbreakdown*: Meta-cognitive skill for task decomposition to prevent context saturation
|
||||
Created and deployed three integrated skills for the opencortex-memex system:
|
||||
- *opencortex-memex-zettlekasten*: Nightly distillation of daily logs into atomic notes
|
||||
- *opencortex-memex-gtd*: Automated task promotion and GTD workflow management
|
||||
- *opencortex-memex-workbreakdown*: Meta-cognitive skill for task decomposition to prevent context saturation
|
||||
|
||||
All skills follow the established pattern: SKILL.md with YAML frontmatter, README.md for users, and integration with the PARA + Atomic Notes (Zettelkasten) + GTD workflow.
|
||||
|
||||
@@ -159,10 +159,10 @@ Awaiting pressure-testing session for 21-layer audit assumptions. All building p
|
||||
## Major System Developments
|
||||
|
||||
### Three OpenClaw Skills Deployed
|
||||
Created and deployed three integrated skills for the org-agent-memex system:
|
||||
- *org-agent-memex-zettlekasten*: Nightly distillation of daily logs into atomic notes
|
||||
- *org-agent-memex-gtd*: Automated task promotion and GTD workflow management
|
||||
- *org-agent-memex-workbreakdown*: Meta-cognitive skill for task decomposition to prevent context saturation
|
||||
Created and deployed three integrated skills for the opencortex-memex system:
|
||||
- *opencortex-memex-zettlekasten*: Nightly distillation of daily logs into atomic notes
|
||||
- *opencortex-memex-gtd*: Automated task promotion and GTD workflow management
|
||||
- *opencortex-memex-workbreakdown*: Meta-cognitive skill for task decomposition to prevent context saturation
|
||||
|
||||
All skills follow the established pattern: SKILL.md with YAML frontmatter, README.md for users, and integration with the PARA + Atomic Notes (Zettelkasten) + GTD workflow.
|
||||
|
||||
@@ -225,10 +225,10 @@ Awaiting pressure-testing session for 21-layer audit assumptions. All building p
|
||||
## Major System Developments
|
||||
|
||||
### Three OpenClaw Skills Deployed
|
||||
Created and deployed three integrated skills for the org-agent-memex system:
|
||||
- *org-agent-memex-zettlekasten*: Nightly distillation of daily logs into atomic notes
|
||||
- *org-agent-memex-gtd*: Automated task promotion and GTD workflow management
|
||||
- *org-agent-memex-workbreakdown*: Meta-cognitive skill for task decomposition to prevent context saturation
|
||||
Created and deployed three integrated skills for the opencortex-memex system:
|
||||
- *opencortex-memex-zettlekasten*: Nightly distillation of daily logs into atomic notes
|
||||
- *opencortex-memex-gtd*: Automated task promotion and GTD workflow management
|
||||
- *opencortex-memex-workbreakdown*: Meta-cognitive skill for task decomposition to prevent context saturation
|
||||
|
||||
All skills follow the established pattern: SKILL.md with YAML frontmatter, README.md for users, and integration with the PARA + Atomic Notes (Zettelkasten) + GTD workflow.
|
||||
|
||||
@@ -291,10 +291,10 @@ Awaiting pressure-testing session for 21-layer audit assumptions. All building p
|
||||
## Major System Developments
|
||||
|
||||
### Three OpenClaw Skills Deployed
|
||||
Created and deployed three integrated skills for the org-agent-memex system:
|
||||
- *org-agent-memex-zettlekasten*: Nightly distillation of daily logs into atomic notes
|
||||
- *org-agent-memex-gtd*: Automated task promotion and GTD workflow management
|
||||
- *org-agent-memex-workbreakdown*: Meta-cognitive skill for task decomposition to prevent context saturation
|
||||
Created and deployed three integrated skills for the opencortex-memex system:
|
||||
- *opencortex-memex-zettlekasten*: Nightly distillation of daily logs into atomic notes
|
||||
- *opencortex-memex-gtd*: Automated task promotion and GTD workflow management
|
||||
- *opencortex-memex-workbreakdown*: Meta-cognitive skill for task decomposition to prevent context saturation
|
||||
|
||||
All skills follow the established pattern: SKILL.md with YAML frontmatter, README.md for users, and integration with the PARA + Zettelkasten + GTD workflow.
|
||||
|
||||
@@ -357,10 +357,10 @@ Awaiting pressure-testing session for 21-layer audit assumptions. All building p
|
||||
## Major System Developments
|
||||
|
||||
### Three OpenClaw Skills Deployed
|
||||
Created and deployed three integrated skills for the org-agent-memex system:
|
||||
- *org-agent-memex-zettlekasten*: Nightly distillation of daily logs into atomic notes
|
||||
- *org-agent-memex-gtd*: Automated task promotion and GTD workflow management
|
||||
- *org-agent-memex-workbreakdown*: Meta-cognitive skill for task decomposition to prevent context saturation
|
||||
Created and deployed three integrated skills for the opencortex-memex system:
|
||||
- *opencortex-memex-zettlekasten*: Nightly distillation of daily logs into atomic notes
|
||||
- *opencortex-memex-gtd*: Automated task promotion and GTD workflow management
|
||||
- *opencortex-memex-workbreakdown*: Meta-cognitive skill for task decomposition to prevent context saturation
|
||||
|
||||
All skills follow the established pattern: SKILL.md with YAML frontmatter, README.md for users, and integration with the PARA + Zettelkasten + GTD workflow.
|
||||
|
||||
|
||||
@@ -5,10 +5,10 @@
|
||||
* Activities
|
||||
** OpenClaw Resilience and Memory Restoration
|
||||
- *Problem:* Agent suffered from "context amnesia" after a session reset at 08:10 AM, losing the path to `emacs.org` and failing to rediscover it.
|
||||
- *Root Cause:* Search depth was too shallow (workspace root only), and the `org-agent-memex-gtd` skill was not in the executable skills directory.
|
||||
- *Root Cause:* Search depth was too shallow (workspace root only), and the `opencortex-memex-gtd` skill was not in the executable skills directory.
|
||||
- *Resolution:*
|
||||
- Identified canonical path: `/home/amr/.openclaw/workspace/memex/5_projects/dotemacs/emacs.org`.
|
||||
- Restored skills by copying `org-agent-memex-gtd`, `org-agent-memex-workbreakdown`, and `org-agent-memex-zettlekasten` to standard `.openclaw/skills/` directory.
|
||||
- Restored skills by copying `opencortex-memex-gtd`, `opencortex-memex-workbreakdown`, and `opencortex-memex-zettlekasten` to standard `.openclaw/skills/` directory.
|
||||
- Synced `GTD.org` and `memex/gtd.org` to ensure "Ground Truth" is consistent.
|
||||
|
||||
** Emacs Configuration Modularization
|
||||
|
||||
15
fedora-43-repos.repo
Normal file
@@ -0,0 +1,15 @@
|
||||
[fedora]
|
||||
name=Fedora 43 - x86_64
|
||||
enabled=1
|
||||
metadata_expire=1h
|
||||
baseurl=https://mirrors.fedoraproject.org/metalink?repo=fedora-43&arch=x86_64
|
||||
type=rpm-md
|
||||
gpgcheck=0
|
||||
|
||||
[updates]
|
||||
name=Fedora 43 - x86_64 - Updates
|
||||
enabled=1
|
||||
metadata_expire=1h
|
||||
baseurl=https://mirrors.fedoraproject.org/metalink?repo=fedora-43-updates&arch=x86_64
|
||||
type=rpm-md
|
||||
gpgcheck=0
|
||||
610
gtd.org
@@ -9,376 +9,39 @@
|
||||
:PROPERTIES:
|
||||
:ID: gtd-actions
|
||||
:END:
|
||||
** DONE Fix Modular Emacs configuration loading and org-capture templates
|
||||
- Restored ef-themes configuration in emacs-core.org which was lost during refactoring.
|
||||
CLOSED: [2026-04-21 Tue 15:00]
|
||||
- Resolved conflict where multiple modules were overwriting ~/.emacs.d/custom.el.
|
||||
- Switched from defvar to setq for org-capture-templates to ensure it applies on boot.
|
||||
** DONE Reorganize Emacs configuration files into the dotemacs project
|
||||
- Deleted outdated configuration modules in ~/memex/projects/dotemacs/.
|
||||
- Moved live configuration files from ~/memex/system/ to ~/memex/projects/dotemacs/.
|
||||
- Organized modules into a /modules subdirectory and snippets into /templates.
|
||||
- Updated ~/.emacs and internal Org-babel paths to reflect the new location.
|
||||
CLOSED: [2026-04-21 Tue 16:45]
|
||||
** DONE Fix emacsclient defaulting to terminal mode
|
||||
- Identified that 'passepartout' setup.org was hardcoded to install emacs-nox.
|
||||
- Reinstalled emacs-gtk and restored GUI support.
|
||||
- Patched projects/passepartout/harness/setup.org to use 'emacs' metapackage.
|
||||
- Restored missing modules/emacs-ui.org and added it to dotemacs.org.
|
||||
- Added 'em' alias to ~/.bash_aliases for persistent GUI frame creation.
|
||||
CLOSED: [2026-04-21 Tue 17:15]
|
||||
:END:
|
||||
|
||||
* Projects
|
||||
:PROPERTIES:
|
||||
:ID: gtd-projects
|
||||
:END:
|
||||
|
||||
** NEXT Org-agent v1.0
|
||||
:PROPERTIES:
|
||||
:ID: proj-org-agent-v1-0
|
||||
:Engineering-STATE: D: BUILD
|
||||
:CREATED: [2026-03-09 Mon 14:23]
|
||||
:END:
|
||||
Org-agent: A Neurosymbolic AI Agent.
|
||||
|
||||
*** PHASE: SOVEREIGN MVP (v0.1.0 Released)
|
||||
:PROPERTIES:
|
||||
:ID: proj-mvp-v0-1-0
|
||||
:END:
|
||||
The "Zero-to-One" release. The agent must be mathematically secure, CLI-first, and capable of autonomous Memex maintenance.
|
||||
|
||||
**** DONE 1. Harness Hardening (The Final Audit)
|
||||
- [X] Audit remaining core skills (`org-skill-policy.org`, `org-skill-bouncer.org`) to the new Literate Granularity standard.
|
||||
- [X] Implement Verification Lock: Ensure `MANDATORY_SKILLS` pass `validate-lisp-syntax` before boot proceeds.
|
||||
- [X] Logging & Transparency: Ensure `context-get-system-logs` is utilized by the Reason engine to explain blocked actions.
|
||||
|
||||
**** DONE 2. The Sovereign Scribe & Gardener (The Primary Value Prop)
|
||||
- [X] Implement `org-skill-scribe.org`: Background worker that distills daily chronological logs into structured Zettelkasten notes.
|
||||
- [X] Implement `org-skill-gardener.org`: Heartbeat-driven skill that autonomously flags orphaned nodes and repairs broken links.
|
||||
|
||||
**** DONE 3. The Zero-to-One Experience (setup.org)
|
||||
- [X] Consolidate installation instructions, `onboard.sh`, and `Dockerfile` into a single, literate `setup.org` file.
|
||||
- [X] Ensure the setup process interactively builds the `.env` and verifies SBCL/Quicklisp dependencies.
|
||||
|
||||
**** TODO 4. CLI-First Actuation
|
||||
- [ ] Verify the `cli` actuator and inbound gateway handle standard I/O interaction gracefully, treating Emacs as an optional power-user viewport.
|
||||
|
||||
*** PHASE: INTERACTIVE REFINEMENT (v0.2.0 Target)
|
||||
:PROPERTIES:
|
||||
:ID: proj-refinement-v0-2-0
|
||||
:END:
|
||||
Elevating the user interface from raw shell piping to a high-fidelity, native Lisp experience.
|
||||
|
||||
**** TODO 1. Common Lisp TUI (The "gemini-cli" parity)
|
||||
- [ ] Implement a rich, interactive TUI natively in Common Lisp (e.g., via `cl-charms`, `croatoan`, or `cl-ncurses`).
|
||||
- [ ] Support syntax highlighting for code blocks and Org-mode syntax.
|
||||
- [ ] Implement a fixed bottom input box with command history.
|
||||
- [ ] Implement Slash Commands (`/help`, `/exit`, `/clear`, `/skill-load`).
|
||||
|
||||
**** TODO 2. Direct Lisp-to-Terminal Actuation
|
||||
- [ ] Refactor the `:cli` actuator to use the native TUI rendering instead of raw stream printing.
|
||||
|
||||
*** PHASE: EVOLUTIONARY ROADMAP
|
||||
**** TODO v1.0.0 (Phase 2.5): The Verified Wrapper (SOTA Parity)
|
||||
|
||||
- Complete Formal Verification gates for external tools.
|
||||
- Achieve secure, end-to-end autonomous engineering workflows.
|
||||
**** TODO v2.0.0 (Phase 3): Cannibalizing the Toolchain
|
||||
- Ingest DOM as native Lisp AST (Cannibalize Browser).
|
||||
- Replace string-based bash with native OS bindings (Cannibalize Shell).
|
||||
**** TODO v3.0.0 (Phase 4): True Symbolic Determinism
|
||||
- Relegate LLM to Semantic Translator.
|
||||
- Implement Deterministic Planner (The Solver).
|
||||
- Implement Self-Correcting Syntax Gates.
|
||||
**** TODO v4.0.0+ (Phase 5): The Neurosymbolic Singularity
|
||||
- Homoiconic Self-Writing (Hot-reloading literate source).
|
||||
- Asynchronous Swarm Cognition (Jailed sub-agents).
|
||||
|
||||
*** PHASE: FOUNDATION (Complete)
|
||||
**** DONE Draft Swank/Socket communication protocol between CL and Emacs
|
||||
:PROPERTIES:
|
||||
:CREATED: [2026-03-22 Sun 14:00]
|
||||
:ASSIGNED: Agent
|
||||
:END:
|
||||
**** DONE Implement core Perceive-Think-Act loop in Common Lisp
|
||||
:PROPERTIES:
|
||||
:CREATED: [2026-03-22 Sun 14:00]
|
||||
:ASSIGNED: Agent
|
||||
:END:
|
||||
**** DONE Implement Persistent Object-Store for Org entities in CL
|
||||
:PROPERTIES:
|
||||
:CREATED: [2026-03-22 Sun 16:30]
|
||||
:ASSIGNED: Agent
|
||||
:END:
|
||||
**** DONE Implement LLM Connector (Probabilistic Engine) in CL Daemon
|
||||
:PROPERTIES:
|
||||
:CREATED: [2026-03-22 Sun 17:30]
|
||||
:ASSIGNED: Agent
|
||||
:END:
|
||||
**** DONE Design Deterministic Engine Heuristics (Lisp logic over Memory)
|
||||
:PROPERTIES:
|
||||
:CREATED: [2026-03-22 Sun 17:30]
|
||||
:END:
|
||||
**** DONE Achieve Phase 3: The Self-Editing Kernel
|
||||
:PROPERTIES:
|
||||
:CREATED: [2026-03-23 Mon 16:30]
|
||||
:END:
|
||||
- Jailing & Sandboxing implemented
|
||||
- Org-Native Skill Standard established
|
||||
- Telemetry & Introspection API active
|
||||
|
||||
*** PHASE: THE SOVEREIGN BOUNDARY (Core vs Skills Refactor)
|
||||
:PROPERTIES:
|
||||
:ID: proj-sovereign-boundary
|
||||
:END:
|
||||
Slim down the org-agent microharness by moving non-essential cognitive functions to hot-reloadable user-space skills.
|
||||
|
||||
**** DONE Extract LLM Provider Routing to a Skill (neuro.lisp)
|
||||
**** DONE Extract Vector Embedding Algorithms to a Skill (embedding.lisp)
|
||||
CLOSED: [2026-04-12 Sun 14:10]
|
||||
:PROPERTIES:
|
||||
:ID: extract-embedding-skill
|
||||
:END:
|
||||
- Created `org-skill-embedding.org`.
|
||||
- Moved logic to `src/embedding-logic.lisp` via tangling.
|
||||
- Updated `system-definition.org`.
|
||||
**** DONE Extract Sparse Tree Context Pruning Strategies to a Skill (context.lisp)
|
||||
CLOSED: [2026-04-12 Sun 14:25]
|
||||
:PROPERTIES:
|
||||
:ID: extract-context-skill
|
||||
:END:
|
||||
- Created `org-skill-peripheral-vision.org`.
|
||||
- Moved logic to `src/context-logic.lisp` via tangling.
|
||||
- Updated `system-definition.org`.
|
||||
**** DONE Implement `org-skill-peripheral-vision` (Moving embedding logic out of core)
|
||||
CLOSED: [2026-04-12 Sun 14:25]
|
||||
:PROPERTIES:
|
||||
:ID: impl-peripheral-vision
|
||||
:END:
|
||||
**** DONE Implement communication protocol Schema Validation (Prevent reader macro injection in communication.lisp)
|
||||
CLOSED: [2026-04-12 Sun 14:45]
|
||||
:PROPERTIES:
|
||||
:ID: communication-protocol-schema-validation
|
||||
:END:
|
||||
- Created `org-skill-protocol-validator.org`.
|
||||
- Integrated `validate-communication-protocol-schema` into `communication.org`.
|
||||
- Added `protocol-validator.lisp` to system definition.
|
||||
**** DONE Implement Pluggable communication protocol Integrity Hashing (Core interface, Skill-based algorithms)
|
||||
CLOSED: [2026-04-12 Sun 15:15]
|
||||
:PROPERTIES:
|
||||
:ID: communication-protocol-integrity-hashing
|
||||
:END:
|
||||
- Integrated HMAC-SHA256 (`ironclad:make-mac`) in `literate/communication.org`.
|
||||
**** DONE Implement Native Lisp Merkle-Tree Versioning (Short-term undo buffer in memory.lisp)
|
||||
CLOSED: [2026-04-12 Sun 19:15]
|
||||
**** DONE Performance: Implement Copy-on-Write (CoW) or Persistent Data Structures for Memory
|
||||
CLOSED: [2026-04-12 Sun 19:15]
|
||||
**** DONE Feature: Implement Latent Reflection (Proactive Gardening) using heartbeat idle cycles
|
||||
CLOSED: [2026-04-12 Sun 19:15]
|
||||
**** DONE Simplification: Refactor Cognitive Loop into a Unified Reactive Signal Pipeline
|
||||
CLOSED: [2026-04-12 Sun 19:15]
|
||||
**** DONE Resilience: Implement Micro-Rollbacks for the Immune System
|
||||
CLOSED: [2026-04-12 Sun 19:15]
|
||||
**** DONE Implement `org-skill-memory-archivist` (Long-term IPFS checkpointing and P2P sync)
|
||||
CLOSED: [2026-04-12 Sun 19:15]
|
||||
**** DONE Implement True Lisp Sandboxing (eval-safe mechanism in core and policy in skills)
|
||||
CLOSED: [2026-04-12 Sun 19:15]
|
||||
**** DONE Decouple Vendor Logic from Probabilistic Engine (Move Google/Anthropic/OpenAI to Skills)
|
||||
CLOSED: [2026-04-12 Sun 19:15]
|
||||
**** DONE Component IV: Comprehensive Core Skill Audit (Review all 39 skills)
|
||||
CLOSED: [2026-04-12 Sun 19:45]
|
||||
:PROPERTIES:
|
||||
:ID: core-skill-audit-task
|
||||
:END:
|
||||
|
||||
**** DONE Consolidation I: Unified LLM Gateway (Anthropic, Gemini, Groq, OpenAI, etc.)
|
||||
**** DONE Consolidation II: Credentials Vault (Secure Enclave & Masked Logging)
|
||||
**** DONE Consolidation III: Homoiconic Memory (Unified Grammar, Bridge, & ID Generation)
|
||||
**** DONE Consolidation IV: State Persistence Layer (Unified Local & IPFS Checkpointing)
|
||||
**** DONE Consolidation V: Event Orchestrator (Unified Cron, Hooks, & Cognitive Routing)
|
||||
**** DONE Consolidation VI: Task Orchestrator (Task Integrity, Delegation, & Consensus)
|
||||
CLOSED: [2026-04-11 Sat 13:45]
|
||||
:PROPERTIES:
|
||||
:ID: task-orchestrator-consolidation
|
||||
:END:
|
||||
- Implemented Parallel Multi-Backend Consensus in neuro.lisp.
|
||||
- Implemented Task Integrity (GTD semantics) in symbolic.lisp.
|
||||
- Integrated Consensus Gate and Delegation hooks in core.lisp.
|
||||
- Verified with new task-orchestrator-tests.lisp.
|
||||
**** IN-PROGRESS Full review of org-agent's harness
|
||||
:PROPERTIES:
|
||||
:CREATED: [2026-04-13 Mon 13:30]
|
||||
:ASSIGNED: Agent
|
||||
:END:
|
||||
- [X] Audit terminology: Replaced OACP with "communication protocol" workspace-wide.
|
||||
- [X] Audit boot sequence: Synchronized loader with `org-skill-policy.org`.
|
||||
- [-] Audit core Perceive-Think-Act loop.
|
||||
- [X] Verified protocol framing and reader jailing (`*read-eval* nil`).
|
||||
- [X] Refactored `loop.org` for literate granularity and configuration externalization.
|
||||
- [X] Improved error handling (restricted rollback) and added graceful shutdown.
|
||||
- [X] **GAP:** Missing symbolic guard check in `act-gate` (Stage 3: Act).
|
||||
- [ ] Ensure alignment with System Policy and Engineering Standards.
|
||||
**** TODO Wake up the Scribe (Implement autonomous weekly Journal-to-Ledger distillation in org-skill-scribe.org)
|
||||
**** TODO Implement `org-skill-lisp-repair` (Self-correcting syntax gate for Deterministic Engine)
|
||||
CLOSED: [2026-04-11 Sat 15:10]
|
||||
:PROPERTIES:
|
||||
:ID: lisp-repair-gate
|
||||
:END:
|
||||
- Implemented asynchronous, event-driven repair logic.
|
||||
- Decoupled core from repair logic (emits `:syntax-error` event).
|
||||
- Proven via lisp-repair-tests.lisp (Asynchronous flow verified).
|
||||
**** DONE Implement `org-skill-formal-verification` (Prove safety of high-impact actions)
|
||||
CLOSED: [2026-04-11 Sat 18:15]
|
||||
:PROPERTIES:
|
||||
:ID: formal-verification-task
|
||||
:END:
|
||||
- Implemented `org-skill-formal-verification.org`.
|
||||
- Created Lisp-Native Symbolic Prover for security invariants.
|
||||
- Implemented `path-confinement` invariant (restricted to memex root).
|
||||
- Implemented `no-network-exfil` invariant (blocking nc, ssh, etc).
|
||||
- Verified with `formal-verification-tests.lisp`.
|
||||
|
||||
|
||||
*** PHASE: DETERMINISTIC ENGINE REFINEMENT
|
||||
**** DONE Verify Autonomous Self-Fix Loop
|
||||
CLOSED: [2026-04-11 Sat 14:20]
|
||||
:PROPERTIES:
|
||||
:CREATED: [2026-03-23 Mon 16:30]
|
||||
:END:
|
||||
- Proven repair capability via self-fix-tests.lisp.
|
||||
- Verified surgical code patching and hot-reloading.
|
||||
- Documentation and RCA complete.
|
||||
**** DONE Implement "Planning Mode" (Deterministic Engine Bouncer) for Complex Actions
|
||||
CLOSED: [2026-04-11 Sat 15:30]
|
||||
:PROPERTIES:
|
||||
:CREATED: [2026-04-01 Wed 17:00]
|
||||
:END:
|
||||
- Implemented `bouncer-check` interceptor in `symbolic.lisp`.
|
||||
- Created `org-skill-bouncer.org` for flight plan serialization.
|
||||
- Verified asynchronous Org-native approval loop via `bouncer-tests.lisp`.
|
||||
**** DONE Implement Authorization Gate (communication protocol) for "Planning Mode"
|
||||
CLOSED: [2026-04-11 Sat 15:30]
|
||||
:PROPERTIES:
|
||||
:CREATED: [2026-04-01 Wed 17:00]
|
||||
:END:
|
||||
- Integrated with Org-mode state transitions (`PLAN` -> `APPROVED`).
|
||||
- Leveraged Memory event bus for asynchronous re-injection.
|
||||
|
||||
**** DONE Refactor Architecture Terminology (Associative -> Probabilistic, Deliberate -> Deterministic)
|
||||
CLOSED: [2026-04-12 Sun 21:00]
|
||||
:PROPERTIES:
|
||||
:ID: terminology-refactor-task
|
||||
:END:
|
||||
- Updated codebase-wide terminology to use Probabilistic/Deterministic Engines.
|
||||
- Replaced System 1/2 with Probabilistic/Deterministic Engines respectively.
|
||||
|
||||
*** TRACK: SECURITY & CONTAINMENT (The 5-Vector Bouncer Matrix)
|
||||
**** DONE Implement Path-Based Scoping for File Writes (DNA/State vs Work)
|
||||
CLOSED: [2026-04-12 Sun 15:15]
|
||||
:PROPERTIES:
|
||||
:ID: path-based-scoping
|
||||
:END:
|
||||
- Implemented as `path-confinement` invariant in `org-skill-formal-verification.org`.
|
||||
**** DONE Implement Network Exfiltration Gate (Intercept generic HTTP requests)
|
||||
CLOSED: [2026-04-12 Sun 15:15]
|
||||
:PROPERTIES:
|
||||
:ID: network-exfiltration-gate
|
||||
:END:
|
||||
- Implemented as `no-network-exfil` invariant in `org-skill-formal-verification.org`.
|
||||
**** TODO Implement Secret Exposure Gate (Intercept reads to .env, keys)
|
||||
|
||||
*** TRACK: INTELLIGENCE & ACTUATION (The Engines)
|
||||
**** DONE Verify individual provider track (Anthropic, Gemini, Groq, OpenAI, OpenRouter, Ollama)
|
||||
CLOSED: [2026-04-11 Sat 15:45]
|
||||
:PROPERTIES:
|
||||
:ID: provider-verification-track
|
||||
:END:
|
||||
- Added unit tests for each provider in `llm-gateway-tests.lisp`.
|
||||
- Mocked `dex:post` to verify JSON payload formatting and response parsing.
|
||||
- Implemented robust `get-nested` helper to handle various provider structures.
|
||||
- Integrated `llm-gateway` and `credentials-vault` into `org-agent.asd`.
|
||||
**** TODO Verify org-skill-shell-actuator formal safety harnesses
|
||||
**** DONE Build Playwright-Python Bridge for high-fidelity browsing
|
||||
CLOSED: [2026-04-11 Sat 18:30]
|
||||
:PROPERTIES:
|
||||
:ID: playwright-bridge-task
|
||||
:END:
|
||||
- Created `scripts/browser-bridge.py` (Playwright wrapper).
|
||||
- Implemented `org-skill-playwright.org`.
|
||||
- Registered `:browser` cognitive tool (JS-rendering, text extraction, screenshots).
|
||||
- Updated `Dockerfile` with Python/Playwright dependencies.
|
||||
- Verified with `playwright-tests.lisp`.
|
||||
|
||||
|
||||
*** TRACK: COMMUNICATION & INTERFACES
|
||||
**** DONE Implement org-skill-gateway-telegram
|
||||
CLOSED: [2026-04-11 Sat 16:15]
|
||||
:PROPERTIES:
|
||||
:ID: gateway-telegram-task
|
||||
:END:
|
||||
- Implemented `org-skill-gateway-telegram.org`.
|
||||
- Added automated background polling for Telegram GetUpdates.
|
||||
- Implemented `:telegram` actuator for outbound responses.
|
||||
- Refactored `org-skill-chat` to be channel-aware.
|
||||
- Verified with `gateway-telegram-tests.lisp`.
|
||||
**** DONE Implement org-skill-gateway-signal
|
||||
CLOSED: [2026-04-11 Sat 16:50]
|
||||
:PROPERTIES:
|
||||
:ID: gateway-signal-task
|
||||
:END:
|
||||
- Implemented `org-skill-gateway-signal.org` (signal-cli wrapper).
|
||||
- Added background polling for `signal-cli receive --json`.
|
||||
- Implemented `:signal` actuator for outbound responses.
|
||||
- Updated `org-skill-chat` to support Signal channel.
|
||||
- Verified with `gateway-signal-tests.lisp`.
|
||||
**** DONE Implement org-skill-gateway-matrix
|
||||
CLOSED: [2026-04-11 Sat 17:15]
|
||||
:PROPERTIES:
|
||||
:ID: gateway-matrix-task
|
||||
:END:
|
||||
- Implemented `org-skill-gateway-matrix.org` (Client-Server API).
|
||||
- Added background polling for `/sync` with token persistence.
|
||||
- Implemented `:matrix` actuator for `m.room.message` delivery.
|
||||
- Updated `org-skill-chat` to support Matrix channel and room IDs.
|
||||
- Verified with `gateway-matrix-tests.lisp`.
|
||||
|
||||
*** TRACK: DEPLOYMENT & INFRASTRUCTURE
|
||||
**** DONE Create Dockerfile and docker-compose.yml for containerized setup
|
||||
CLOSED: [2026-04-11 Sat 17:30]
|
||||
:PROPERTIES:
|
||||
:ID: docker-infra-task
|
||||
:END:
|
||||
- Created `Dockerfile` (Debian-based, SBCL + Quicklisp + signal-cli).
|
||||
- Created `docker-compose.yml` with host-volume mapping for memex.
|
||||
- Created `docs/deployment.org` guide.
|
||||
**** TODO Create Bare Metal installation scripts/playbooks
|
||||
**** TODO Create LXC (Linux Containers) template/guide
|
||||
**** TODO Create VM Vagrantfiles/Cloud-init configs
|
||||
|
||||
*** TRACK: MAINTENANCE & HYGIENE
|
||||
**** TODO [RECURRING: Monthly] Review and test Infrastructure Dependency Upgrades
|
||||
:PROPERTIES:
|
||||
:ID: monthly-infra-audit
|
||||
:REPEAT_TO_STATE: TODO
|
||||
:END:
|
||||
- [ ] Check for new Debian security patches (`apt-get update` check).
|
||||
- [ ] Check for new `signal-cli` releases (compare vs v0.14.0).
|
||||
- [ ] Check for new Quicklisp distribution (monthly snapshot).
|
||||
- [ ] **Verification:** Update `Dockerfile`, run `docker-compose build --no-cache`, and execute full test suite.
|
||||
- [ ] If all tests pass, commit updated `Dockerfile` and `.asd` dependencies.
|
||||
|
||||
*** TRACK: COMMUNITY & DOCS
|
||||
**** TODO Write Quickstart Guide
|
||||
**** TODO Write Skill Creation Guide
|
||||
**** TODO Write Architecture Deep-Dive
|
||||
**** TODO Clean up GitHub repository structure and add CI/CD
|
||||
**** TODO Create Marketing Material (Landing page copy, diagrams)
|
||||
**** TODO Draft Release Plan checklist
|
||||
|
||||
*** SUB-PROJECT: THE BOOT SEQUENCE (skills.lisp)
|
||||
:PROPERTIES:
|
||||
:ID: proj-skill-boot-sequence
|
||||
:END:
|
||||
**** DONE Refactor `skills.lisp` into a Micro-Loader (Harness)
|
||||
CLOSED: [2026-04-12 Sun 19:10]
|
||||
**** DONE Implement Topological Sort based on `#+DEPENDS_ON:` tags
|
||||
CLOSED: [2026-04-12 Sun 15:15]
|
||||
:PROPERTIES:
|
||||
:ID: topological-sort-skills
|
||||
:END:
|
||||
- Implemented in `literate/skills.org`.
|
||||
**** DONE Enforce `org-skill-system-invariants` as the mandatory Gateway Skill (Loaded first)
|
||||
CLOSED: [2026-04-12 Sun 15:15]
|
||||
:PROPERTIES:
|
||||
:ID: enforce-mandatory-skill
|
||||
:END:
|
||||
- Enforced in `initialize-all-skills` in `literate/skills.org`.
|
||||
**** DONE Formalize the "Minimal Boot Set" (Router, Vision, Steward, Actuator)
|
||||
CLOSED: [2026-04-12 Sun 19:10]
|
||||
- Verified during the Minimal Boot Set Verification phase.
|
||||
** NEXT Passepartout v1.0
|
||||
:PROPERTIES:
|
||||
:ID: proj-opencortex-v1-0
|
||||
:Engineering-STATE: D: BUILD
|
||||
:CREATED: [2026-03-09 Mon 14:23]
|
||||
:END:
|
||||
OpenCortex: A Neurosymbolic AI Agent.
|
||||
|
||||
Full project tasks: [[file:projects/passepartout/TODO.org][Passepartout TODO.org]]
|
||||
|
||||
** NEXT Engineering Core: Role Automation
|
||||
:PROPERTIES:
|
||||
@@ -418,100 +81,15 @@ Drafting the automated behaviors for the Engineering loop.
|
||||
** Agora: Decentralized Social Network
|
||||
:PROPERTIES:
|
||||
:ID: agora-project
|
||||
:END:
|
||||
|
||||
*** DONE Create atomic notes for all 10 Agora sections
|
||||
:PROPERTIES:
|
||||
:CREATED: [2026-03-16 Mon 14:28]
|
||||
:END:
|
||||
:LOGBOOK:
|
||||
- State "DONE" from "TODO" [2026-03-17 Tue 12:00]
|
||||
:END:
|
||||
|
||||
All 14 atomic notes created and cross-referenced.
|
||||
Specification gaps filled, 10 requirements sections complete.
|
||||
Integration task tracking: [[file:projects/agora/TODO.org][Agora TODO.org]]
|
||||
Passepartout integration plan: See PHASE: PASSEPARTOUT INTEGRATION in the TODO.org
|
||||
|
||||
*** IN-PROGRESS Fill CRITICAL and HIGH gaps [5 CRITICAL / 15 HIGH complete]
|
||||
**** DONE Section 02: Identity - ALL HIGH priority gaps resolved
|
||||
**** DONE Section 03: Infrastructure - ALL HIGH priority gaps resolved
|
||||
*** IN-PROGRESS Fill MEDIUM gaps [14/14 complete]
|
||||
**** DONE ALL MEDIUM PRIORITY GAPS RESOLVED
|
||||
**** DONE ALL LOW PRIORITY GAPS RESOLVED (10/10)
|
||||
**** FINAL STATUS: All Agora specification gaps complete (CRITICAL, HIGH, MEDIUM, LOW)
|
||||
:PROPERTIES:
|
||||
:CREATED: [2026-03-17 Tue 23:30]
|
||||
:END:
|
||||
:LOGBOOK:
|
||||
- State "IN-PROGRESS" from "TODO" [2026-03-18 Wed 01:00]
|
||||
:END:
|
||||
|
||||
**** DONE CRITICAL: Contract TypeScript/Protobuf Interfaces → FILLED
|
||||
:PROPERTIES:
|
||||
:CREATED: [2026-03-18 Wed 01:00]
|
||||
:END:
|
||||
:LOGBOOK:
|
||||
- State "DONE" from "TODO" [2026-03-18 Wed 01:15]
|
||||
:END:
|
||||
- INTEGRATED: Reference added to agora-requirements-02-identity.org
|
||||
- LOCATION: memex/5_projects/agora/agora-contract-schemas.org
|
||||
|
||||
**** DONE CRITICAL: Content Flag Schema Validation → FILLED
|
||||
:PROPERTIES:
|
||||
:CREATED: [2026-03-18 Wed 01:00]
|
||||
:END:
|
||||
:LOGBOOK:
|
||||
- State "DONE" from "TODO" [2026-03-18 Wed 01:25]
|
||||
:END:
|
||||
- LOCATION: memex/5_projects/agora/agora-content-flag-schema.org
|
||||
- PENDING: Integration into agora-requirements-04-the-primitive.org
|
||||
|
||||
**** DONE CRITICAL: PDS-to-PDS Sync Protocol → FILLED
|
||||
:PROPERTIES:
|
||||
:CREATED: [2026-03-18 Wed 01:00]
|
||||
:END:
|
||||
:LOGBOOK:
|
||||
- State "DONE" from "TODO" [2026-03-18 Wed 01:35]
|
||||
:END:
|
||||
- LOCATION: memex/5_projects/agora/agora-pds-sync-communication.org
|
||||
- PENDING: Integration into agora-requirements-03-infrastructure.org
|
||||
|
||||
**** DONE CRITICAL: Delta Sync Protocol → FILLED
|
||||
:PROPERTIES:
|
||||
:CREATED: [2026-03-18 Wed 01:00]
|
||||
:END:
|
||||
:LOGBOOK:
|
||||
- State "DONE" from "TODO" [2026-03-18 Wed 01:50]
|
||||
:END:
|
||||
- LOCATION: memex/5_projects/agora/agora-delta-sync-communication.org
|
||||
- PENDING: Integration into agora-requirements-08-implementation.org
|
||||
|
||||
**** DONE CRITICAL: Persona Revocation Protocol → ALREADY-EXISTS
|
||||
:PROPERTIES:
|
||||
:CREATED: [2026-03-18 Wed 01:00]
|
||||
:END:
|
||||
:LOGBOOK:
|
||||
- State "DONE" from "TODO" [2026-03-18 Wed 02:00]
|
||||
:END:
|
||||
- NOTE: Complete specification already in agora-requirements-02-identity.org
|
||||
- ACTION: Gap was incorrectly flagged; no work required
|
||||
|
||||
**** TODO INTEGRATE scattered specifications into requirements files [1/4]
|
||||
:PROPERTIES:
|
||||
:CREATED: [2026-03-18 Wed 02:00]
|
||||
:END:
|
||||
|
||||
- NEXT: Move content flag schema into Section 04
|
||||
- NEXT: Move PDS sync into Section 03
|
||||
- NEXT: Move delta sync into Section 08
|
||||
- NEXT: Delete duplicate documents after integration
|
||||
|
||||
**** NEXT Fill HIGH priority gaps
|
||||
:PROPERTIES:
|
||||
:CREATED: [2026-03-18 Wed 02:00]
|
||||
:END:
|
||||
|
||||
- Relay Discovery Mechanism (Section 03)
|
||||
- Relay Pricing Logic (Section 03)
|
||||
- Shamir's Parameters (Section 03)
|
||||
- Key specs drafted: Contract TypeScript interfaces, Content Flag schema, PDS Sync, Delta Sync
|
||||
- Remaining: Integrate scattered spec docs into requirements files (content flag → Sect 04, PDS sync → Sect 03, delta sync → Sect 08)
|
||||
|
||||
** Emacs Configuration Refactor
|
||||
:PROPERTIES:
|
||||
@@ -621,7 +199,7 @@ Institutionalizing the virtual software house operating system.
|
||||
- State "DONE" from "NEXT" [2026-03-22 Sun 15:45]
|
||||
:END:
|
||||
|
||||
*** DONE Apply Engineering Loop to `org-agent` Phase 1 (Core Loop)
|
||||
*** DONE Apply Engineering Loop to `passepartout` Phase 1 (Core Loop)
|
||||
:PROPERTIES:
|
||||
:CREATED: [2026-03-22 Sun 15:30]
|
||||
:ASSIGNED: Technical Analyst
|
||||
@@ -650,7 +228,7 @@ Institutionalizing the virtual software house operating system.
|
||||
|
||||
IT infrastructure documentation, security hardening, and operational management.
|
||||
|
||||
See project documents: [[file:5_projects/infrastructure/README.org][infrastructure/README.org]]
|
||||
See project documents: [[file:projects/infrastructure/README.org][infrastructure/README.org]]
|
||||
|
||||
*** TODO Create current state assessment document
|
||||
:PROPERTIES:
|
||||
@@ -700,7 +278,7 @@ See project documents: [[file:5_projects/infrastructure/README.org][infrastructu
|
||||
|
||||
Business planning and revenue generation strategy.
|
||||
|
||||
See project documents: [[file:5_projects/revenue-sustainability/README.org][revenue-sustainability/README.org]]
|
||||
See project documents: [[file:projects/revenue-sustainability/README.org][revenue-sustainability/README.org]]
|
||||
|
||||
*** TODO Set up Stripe account (payment processing)
|
||||
:PROPERTIES:
|
||||
@@ -789,8 +367,8 @@ Defining and maintaining high-integrity KM and GTD workflows.
|
||||
:END:
|
||||
|
||||
Detected ~1,300 entries missing the `:CREATED:` property during the Engineering Phase E (Chaos) audit.
|
||||
- [ ] Implement inference logic to restore historical timestamps (via Git or context).
|
||||
- [ ] Batch repair `inbox-emacs.org`, `inbox-atoms.org`, and `inbox-posts.org`.
|
||||
**** TODO Implement inference logic to restore historical timestamps (via Git or context)
|
||||
**** TODO Batch repair `inbox-emacs.org`, `inbox-atoms.org`, and `inbox-posts.org`
|
||||
|
||||
** Agora Gap Verification
|
||||
:PROPERTIES:
|
||||
@@ -798,112 +376,7 @@ Detected ~1,300 entries missing the `:CREATED:` property during the Engineering
|
||||
:CREATED: [2026-03-17 Tue 15:15]
|
||||
:END:
|
||||
|
||||
Cross-reference consolidated gap analysis against actual requirement specs to identify real vs. already-addressed gaps.
|
||||
|
||||
See project documents: [[file:5_projects/agora/agora-consolidated-gap-analysis.org][agora-consolidated-gap-analysis.org]]
|
||||
|
||||
*DECOMPOSITION via Work Breakdown Skill:*
|
||||
Complexity check failed (51 gaps, 10 files, unpredictable scope). Breaking into atomic verification tasks.
|
||||
|
||||
*** DONE [1/7] Verify CRITICAL Gap: Contract TypeScript/Protobuf Interfaces → REAL GAP
|
||||
:PROPERTIES:
|
||||
:CREATED: [2026-03-17 Tue 15:15]
|
||||
:ASSIGNED: Agent
|
||||
:END:
|
||||
:LOGBOOK:
|
||||
- State "NEXT" from "TODO" [2026-03-17 Tue 15:15]
|
||||
- State "DONE" from "NEXT" [2026-03-17 Tue 15:59]
|
||||
:END:
|
||||
|
||||
*HOW:* Searched Section 02 for "interface", "type", "struct", "ContractTemplate". Found 5 TypeScript interfaces (all for revocation, not contracts). Line 951 explicitly states "Gap: No sample JSON for each contract type".
|
||||
|
||||
*WHAT:* *REAL GAP* - Contracts described conceptually, lack formal TypeScript/Protobuf schemas.
|
||||
|
||||
*** DONE [2/7] Verify CRITICAL Gap: Persona Revocation Protocol → IMPLEMENTED
|
||||
:PROPERTIES:
|
||||
:CREATED: [2026-03-17 Tue 15:15]
|
||||
:ASSIGNED: Agent
|
||||
:END:
|
||||
:LOGBOOK:
|
||||
- State "TODO" from "" [2026-03-17 Tue 15:15]
|
||||
- State "DONE" from "TODO" [2026-03-17 Tue 15:59]
|
||||
:END:
|
||||
|
||||
*HOW:* Checked Section 02 lines 229-260. Found complete protocol with 3 scenarios (Key Compromise, Persona Retirement, Master Key Compromise), 4-step process, and TypeScript interfaces.
|
||||
|
||||
*WHAT:* *ALREADY IMPLEMENTED* - Full protocol specification exists. Gap analysis incorrectly flagged this.
|
||||
|
||||
*** DONE [3/7] Verify CRITICAL Gap: PDS-to-PDS Sync Protocol → IMPLEMENTED
|
||||
:PROPERTIES:
|
||||
:CREATED: [2026-03-17 Tue 15:15]
|
||||
:ASSIGNED: Agent
|
||||
:END:
|
||||
:LOGBOOK:
|
||||
- State "TODO" from "" [2026-03-17 Tue 15:15]
|
||||
- State "DONE" from "TODO" [2026-03-17 Tue 15:59]
|
||||
:END:
|
||||
|
||||
*HOW:* Checked Section 03 lines 142-180. Found complete sync protocol with Concept, 3 Use Cases (Redundancy, Geographic Distribution, Load Balancing), and Merkle DAG Synchronization architecture.
|
||||
|
||||
*WHAT:* *ALREADY IMPLEMENTED* - Protocol fully specified. PDSSyncSession interface documented.
|
||||
|
||||
*** DONE [4/7] Verify CRITICAL Gap: Content Flag Schema Validation → REAL GAP
|
||||
:PROPERTIES:
|
||||
:CREATED: [2026-03-17 Tue 15:15]
|
||||
:ASSIGNED: Agent
|
||||
:END:
|
||||
:LOGBOOK:
|
||||
- State "TODO" from "" [2026-03-17 Tue 15:15]
|
||||
- State "DONE" from "TODO" [2026-03-17 Tue 15:59]
|
||||
:END:
|
||||
|
||||
*HOW:* Searched Section 05 for "JSON Schema", "flag", "validation". Found 9 flags described narratively (is_public, is_direct, is_ephemeral, etc.) at lines 24-34. No formal JSON Schema found.
|
||||
|
||||
*WHAT:* *REAL GAP* - Flags have informal descriptions but lack formal JSON Schema for validation.
|
||||
|
||||
*** DOING [5/7] [BATCH] Verify HIGH priority gaps (15 items) - DELEGATED TO SUB-AGENTS
|
||||
:PROPERTIES:
|
||||
:CREATED: [2026-03-17 Tue 15:15]
|
||||
:ASSIGNED: Agent
|
||||
:END:
|
||||
:LOGBOOK:
|
||||
- State "TODO" from "" [2026-03-17 Tue 15:15]
|
||||
- State "NEXT" from "TODO" [2026-03-17 Tue 16:04]
|
||||
- State "DOING" from "NEXT" [2026-03-17 Tue 16:05]
|
||||
:END:
|
||||
|
||||
*HOW:* Delegated to 5 sub-agents for parallel verification per section. Monitoring progress centrally.
|
||||
|
||||
*Sub-Agent Assignments:*
|
||||
- *Sub-Agent 1:* Section 02 Identity (4 HIGH gaps)
|
||||
- *Sub-Agent 2:* Section 03 Infrastructure (3 HIGH gaps)
|
||||
- *Sub-Agent 3:* Section 05 Public Space (4 HIGH gaps)
|
||||
- *Sub-Agent 4:* Section 06 Advanced Integration (2 HIGH gaps)
|
||||
- *Sub-Agent 5:* Sections 08-09 Implementation/Strategy (2 HIGH gaps)
|
||||
|
||||
*Current focus:* Orchestrating sub-agent verification. CRITICAL gaps complete (2 REAL, 2 IMPLEMENTED).
|
||||
|
||||
*** TODO [BATCH] Verify MEDIUM priority gaps (14 items)
|
||||
:PROPERTIES:
|
||||
:CREATED: [2026-03-17 Tue 15:15]
|
||||
:ASSIGNED: Agent
|
||||
:END:
|
||||
:LOGBOOK:
|
||||
- State "TODO" from "" [2026-03-17 Tue 15:15]
|
||||
:END:
|
||||
|
||||
Cross-reference 14 MEDIUM gaps. Defer until HIGH gaps complete.
|
||||
|
||||
*** TODO Generate verified gap report
|
||||
:PROPERTIES:
|
||||
:CREATED: [2026-03-17 Tue 15:15]
|
||||
:ASSIGNED: Agent
|
||||
:END:
|
||||
:LOGBOOK:
|
||||
- State "TODO" from "" [2026-03-17 Tue 15:15]
|
||||
:END:
|
||||
|
||||
Create summary documenting: which gaps are REAL (need implementation) vs. ALREADY-IMPLEMENTED (documentation only) vs. PARTIAL (needs completion).
|
||||
All gap verification complete. See [[file:projects/agora/TODO.org][Agora TODO.org]] for current integration tasks.
|
||||
|
||||
** Token Optimization
|
||||
:PROPERTIES:
|
||||
@@ -913,7 +386,7 @@ Create summary documenting: which gaps are REAL (need implementation) vs. ALREAD
|
||||
|
||||
Cost-effective LLM usage strategy and implementation.
|
||||
|
||||
See project documents: [[file:5_projects/token-optimization/README.org][token-optimization/README.org]]
|
||||
See project documents: [[file:projects/token-optimization/README.org][token-optimization/README.org]]
|
||||
|
||||
*** TODO Configure Gemini as primary provider
|
||||
:PROPERTIES:
|
||||
@@ -1092,9 +565,8 @@ A modular manual of different areas to go with different activities. Fits in the
|
||||
|
||||
** Architecture Astronaut Archive
|
||||
*** TODO Implement Privacy-Aware Background Indexer (Local hashes for @personal, Semantic for others)
|
||||
*** TODO Decouple Transport from Protocol (True Actuator-Agnosticism in communication.lisp)
|
||||
*** TODO Implement communication protocol Backpressure Handling (Queue bounds and BUSY frames in communication.lisp)
|
||||
*** TODO Implement Cognitive Loop "Rut" Recovery (Dynamic Escalation in org-skill-lisp-validator)
|
||||
*** TODO Implement Cognitive Cycle "Rut" Recovery (Dynamic Escalation in org-skill-lisp-validator)
|
||||
*** TODO Implement Asynchronous Event Bus for Telemetry (core.lisp)
|
||||
*** TODO Implement Memory Eviction and Lazy Loading (LRU Cache in memory.lisp)
|
||||
*** TODO Implement Two-Speed Reflection (Immediate :post-action + Latent Heartbeat)
|
||||
@@ -1102,7 +574,7 @@ A modular manual of different areas to go with different activities. Fits in the
|
||||
*** TODO Implement Intent-Shift Detector (Semantic topic-shift flagging in neuro.lisp)
|
||||
*** TODO Implement Cognitive Economics (Dynamic LLM routing based on 2x2 matrix complexity)
|
||||
*** TODO Implement Micro-Prolog Logic Engine (Lisp-native unification & pattern matching for Memory)
|
||||
*** TODO Implement Sovereign Logic Synthesis (Hybrid SubSys2: Neural pattern detection + Symbolic rule generation)
|
||||
*** TODO Implement Autonomous Logic Synthesis (Hybrid SubSys2: Neural pattern detection + Symbolic rule generation)
|
||||
*** TODO Implement Continuous Vibe (Sentiment-weighted personality in system-prompt)
|
||||
*** TODO Implement Search-Before-Think Bridge (Autonomous target-id population via vector search in perceive-gate)
|
||||
*** TODO Implement Belief Revision & Reconciliation (Audit deltas for contradictions in scribe-engine.lisp)
|
||||
|
||||
150
gtd_archive_2026
@@ -13664,7 +13664,7 @@ CLOSED: [2026-04-04 Sat 17:36]
|
||||
|
||||
The Proxmox Migration: Move the agent from the low-power machine into a dedicated LXC container on the new rack.
|
||||
|
||||
** Phase III: The org-agent Microkernel (The "Native" Phase)
|
||||
** Phase III: The opencortex Microkernel (The "Native" Phase)
|
||||
|
||||
Hollowing out the modern tools in favor of Lisp.
|
||||
The Lisp Transition: Replace OpenClaw’s Python logic with your minimalist Common Lisp heartbeat.
|
||||
@@ -13942,7 +13942,7 @@ Server Rack Assembly: Build the 4080/4040 aluminum skeleton.
|
||||
Local AI Capability: Install the RTX 6000 Pros. Move from remote APIs to local inference using Ollama/vLLM (DeepSeek-R1 / Qwen3-Coder).
|
||||
The Proxmox Migration: Move the agent from the low-power machine into a dedicated LXC container on the new rack.
|
||||
|
||||
***** Phase III: The org-agent Microkernel (The "Native" Phase)
|
||||
***** Phase III: The opencortex Microkernel (The "Native" Phase)
|
||||
:PROPERTIES:
|
||||
:CREATED: [2026-03-20 Fri 08:20]
|
||||
:END:
|
||||
@@ -13956,16 +13956,16 @@ The final evolution into a self-hosted Lisp Machine.
|
||||
The FPGA Sidecar: Activate the hardware-level "Thalamus" to verify Lisp forms.
|
||||
Unikernel/Bare Metal: Bootstrap Sol out of the Linux environment and directly onto the hardware, where the Org-mode tree and the Lisp Heap become the operating system.
|
||||
|
||||
***** Org-agent
|
||||
***** OpenCortex
|
||||
:PROPERTIES:
|
||||
:CREATED: [2026-03-20 Fri 08:00]
|
||||
:END:
|
||||
|
||||
By formalizing this, you are effectively designing the blueprint for Sol.
|
||||
To answer your biggest question first: No, org-agent will not replace OpenCode or the Claude Agent SDK—it will act as their orchestrator and wrapper. Tools like OpenCode (which focuses on terminal-based, plan-first coding with AGENTS.md) and the Claude Agent SDK (which provides programmatic access to Anthropic's tool-calling and multi-agent teams) are phenomenal execution engines. However, they are built around Markdown, JSON, and Python/TypeScript ecosystems.
|
||||
org-agent replaces their management layer. Instead of letting OpenCode or Claude dictate your workflow, org-agent sits above them. When org-agent decides a complex coding task is required, it simply invokes OpenCode or a Claude subagent via a CLI or API call, passing along a compiled .org file as context.
|
||||
To answer your biggest question first: No, opencortex will not replace OpenCode or the Claude Agent SDK—it will act as their orchestrator and wrapper. Tools like OpenCode (which focuses on terminal-based, plan-first coding with AGENTS.md) and the Claude Agent SDK (which provides programmatic access to Anthropic's tool-calling and multi-agent teams) are phenomenal execution engines. However, they are built around Markdown, JSON, and Python/TypeScript ecosystems.
|
||||
opencortex replaces their management layer. Instead of letting OpenCode or Claude dictate your workflow, opencortex sits above them. When opencortex decides a complex coding task is required, it simply invokes OpenCode or a Claude subagent via a CLI or API call, passing along a compiled .org file as context.
|
||||
Here is the developer brief for building the system.
|
||||
Project Brief: org-agent
|
||||
Project Brief: opencortex
|
||||
Mission: Build a hyper-minimalist, self-editing, proactive AI agent framework in Common Lisp. The system must use Org-mode as its exclusive interface for memory, state, and skill configuration, rejecting Markdown and JSON overhead.
|
||||
Target Environment: A Linux/Proxmox homelab, running local inference servers, heavily utilizing GitOps and Lisp-based development.
|
||||
1. Core Architecture (The Lisp Microkernel)
|
||||
@@ -13979,18 +13979,18 @@ Instead of relying on SKILL.md or OpenCode's AGENTS.md, all capabilities are def
|
||||
* Dynamic Loading: The agent reads these files on boot. If the agent generates a new .org file via an LLM output, it instantly acquires that new skill on the next heartbeat.
|
||||
* Progressive Disclosure: To save token context, the agent only loads the #+DESCRIPTION of a skill initially. It must explicitly request the full #+BEGIN_SRC implementation if it decides to use it.
|
||||
3. LLMs and Coding Agents as "Effectors"
|
||||
org-agent treats AI models and external SDKs exactly like it treats a Proxmox server—as a downstream tool to be managed.
|
||||
| External Tool | How org-agent Uses It | Trade-off |
|
||||
opencortex treats AI models and external SDKs exactly like it treats a Proxmox server—as a downstream tool to be managed.
|
||||
| External Tool | How opencortex Uses It | Trade-off |
|
||||
|------------------------+-----------------------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------|
|
||||
| Local Inference (vLLM) | A base skill (llm-local.org) containing an HTTP POST request to your RTX 6000 cluster for fast, cheap, private reasoning. | Requires manual mapping of Lisp s-expressions to the local model's API. |
|
||||
| OpenCode | A wrapper skill (skill-opencode.org) that triggers the opencode CLI to execute a massive refactoring job, returning the git diff to org-agent. | Abandons OpenCode's native TUI in favor of headless execution. |
|
||||
| OpenCode | A wrapper skill (skill-opencode.org) that triggers the opencode CLI to execute a massive refactoring job, returning the git diff to opencortex. | Abandons OpenCode's native TUI in favor of headless execution. |
|
||||
| Claude Agent SDK | A wrapper skill that triggers a Python script leveraging Anthropic's SDK to spin up a multi-agent "Team" for deep architectural planning. | Costs external API tokens; requires Python alongside Lisp. |
|
||||
4. Security & Isolation
|
||||
Because org-agent runs directly on the host machine to manage Proxmox and GitOps, security is handled via strict allow-lists within the Lisp kernel.
|
||||
Because opencortex runs directly on the host machine to manage Proxmox and GitOps, security is handled via strict allow-lists within the Lisp kernel.
|
||||
* The LLM backend is instructed to output strictly formatted Lisp s-expressions (e.g., (invoke-skill "proxmox" "restart-staging")).
|
||||
* The Lisp Executor will only evaluate forms where the car (the function name) matches a predefined, safe whitelist.
|
||||
The Verdict on the Workflow
|
||||
By building org-agent, you are creating a system where your daily GTD notes, your infrastructure commands, and your AI's source code all share the exact same syntax. It is the ultimate manifestation of "Code is Data."
|
||||
By building opencortex, you are creating a system where your daily GTD notes, your infrastructure commands, and your AI's source code all share the exact same syntax. It is the ultimate manifestation of "Code is Data."
|
||||
Would you like me to draft the Lisp parser function that reads an .org skill file and translates its #+NAME and #+BEGIN_SRC blocks into callable Lisp functions for the agent's whitelist?
|
||||
|
||||
***** Agora
|
||||
@@ -15109,4 +15109,132 @@ CLOSED: [2026-04-04 Sat 17:39]
|
||||
:ARCHIVE_CATEGORY: wip-block-goose-an-open-source-extensible-AI-agent-2026-04-04-17-39-47-wLfQw5
|
||||
:ARCHIVE_TODO: DONE
|
||||
:END:
|
||||
*** 2026-04-14 Tuesday
|
||||
**** DONE [[https://torath.gov.eg/books/bookAuthority/books-listing?seriesName=%D8%AA%D8%A7%D8%B1%D9%8A%D8%AE%20%D8%A7%D9%84%D9%85%D8%B5%D8%B1%D9%8A%D9%8A%D9%86&page=1][تاريخ المصريين - الهيئة المصرية العامة للكتاب - تراث مصر الرقمي]]
|
||||
CLOSED: [2026-04-14 Tue 11:47]
|
||||
:PROPERTIES:
|
||||
:TITLE: تاريخ المصريين - الهيئة المصرية العامة للكتاب - تراث مصر الرقمي
|
||||
:URI: https://torath.gov.eg/books/bookAuthority/books-listing?seriesName=%D8%AA%D8%A7%D8%B1%D9%8A%D8%AE%20%D8%A7%D9%84%D9%85%D8%B5%D8%B1%D9%8A%D9%8A%D9%86&page=1
|
||||
:CREATED: [2026-04-14 Tue 11:14]
|
||||
:ID: تاريخ-المصريين-الهيئة-المصرية-العامة-للكتاب-تراث-2026-04-14-11-47-42
|
||||
:ORG_GTD: Reference
|
||||
:ARCHIVE_TIME: 2026-04-14 Tue 11:47
|
||||
:ARCHIVE_FILE: /tmp/org-gtd/wip-تاريخ-المصريين-الهيئة-المصرية-العامة-للكتاب-تراث-2026-04-14-11-47-42-B4uIxI.org
|
||||
:ARCHIVE_CATEGORY: wip-تاريخ-المصريين-الهيئة-المصرية-العامة-للكتاب-تراث-2026-04-14-11-47-42-B4uIxI
|
||||
:ARCHIVE_TODO: DONE
|
||||
:END:
|
||||
|
||||
**** DONE [[https://www.arsheef.org/digitized-collections][Digitized Collections — arsheef]]
|
||||
CLOSED: [2026-04-14 Tue 11:47]
|
||||
:PROPERTIES:
|
||||
:TITLE: Digitized Collections — arsheef
|
||||
:URI: https://www.arsheef.org/digitized-collections
|
||||
:CREATED: [2026-04-14 Tue 11:02]
|
||||
:ID: Digitized-Collections-arsheef-2026-04-14-11-47-49
|
||||
:ORG_GTD: Reference
|
||||
:ARCHIVE_TIME: 2026-04-14 Tue 11:47
|
||||
:ARCHIVE_FILE: /tmp/org-gtd/wip-Digitized-Collections-arsheef-2026-04-14-11-47-49-yc2uyh.org
|
||||
:ARCHIVE_CATEGORY: wip-Digitized-Collections-arsheef-2026-04-14-11-47-49-yc2uyh
|
||||
:ARCHIVE_TODO: DONE
|
||||
:END:
|
||||
|
||||
**** DONE [[https://archive.org/search?query=%D9%83%D8%AA%D8%A7%D8%A8+%D8%A7%D9%84%D9%87%D9%84%D8%A7%D9%84][Internet Archive: Digital Library of Free & Borrowable Texts, Movies, Music & Wayback Machine]]
|
||||
CLOSED: [2026-04-14 Tue 11:47]
|
||||
:PROPERTIES:
|
||||
:TITLE: Internet Archive: Digital Library of Free & Borrowable Texts, Movies, Music & Wayback Machine
|
||||
:URI: https://archive.org/search?query=%D9%83%D8%AA%D8%A7%D8%A8+%D8%A7%D9%84%D9%87%D9%84%D8%A7%D9%84
|
||||
:CREATED: [2026-04-14 Tue 11:02]
|
||||
:ID: Internet-Archive-Digital-Library-of-Free-and-2026-04-14-11-47-54
|
||||
:ORG_GTD: Reference
|
||||
:ARCHIVE_TIME: 2026-04-14 Tue 11:47
|
||||
:ARCHIVE_FILE: /tmp/org-gtd/wip-Internet-Archive-Digital-Library-of-Free-and-2026-04-14-11-47-54-Z0t1BU.org
|
||||
:ARCHIVE_CATEGORY: wip-Internet-Archive-Digital-Library-of-Free-and-2026-04-14-11-47-54-Z0t1BU
|
||||
:ARCHIVE_TODO: DONE
|
||||
:END:
|
||||
|
||||
A complete archive of كتاب الهلال.
|
||||
|
||||
**** DONE [[https://community.home-assistant.io/t/new-weather-radar-card/417635][New Weather Radar Card - Share your Projects! / Dashboards & Frontend - Home Assistant Community]]
|
||||
CLOSED: [2026-04-14 Tue 11:48]
|
||||
:PROPERTIES:
|
||||
:TITLE: New Weather Radar Card - Share your Projects! / Dashboards & Frontend - Home Assistant Community
|
||||
:URI: https://community.home-assistant.io/t/new-weather-radar-card/417635
|
||||
:CREATED: [2026-04-14 Tue 11:11]
|
||||
:ID: New-Weather-Radar-Card-Share-your-Projects-2026-04-14-11-47-57
|
||||
:ORG_GTD: Reference
|
||||
:ARCHIVE_TIME: 2026-04-14 Tue 11:48
|
||||
:ARCHIVE_FILE: /tmp/org-gtd/wip-New-Weather-Radar-Card-Share-your-Projects-2026-04-14-11-47-57-IY5m4O.org
|
||||
:ARCHIVE_CATEGORY: wip-New-Weather-Radar-Card-Share-your-Projects-2026-04-14-11-47-57-IY5m4O
|
||||
:ARCHIVE_TODO: DONE
|
||||
:END:
|
||||
|
||||
**** DONE [[https://community.home-assistant.io/t/music-assistant-player-card-control-your-players-adjust-transfer-and-join-queues-and-browse-your-media/929266][Music Assistant Player Card - Control your players, adjust, transfer, and join queues, and browse your media! - Share your Projects! / Dashboards & Frontend - Home Assistant Community]]
|
||||
CLOSED: [2026-04-14 Tue 11:48]
|
||||
:PROPERTIES:
|
||||
:TITLE: Music Assistant Player Card - Control your players, adjust, transfer, and join queues, and browse your media! - Share your Projects! / Dashboards & Frontend - Home Assistant Community
|
||||
:URI: https://community.home-assistant.io/t/music-assistant-player-card-control-your-players-adjust-transfer-and-join-queues-and-browse-your-media/929266
|
||||
:CREATED: [2026-04-14 Tue 11:11]
|
||||
:ID: Music-Assistant-Player-Card-Control-your-players-2026-04-14-11-48-11
|
||||
:ORG_GTD: Reference
|
||||
:ARCHIVE_TIME: 2026-04-14 Tue 11:48
|
||||
:ARCHIVE_FILE: /tmp/org-gtd/wip-Music-Assistant-Player-Card-Control-your-players-2026-04-14-11-48-11-k7UVfa.org
|
||||
:ARCHIVE_CATEGORY: wip-Music-Assistant-Player-Card-Control-your-players-2026-04-14-11-48-11-k7UVfa
|
||||
:ARCHIVE_TODO: DONE
|
||||
:END:
|
||||
|
||||
**** DONE [[https://github.com/nimroddolev/chime_tts][nimroddolev/chime_tts: A custom Home Assistant integration to play combined audio files before and/or after text-to-speech (TTS) messages]]
|
||||
CLOSED: [2026-04-14 Tue 11:49]
|
||||
:PROPERTIES:
|
||||
:TITLE: nimroddolev/chime_tts: A custom Home Assistant integration to play combined audio files before and/or after text-to-speech (TTS) messages
|
||||
:URI: https://github.com/nimroddolev/chime_tts
|
||||
:CREATED: [2026-04-14 Tue 11:11]
|
||||
:ID: nimroddolev-chime-tts-A-custom-Home-Assistant-2026-04-14-11-49-05
|
||||
:ORG_GTD: Reference
|
||||
:ARCHIVE_TIME: 2026-04-14 Tue 11:49
|
||||
:ARCHIVE_FILE: /tmp/org-gtd/wip-nimroddolev-chime-tts-A-custom-Home-Assistant-2026-04-14-11-49-05-je5UGn.org
|
||||
:ARCHIVE_CATEGORY: wip-nimroddolev-chime-tts-A-custom-Home-Assistant-2026-04-14-11-49-05-je5UGn
|
||||
:ARCHIVE_TODO: DONE
|
||||
:END:
|
||||
|
||||
**** DONE [[https://github.com/Clooos/bubble-card][Clooos/Bubble-Card: Bubble Card is a minimalist card collection for Home Assistant with a nice pop-up touch.]]
|
||||
CLOSED: [2026-04-14 Tue 11:49]
|
||||
:PROPERTIES:
|
||||
:TITLE: Clooos/Bubble-Card: Bubble Card is a minimalist card collection for Home Assistant with a nice pop-up touch.
|
||||
:URI: https://github.com/Clooos/bubble-card
|
||||
:CREATED: [2026-04-14 Tue 11:11]
|
||||
:ID: Clooos-Bubble-Card-Bubble-Card-is-a-minimalist-2026-04-14-11-49-19
|
||||
:ORG_GTD: Reference
|
||||
:ARCHIVE_TIME: 2026-04-14 Tue 11:49
|
||||
:ARCHIVE_FILE: /tmp/org-gtd/wip-Clooos-Bubble-Card-Bubble-Card-is-a-minimalist-2026-04-14-11-49-19-AGBrix.org
|
||||
:ARCHIVE_CATEGORY: wip-Clooos-Bubble-Card-Bubble-Card-is-a-minimalist-2026-04-14-11-49-19-AGBrix
|
||||
:ARCHIVE_TODO: DONE
|
||||
:END:
|
||||
|
||||
**** DONE [[https://github.com/PRProd/HA-Firemote][PRProd/HA-Firemote: Apple TV, Amazon Fire TV, Chromecast, Homatics, NVIDIA Shield, onn., Roku, Xiaomi Mi, and Android TV remote control card for Home Assistant]]
|
||||
CLOSED: [2026-04-14 Tue 11:49]
|
||||
:PROPERTIES:
|
||||
:TITLE: PRProd/HA-Firemote: Apple TV, Amazon Fire TV, Chromecast, Homatics, NVIDIA Shield, onn., Roku, Xiaomi Mi, and Android TV remote control card for Home Assistant
|
||||
:URI: https://github.com/PRProd/HA-Firemote
|
||||
:CREATED: [2026-04-14 Tue 11:12]
|
||||
:ID: PRProd-HA-Firemote-Apple-TV-Amazon-Fire-TV-2026-04-14-11-49-22
|
||||
:ORG_GTD: Reference
|
||||
:ARCHIVE_TIME: 2026-04-14 Tue 11:49
|
||||
:ARCHIVE_FILE: /tmp/org-gtd/wip-PRProd-HA-Firemote-Apple-TV-Amazon-Fire-TV-2026-04-14-11-49-22-oxZinO.org
|
||||
:ARCHIVE_CATEGORY: wip-PRProd-HA-Firemote-Apple-TV-Amazon-Fire-TV-2026-04-14-11-49-22-oxZinO
|
||||
:ARCHIVE_TODO: DONE
|
||||
:END:
|
||||
|
||||
**** DONE [[https://www.mogawdat.com/][Mo Gawdat | AI + Happiness]]
|
||||
CLOSED: [2026-04-14 Tue 11:49]
|
||||
:PROPERTIES:
|
||||
:TITLE: Mo Gawdat | AI + Happiness
|
||||
:URI: https://www.mogawdat.com/
|
||||
:CREATED: [2026-04-14 Tue 11:15]
|
||||
:ID: Mo-Gawdat-AI-plus-Happiness-2026-04-14-11-49-27
|
||||
:ORG_GTD: Reference
|
||||
:ARCHIVE_TIME: 2026-04-14 Tue 11:49
|
||||
:ARCHIVE_FILE: /tmp/org-gtd/wip-Mo-Gawdat-AI-plus-Happiness-2026-04-14-11-49-27-41t26y.org
|
||||
:ARCHIVE_CATEGORY: wip-Mo-Gawdat-AI-plus-Happiness-2026-04-14-11-49-27-41t26y
|
||||
:ARCHIVE_TODO: DONE
|
||||
:END:
|
||||
|
||||
|
||||
463
inbox.org
@@ -2,3 +2,466 @@
|
||||
#+begin_comment
|
||||
This is the inbox. Everything goes in here when you capture it.
|
||||
#+end_comment
|
||||
|
||||
* [[https://x.com/michael_chomsky/status/2043369126631207096][Michael on X: "Garry is kinda correct here, but is oversimplifying memory. Harrison (the author of the original article) makes a very good point but also makes memory sound easier than it is. (before reading this article, note that I wrote down my thoughts and then passed it through Claude" / X]]
|
||||
:PROPERTIES:
|
||||
:TITLE: Michael on X: "Garry is kinda correct here, but is oversimplifying memory. Harrison (the author of the original article) makes a very good point but also makes memory sound easier than it is. (before reading this article, note that I wrote down my thoughts and then passed it through Claude" / X
|
||||
:URI: https://x.com/michael_chomsky/status/2043369126631207096
|
||||
:CREATED: [2026-04-14 Tue 11:17]
|
||||
:END:
|
||||
|
||||
* [[https://x.com/chrysb/status/2043020014035570784][Chrys Bader on X: "Why long-term memory for LLMs remains unsolved" / X]]
|
||||
:PROPERTIES:
|
||||
:TITLE: Chrys Bader on X: "Why long-term memory for LLMs remains unsolved" / X
|
||||
:URI: https://x.com/chrysb/status/2043020014035570784
|
||||
:CREATED: [2026-04-14 Tue 11:18]
|
||||
:END:
|
||||
|
||||
* [[https://github.com/garrytan/gbrain][garrytan/gbrain: Garry's Opinionated OpenClaw/Hermes Agent Brain]]
|
||||
:PROPERTIES:
|
||||
:TITLE: garrytan/gbrain: Garry's Opinionated OpenClaw/Hermes Agent Brain
|
||||
:URI: https://github.com/garrytan/gbrain
|
||||
:CREATED: [2026-04-14 Tue 11:18]
|
||||
:END:
|
||||
|
||||
* [[https://github.com/karpathy/autoresearch][karpathy/autoresearch: AI agents running research on single-GPU nanochat training automatically]]
|
||||
:PROPERTIES:
|
||||
:TITLE: karpathy/autoresearch: AI agents running research on single-GPU nanochat training automatically
|
||||
:URI: https://github.com/karpathy/autoresearch
|
||||
:CREATED: [2026-04-14 Tue 11:18]
|
||||
:END:
|
||||
|
||||
* [[https://x.com/garrytan/status/2042925773300908103][Garry Tan on X: "Thin Harness, Fat Skills" / X]]
|
||||
:PROPERTIES:
|
||||
:TITLE: Garry Tan on X: "Thin Harness, Fat Skills" / X
|
||||
:URI: https://x.com/garrytan/status/2042925773300908103
|
||||
:CREATED: [2026-04-14 Tue 11:18]
|
||||
:END:
|
||||
|
||||
* [[https://github.com/xdevplatform/xmcp][xdevplatform/xmcp: MCP server for the X API]]
|
||||
:PROPERTIES:
|
||||
:TITLE: xdevplatform/xmcp: MCP server for the X API
|
||||
:URI: https://github.com/xdevplatform/xmcp
|
||||
:CREATED: [2026-04-14 Tue 11:18]
|
||||
:END:
|
||||
|
||||
* [[https://x.com/WinterArc2125/status/2040828031707570233][Winter on X: "Most people don’t realize this: You get 1,500 free daily requests to Gemma 4 31B on @GoogleAIStudio. That’s plenty of free inference (imo). And you can route it into @NousResearch Hermes Agent via Vercel’s AI Gateway: 1. Create an API key on Google AI Studio 2. Add it under" / X]]
|
||||
:PROPERTIES:
|
||||
:TITLE: Winter on X: "Most people don’t realize this: You get 1,500 free daily requests to Gemma 4 31B on @GoogleAIStudio. That’s plenty of free inference (imo). And you can route it into @NousResearch Hermes Agent via Vercel’s AI Gateway: 1. Create an API key on Google AI Studio 2. Add it under" / X
|
||||
:URI: https://x.com/WinterArc2125/status/2040828031707570233
|
||||
:CREATED: [2026-04-14 Tue 11:19]
|
||||
:END:
|
||||
|
||||
* [[https://github.com/elebumm/RedditVideoMakerBot][elebumm/RedditVideoMakerBot: Create Reddit Videos with just✨ one command ✨]]
|
||||
:PROPERTIES:
|
||||
:TITLE: elebumm/RedditVideoMakerBot: Create Reddit Videos with just✨ one command ✨
|
||||
:URI: https://github.com/elebumm/RedditVideoMakerBot
|
||||
:CREATED: [2026-04-14 Tue 11:19]
|
||||
:END:
|
||||
|
||||
* [[https://x.com/PawelHuryn/status/2040519790779900075][Paweł Huryn on X: "After the llama.cpp fix, we can finally use gemma-4 with Claude Code: Step 1: - Windows: winget install llama.cpp - MacOS: brew install llama.cpp More: https://t.co/2Gq2cdl5hy Step 2: - llama-server -hf ggml-org/gemma-4-E2B-it-GGUF (https://t.co/3kxuATDZL6) OR - llama-server https://t.co/NFIrI1wXtH" / X]]
|
||||
:PROPERTIES:
|
||||
:TITLE: Paweł Huryn on X: "After the llama.cpp fix, we can finally use gemma-4 with Claude Code: Step 1: - Windows: winget install llama.cpp - MacOS: brew install llama.cpp More: https://t.co/2Gq2cdl5hy Step 2: - llama-server -hf ggml-org/gemma-4-E2B-it-GGUF (https://t.co/3kxuATDZL6) OR - llama-server https://t.co/NFIrI1wXtH" / X
|
||||
:URI: https://x.com/PawelHuryn/status/2040519790779900075
|
||||
:CREATED: [2026-04-14 Tue 11:19]
|
||||
:END:
|
||||
|
||||
* [[https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f][llm-wiki · GitHub]]
|
||||
:PROPERTIES:
|
||||
:TITLE: llm-wiki · GitHub
|
||||
:URI: https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f
|
||||
:CREATED: [2026-04-14 Tue 11:19]
|
||||
:END:
|
||||
|
||||
* [[https://x.com/kevingu/status/2039843234760073341][Kevin Gu on X: "AutoAgent: first open source library for self-optimizing agents" / X]]
|
||||
:PROPERTIES:
|
||||
:TITLE: Kevin Gu on X: "AutoAgent: first open source library for self-optimizing agents" / X
|
||||
:URI: https://x.com/kevingu/status/2039843234760073341
|
||||
:CREATED: [2026-04-14 Tue 11:20]
|
||||
:END:
|
||||
|
||||
* [[https://github.com/repowise-dev/claude-code-prompts][repowise-dev/claude-code-prompts: Independently authored prompt templates for AI coding agents — system prompts, tool prompts, agent delegation, memory management, and multi-agent coordination. Informed by studying Claude Code.]]
|
||||
:PROPERTIES:
|
||||
:TITLE: repowise-dev/claude-code-prompts: Independently authored prompt templates for AI coding agents — system prompts, tool prompts, agent delegation, memory management, and multi-agent coordination. Informed by studying Claude Code.
|
||||
:URI: https://github.com/repowise-dev/claude-code-prompts
|
||||
:CREATED: [2026-04-14 Tue 11:20]
|
||||
:END:
|
||||
|
||||
* [[https://x.com/ryancarson/status/2039786704731541903][Ryan Carson on X: "How to turn your OpenClaw into the world's best assistant" / X]]
|
||||
:PROPERTIES:
|
||||
:TITLE: Ryan Carson on X: "How to turn your OpenClaw into the world's best assistant" / X
|
||||
:URI: https://x.com/ryancarson/status/2039786704731541903
|
||||
:CREATED: [2026-04-14 Tue 11:20]
|
||||
:END:
|
||||
|
||||
* [[https://vitalik.eth.limo/general/2026/04/02/secure_llms.html][My self-sovereign / local / private / secure LLM setup, April 2026]]
|
||||
:PROPERTIES:
|
||||
:TITLE: My self-sovereign / local / private / secure LLM setup, April 2026
|
||||
:URI: https://vitalik.eth.limo/general/2026/04/02/secure_llms.html
|
||||
:CREATED: [2026-04-14 Tue 11:20]
|
||||
:END:
|
||||
|
||||
* [[https://x.com/TheAhmadOsman/status/2040103488714068245][Ahmad on X: "GPU Memory Math for LLMs (2026 Edition)" / X]]
|
||||
:PROPERTIES:
|
||||
:TITLE: Ahmad on X: "GPU Memory Math for LLMs (2026 Edition)" / X
|
||||
:URI: https://x.com/TheAhmadOsman/status/2040103488714068245
|
||||
:CREATED: [2026-04-14 Tue 11:20]
|
||||
:END:
|
||||
|
||||
* [[https://x.com/gauri__gupta/status/2040251170099524025][Gauri Gupta on X: "auto-harness: Self improving agentic systems with auto-evals (open-sourced !)" / X]]
|
||||
:PROPERTIES:
|
||||
:TITLE: Gauri Gupta on X: "auto-harness: Self improving agentic systems with auto-evals (open-sourced !)" / X
|
||||
:URI: https://x.com/gauri__gupta/status/2040251170099524025
|
||||
:CREATED: [2026-04-14 Tue 11:21]
|
||||
:END:
|
||||
|
||||
* [[https://x.com/PromptLLM/status/2040478865949139014][Prompter on X: "CURE procrastination by gamifying your life with AI (prompt included)" / X]]
|
||||
:PROPERTIES:
|
||||
:TITLE: Prompter on X: "CURE procrastination by gamifying your life with AI (prompt included)" / X
|
||||
:URI: https://x.com/PromptLLM/status/2040478865949139014
|
||||
:CREATED: [2026-04-14 Tue 11:21]
|
||||
:END:
|
||||
|
||||
* [[https://x.com/chrysb/status/2043020014035570784][Chrys Bader on X: "Why long-term memory for LLMs remains unsolved" / X]]
|
||||
:PROPERTIES:
|
||||
:TITLE: Chrys Bader on X: "Why long-term memory for LLMs remains unsolved" / X
|
||||
:URI: https://x.com/chrysb/status/2043020014035570784
|
||||
:CREATED: [2026-04-14 Tue 11:21]
|
||||
:END:
|
||||
|
||||
* [[https://github.com/ValueCell-ai/ClawX][ValueCell-ai/ClawX: ClawX is a desktop app that provides a graphical interface for OpenClaw AI agents. It turns CLI-based AI orchestration into a desktop experience without using the terminal. China website is https://clawx.com.cn.]]
|
||||
:PROPERTIES:
|
||||
:TITLE: ValueCell-ai/ClawX: ClawX is a desktop app that provides a graphical interface for OpenClaw AI agents. It turns CLI-based AI orchestration into a desktop experience without using the terminal. China website is https://clawx.com.cn.
|
||||
:URI: https://github.com/ValueCell-ai/ClawX
|
||||
:CREATED: [2026-04-16 Thu 16:33]
|
||||
:END:
|
||||
|
||||
* [[https://github.com/sgoudelis/ground-station][sgoudelis/ground-station: Ground Station is all-in-one satellite monitoring suite]]
|
||||
:PROPERTIES:
|
||||
:TITLE: sgoudelis/ground-station: Ground Station is all-in-one satellite monitoring suite
|
||||
:URI: https://github.com/sgoudelis/ground-station
|
||||
:CREATED: [2026-04-17 Fri 14:52]
|
||||
:END:
|
||||
|
||||
* [[https://platform.minimax.io/docs/guides/pricing-token-plan][Token Plan - MiniMax API Docs]]
|
||||
:PROPERTIES:
|
||||
:TITLE: Token Plan - MiniMax API Docs
|
||||
:URI: https://platform.minimax.io/docs/guides/pricing-token-plan
|
||||
:CREATED: [2026-04-17 Fri 14:52]
|
||||
:END:
|
||||
|
||||
* [[https://github.com/siddsachar/Thoth][siddsachar/Thoth: Thoth - Personal AI Sovereignty. A local-first AI assistant with integrated tools, a personal knowledge graph, voice, vision, shell, browser automation, scheduled tasks, health tracking, and messaging channels. Run locally via Ollama or add opt-in cloud models. Your data stays on your machine.]]
|
||||
:PROPERTIES:
|
||||
:TITLE: siddsachar/Thoth: Thoth - Personal AI Sovereignty. A local-first AI assistant with integrated tools, a personal knowledge graph, voice, vision, shell, browser automation, scheduled tasks, health tracking, and messaging channels. Run locally via Ollama or add opt-in cloud models. Your data stays on your machine.
|
||||
:URI: https://github.com/siddsachar/Thoth
|
||||
:CREATED: [2026-04-17 Fri 14:52]
|
||||
:END:
|
||||
|
||||
* [[https://www.jori.com/en/products/pacific-jr-9700][Pacific Pure | Sofas | Product | Design furniture | JORI]] :furniture:years:
|
||||
:PROPERTIES:
|
||||
:TITLE: Pacific Pure | Sofas | Product | Design furniture | JORI
|
||||
:URI: https://www.jori.com/en/products/pacific-jr-9700
|
||||
:CREATED: [2026-04-21 Tue 15:25]
|
||||
:END:
|
||||
|
||||
* [[https://papers.ssrn.com/sol3/papers.cfm?abstract_id=6372438][AI Agent Traps by Matija Franklin, Nenad Tomašev, Julian Jacobs, Joel Z. Leibo, Simon Osindero :: SSRN]]
|
||||
:PROPERTIES:
|
||||
:TITLE: AI Agent Traps by Matija Franklin, Nenad Tomašev, Julian Jacobs, Joel Z. Leibo, Simon Osindero :: SSRN
|
||||
:URI: https://papers.ssrn.com/sol3/papers.cfm?abstract_id=6372438
|
||||
:CREATED: [2026-04-21 Tue 15:26]
|
||||
:END:
|
||||
|
||||
* [[https://www.storagereview.com/review/comino-grando-rtx-pro-6000-review-768gb-of-vram-in-a-liquid-cooled-4u-chassis][Comino Grando RTX PRO 6000 Review: 768GB of VRAM in a Liquid-Cooled 4U Chassis - StorageReview.com]]
|
||||
:PROPERTIES:
|
||||
:TITLE: Comino Grando RTX PRO 6000 Review: 768GB of VRAM in a Liquid-Cooled 4U Chassis - StorageReview.com
|
||||
:URI: https://www.storagereview.com/review/comino-grando-rtx-pro-6000-review-768gb-of-vram-in-a-liquid-cooled-4u-chassis
|
||||
:CREATED: [2026-04-21 Tue 15:26]
|
||||
:END:
|
||||
|
||||
* [[https://x.com/elvissun/status/2044784140831301728/photo/1][Elvis on X: "some agentic engineering realization: stop reviewing code. start reviewing contracts. and here's what i mean. the highest leverage work right now is drawing the right boundaries in your system. i've been splitting the system into multiple sub-systems, each with clearly defined https://t.co/Hy0d9WHI1m" / X]]
|
||||
:PROPERTIES:
|
||||
:TITLE: Elvis on X: "some agentic engineering realization: stop reviewing code. start reviewing contracts. and here's what i mean. the highest leverage work right now is drawing the right boundaries in your system. i've been splitting the system into multiple sub-systems, each with clearly defined https://t.co/Hy0d9WHI1m" / X
|
||||
:URI: https://x.com/elvissun/status/2044784140831301728/photo/1
|
||||
:CREATED: [2026-04-21 Tue 15:26]
|
||||
:END:
|
||||
|
||||
* [[https://x.com/i/status/2044307601463357791][EverMars on X: "Respect to the Man Chasing AI Immortality, Even Though He's Freeloading Off Our Platform" / X]]
|
||||
:PROPERTIES:
|
||||
:TITLE: EverMars on X: "Respect to the Man Chasing AI Immortality, Even Though He's Freeloading Off Our Platform" / X
|
||||
:URI: https://x.com/i/status/2044307601463357791
|
||||
:CREATED: [2026-04-21 Tue 15:26]
|
||||
:END:
|
||||
|
||||
* [[https://x.com/i/status/2045289299269070978][Seth Howes on X: "I’ve wanted to do this for a decade. But I never did - I refuse to give any company my DNA. It is me. So this week I sequenced my genome entirely at home. Literally on my kitchen table. I never exposed my DNA sequence to the internet. Not at any point. I used a MinION to do https://t.co/qCzXIGxWsy" / X]]
|
||||
:PROPERTIES:
|
||||
:TITLE: Seth Howes on X: "I’ve wanted to do this for a decade. But I never did - I refuse to give any company my DNA. It is me. So this week I sequenced my genome entirely at home. Literally on my kitchen table. I never exposed my DNA sequence to the internet. Not at any point. I used a MinION to do https://t.co/qCzXIGxWsy" / X
|
||||
:URI: https://x.com/i/status/2045289299269070978
|
||||
:CREATED: [2026-04-21 Tue 15:27]
|
||||
:END:
|
||||
|
||||
* [[https://arxiv.org/html/2603.21852v2][All elementary functions from a single operator]]
|
||||
:PROPERTIES:
|
||||
:TITLE: All elementary functions from a single operator
|
||||
:URI: https://arxiv.org/html/2603.21852v2
|
||||
:CREATED: [2026-04-26 Sun 11:05]
|
||||
:END:
|
||||
|
||||
* [[https://github.com/abhigyanpatwari/GitNexus][abhigyanpatwari/GitNexus: GitNexus: The Zero-Server Code Intelligence Engine - GitNexus is a client-side knowledge graph creator that runs entirely in your browser. Drop in a GitHub repo or ZIP file, and get an interactive knowledge graph wit a built in Graph RAG Agent. Perfect for code exploration]]
|
||||
:PROPERTIES:
|
||||
:TITLE: abhigyanpatwari/GitNexus: GitNexus: The Zero-Server Code Intelligence Engine - GitNexus is a client-side knowledge graph creator that runs entirely in your browser. Drop in a GitHub repo or ZIP file, and get an interactive knowledge graph wit a built in Graph RAG Agent. Perfect for code exploration
|
||||
:URI: https://github.com/abhigyanpatwari/GitNexus
|
||||
:CREATED: [2026-04-26 Sun 11:05]
|
||||
:END:
|
||||
|
||||
* [[https://medium.com/@fzbcwvv/an-overnight-stack-for-qwen3-6-27b-85-tps-125k-context-vision-on-one-rtx-3090-0d95c6291914][An Overnight Stack for Qwen3.6–27B: 85 TPS, 125K Context, Vision — on One RTX 3090 | Medium]]
|
||||
:PROPERTIES:
|
||||
:TITLE: An Overnight Stack for Qwen3.6–27B: 85 TPS, 125K Context, Vision — on One RTX 3090 | Medium
|
||||
:URI: https://medium.com/@fzbcwvv/an-overnight-stack-for-qwen3-6-27b-85-tps-125k-context-vision-on-one-rtx-3090-0d95c6291914
|
||||
:CREATED: [2026-04-26 Sun 11:06]
|
||||
:END:
|
||||
|
||||
* [[https://x.com/i/status/2047124337191444844][Shiv on X: "A new way to think about composing skills to increase leverage: Skill Graphs 2.0" / X]]
|
||||
:PROPERTIES:
|
||||
:TITLE: Shiv on X: "A new way to think about composing skills to increase leverage: Skill Graphs 2.0" / X
|
||||
:URI: https://x.com/i/status/2047124337191444844
|
||||
:CREATED: [2026-04-26 Sun 16:34]
|
||||
:END:
|
||||
|
||||
* [[https://x.com/i/status/2047558951303028855][Eric ⚡️ Building... on X: "My 4090 went from 26 -> 154 tok/s Qwen 3.6 27B🤯 Same GPU. Same Q4_K_M . No FP8, no extra quant. The unlock: ik_llama.cpp + speculative decoding using Qwen3-1.7B as the draft model. 85% acceptance rate. Full config + benchmarks 👇🏻 https://t.co/NUZec2Y7J0" / X]]
|
||||
:PROPERTIES:
|
||||
:TITLE: Eric ⚡️ Building... on X: "My 4090 went from 26 -> 154 tok/s Qwen 3.6 27B🤯 Same GPU. Same Q4_K_M . No FP8, no extra quant. The unlock: ik_llama.cpp + speculative decoding using Qwen3-1.7B as the draft model. 85% acceptance rate. Full config + benchmarks 👇🏻 https://t.co/NUZec2Y7J0" / X
|
||||
:URI: https://x.com/i/status/2047558951303028855
|
||||
:CREATED: [2026-04-26 Sun 16:34]
|
||||
:END:
|
||||
|
||||
* [[https://x.com/i/status/2047033293460410638][Sudo su on X: "for anyone running along, here is the setup. weights from unsloth: https://t.co/b89HJ2JC5O launched with: ./llama-server -m Qwen3.6-27B-Q4_K_M.gguf -ngl 99 -c 262144 -np 1 -fa on --cache-type-k q4_0 --cache-type-v q4_0 same exact flags that held the 3.5 dense baseline at 35.3" / X]]
|
||||
:PROPERTIES:
|
||||
:TITLE: Sudo su on X: "for anyone running along, here is the setup. weights from unsloth: https://t.co/b89HJ2JC5O launched with: ./llama-server -m Qwen3.6-27B-Q4_K_M.gguf -ngl 99 -c 262144 -np 1 -fa on --cache-type-k q4_0 --cache-type-v q4_0 same exact flags that held the 3.5 dense baseline at 35.3" / X
|
||||
:URI: https://x.com/i/status/2047033293460410638
|
||||
:CREATED: [2026-04-26 Sun 16:34]
|
||||
:END:
|
||||
|
||||
* [[https://x.com/i/status/2046898117241635240][Hasan Toor on X: "Goodbye Claude Code subscription fees. Someone just built a proxy that runs Claude Code completely free... and it's wild. You literally plug in a free NVIDIA API key and point Claude Code at localhost. That's it. It handles everything: - Converts Anthropic API calls to NVIDIA https://t.co/10v4KdymxH" / X]]
|
||||
:PROPERTIES:
|
||||
:TITLE: Hasan Toor on X: "Goodbye Claude Code subscription fees. Someone just built a proxy that runs Claude Code completely free... and it's wild. You literally plug in a free NVIDIA API key and point Claude Code at localhost. That's it. It handles everything: - Converts Anthropic API calls to NVIDIA https://t.co/10v4KdymxH" / X
|
||||
:URI: https://x.com/i/status/2046898117241635240
|
||||
:CREATED: [2026-04-26 Sun 16:34]
|
||||
:END:
|
||||
|
||||
* [[https://x.com/i/status/2047295369583964385][Graeme on X: "The Local LLM Cheat Sheet for Your 64GB RAM Device We covered 16GB and 32GB already, and 64GB has been the next big request, which I can understand, because this is where things get very interesting. Here's the practical cheat sheet for a 64GB RAM machine for code, math, https://t.co/ohgkjbU0LK" / X]]
|
||||
:PROPERTIES:
|
||||
:TITLE: Graeme on X: "The Local LLM Cheat Sheet for Your 64GB RAM Device We covered 16GB and 32GB already, and 64GB has been the next big request, which I can understand, because this is where things get very interesting. Here's the practical cheat sheet for a 64GB RAM machine for code, math, https://t.co/ohgkjbU0LK" / X
|
||||
:URI: https://x.com/i/status/2047295369583964385
|
||||
:CREATED: [2026-04-26 Sun 16:34]
|
||||
:END:
|
||||
|
||||
* [[https://github.com/codejunkie99/agentic-stack][codejunkie99/agentic-stack: One brain, many harnesses. Portable .agent/ folder (memory + skills + protocols) that plugs into Claude Code, Cursor, Windsurf, OpenCode, OpenClaw, Hermes, or DIY Python — and keeps its knowledge when you switch.]]
|
||||
:PROPERTIES:
|
||||
:TITLE: codejunkie99/agentic-stack: One brain, many harnesses. Portable .agent/ folder (memory + skills + protocols) that plugs into Claude Code, Cursor, Windsurf, OpenCode, OpenClaw, Hermes, or DIY Python — and keeps its knowledge when you switch.
|
||||
:URI: https://github.com/codejunkie99/agentic-stack
|
||||
:CREATED: [2026-04-27 Mon 09:23]
|
||||
:END:
|
||||
|
||||
* [[https://github.com/public-apis/public-apis][public-apis/public-apis: A collective list of free APIs]]
|
||||
:PROPERTIES:
|
||||
:TITLE: public-apis/public-apis: A collective list of free APIs
|
||||
:URI: https://github.com/public-apis/public-apis
|
||||
:CREATED: [2026-04-27 Mon 09:23]
|
||||
:END:
|
||||
|
||||
* [[https://github.com/stanford-iris-lab/meta-harness][stanford-iris-lab/meta-harness: Reference code for the Meta-Harness paper.]]
|
||||
:PROPERTIES:
|
||||
:TITLE: stanford-iris-lab/meta-harness: Reference code for the Meta-Harness paper.
|
||||
:URI: https://github.com/stanford-iris-lab/meta-harness
|
||||
:CREATED: [2026-04-27 Mon 09:23]
|
||||
:END:
|
||||
|
||||
* [[https://github.com/thePM001/AEP-agent-element-protocol/tree/main][thePM001/AEP-agent-element-protocol: AEP (Agent Element Protocol) v2.5 | Deterministic zero-trust total control and governance protocol for AI agents. | Reduce hallucinations to zero through architecure in all constrained domains of application. | LLMs gave you the engines, AEP gives you the control for the thrusters.]]
|
||||
:PROPERTIES:
|
||||
:TITLE: thePM001/AEP-agent-element-protocol: AEP (Agent Element Protocol) v2.5 | Deterministic zero-trust total control and governance protocol for AI agents. | Reduce hallucinations to zero through architecure in all constrained domains of application. | LLMs gave you the engines, AEP gives you the control for the thrusters.
|
||||
:URI: https://github.com/thePM001/AEP-agent-element-protocol/tree/main
|
||||
:CREATED: [2026-04-27 Mon 09:24]
|
||||
:END:
|
||||
|
||||
* [[https://x.com/i/status/2048381278953603406][GREG ISENBERG on X: "agreed that the the modern computer probably has to be reinvented 12 "tiny" startup ideas that ride that wave: 1. a "where did I put that" app. you describe what you're looking for in plain english and it searches across every app, folder, email, and slack message you've ever" / X]]
|
||||
:PROPERTIES:
|
||||
:TITLE: GREG ISENBERG on X: "agreed that the the modern computer probably has to be reinvented 12 "tiny" startup ideas that ride that wave: 1. a "where did I put that" app. you describe what you're looking for in plain english and it searches across every app, folder, email, and slack message you've ever" / X
|
||||
:URI: https://x.com/i/status/2048381278953603406
|
||||
:CREATED: [2026-04-27 Mon 09:24]
|
||||
:END:
|
||||
|
||||
* [[https://github.com/iptv-org/awesome-iptv][iptv-org/awesome-iptv: A curated list of resources related to IPTV]]
|
||||
:PROPERTIES:
|
||||
:TITLE: iptv-org/awesome-iptv: A curated list of resources related to IPTV
|
||||
:URI: https://github.com/iptv-org/awesome-iptv
|
||||
:CREATED: [2026-04-27 Mon 09:24]
|
||||
:END:
|
||||
|
||||
* [[https://github.com/iptv-org/iptv][iptv-org/iptv: Collection of publicly available IPTV channels from all over the world]]
|
||||
:PROPERTIES:
|
||||
:TITLE: iptv-org/iptv: Collection of publicly available IPTV channels from all over the world
|
||||
:URI: https://github.com/iptv-org/iptv
|
||||
:CREATED: [2026-04-27 Mon 09:25]
|
||||
:END:
|
||||
|
||||
* [[https://github.com/iptv-org/epg][iptv-org/epg: Utilities for downloading the EPG (Electronic Program Guide) for thousands of TV channels from hundreds of sources.]]
|
||||
:PROPERTIES:
|
||||
:TITLE: iptv-org/epg: Utilities for downloading the EPG (Electronic Program Guide) for thousands of TV channels from hundreds of sources.
|
||||
:URI: https://github.com/iptv-org/epg
|
||||
:CREATED: [2026-04-27 Mon 09:25]
|
||||
:END:
|
||||
|
||||
* [[https://arxiv.org/abs/2604.22709][[2604.22709] Thinking Without Words: Efficient Latent Reasoning with Abstract Chain-of-Thought]]
|
||||
:PROPERTIES:
|
||||
:TITLE: [2604.22709] Thinking Without Words: Efficient Latent Reasoning with Abstract Chain-of-Thought
|
||||
:URI: https://arxiv.org/abs/2604.22709
|
||||
:CREATED: [2026-04-28 Tue 09:50]
|
||||
:END:
|
||||
|
||||
* [[https://x.com/i/status/2048587253145108626][鸟哥 | 蓝鸟会🕊️ on X: "吓到我了! GitHub上有个工具叫GhostTrack,输入一个手机号,能直接扫出这人在哪些平台注册过账号,还能查IP定位、运营商信息。 克隆代码跑脚本,5分钟搞定,门槛低得离谱。你以为自己在网上隐身呢? 早被扒得透透的了。信息安全这事,真得重视起来。 🔗 https://t.co/yVGCsmsjyi https://t.co/UyhOY6wHq6" / X]]
|
||||
:PROPERTIES:
|
||||
:TITLE: 鸟哥 | 蓝鸟会🕊️ on X: "吓到我了! GitHub上有个工具叫GhostTrack,输入一个手机号,能直接扫出这人在哪些平台注册过账号,还能查IP定位、运营商信息。 克隆代码跑脚本,5分钟搞定,门槛低得离谱。你以为自己在网上隐身呢? 早被扒得透透的了。信息安全这事,真得重视起来。 🔗 https://t.co/yVGCsmsjyi https://t.co/UyhOY6wHq6" / X
|
||||
:URI: https://x.com/i/status/2048587253145108626
|
||||
:CREATED: [2026-04-28 Tue 09:50]
|
||||
:END:
|
||||
|
||||
* [[https://uxdesign.cc/where-should-ai-sit-in-your-ui-1710a258390e][Where should AI sit in your UI?. Mapping emerging AI UI patterns and how… | by Sharang Sharma | UX Collective]]
|
||||
:PROPERTIES:
|
||||
:TITLE: Where should AI sit in your UI?. Mapping emerging AI UI patterns and how… | by Sharang Sharma | UX Collective
|
||||
:URI: https://uxdesign.cc/where-should-ai-sit-in-your-ui-1710a258390e
|
||||
:CREATED: [2026-04-28 Tue 09:50]
|
||||
:END:
|
||||
|
||||
* [[https://x.com/i/status/2049011134426906635][Shakker on X: "OpenClaw's first output dropped from 1s to 43ms. Plugin bootstrap went from 265ms to 8ms. Provider capability resolution from 49ms to 1.5ms. Config validation from 62ms to 5ms. For most of OpenClaw's history, the plugin system was carrying core, instead of the other way around." / X]]
|
||||
:PROPERTIES:
|
||||
:TITLE: Shakker on X: "OpenClaw's first output dropped from 1s to 43ms. Plugin bootstrap went from 265ms to 8ms. Provider capability resolution from 49ms to 1.5ms. Config validation from 62ms to 5ms. For most of OpenClaw's history, the plugin system was carrying core, instead of the other way around." / X
|
||||
:URI: https://x.com/i/status/2049011134426906635
|
||||
:CREATED: [2026-04-28 Tue 09:51]
|
||||
:END:
|
||||
|
||||
* [[https://github.com/lithos-ai/motus][lithos-ai/motus: The open-source agent-serving project]]
|
||||
:PROPERTIES:
|
||||
:TITLE: lithos-ai/motus: The open-source agent-serving project
|
||||
:URI: https://github.com/lithos-ai/motus
|
||||
:CREATED: [2026-04-28 Tue 09:51]
|
||||
:END:
|
||||
|
||||
* [[https://arxiv.org/abs/2603.13247][[2603.13247] ILION: Deterministic Pre-Execution Safety Gates for Agentic AI Systems]]
|
||||
:PROPERTIES:
|
||||
:TITLE: [2603.13247] ILION: Deterministic Pre-Execution Safety Gates for Agentic AI Systems
|
||||
:URI: https://arxiv.org/abs/2603.13247
|
||||
:CREATED: [2026-05-04 Mon 08:19]
|
||||
:END:
|
||||
|
||||
* [[https://github.com/Athonitul/ilion-framework-simulator/tree/main/benchmark][ilion-framework-simulator/benchmark at main · Athonitul/ilion-framework-simulator]]
|
||||
:PROPERTIES:
|
||||
:TITLE: ilion-framework-simulator/benchmark at main · Athonitul/ilion-framework-simulator
|
||||
:URI: https://github.com/Athonitul/ilion-framework-simulator/tree/main/benchmark
|
||||
:CREATED: [2026-05-04 Mon 08:19]
|
||||
:END:
|
||||
|
||||
* [[https://iamtitan.tech/][Titan Observatory]]
|
||||
:PROPERTIES:
|
||||
:TITLE: Titan Observatory
|
||||
:URI: https://iamtitan.tech/
|
||||
:CREATED: [2026-05-04 Mon 08:19]
|
||||
:END:
|
||||
|
||||
* [[https://arxiv.org/abs/2002.06177][[2002.06177] The Next Decade in AI: Four Steps Towards Robust Artificial Intelligence]]
|
||||
:PROPERTIES:
|
||||
:TITLE: [2002.06177] The Next Decade in AI: Four Steps Towards Robust Artificial Intelligence
|
||||
:URI: https://arxiv.org/abs/2002.06177
|
||||
:CREATED: [2026-05-04 Mon 08:19]
|
||||
:END:
|
||||
|
||||
* [[https://arxiv.org/abs/2604.25850][[2604.25850] Agentic Harness Engineering: Observability-Driven Automatic Evolution of Coding-Agent Harnesses]]
|
||||
:PROPERTIES:
|
||||
:TITLE: [2604.25850] Agentic Harness Engineering: Observability-Driven Automatic Evolution of Coding-Agent Harnesses
|
||||
:URI: https://arxiv.org/abs/2604.25850
|
||||
:CREATED: [2026-05-04 Mon 08:20]
|
||||
:END:
|
||||
|
||||
* [[https://x.com/i/status/2049883896444055978][Atai Barkai on X: "UI is Dead. Long Live Generative UI" / X]]
|
||||
:PROPERTIES:
|
||||
:TITLE: Atai Barkai on X: "UI is Dead. Long Live Generative UI" / X
|
||||
:URI: https://x.com/i/status/2049883896444055978
|
||||
:CREATED: [2026-05-04 Mon 08:20]
|
||||
:END:
|
||||
|
||||
* [[https://github.com/CopilotKit/CopilotKit][CopilotKit/CopilotKit: The Frontend Stack for Agents & Generative UI. React + Angular. Makers of the AG-UI Protocol]]
|
||||
:PROPERTIES:
|
||||
:TITLE: CopilotKit/CopilotKit: The Frontend Stack for Agents & Generative UI. React + Angular. Makers of the AG-UI Protocol
|
||||
:URI: https://github.com/CopilotKit/CopilotKit
|
||||
:CREATED: [2026-05-04 Mon 08:21]
|
||||
:END:
|
||||
|
||||
* [[https://x.com/i/status/2050062045471740303][Ahmad on X: "My Homelab Is Technically the Cloud Now" / X]]
|
||||
:PROPERTIES:
|
||||
:TITLE: Ahmad on X: "My Homelab Is Technically the Cloud Now" / X
|
||||
:URI: https://x.com/i/status/2050062045471740303
|
||||
:CREATED: [2026-05-04 Mon 08:21]
|
||||
:END:
|
||||
|
||||
* [[https://github.com/garrytan/gstack][garrytan/gstack: Use Garry Tan's exact Claude Code setup: 23 opinionated tools that serve as CEO, Designer, Eng Manager, Release Manager, Doc Engineer, and QA]]
|
||||
:PROPERTIES:
|
||||
:TITLE: garrytan/gstack: Use Garry Tan's exact Claude Code setup: 23 opinionated tools that serve as CEO, Designer, Eng Manager, Release Manager, Doc Engineer, and QA
|
||||
:URI: https://github.com/garrytan/gstack
|
||||
:CREATED: [2026-05-04 Mon 08:21]
|
||||
:END:
|
||||
|
||||
* [[https://github.com/garrytan/gbrain][garrytan/gbrain: Garry's Opinionated OpenClaw/Hermes Agent Brain]]
|
||||
:PROPERTIES:
|
||||
:TITLE: garrytan/gbrain: Garry's Opinionated OpenClaw/Hermes Agent Brain
|
||||
:URI: https://github.com/garrytan/gbrain
|
||||
:CREATED: [2026-05-04 Mon 08:21]
|
||||
:END:
|
||||
|
||||
* [[https://gxl.ai/blog/adding-arxiv-and-abstracts][Adding arXiv and 150M+ abstracts to Paperclip — GXL Blog]]
|
||||
:PROPERTIES:
|
||||
:TITLE: Adding arXiv and 150M+ abstracts to Paperclip — GXL Blog
|
||||
:URI: https://gxl.ai/blog/adding-arxiv-and-abstracts
|
||||
:CREATED: [2026-05-04 Mon 08:21]
|
||||
:END:
|
||||
|
||||
* [[https://github.com/ciembor/agent-rules-books][ciembor/agent-rules-books: Ready-to-use Codex, Cursor, and Claude Code rules inspired by classic software engineering books.]]
|
||||
:PROPERTIES:
|
||||
:TITLE: ciembor/agent-rules-books: Ready-to-use Codex, Cursor, and Claude Code rules inspired by classic software engineering books.
|
||||
:URI: https://github.com/ciembor/agent-rules-books
|
||||
:CREATED: [2026-05-04 Mon 08:21]
|
||||
:END:
|
||||
|
||||
* [[https://www.warp.dev/oz][Oz: The Orchestration Platform for Cloud Agents by Warp]]
|
||||
:PROPERTIES:
|
||||
:TITLE: Oz: The Orchestration Platform for Cloud Agents by Warp
|
||||
:URI: https://www.warp.dev/oz
|
||||
:CREATED: [2026-05-04 Mon 08:22]
|
||||
:END:
|
||||
|
||||
* [[https://arxiv.org/abs/2508.04495][[2508.04495] Causal Reflection with Language Models]]
|
||||
:PROPERTIES:
|
||||
:TITLE: [2508.04495] Causal Reflection with Language Models
|
||||
:URI: https://arxiv.org/abs/2508.04495
|
||||
:CREATED: [2026-05-04 Mon 08:22]
|
||||
:END:
|
||||
|
||||
* [[https://arxiv.org/abs/2508.15750v1][[2508.15750v1] Active Learning for Neurosymbolic Program Synthesis]]
|
||||
:PROPERTIES:
|
||||
:TITLE: [2508.15750v1] Active Learning for Neurosymbolic Program Synthesis
|
||||
:URI: https://arxiv.org/abs/2508.15750v1
|
||||
:CREATED: [2026-05-04 Mon 08:22]
|
||||
:END:
|
||||
|
||||
* [[https://abideai.com/blog/whitepaper-aug25][Abide AI]]
|
||||
:PROPERTIES:
|
||||
:TITLE: Abide AI
|
||||
:URI: https://abideai.com/blog/whitepaper-aug25
|
||||
:CREATED: [2026-05-04 Mon 08:22]
|
||||
:END:
|
||||
|
||||
* [[https://thedarklightx.github.io/Formal_Methods_Philosophy/][Home | Formal Philosophy]]
|
||||
:PROPERTIES:
|
||||
:TITLE: Home | Formal Philosophy
|
||||
:URI: https://thedarklightx.github.io/Formal_Methods_Philosophy/
|
||||
:CREATED: [2026-05-04 Mon 08:22]
|
||||
:END:
|
||||
|
||||
|
||||
BIN
inbox/2512.24601v2.pdf
Normal file
BIN
inbox/2602.22302v1.pdf
Normal file
BIN
inbox/paper.pdf
Normal file
BIN
inbox/von_Neumann_1955.pdf
Normal file
1
notes/.#chats-with-gemini.org
Symbolic link
@@ -0,0 +1 @@
|
||||
user@amr.154851:1777155215
|
||||
760
notes/chats-with-gemini.org
Normal file
@@ -0,0 +1,760 @@
|
||||
#+TITLE: Chats with Gemini
|
||||
#+AUTHOR: Amero
|
||||
#+FILETAGS: :gemini:ai:research:
|
||||
#+STARTUP: content
|
||||
|
||||
* Chat 1: REPL Agents Advantages
|
||||
|
||||
Source: https://gemini.google.com/share/5fc668800a27
|
||||
|
||||
Date: April 22, 2026
|
||||
|
||||
Summary of key concepts discussed:
|
||||
|
||||
** Core Insight: REPL as "Active" Memory**
|
||||
|
||||
A REPL-based agent doesn't just "read" context—it treats the codebase as a searchable variable. It can programmatically explore, test, and verify, rather than passively predicting what might work.
|
||||
|
||||
*** Benefits for AI Agents
|
||||
|
||||
1. *Context Optimization*: Instead of stuffing 10,000 files into context, the agent runs scripts to fetch only what's needed. Keeps active context lean (2k-4k tokens) instead of bloated.
|
||||
|
||||
2. *Verification over Hallucination*: The agent can actually run code it writes. If the REPL returns an error, it sees it immediately and fixes it. No more "guessing" if the code works.
|
||||
|
||||
3. *Recursive Problem Solving*: The agent can spawn "mini-versions" of itself to handle sub-tasks. A main agent identifies 50 files needing change, recursively calls sub-agents for each.
|
||||
|
||||
4. *Diffusion-Style Reasoning*: Initialize an answer variable, keep editing it as it explores. "Diffuses" toward correct solution over multiple turns before presenting final result.
|
||||
|
||||
5. *VRAM Efficiency*: By keeping context tiny, a 27B model can perform like a much larger model. Its "brainpower" goes to logic, not holding text.
|
||||
|
||||
*** Economic Impact
|
||||
|
||||
- *Token Costs*: Quadratic in standard chat (re-sending history each turn). Linear/flat in REPL (context stored once). 80-90% reduction for long sessions.
|
||||
- *VRAM*: Minimal active context = much faster token processing.
|
||||
- *Hot State*: Variables, file handles, sub-routine results already live. Eliminates pre-fill latency.
|
||||
- *Tiered Pricing*: Use expensive "brain" for hard decisions, cheap sub-agents for grunt work.
|
||||
|
||||
*** Extension to Non-Coding Text Work
|
||||
|
||||
1. *World Variable*: Treat manuscript as persistent database variable. Query "what color are John's eyes" without reading whole book. Eliminates context drift.
|
||||
|
||||
2. *Recursive Synthesis*: For research, root agent spawns sub-agents to mine themes from massive library stored in REPL variable. Process effectively infinite input.
|
||||
|
||||
3. *Consistency REPL*: Maintain "Truth Table" in live memory. Before writing, "evaluates" text against that state. Throws error if contradicts previous definition.
|
||||
|
||||
4. *Self-Modifying Voice*: Style guide isn't just a prompt—it's live functions. Tell agent "too formal," it rewrites its own generate-tone function. Every subsequent sentence inherits the fix.
|
||||
|
||||
*** Why REPL Agents Aren't Dominating Yet
|
||||
|
||||
1. *Security*: Adversarial persistence. In standard chat, poison disappears on new session. In REPL, if attacker modifies a core function, it persists indefinitely. Enterprise sees this as "terrifying."
|
||||
|
||||
2. *Lisp Curse*: Python ecosystem is massive (10M developers vs 1 Lisp master). Hiring Lisp maintainers is "key person risk."
|
||||
|
||||
3. *Maintenance Tax*: REPL agents fail probabilistically, not deterministically. Can enter logic loops nearly impossible to debug. 3x more efficient but 5x more engineering hours to monitor.
|
||||
|
||||
4. *Stakeholder Model*: No solid way to distinguish users. Agent might apply voice/permissions learned from one user to another.
|
||||
|
||||
*** State Rot Mitigations
|
||||
|
||||
1. *Snapshots*: Baseline save game for instant recovery.
|
||||
2. *Rollbacks*: Compensation actions that undo specific changes. Shadow/overlay filesystem—changes only become real when verified.
|
||||
3. *Compaction*: Background scrubber extracts only new facts, deletes noise. Moves important facts to vector database, wipes active context.
|
||||
4. *Courtroom Model*: Multi-agent system. Prosecutor finds contradictions. Jury decides if state is corrupted, forces hard reset.
|
||||
5. *Lisp Condition Restarts*: Error enters break loop. Presented with recovery paths it can take without losing progress.
|
||||
6. *Semantic Isolation*: Memory barriers between tasks. Clears previous variables when switching context. Prevents contamination.
|
||||
7. *Formal Property Verification*: SystemVerilog-style assertions. Updates rejected at hardware level if violate core rules.
|
||||
|
||||
*** RLM Paper Reference
|
||||
|
||||
Paper: "Recursive Language Models" (arxiv 2512.24601)
|
||||
|
||||
- REPL as "Infinite Memory" - treats long prompts as external environment inside Python REPL
|
||||
- Recursive Decomposition - model writes script to break task, calls smaller instances of itself
|
||||
- Answer Variable Persistence - diffusion-style reasoning over multiple turns
|
||||
- Validates that local 8B model with REPL can outperform much larger models
|
||||
- Conclusion: Inference-time scaling (looping in REPL) more efficient than training-time scaling (bigger model)
|
||||
|
||||
** Relevance to OpenCortex
|
||||
|
||||
This aligns with OpenCortex's architecture:
|
||||
|
||||
- *Lisp REPL*: OpenCortex runs in Common Lisp, naturally homoiconic. Code is data—agent can modify its own skills.
|
||||
- *Metabolic Loop*: Perceive → Reason → Act pipeline mirrors RLM's "crawl and verify" approach.
|
||||
- *Memory Rollback*: Transactional state management prevents state rot.
|
||||
- *Skills as Org-mode*: Structured, queryable, hot-reloadable. Similar to "world variable" concept.
|
||||
- *v0.2.0 Self-Editing*: Direct implementation of "agent modifies its own brain" concept.
|
||||
- *v0.3.0 Event Orchestration*: Three tiers (:REFLEX, :COGNITION, :REASONING) echo RLM's recursive decomposition.
|
||||
|
||||
** Opportunities for OpenCortex
|
||||
|
||||
1. Implement explicit "recursive sub-agent" pattern for complex tasks.
|
||||
2. Add "compaction" event for long-running sessions—extract facts to Org-mode, clear live context.
|
||||
3. Explore "courtroom" model: secondary skill that verifies primary skill's logic for contradictions.
|
||||
4. Document performance gains from REPL approach vs standard chat agents.
|
||||
5. Consider formal property verification for critical skill invariants.
|
||||
|
||||
* Chat 2: OpenCortex v1.0.0 Roadmap Review
|
||||
|
||||
Source: https://gemini.google.com/share/bb714c13acab
|
||||
|
||||
Date: April 28, 2026
|
||||
|
||||
** Gemini's Assessment of OpenCortex
|
||||
|
||||
*** Strengths
|
||||
|
||||
1. *Homoiconicity*: Lisp code is nested lists (data). Agent can natively read, write, evaluate its own logic at runtime without complex AST parsers.
|
||||
|
||||
2. *Probabilistic-Deterministic Loop*: LLM as semantic "guessing" engine, intercepted by deterministic Lisp "Bouncer." Formal verification before execution—solves hallucination-execution danger.
|
||||
|
||||
3. *Org-mode as Unified AST*: Humans and machines read/write same format. Eliminates translation layer between human notes (Markdown) and machine data (JSON).
|
||||
|
||||
*** Roadmap Opinion
|
||||
|
||||
- *Short-term (v0.1-v1.0)*: Pragmatic. Self-editing (v0.2), TDD auto-repair, GTD workflows—perfect for Emacs ecosystem.
|
||||
- *Mid-term (v2.0-v3.0)*: Paradigm shift. Agent becomes Emacs process (Lisp Machine Emergence). Deterministic planner relegates LLM to semantic translation—future-proofs against model degradation.
|
||||
- *Long-term (v4.0-v5.0)*: Borderline fundamental AI research. Llama.cpp FFI, persistent world models.
|
||||
|
||||
*** Trade-offs
|
||||
|
||||
- *Extreme Niche*: Pure Common Lisp + Emacs = massive barrier to entry.
|
||||
- *Maintenance Burden*: No Python AI ecosystem (LangChain, LlamaIndex)—must build everything manually in Lisp.
|
||||
|
||||
** Gaps in Roadmap & Escape from Niche
|
||||
|
||||
*** Identified Gaps
|
||||
|
||||
1. *First Five Minutes*: No standalone binary or one-click Docker. Setup requires highly technical user.
|
||||
|
||||
2. *Evaluation/Benchmarking*: No mechanism to measure "SOTA Parity." Needs integration with SWE-bench, WebArena.
|
||||
|
||||
3. *Observability*: No visual tracing tool, GUI dashboard. Reading thousands of Plists isn't true observability.
|
||||
|
||||
4. *Interoperability*: Assumes single user. No multi-agent collaboration, OAuth, webhooks.
|
||||
|
||||
5. *Prompt Injection Sandboxing*: What if hostile webpage says "ignore previous instructions"? Need dedicated security milestone for sandboxing eval.
|
||||
|
||||
*** Strategies to Escape Niche
|
||||
|
||||
1. *Bridge to PKMs*: Market as "AI Engine for Logseq." Build bidirectional sync for Obsidian (Markdown ↔ Org-mode).
|
||||
|
||||
2. *Shift Marketing*: From "Tech Stack" (Common Lisp + Org-mode) to "Outcomes" (hallucination-proof, 100% local, self-correcting).
|
||||
|
||||
3. *Standalone Binary*: Use SBCL's save-lisp-and-die to compile single executable. Spin up local web server. User runs =./opencortex start= without knowing it's Lisp.
|
||||
|
||||
4. *Batteries-Included Workflows*: Ship pre-built skills. "Drop PDF → auto-summarize." "Connect calendar → resolve conflicts."
|
||||
|
||||
5. *Extension API*: Offer gRPC/REST API so developers write skills in Python/Go/TypeScript. Lisp kernel as unbreakable OS, users write "apps."
|
||||
|
||||
** Cutting Edge GUI for AI Agents
|
||||
|
||||
*** Paradigm A: Visual Canvas (Consumers)
|
||||
|
||||
- *Artifact Model*: Side-by-side workspace. Converse on left, agent builds/edits on massive visual canvas on right.
|
||||
- *A2UI (Agent-to-User Interface)*: Agent streams declarative JSON. Client reads and renders pre-approved UI components natively. Eliminates injection attacks.
|
||||
|
||||
*** Paradigm B: Terminal/CLI (Developers)
|
||||
|
||||
- Claude Code, OpenClaw prove Unix Terminal is ultimate zero-overhead interface.
|
||||
- Direct native access to file system, compiler, git without Electron wrappers.
|
||||
|
||||
** Python/JSON Skills Bridge with Cannibalization
|
||||
|
||||
*** The Idea
|
||||
|
||||
User writes quick Python/JSON skill → executes immediately → system auto-cannibalizes into pure Lisp/Org-mode file.
|
||||
|
||||
*** Why It Works
|
||||
|
||||
- Zero-friction onboarding: Developers use tools they know (Python, LangChain).
|
||||
- Purity preserved: Python is temporary. Agent extracts logic, rewrites to Org Lisp, deletes Python.
|
||||
- Evolutionary architecture: LLM compiles Python into Lisp.
|
||||
|
||||
*** The Traps
|
||||
|
||||
1. *Translation Hallucination*: Python relies on C-bound libraries (Pandas, NumPy). Cannot translate to pure Lisp without writing matrix math from scratch.
|
||||
|
||||
2. *Security*: Automatically executing translated Lisp is massive vulnerability. Must have strict sandbox during cannibalization.
|
||||
|
||||
*** Correct Execution
|
||||
|
||||
- Enforce strict JSON schema for Python skill.
|
||||
- Ignore Python execution logic, read only JSON schema.
|
||||
- Use JSON map to construct Lisp defskill macro and Org properties.
|
||||
|
||||
** MCP for Integrations, Skills for Local Processing
|
||||
|
||||
*** Architecture Split
|
||||
|
||||
- *MCP for External*: External API calls (Slack, GitHub, DBs). Standard JSON-RPC via stdio or SSE. Keeps kernel pristine.
|
||||
|
||||
- *Native Skills for Local*: Heavy iterative processing (PDF vectorizing). Operates in same memory space as brain. Zero-latency.
|
||||
|
||||
- *Security*: External API calls isolated behind MCP. If API fails, MCP server handles error, Lisp kernel registers :blocked/:failed.
|
||||
|
||||
** Bouncer Engine - Deterministic Safety
|
||||
|
||||
The one feature that makes users switch from OpenClaw: *Provable Execution Safety*.
|
||||
|
||||
- *OpenClaw*: LLM gets Node.js runtime. If it hallucinates command, pushes .env to GitHub, little stops it.
|
||||
- *OpenCortex*: LLM is sandboxed. Can only generate request as Lisp Property List. Bouncer intercepts, formally verifies against invariants before execution.
|
||||
|
||||
** Bouncer Learning on the Job
|
||||
|
||||
Static Bouncer = straitjacket. Must learn symbolically, not probabilistically.
|
||||
|
||||
1. *HITL Exception*: When LLM proposes unrecognized action, Bouncer suspends thread, writes to Org-mode. Human reviews, changes BLOCKED to APPROVED.
|
||||
|
||||
2. *Lisp Rule Synthesis*: When human approves, system triggers Rule Synthesis. Reads AST of approved command, generalizes parameters, compiles new safety rule at runtime.
|
||||
|
||||
3. *Shadow Mode*: Runs in "trial run" mode. Simulates execution in virtualized environment. Observes side effects. If safe, teaches itself pattern is approved.
|
||||
|
||||
4. *Formal Property Verification*: SystemVerilog-style assertions. Before committing state, must pass logical rules. Updates rejected at hardware level.
|
||||
|
||||
** GUI Timing: Before v1.0 or Between v1.0-v2.0?
|
||||
|
||||
Before v1.0 = Throwaway code trap. Would build Web GUI (React/Vue), but v2.0 cannibalizes Emacs into Lisp browser—that Web GUI becomes dead weight.
|
||||
|
||||
Between v1.0-v2.0 = Correct. v1.0 is SOTA Parity (cognitive engine bulletproof). Emacs/CLI are testing grounds. After v1.0, agent helps build its own interface.
|
||||
|
||||
** Lisp Browser Choice: McCLIM vs SDL2 vs WebView vs Qt
|
||||
|
||||
- *McCLIM*: Lisp Machine purist. Complete GUI framework. Feels like living inside program. Steep learning curve, "dated" look.
|
||||
|
||||
- *SDL2*: Total pixel control. High performance. Reinvents wheels (scrolling, fonts). Good for bespoke editor like Lem, nightmare for browser.
|
||||
|
||||
- *WebView*: Pragmatist. Lisp backend + browser engine frontend. JSON-RPC bridge. Best of both—CSS/HTML for UI, Lisp for logic. But C++ dependency, memory overhead.
|
||||
|
||||
- *Qt/QML*: Cross-platform native. Qt Quick (QML) is declarative—matches Lisp generation model. Touch-native for mobile. EQL5 (Embedded Common Lisp + Qt) compiles Lisp into Qt binary. No IPC overhead.
|
||||
|
||||
*** Decision: Qt/QML for mobile portability.
|
||||
|
||||
** Milestones Before v1.0.0
|
||||
|
||||
1. *v0.5.0*: Learning Loop—Symbolic Induction: Convert successful LLM chat sequences into reusable Lisp functions.
|
||||
|
||||
2. *v0.7.0*: Unified Gateway—Channel Agnostic Layer. MCP Host protocol to wrap Telegram/Signal/Slack.
|
||||
|
||||
3. *v0.9.0*: Agentic Governance—Formal Audit Logs. Every action cryptographically signed in Org-mode for replay.
|
||||
|
||||
4. *Additional*:
|
||||
- Sandboxing & Formal Verification Harness
|
||||
- Observability & Tracing (Thought Trace Visualizer)
|
||||
- Persistence & Recovery (Atomic Snapshots)
|
||||
- MCP Host Implementation
|
||||
- Evaluation Suite (Agent Benchmarks)
|
||||
|
||||
** Comparing to Hermes and OpenClaw
|
||||
|
||||
- *OpenClaw*: Swiss Army Knife gateway. Massive npm plugins. Python-based. Probabilistic execution—dangerous for safety.
|
||||
- *Hermes*: Self-Improving Partner. Pattern extraction. MIT License.
|
||||
|
||||
OpenCortex advantage:
|
||||
- Deterministic Bouncer = mathematically incapable of bypassing safety invariants
|
||||
- Zero-dependency deployment (single SBCL binary)
|
||||
- Homoiconic skills vs brittle JS/TS plugins
|
||||
|
||||
** MCP Approach: Own Lisp Native or OpenClaw's?
|
||||
|
||||
Build own. Why:
|
||||
- OpenClaw = Node.js runtime. Forces V8 alongside Lisp image. Performance tax, bloat.
|
||||
- Native Lisp MCP Host: In-process integration, no serialization overhead. Deterministic security inserted at protocol layer. Structural introspection—can inspect Lisp heap.
|
||||
|
||||
Strategy: "Native Host, Universal Client." Connect to existing MCP servers (Go/Python/TS) without writing own tools. Get ecosystem compatibility while keeping orchestration pure Lisp.
|
||||
|
||||
** Comparing to Motus
|
||||
|
||||
- *Motus*: Python agentic runtime. High-performance serving, parallelism, production-scale resilience. Focuses on infrastructure, not brain.
|
||||
- *openCortex*: Lisp Machine OS.
|
||||
|
||||
Borrow from Motus:
|
||||
- Task DAG Manager: Lisp-native dependency graph, automatic parallelism and async execution.
|
||||
- Declarative Guardrails: Use Lisp Types and Condition Systems instead of Pydantic.
|
||||
- Observability: Agent outputs Trace-Tree in S-expressions, render in WebView/Qt.
|
||||
|
||||
** Docker Compose Implementation
|
||||
|
||||
Game-changer. Already solved environmental configuration friction.
|
||||
|
||||
Use for "Agent-as-a-Service":
|
||||
- Unix Domain Socket or stdio pipe from sidecar (Nginx/Go) to Lisp process.
|
||||
- Map ~/memex/ directory as Docker Volume—agent always edits same Org files whether in Docker or native.
|
||||
|
||||
** Relevance to OpenCortex
|
||||
|
||||
This chat directly informs several roadmap items:
|
||||
|
||||
- *v0.3.0 HITL*: Implements Bouncer learning with symbolic rule synthesis
|
||||
- *v0.4.0 Git Workflows*: Addresses observability and tracing
|
||||
- *v0.5.0 Interactive Actuation*: Memory snapshots and persistence
|
||||
- *v0.7.0 MCP Bridge*: Native Lisp MCP Host implementation
|
||||
- *v2.0.0 Lisp Machine*: Qt/QML frontend, cannibalize Emacs
|
||||
|
||||
** Action Items from This Chat
|
||||
|
||||
1. Prioritize Docker persistence layer—demonstrate resume-on-crash
|
||||
2. Build native Lisp MCP Host rather than wrapping OpenClaw
|
||||
3. Consider Qt/QML (not WebView) for v2.0 GUI—better mobile support
|
||||
4. Add "Symbolic Induction" to v0.5.0—auto-generate Lisp functions from successful sessions
|
||||
5. Add "Formal Audit Logs" to roadmap—cryptographic signing of decisions
|
||||
6. Market "hallucination-proof" not "Common Lisp"
|
||||
|
||||
* Chat 3: OpenCortex v2.0.0 - The Lisp Browser Project
|
||||
|
||||
Source: https://gemini.google.com/share/17770a813c33
|
||||
|
||||
Date: January 17, 2026 (content), April 28, 2026 (publication)
|
||||
|
||||
** Project Vision
|
||||
|
||||
A Common Lisp-based web engine that treats the internet as manipulatable data structures rather than static pixels. Entirely keyboard-driven, introspectable, modifiable at runtime.
|
||||
|
||||
Core Architecture: Lisp as the Kernel (Parent Process), WebKit as display server (Sub-process).
|
||||
|
||||
- *Lisp Machine approach*: Browser inside Lisp, not Lisp inside browser
|
||||
- *Shared State*: Full access to filesystem, org-gtd files, system processes
|
||||
- *Unified Control*: Treat web page like text file—run Lisp macro over every link
|
||||
|
||||
** The Engine Dilemma
|
||||
|
||||
Two paths:
|
||||
1. *FFI Route*: Wrap WebKitGTK or QtWebEngine (modern web compatibility)
|
||||
2. *Headless Orchestrator*: Lisp drives headless Chromium via Chrome DevTools Protocol
|
||||
|
||||
Decision: Use WebKitGTK via cl-webkit bindings for Phase 1.
|
||||
|
||||
** The "Emacs-Like" Editor Core
|
||||
|
||||
- Buffer Management: Every tab is a buffer.
|
||||
- Minibuffer: Command line at bottom for Lisp functions, history, buffer switching.
|
||||
- Self-Documentation: describe-key, describe-command for introspection.
|
||||
|
||||
** The Browser vs. Lisp Machine Distinction
|
||||
|
||||
*Browser inside Lisp* (Project Paradigmatic):
|
||||
- Lisp is Parent Process, owns window, memory, input loop
|
||||
- WebKit is merely a library rendering pixels inside a Lisp buffer
|
||||
- Can redefine functions while browsing without restart
|
||||
|
||||
*Lisp inside browser* (Extension):
|
||||
- Browser is authority, sandbox restricts capabilities
|
||||
|
||||
** Performance vs. Chrome
|
||||
|
||||
- *Rendering*: WebKit vs Blink—5-10% slower on JS-heavy sites, imperceptible for 95% of web.
|
||||
- *Memory*: Single Lisp Image manages UI/hooks vs Chrome's massive per-tab processes. Can keep 50+ buffers with lower RAM than 20 Chrome tabs.
|
||||
- *Latency*: SBCL compiles to machine code. Keybinding lookup in microseconds—faster than 16ms window for 60fps.
|
||||
- *Input Loop*: GDK events intercepted before reaching WebKit—browser can't "steal" shortcuts.
|
||||
|
||||
Performance Guardrails:
|
||||
- Lazy Buffer Loading: Buffers remain dormant until switched to.
|
||||
- Native Key Handling: Keybindings in Lisp core—even if page is frozen, browser commands work.
|
||||
- Direct DOM Extraction: WebKit C-API for fast data extraction.
|
||||
|
||||
** Pure Lisp Parser vs. Hybrid
|
||||
|
||||
*Pure Lisp (Option A)*:
|
||||
- HTML5 Parser: 2-3 months for spec-compliant parser (agents helpful)
|
||||
- CSS Layout Engine: 12-18 months (agents medium—debugging needs human eyes)
|
||||
- JavaScript Engine: Multiple years (recommend embedding QuickJS or using bridge)
|
||||
|
||||
*Hybrid (Option B)* - Recommended:
|
||||
- Network: dexador (Pure Lisp)
|
||||
- HTML Parsing: Plump (Pure Lisp)
|
||||
- Layout: Wrap Yoga (C-based Flexbox) via FFI
|
||||
- JavaScript: Embed QuickJS
|
||||
|
||||
"Erosion" Roadmap (B → A):
|
||||
1. *Stage 1*: UI & Logic (Qt for window → develop CL-OpenGL layer → swap to Pure Lisp UI)
|
||||
2. *Stage 2*: DOM (WebKit holds DOM → Lisp builds own S-Expression DOM → WebKit only for "Painting" pixels)
|
||||
3. *Stage 3*: Layout (WebKit calculates → Agent writes CL layout engine → WebKit turned off)
|
||||
|
||||
** GUI Choice: Qt vs. GTK
|
||||
|
||||
*Decision: Qt/QML via EQL5*
|
||||
|
||||
- *Mobile*: GTK doesn't run natively on iOS/Android. Qt is industry standard for cross-platform C++.
|
||||
- *Performance*: Qt handles low-level graphics acceleration (RHI) better for mobile fluidity.
|
||||
- *EQL5*: Exposes full Qt C++ API from Lisp. Access mobile sensors (GPS, Camera) from Lisp without C++.
|
||||
|
||||
** Bootstrapping Phases
|
||||
|
||||
- *Phase 1 (M1-2)*: Core loop (SBCL), minibuffer, command processor, "Hello World" window
|
||||
- *Phase 2 (M3-4)*: Buffer logic, keybinding engine, PTY shell bridge—"Ghost Editor"
|
||||
- *Phase 3 (M5-7)*: Integrate cl-webkit, web-buffer class, input interceptor
|
||||
- *Phase 4 (M8-10)*: Mobile port via EQL5/LispWorks, gesture mapping, Remote IPC
|
||||
- *Phase 5 (M11+)*: Org-mode integration, Extension API
|
||||
|
||||
** Emacs Ecosystem Integration
|
||||
|
||||
*Ambassador IPC Bridge*: RPC layer using EPC to call Emacs functions.
|
||||
|
||||
- *Phase I (Parasite)*: RPC Bridge—Browser calls Emacs for all logic (Org capture, Magit)
|
||||
- *Phase II (Interpreter)*: Build ELisp compatibility layer in CL to run some packages natively
|
||||
- *Phase III (Successor)*: Native CL versions read/write same file formats—total independence
|
||||
|
||||
Handling key packages:
|
||||
- *Org-Mode*: Use cl-org-mode to read/write .org files directly. Keep Emacs UI for heavy editing.
|
||||
- *Magit*: Spawn Emacs buffer in UI frame via XEmbed—looks integrated, runs original package.
|
||||
- *LSP*: Write Native CL LSP Client—gives editor intelligence without Emacs dependency.
|
||||
|
||||
** Mobile UI Density Strategy
|
||||
|
||||
- *Tiling Layout*: Semantic stacking. 80-90% primary buffer, 10% contextual slits at edges.
|
||||
- *Translucent Minibuffer*: Modal overlay over website content.
|
||||
- *Z-Axis Hierarchy*: Foreground (Minibuffer), Active (Browser/Editor toggled via gesture), Background (CLI continuous), Persistent (Header with memory/GTD/battery).
|
||||
- *Lisp-Gesture System*: Two-finger tap = M-x, edge-swipe left = prev-buffer, edge-swipe up = focus CLI.
|
||||
|
||||
** App Store Strategy
|
||||
|
||||
- *iOS*: "Educational/Developer Tool" loophole (Guideline 4.7). No JIT compilation (interpreted Lisp only).
|
||||
- *Android*: F-Droid for unrestricted version, Play Store with sandboxed version.
|
||||
- *Security*: "Safety Bridge"—Lisp code can manipulate browser/files but cannot touch hardware without standard permission pop-up.
|
||||
|
||||
** IPC: The Trinity Integration
|
||||
|
||||
- *Lisp-Signal Architecture*: Global Event Bus using Observer Pattern. Signals carry P-Lists. Asynchronous or Blocking.
|
||||
- *Browser → Editor*: page-load-complete signal → org-gtd module listens → auto-captures title/metadata.
|
||||
- *CLI → Browser*: file-system-change signal → local file hot-reload without manual refresh.
|
||||
- *Editor → CLI*: eval-in-shell signal → execute code → return output to Minibuffer.
|
||||
- *Remote IPC*: Swank for mobile-to-PC. "Push" state from PC, deserialize on Mobile.
|
||||
|
||||
** Action Items from This Chat
|
||||
|
||||
1. Start with Qt/QML (EQL5) for UI—abandon GTK research
|
||||
2. Implement "Bridge-First" architecture to enable future "Pure Lisp" erosion
|
||||
3. Phase 1 starts with Minibuffer & Buffer Management, not browser
|
||||
4. Use EPC to bridge to Emacs packages (Org, Magit) initially, rewrite later
|
||||
5. Mobile version follows desktop—same Lisp core, gesture-based input
|
||||
6. Build "Lisp-Gesture" system for mobile command mapping
|
||||
|
||||
* Chat 4: OpenCortex v3.0.0 - Neuro-Symbolic & EGGROLL
|
||||
|
||||
Source: https://gemini.google.com/share/f0bbf4b6c488
|
||||
|
||||
Date: April 26, 2026 (content), April 28, 2026 (publication)
|
||||
|
||||
** EGGROLL Paper Implications
|
||||
|
||||
Paper: "Evolution Strategies at the Hyperscale" (EGGROLL - Evolution Guided GeneRal Optimisation via Low-rank Learning)
|
||||
|
||||
Key implications:
|
||||
1. *Backprop-free*: Uses Evolution Strategies to perturb parameters and select best versions. Removes memory overhead of storing activations.
|
||||
2. *Inference-Speed Training*: Low-rank perturbations (like LoRA) enable 100x speedup vs standard ES.
|
||||
3. *Low-Precision Training*: Robust to noise—demonstrated stable training with pure int8. Enables "integer-only" LLMs.
|
||||
4. *Non-Differentiable Objectives*: Treats model as black box. Can optimize any reward signal, even noisy/outcome-only.
|
||||
5. *New Architectures*: Successfully trained RWKV-7 (recurrent model) in integer formats—architectures previously "un-trainable."
|
||||
|
||||
Training vs Inference:
|
||||
- EGGROLL is for training, but enables better inference via integer-only models
|
||||
- 50-80% memory savings, 100x speedup vs previous ES
|
||||
- Competitive with GRPO (DeepSeek) for reasoning tasks
|
||||
|
||||
Hardware Impact:
|
||||
- Don't need expensive H100s—works on cheaper hardware with lower VRAM
|
||||
- Doesn't require ASICs—but is "dream algorithm" for integer-only ASICs
|
||||
- Compatible with current Transformer ASICs (TPUs, Groq)—just "easier" math
|
||||
- Future ASICs will strip out high-precision units, making them cheaper
|
||||
|
||||
Nvidia's Strategy:
|
||||
- Jevons Paradox: Making training cheaper leads to more consumption (larger models)
|
||||
- Owns the "Post-Backprop" software stack via CUDA
|
||||
- Shifts to FP4/FP2 chips—EGGROLL thrives on low precision
|
||||
|
||||
** Why EGGROLL Doesn't Work Well with Symbolic AI
|
||||
|
||||
1. *Smoothness vs Brittleness*: Neural networks are continuous—small changes = small effects. Symbolic logic is brittle—change one symbol = total nonsense.
|
||||
2. *Parameter Space vs Combinatorial Space*: EGGROLL works in continuous parameter space. Symbolic AI lives in combinatorial space (Rubik's cube)—random mutations mostly produce garbage.
|
||||
3. *Low-Rank Mismatch*: Assumes redundancy in weights. Symbolic logic—every symbol is vital. No redundancy to compress.
|
||||
4. *Needle-in-Haystack*: Symbolic often has ONE correct answer. ES is "blind" search—almost impossible to find that one needle.
|
||||
|
||||
** Neuro-Symbolic is the Future
|
||||
|
||||
- 10-80-10 Architecture: 10% Neural (Input) → 80% Symbolic (Reasoning) → 10% Neural (Output)
|
||||
- EGGROLL optimizes the "10%" parts (neural translator) while Symbolic middle does the hard logic
|
||||
- Outcome-based rewards work perfectly with EGGROLL—binary feedback from symbolic checkers
|
||||
|
||||
** Building the Symbolic Part
|
||||
|
||||
Why it has been a challenge:
|
||||
- Knowledge Engineering Bottleneck: Manual rule writing was slow, expensive, brittle
|
||||
- Combinatorial Explosion: More rules = exponential interactions = "spaghetti code"
|
||||
|
||||
How it's unlocked:
|
||||
- LLMs as "Auto-Formalizers": Translate messy text into formal logic (Prolog, Lean)
|
||||
- Self-Correction Loop: AI generates symbolic rule → compiler checks → AI refines
|
||||
- Program Synthesis: LLM writes code, symbolic compiler verifies, AI learns from errors
|
||||
|
||||
Five Components:
|
||||
1. *Knowledge Representation*: Knowledge Graphs (Neo4j), Ontologies, Digital Twins
|
||||
2. *Formal Logic Engine*: Constraint Solvers, Business Logic (If-Then)
|
||||
3. *Inference & Planning*: Symbolic Planners, Deductive Reasoning, MCTS
|
||||
4. *Neuro-Symbolic Interface*: Semantic Parsers, Grounding Layer
|
||||
5. *Verifier & Reward Loop*: Formal Verifiers, Outcome-Based Rewards (where EGGROLL shines)
|
||||
|
||||
** Bootstrapping a Neuro-Symbolic System
|
||||
|
||||
Architectural Blueprint (Self-Evolving 10-80-10):
|
||||
1. *Phase 1 (Scaffolding)*: Use LLM as "Knowledge Engineer"—feeds unstructured data, outputs Knowledge Graph + Formal Rules (Prolog/Lean)
|
||||
2. *Phase 2 (Execution Stack)*: Neural First-Mile (translate input) → Symbolic Middle-Mile (run against Knowledge Graph) → Neural Last-Mile (format output)
|
||||
3. *Phase 3 (Learning Loop)*: System encounters rule failure → Optimization Agent proposes patch → EGGROLL trains agent based on Symbolic Verifier's fitness signal
|
||||
4. *Phase 4 (Hardware)*: Run on Int8/Int4 precision—EGGROLL for training, Logic ASIC for symbolic core
|
||||
|
||||
** The "Seed" Explained
|
||||
|
||||
- Seed = Unstructured domain knowledge (PDFs, logs, manuals)
|
||||
- Feed to: Extraction Pipeline (LLamaIndex + high-reasoning LLM as Auto-Formalizer)
|
||||
- Output: Structured Knowledge Graph + Formal Rules
|
||||
|
||||
Who builds the symbolic engine:
|
||||
- Assemble from open-source: Knowledge Graph (VivaceGraph), Solver (Z3), Logic (Prolog/Datalog)
|
||||
- Program Synthesis: LLM writes specific code for business rules
|
||||
- Don't build low-level—build on existing libraries
|
||||
|
||||
** Lisp for Neuro-Symbolic
|
||||
|
||||
Open-Source Lisp Stack:
|
||||
- Compiler: SBCL (fast, symbolic manipulation)
|
||||
- Knowledge Store: VivaceGraph v3 (Lisp-native graph database + Prolog)
|
||||
- Reasoner: Screamer (non-deterministic backtracking)
|
||||
- Formal Judge: ACL2 (theorem prover, BSD licensed)
|
||||
- Glue: Mark Watson's 2026 examples for LLM-Lisp bridge
|
||||
|
||||
Why Lisp wins:
|
||||
- Homoiconicity: AI can write Lisp easily—syntax is just parentheses
|
||||
- Code as Data: Can inspect and modify running logic
|
||||
- DSL Creation: Write macros to create domain-specific languages
|
||||
- 100% auditable: (macroexpand) any rule to see exactly how it works
|
||||
|
||||
"Stitching" not "Building":
|
||||
- Use VivaceGraph for storage, Screamer for constraint checking, ACL2 for formal proofs
|
||||
- Neural model outputs S-expressions → Lisp parses → Symbolic checks → EGGROLL trains neural to produce better S-expressions
|
||||
- EGGROLL can be used via Py4CL2 bridge or implemented in Lisp with MGL-MAT
|
||||
|
||||
Prolog in Lisp:
|
||||
- Norvig's PAIP contains classic mini-Prolog in Lisp
|
||||
- VivaceGraph v3 has Prolog-like query language built-in
|
||||
- cl-prolog2 bridges to external SWI-Prolog
|
||||
|
||||
DSL Approach:
|
||||
- Don't build new engine—build new DSL (Domain Specific Language)
|
||||
- Lisp macros transform human-readable rules into Prolog queries
|
||||
- Bootstrap: Use LLM to write first draft of Lisp-DSL rules from seed data
|
||||
|
||||
** Action Items from This Chat
|
||||
|
||||
1. Use VivaceGraph v3 + Screamer + ACL2 as the open-source Lisp symbolic stack
|
||||
2. Implement 10-80-10 architecture: Neural Input → Symbolic Reasoning → Neural Output
|
||||
3. Bridge EGGROLL via Py4CL2 or implement low-rank evolution in Lisp with MGL-MAT
|
||||
4. Build DSL for domain-specific rules—don't write low-level engine from scratch
|
||||
5. Use LLM as Auto-Formalizer to bootstrap Knowledge Graph from seed data
|
||||
6. Prioritize integer-only (int8) deployment for cost efficiency
|
||||
|
||||
* Chat 5: OpenCortex v4.0.0 - Lisp Machines, FPGA & AI
|
||||
|
||||
Source: https://gemini.google.com/share/fcb2b654d77c
|
||||
|
||||
Date: December 25, 2025 (content), April 28, 2026 (publication)
|
||||
|
||||
** Lisp Machines vs ASICs
|
||||
|
||||
Technically, Lisp machines are not ASICs. They are computers with Application-Specific Instruction Set Processors (ASIPs).
|
||||
|
||||
- *ASIC*: Fixed, hardwired logic (one task). Cannot be reprogrammed.
|
||||
- *Lisp Machine*: General-purpose CPU with custom silicon (Symbolics Ivory, TI Explorer) optimized for Lisp—programmable but Lisp-specific.
|
||||
|
||||
The "middle ground": Lisp CPUs were custom silicon designed to run Lisp with hardware support for tagged architecture, garbage collection, and fast function calls.
|
||||
|
||||
** Emacs as Virtual Lisp Machine
|
||||
|
||||
Emacs mimics Lisp Machine architecture entirely in software:
|
||||
- Full visibility/introspection—M-x find-function to inspect any command
|
||||
- Single address space (Lisp Heap)—one bug can crash everything
|
||||
- The "C Substrate" problem: C code is the "floor" below the Lisp layer
|
||||
|
||||
** Best Lisp? Common Lisp, Scheme, Emacs Lisp, Clojure
|
||||
|
||||
Common Lisp is the standard. Emacs Lisp reinforces the "Lisp Machine" environment. Clojure runs on JVM but offers immutability. The choice depends on deployment context.
|
||||
|
||||
** Why Emacs Core Written in C?
|
||||
|
||||
1. *Bootstrap Problem*: Can't run Lisp without a Lisp interpreter. Hardware understood Lisp natively; Unix didn't.
|
||||
2. *Performance*: 1980s hardware too slow for interpreted Lisp. C allowed direct memory manipulation (gap buffers).
|
||||
3. *Portability*: C compilers existed everywhere; Lisp implementations were fragmented.
|
||||
|
||||
Today, Lem (Common Lisp editor) proves pure Lisp is viable on modern hardware.
|
||||
|
||||
** The Turtles All The Way Down Paradox
|
||||
|
||||
The "bottom turtle" is always Hardware ISA (x86/ARM). Even writing "Pure Lisp" from editor to binary, you're still standing on architecture designed by hardware engineers.
|
||||
|
||||
*Ken Thompson's "Reflections on Trusting Trust"*: A C compiler can embed a backdoor that survives compilation of "clean" source code. You can never truly know the bottom turtle.
|
||||
|
||||
** Stage0 Project
|
||||
|
||||
A project to create a fully bootstrap-able system starting from 500 bytes of manually written hex code to reach Lisp without "trusting" a C compiler.
|
||||
|
||||
- 500 Bytes Hex → Hex Assembler → M1 Macro Assembler → Lisp Interpreter → Self-Hosting Lisp
|
||||
|
||||
** RISC-V: C-Like?
|
||||
|
||||
RISC-V is currently "C-like" because designed for C efficiency:
|
||||
- Linear memory (C arrays/pointers)
|
||||
- Lack of "Tags" (software must check types manually)
|
||||
- Standard RISC-V doesn't inherently differentiate number vs address
|
||||
|
||||
Exception: J-Extension (Dynamically Translated Languages)—would add hardware tagging and GC hooks.
|
||||
|
||||
** Building a Modern Lisp Machine
|
||||
|
||||
1. *Hardware*: RISC-V core + Custom Lisp extensions (J-extension philosophy)
|
||||
- Tagged Architecture: Top 4-8 bits of every memory word = Type Tag
|
||||
- Zero-overhead Type Checking: Hardware checks tags in parallel with ALU operations
|
||||
- Trap on type mismatch
|
||||
|
||||
2. *Memory*: NVRAM for Single Address Space Storage
|
||||
- Persistent Heap: Everything in one giant pool of permanent memory
|
||||
- No "Booting": Turn on, state is exactly where you left it
|
||||
|
||||
3. *Garbage Collection*: Dedicated Bus Master (Scavenger)
|
||||
- Background cleaning while main CPU runs code
|
||||
- No "GC Pause"
|
||||
|
||||
4. *Development Environment*: Everything is a pointer, everything inspectable. No binary blobs.
|
||||
|
||||
** Why Not Build This Today?
|
||||
|
||||
- *C Trap*: Most software (browsers, drivers) is C/C++. Porting is monumental.
|
||||
- *Economies of Scale*: Intel/Apple spend billions. Custom Lisp chip would be 10x slower at raw math.
|
||||
- *Isolation*: Single bug in Lisp script could corrupt entire hardware state.
|
||||
|
||||
Modern solution: Formal Verification (Proof-Carrying Code, Capability-Based Security) instead of walls.
|
||||
|
||||
** FPGA Path to Build It
|
||||
|
||||
Hardware: Terasic DE10-Nano (learning), Xilinx KCU105 (full PCIe).
|
||||
|
||||
1. Learn Verilog, build Type Checker module
|
||||
2. Modify RISC-V core (VexRiscv) to add tagged ALU
|
||||
3. Implement PCIe umbilical cord (DMA/P2P communication)
|
||||
4. Self-hosting: Boot Lisp core, control hardware directly
|
||||
|
||||
** AI + Lisp Machines: The "Infinite Self-Refactoring" Machine
|
||||
|
||||
- AI can observe bottlenecks, rewrite functions, compile, swap while running
|
||||
- Natural Language OS: "I want a button that summarizes emails" → AI writes Lisp code, injects into memory
|
||||
- *Isolation Paradox*: More dangerous or safer? Hardware enforces types—can't overwrite random memory. Reversibility—can roll back. Auditability—exact code diffs.
|
||||
|
||||
** Why Lisp is "Ideal" AI Language
|
||||
|
||||
Homoiconicity (Code is Data). AI can generate a list, manipulate it, execute it. Not just passenger but architect—can create data structures on the fly. This is how biological brains work.
|
||||
|
||||
** Why Nobody Builds Lisp Machines Today
|
||||
|
||||
1. *Commodity CPU Steamroller*: Generic Intel chips became so fast through brute force they simulated Lisp Machines faster than real ones.
|
||||
2. *C Ecosystem*: Network effect—libraries, drivers all in C/C++. Lisp is a "walled garden."
|
||||
3. *AI Winter*: AI was Symbolic (Lisp), now is Connectionist (Statistical/Neural). GPUs (matrix math) beat Lisp (symbolic logic).
|
||||
|
||||
Future: May see "Lisp Accelerators" return if Neuro-symbolic AI trend continues.
|
||||
|
||||
** Clojure & Julia: Lisp-ish Successors Without Hardware
|
||||
|
||||
- *Clojure*: Runs on JVM. Gives "Code as Data." Solves isolation with immutable data.
|
||||
- *Julia*: Not Lisp but uses Homoiconicity. Metaprogramming + JIT compilation.
|
||||
|
||||
** Can AI Refactor Linux to Lisp?
|
||||
|
||||
Extremely difficult (10/10 difficulty):
|
||||
1. *Paradigm Mismatch*: Translating C to Lisp is like translating manual to poetry. Literal translation = "Lisp code that thinks it's C"—slow, ugly, loses introspection.
|
||||
2. *Liveness Gap*: Source code vs Running Program are different in Linux. In Lisp Machine, they are same.
|
||||
3. *Device Driver Nightmare*: Millions of lines of C for hardware. Lisp prefers "Pure Functions."
|
||||
|
||||
AI-Native Path: Build new Lisp system rather than refactor old. "Micro-Lisp Machine" first: Small AI-generated Lisp kernel on RISC-V FPGA, expand on demand.
|
||||
|
||||
** PCIe Card Lisp Machine (Practical Path)
|
||||
|
||||
- *Host*: Intel/AMD CPU runs Linux/Windows—handles "dirty" work
|
||||
- *Lisp Card*: FPGA with dedicated RAM, tagged-architecture CPU
|
||||
- *Memory Mapping*: Card can see host's memory. Lisp environment reaches out, inspects data.
|
||||
- *Safety*: If Lisp crashes, Host stays alive. Reset card, reload.
|
||||
|
||||
Hardware exists: Terasic DE10-Nano, Xilinx KCU105, LiteFury.
|
||||
|
||||
** Phase Migration: Host → Lisp
|
||||
|
||||
1. *Parasitic*: Lisp card as co-processor. Host as I/O server.
|
||||
2. *Functional Hijacking*: Lisp UI runs on card, displays through PC. AI indexes Linux files into Lisp objects.
|
||||
3. *Driver Cannibalization*: Point AI at C drivers, ask to generate native Lisp drivers. PCIe Passthrough for hardware control.
|
||||
4. *Self-Hosting*: Replace Linux bootloader with Stage0 Lisp. Cut umbilical cord.
|
||||
|
||||
** Performance for AI Inference
|
||||
|
||||
Lisp Machine handles inference differently:
|
||||
- *Speed*: Tagged architecture eliminates "forgetting what data is." Zero-copy inference—weights exist as permanent Lisp objects.
|
||||
- *Can it handle modern LLM*: 64-bit tagged Lisp core can handle models like Llama 3 8B. But GPU better at Matrix Multiplication, Lisp better at Reasoning. Hybrid system: GPU calculates "next token," Lisp acts as Hardware-Level Guardrail.
|
||||
- *Inference as Continuous Interaction*: Not one-way (prompt → answer). AI infers new function, injects into OS kernel. "Inference" becomes performing logical operation.
|
||||
|
||||
** VSA: Vector Symbolic Architecture
|
||||
|
||||
VSA bridges symbolic logic (Lisp) and high-dimensional vector space (LLMs).
|
||||
- Every concept = Hypervector (1,000-10,000 dimensions)
|
||||
- Operations (bind, bundle, permutations) = simple XOR/Shift—easy for hardware
|
||||
- Hardware Benefit: No complex matrix math, just simple boolean operations
|
||||
|
||||
** Moving to ASIC (The Ultimate Leap)
|
||||
|
||||
- *Speed*: 3-5x higher clock frequency (100MHz FPGA → 500MHz-1GHz ASIC)
|
||||
- *Energy*: 10x more efficient—no programmable overhead
|
||||
- *Cost*: For mass production, significantly cheaper—more logic in smaller space
|
||||
|
||||
Scale:
|
||||
- *Tiny Tapeout* (~$500-1,000): Simple 8-bit Lisp toy processor
|
||||
- *Shuttle* (~$10k-20k): Tagged RISC-V with ~100-300MHz
|
||||
- *Industrial* (~$10M-100M+): 5nm process, competes with modern CPU
|
||||
|
||||
** Lisp ASIC Doesn't Exist
|
||||
|
||||
No mass-produced Lisp ASIC in 2026. Closest: CHERI-RISC-V (capability hardware enhanced).
|
||||
|
||||
To make one, you use RISC-V as skeleton and add custom extensions:
|
||||
- Custom Tagged Instructions (TADD, LISP.CAR, LISP.CDR)
|
||||
- Hardware Write-Barriers
|
||||
- Vector Symbolic Hooks
|
||||
|
||||
Not "C-like" if you add the extensions—uses RISC-V "carrier" but gives it "Lisp muscles."
|
||||
|
||||
** Python/JSON LLMs → S-expressions
|
||||
|
||||
Improves performance because:
|
||||
- *JSON Tax*: Must parse strings, allocate objects, validate. S-expressions are native tree structures—memory map directly into heap, load time near-zero.
|
||||
- *S-expressions as Native ASTs*: Direct tree-walk. Hardware tree-walker traverses nested S-expressions at bus clock speed.
|
||||
- *llama.lisp*: Written in Common Lisp. Use macros to generate optimal kernels, refactor before machine code generated.
|
||||
- *Hardware-Level Inference*: Recursion is atomic hardware operation on tagged machine. Not fighting Python interpreter.
|
||||
|
||||
** Why "Pure Lisp Models" is Bad Idea
|
||||
|
||||
1. *Data Representation*: 70B params = 70B weights. Tag every weight = 50% memory waste. Represent as tree = 400% overhead (pointers).
|
||||
2. *Cache Locality*: LLMs need Streamed Linear Access (chunk → parallel math). Lisp machines are "Pointer Chasers." Bottlenecked by memory traversal.
|
||||
3. *Semantic Gap*: Weights are statistical noise, not symbolic. No semantic meaning in single weight that S-expression captures better than raw byte.
|
||||
4. *Ecosystem Isolation*: AI research moves at speed of Python/C++. Can't use billions in optimized kernels.
|
||||
|
||||
** The "Best of Both Worlds" Approach
|
||||
|
||||
*Use Lisp as Sovereign Governor, not as Math Engine:*
|
||||
|
||||
1. *Macro-Tags*: Tag the Tensor as single Lisp object, not individual weights. Hardware checks tag once, then gives Pointer to Tenstorrent p150. 100% safety with 0% overhead during math.
|
||||
|
||||
2. *S-Expressions as Universal Compiler (DSL)*: Describe LLM layer as Lisp list: (layer :type 'transformer :heads 32 :dim 4096). Compile time generates exact machine code for p150's cores. Python interprets every time; Lisp compiles once.
|
||||
|
||||
3. *Liveness as Debugging Tool*: Pause LLM mid-inference. Inspect Hidden States as Lisp variables. Modify vector, change sampling parameter, resume. Live surgery on cognition.
|
||||
|
||||
4. *Hardware-Enforced Safety*: AI-generated Lisp function runs on FPGA. Tagged hardware physically cannot access memory outside allowed heap. Security-by-Physics not Sandbox.
|
||||
|
||||
** Action Items from This Chat**
|
||||
|
||||
1. Don't store weights as Lisp objects—use Macro-Tags (pointer to flat binary)
|
||||
2. Build DSL in Common Lisp for LLM architecture description
|
||||
3. Use REPL to interact with AI's internal state mid-inference
|
||||
4. Run AI-generated code on tagged FPGA for hardware-enforced safety
|
||||
5. Start with VexRiscv on FPGA to validate tagged architecture before ASIC
|
||||
6. Target TinyTapeout for first "Lisp Tag Coprocessor" silicon
|
||||
238
notes/gemini-vision.org
Normal file
@@ -0,0 +1,238 @@
|
||||
#+TITLE: The OpenCortex Vision — A Strategic Blueprint
|
||||
#+AUTHOR: Amero
|
||||
#+FILETAGS: :strategy:roadmap:vision:
|
||||
#+STARTUP: content
|
||||
|
||||
* The Vision: A Neuro-Symbolic Lisp Machine
|
||||
|
||||
OpenCortex is not merely another AI agent. It is an attempt to build something deeper — a sovereign computing environment where the agent and its operator share the same language, the same data structures, and the same memory. It is a return to the dream of the Lisp Machine, updated for the age of neural networks.
|
||||
|
||||
The core insight from months of discussion with Gemini is this: the future of personal AI is not about bigger models, but about smarter architecture. We do not need an AI that guesses. We need an AI that reasons — backed by hardware that enforces safety, and software that grants its operator absolute sovereignty over their data.
|
||||
|
||||
This document captures the philosophical foundations, technical architecture, and strategic roadmap that emerged from those conversations. It is written for the engineer who will build it, the user who will trust it, and the future historian who will ask: "Why didn't the world run on Lisp?"
|
||||
|
||||
* Philosophy: Why This Matters
|
||||
|
||||
** The Sovereignty Imperative
|
||||
|
||||
Every other AI agent runs on a stack of dependencies — Python packages, npm modules, pip installs, conda environments. When the maintainer walks away, the stack rots. When the company shuts down, your data dies in their database.
|
||||
|
||||
OpenCortex is different. It runs on SBCL alone. The kernel is Lisp. The skills are Lisp. The memory lives in Org-mode files you already own. There is no database to migrate, no schema to update, no lock-in to escape. Your data is a folder of text files. It survives app updates, platform switches, and decades of use.
|
||||
|
||||
This is not nostalgia. This is engineering pragmatism. The simplest stack is the most maintainable stack.
|
||||
|
||||
** The Deterministic Safety Promise
|
||||
|
||||
Modern AI agents are terrifying. They pipe LLM output directly into your terminal. If the model hallucinates, it can delete your files or push secrets to GitHub. Safety is added as an afterthought — a wrapper around a dangerous core.
|
||||
|
||||
OpenCortex splits the brain into two parts:
|
||||
|
||||
1. The Creative Brain (LLM): Understands your notes, suggests actions, generates code.
|
||||
2. The Strict Guard (Lisp): Before the AI is allowed to touch a file or run a command, a mathematically strict set of rules intercepts the proposal. It verifies the action is safe and permitted. If the AI hallucinates, the guard blocks it.
|
||||
|
||||
This is not "guardrails" in the marketing sense. This is hardware-level type checking — impossible to bypass, because the logic is embedded in the execution path.
|
||||
|
||||
** The Homoiconic Advantage
|
||||
|
||||
Lisp is the only major language where code and data have the same representation. In Python, the AST is a foreign object — the agent can inspect it, but not treat it as something it owns. In Lisp, the agent can read its own code the same way it reads a text file. It can parse its skills, understand their structure, and modify them at runtime.
|
||||
|
||||
This is not a party trick. This is the foundation for a self-improving agent. The agent can fix its own bugs, refine its own strategies, and grow more capable without human intervention.
|
||||
|
||||
** The Neuro-Symbolic Synthesis
|
||||
|
||||
Pure neural AI is a black box. Pure symbolic AI is a straitjacket. The future is both together — a hybrid where the neural engine handles pattern recognition and the symbolic engine handles reasoning.
|
||||
|
||||
The 10-80-10 Architecture:
|
||||
- 10% Neural (Input): A fast model translates messy human language into a structured query.
|
||||
- 80% Symbolic (Reasoning): A rigid logic engine runs against a Knowledge Graph, checking consistency, enforcing rules, verifying truth.
|
||||
- 10% Neural (Output): A model turns cold facts back into warm, natural language.
|
||||
|
||||
This is not theoretical. It is the architecture of the human brain — System 1 (neural intuition) and System 2 (symbolic reasoning) — rendered in silicon and Lisp.
|
||||
|
||||
* Bits Leading to v1.0.0
|
||||
|
||||
Before we achieve SOTA parity, we must lay the groundwork. These are the incremental improvements that make the later versions possible.
|
||||
|
||||
** Self-Editing and Self-Improving
|
||||
|
||||
The agent must be able to modify its own code. Not just fix syntax errors — but learn from outcomes. When the agent encounters a failure, it should analyze why, update its strategy, and try again.
|
||||
|
||||
Key implementations:
|
||||
- Paren-balancing for syntax errors (deterministic)
|
||||
- LLM-guided surgical fixes (probabilistic)
|
||||
- Memory snapshots before every edit for safe rollback
|
||||
- Hot-reload skills without restarting the agent
|
||||
|
||||
This is the foundation of autonomy. An agent that cannot edit itself is a tool. An agent that can is a partner.
|
||||
|
||||
** The Symbolic Bouncer
|
||||
|
||||
The Bouncer is not a static wall. It is a learning system.
|
||||
|
||||
1. HITL Exception: When the LLM proposes an unrecognized action, the Bouncer suspends the thread and writes to Org-mode. A human reviews, changes BLOCKED to APPROVED.
|
||||
|
||||
2. Lisp Rule Synthesis: When approved, the system generalizes the parameters, compiles a new safety rule, and applies it to future requests.
|
||||
|
||||
3. Shadow Mode: The Bouncer runs in "trial mode" — simulating execution, observing side effects, teaching itself patterns.
|
||||
|
||||
4. Formal Property Verification: SystemVerilog-style assertions ensure updates are rejected at the hardware level if they violate core invariants.
|
||||
|
||||
** Memory Safety
|
||||
|
||||
State rot is the enemy of long-running agents. We implement:
|
||||
- Atomic snapshots for instant recovery
|
||||
- Transactional rollbacks for safe undo
|
||||
- Compaction events that extract facts to Org-mode and wipe active context
|
||||
- Semantic isolation between tasks to prevent contamination
|
||||
|
||||
** The MCP Strategy
|
||||
|
||||
We do not wrap OpenClaw. We build a native Lisp MCP Host.
|
||||
|
||||
The rationale: OpenClaw forces a Node.js runtime alongside the Lisp image. That's performance tax and bloat. A native host runs in the same memory space — no serialization, no IPC overhead, direct structural introspection.
|
||||
|
||||
Strategy: "Native Host, Universal Client" — connect to existing MCP servers without rebuilding their tools. Get ecosystem compatibility while keeping orchestration pure Lisp.
|
||||
|
||||
* v1.0.0: SOTA Parity
|
||||
|
||||
The goal: An agent competitive with commercial agents — Claude, Cursor, ChatGPT.
|
||||
|
||||
This is not about matching features. It's about proving the architecture works. The cognitive engine must be bulletproof. The safety invariants must hold under pressure. The agent must be able to:
|
||||
- Handle multi-step engineering tasks
|
||||
- Use tools reliably
|
||||
- Maintain context across sessions
|
||||
- Recover from errors gracefully
|
||||
- Pass standardized benchmarks (SWE-bench, etc.)
|
||||
|
||||
The "parity" is not in the brand — it's in the capability.
|
||||
|
||||
* v2.0.0: Lisp Tools and GUI
|
||||
|
||||
Once the brain is proven, we give it a face.
|
||||
|
||||
** The Qt/QML Decision
|
||||
|
||||
We do not use WebView. It introduces a C++ dependency and memory overhead. We use Qt via EQL5 — a bridge that compiles Lisp directly into Qt binaries.
|
||||
|
||||
Why Qt/QML:
|
||||
- Cross-platform native (Desktop + Mobile)
|
||||
- Declarative — matches Lisp generation model
|
||||
- Touch-native for mobile
|
||||
- No IPC overhead (Lisp compiles to binary)
|
||||
|
||||
This is the "thin GUI" layer. It displays what the Lisp brain produces. It does not contain business logic.
|
||||
|
||||
** The Emacs Cannibalization
|
||||
|
||||
v2.0.0 is when OpenCortex begins to replace Emacs, not just run inside it. The agent becomes the process. The TUI evolves into a full interface. Org-mode buffers become the display layer for the agent's thoughts.
|
||||
|
||||
The "cannibalization" is not hostile. It's evolution. Emacs was always a Lisp Machine — we are completing its metamorphosis.
|
||||
|
||||
** Marketing Phrase
|
||||
|
||||
"OpenCortex isn't an app you run. It's an OS you live in."
|
||||
|
||||
* v3.0.0: The Symbolic Engine
|
||||
|
||||
This is where the neuro-symbolic architecture becomes real.
|
||||
|
||||
** The Knowledge Graph
|
||||
|
||||
We integrate VivaceGraph — a Lisp-native graph database with built-in Prolog. This is not an external database we connect to. It's part of the address space.
|
||||
|
||||
The symbolic engine maintains:
|
||||
- Facts and relationships (Knowledge Graph)
|
||||
- Rules and constraints (Prolog)
|
||||
- Formal proofs (ACL2)
|
||||
|
||||
When the neural engine generates a response, the symbolic engine verifies it. When the neural engine claims something is true, the symbolic engine checks the chain of reasoning.
|
||||
|
||||
** The DSL Approach
|
||||
|
||||
We do not build a new engine. We build domain-specific languages.
|
||||
|
||||
Using Lisp macros, we create languages for specific domains:
|
||||
- Legal compliance rules
|
||||
- Medical protocols
|
||||
- Financial constraints
|
||||
- Project management workflows
|
||||
|
||||
The LLM bootstraps these DSLs — reading seed data, generating first drafts, refining with human feedback.
|
||||
|
||||
** Marketing Phrase
|
||||
|
||||
"OpenCortex doesn't just answer your questions. It proves its answers are correct."
|
||||
|
||||
* v4.0.0: The Lisp Machine
|
||||
|
||||
This is the final form. A computer where every level — from hardware to application — speaks Lisp.
|
||||
|
||||
** The Tagged Architecture
|
||||
|
||||
We move from simulation to silicon.
|
||||
|
||||
Using RISC-V as a carrier, we add custom extensions:
|
||||
- Tagged memory (top 8 bits of every word = type)
|
||||
- Hardware-enforced type checking (zero-overhead)
|
||||
- Trap on type mismatch
|
||||
|
||||
This is not emulation. This is a CPU that understands Lisp at the gate level.
|
||||
|
||||
** The Hybrid Path
|
||||
|
||||
We don't build a Lisp Machine in isolation. We pair it with a neural accelerator.
|
||||
|
||||
The Tenstorrent p150 (664 TFLOPS) handles the heavy matrix math. The FPGA/ASIC handles the symbolic reasoning. They share a memory space. The Lisp core governs what the neural engine can and cannot do.
|
||||
|
||||
This is "Lisp as Governor" — not as the math engine, but as the orchestrator of computation.
|
||||
|
||||
** The FPGA Path
|
||||
|
||||
Before ASIC, we prototype on FPGA:
|
||||
- Xilinx KCU105 for full PCIe integration
|
||||
- Terasic DE10-Nano for learning
|
||||
|
||||
The journey: Verilog → RISC-V core → Tagged ALU → PCIe bridge → Self-hosting Lisp
|
||||
|
||||
** Marketing Phrase
|
||||
|
||||
"The first computer since the Symbolics that truly belongs to you."
|
||||
|
||||
* Cross-Cutting Themes
|
||||
|
||||
** The Technical Principles
|
||||
|
||||
1. *Lisp as Governor*: Use Lisp for orchestration, safety, introspection. Let specialized hardware handle dense math.
|
||||
|
||||
2. *Macro-Tags over Full Tags*: Tag tensors, not individual weights. 100% type safety with 0% memory overhead.
|
||||
|
||||
3. *S-expressions as Compiler Input*: Use Lisp for architecture description. Generate optimized code for target hardware.
|
||||
|
||||
4. *Hardware-Enforced Safety*: Tagged memory at silicon level — impossible to bypass.
|
||||
|
||||
5. *Hybrid Architecture*: Neural for intuition, Symbolic for reasoning, Lisp for governance. Each does what it does best.
|
||||
|
||||
** The Competitive Differentiators
|
||||
|
||||
| Feature | OpenCortex | Others |
|
||||
|---------|-----------|--------|
|
||||
| Language | Pure Common Lisp | Python/TypeScript |
|
||||
| Memory | Org-mode files | SQLite/ChromaDB |
|
||||
| Self-Modification | Native | Unsupported |
|
||||
| Safety | Deterministic Bouncer | Probabilistic guardrails |
|
||||
| Dependencies | SBCL only | pip/npm/conda |
|
||||
| Data Ownership | 100% yours | Vendor lock-in |
|
||||
|
||||
** The Philosophical Stance
|
||||
|
||||
We are not building a chatbot. We are not building a copilot. We are building a sovereign computing environment — a digital home where your thoughts, your data, and your agent live together in plain text files you own.
|
||||
|
||||
The industry builds AI that runs in the cloud, on someone else's hardware, with someone else's models. We build AI that runs on your machine, in your language, governed by your rules.
|
||||
|
||||
This is not a product. It is a philosophy made manifest in code.
|
||||
|
||||
* References
|
||||
|
||||
- [[file:chats-with-gemini.org][Full Chat Transcripts]]
|
||||
- [[file:../projects/passepartout/README.org][OpenCortex README]]
|
||||
- [[file:../projects/passepartout/docs/ROADMAP.org][OpenCortex Roadmap]]
|
||||
@@ -12,9 +12,9 @@
|
||||
- *Solution:* The *Org-Native Skill Standard*. Skills are written entirely as `.org` files. The daemon parses the Org file at startup, extracts `#+begin_src lisp` blocks containing triggers, neuro-prompts, and symbolic verification rules, and dynamically compiles them into the live system using `eval` and `read`.
|
||||
- *Heuristic:* The Core is strictly the PTA loop (`core.lisp`, `neuro.lisp`, `symbolic.lisp`). ALL business logic, API connectors, and rule sets MUST live as `.org` files in the `skills/` directory.
|
||||
|
||||
** [2026-03-23] Cognitive Loop Architecture (org-agent)
|
||||
** [2026-03-23] Cognitive Cycle Architecture (opencortex)
|
||||
- *Problem:* Monolithic PTA (Perceive-Think-Act) loops lead to "Neural Drift" where the LLM's unverified suggestions can cause illegal system states or security breaches.
|
||||
- *Solution:* Implement the *Four-Stage Cognitive Loop*: Perceive -> Think -> Decide -> Act.
|
||||
- *Solution:* Implement the *Four-Stage Cognitive Cycle*: Perceive -> Think -> Decide -> Act.
|
||||
- *Heuristic:* Probabilistic Engine (Neural/LLM) is a proposal engine only. Deterministic Engine (Symbolic/Lisp) is the absolute gatekeeper.
|
||||
- *Verification:* Never execute an action unless it has passed through `decide()` and been verified against the symbolic Object Store (CLOSOS).
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ Define the requirements for modular, open-source, and intelligent home hardware.
|
||||
** 2. User Needs
|
||||
- *Physical Modularity:* Easy replacement and upgrade of mechanical and electrical components.
|
||||
- *Smart Interfacing:* ESP32-based control boards for connectivity.
|
||||
- *Multimodal Control:* Support for smartphone apps, physical modular controllers, and direct `org-agent` AI interaction.
|
||||
- *Multimodal Control:* Support for smartphone apps, physical modular controllers, and direct `opencortex` AI interaction.
|
||||
- *Sustainability:* Design for longevity, repairability, and efficient power management (inspired by Slate principles).
|
||||
|
||||
** 3. Success Criteria
|
||||
|
||||
@@ -20,7 +20,7 @@ Define the requirements for a modular, user-serviceable, and aesthetically pleas
|
||||
|
||||
** 2. User Needs
|
||||
- *Modularity:* Unified backplane for swappable compute, storage, and power modules.
|
||||
- *Sovereignty:* Full control over hardware and the software stack (running `org-agent`).
|
||||
- *Sovereignty:* Full control over hardware and the software stack (running `opencortex`).
|
||||
- *Aesthetics:* Sleek "Hi-Fi" industrial design.
|
||||
- *Multimodality:* Integration of SDR, AV, and specialized processors.
|
||||
|
||||
|
||||
@@ -1,166 +0,0 @@
|
||||
#+TITLE: AUDIT: V1.0 Comprehensive Core Skill Audit
|
||||
#+AUTHOR: Gemini CLI (Agent)
|
||||
#+DATE: [2026-04-09 Thu]
|
||||
#+FILETAGS: :audit:kernel:psf:
|
||||
#+STARTUP: overview
|
||||
|
||||
* Overview
|
||||
This audit systematically reviews the 39 core skills of the Org-Agent for compliance with the V1.0 standards:
|
||||
1. **Safety:** Prevention of code injection, proper sandboxing, and actuator safety.
|
||||
2. **Merkle-Tree Integration:** Proper use of the native Lisp Merkle-Tree versioning for undo/rollback.
|
||||
3. **Core Invariants:** Adherence to Sovereignty, Mastery, Zero-Bloat, Transparency, and Sustainability.
|
||||
|
||||
* Audit Progress [6/28]
|
||||
** DONE org-skill-agent.org [X]
|
||||
- COMPLIANT: Correctly defines and enforces Core Invariants.
|
||||
- SAFETY: High. Implements baseline symbolic gating.
|
||||
- MERKLE: N/A (Read-only/Policy only).
|
||||
** DONE org-skill-llm-gateway.org [X]
|
||||
- COMPLIANT: Consolidates 6 providers into a single high-integrity gate.
|
||||
- SAFETY: HIGH. Fixed URL key leaks, standardized headers, and centralized credential masking.
|
||||
- MERKLE: N/A (Stateless dispatch).
|
||||
** DONE org-skill-credentials-vault.org [X]
|
||||
- COMPLIANT: Unified high-security enclave for API keys and cookies.
|
||||
- SAFETY: HIGH. Mandatory credential masking in logs and secure Object Store persistence.
|
||||
- MERKLE: COMPLIANT. Setting secrets triggers Merkle snapshots.
|
||||
** DONE org-skill-homoiconic-memory.org [X]
|
||||
- COMPLIANT: Unified grammar, bridge, and normalization.
|
||||
- SAFETY: HIGH. recursive AST walker for ID injection and structural validation.
|
||||
- MERKLE: COMPLIANT. Normalization occurs during ingest/save, which are Merkle-versioned events.
|
||||
** DONE org-skill-state-persistence.org [X]
|
||||
- COMPLIANT: Unified local SBCL image dumps with decentralized IPFS checkpointing.
|
||||
- SAFETY: HIGH. Implements safe restoration paths and credential masking.
|
||||
- MERKLE: COMPLIANT. This is the primary persistence layer for the Merkle-Tree object store.
|
||||
** DONE org-skill-event-orchestrator.org [X]
|
||||
- COMPLIANT: Unified Cron, Hooks, and Routing into a single central control unit.
|
||||
- SAFETY: HIGH. Implements error isolation for automated tasks and hooks.
|
||||
- MERKLE: COMPLIANT. Registering hooks or tasks triggers Merkle snapshots.
|
||||
** DONE org-skill-cron.org [X] (CONSOLIDATED -> org-skill-event-orchestrator.org)
|
||||
** DONE org-skill-hook-manager.org [X] (CONSOLIDATED -> org-skill-event-orchestrator.org)
|
||||
** DONE org-skill-router.org [X] (CONSOLIDATED -> org-skill-event-orchestrator.org)
|
||||
** DONE org-skill-memory-archivist.org [X] (CONSOLIDATED -> org-skill-state-persistence.org)
|
||||
** DONE org-skill-object-store-persistence.org [X] (CONSOLIDATED -> org-skill-state-persistence.org)
|
||||
** DONE org-skill-ast-normalization.org [X] (CONSOLIDATED -> org-skill-homoiconic-memory.org)
|
||||
** DONE org-skill-org-json-bridge.org [X] (CONSOLIDATED -> org-skill-homoiconic-memory.org)
|
||||
** DONE org-skill-org-mode.org [X] (CONSOLIDATED -> org-skill-homoiconic-memory.org)
|
||||
** DONE org-skill-auth-api-key.org [X] (CONSOLIDATED -> org-skill-credentials-vault.org)
|
||||
** DONE org-skill-auth-google-oauth.org [X] (CONSOLIDATED -> org-skill-credentials-vault.org)
|
||||
** DONE org-skill-provider-anthropic.org [X] (CONSOLIDATED -> org-skill-llm-gateway.org)
|
||||
** DONE org-skill-provider-gemini.org [X] (CONSOLIDATED -> org-skill-llm-gateway.org)
|
||||
** DONE org-skill-provider-groq.org [X] (CONSOLIDATED -> org-skill-llm-gateway.org)
|
||||
** DONE org-skill-provider-ollama.org [X] (CONSOLIDATED -> org-skill-llm-gateway.org)
|
||||
** DONE org-skill-provider-openai.org [X] (CONSOLIDATED -> org-skill-llm-gateway.org)
|
||||
** DONE org-skill-provider-openrouter.org [X] (CONSOLIDATED -> org-skill-llm-gateway.org)
|
||||
** DONE org-skill-chaos.org [ ]
|
||||
- STATUS: NON-COMPLIANT (Safety/Sovereignty Violation)
|
||||
- ISSUE: Lacks an "Active Production" gate to prevent accidental chaos during real work. No Merkle-Tree checkpoints before/after stress tests to allow for full-system rollback.
|
||||
- SAFETY: MEDIUM (Adversarial by design, but ungated).
|
||||
- MERKLE: FAILED.
|
||||
** DONE org-skill-chat.org [ ]
|
||||
- STATUS: NON-COMPLIANT (Safety/Technical Mastery Violation)
|
||||
- ISSUE: Uses `read-from-string` on unverified LLM output, risking reader macro injection. No Merkle-Tree integration for chat history persistence or rollbacks.
|
||||
- SAFETY: LOW (Vulnerable to injection).
|
||||
- MERKLE: FAILED.
|
||||
** DONE org-skill-consensus.org [X]
|
||||
- STATUS: COMPLIANT (Consolidated -> Task Orchestrator)
|
||||
- SAFETY: HIGH. Verified via parallel multi-backend consensus in neuro.lisp.
|
||||
- MERKLE: COMPLIANT.
|
||||
** DONE org-skill-context-manager.org [ ]
|
||||
- STATUS: NON-COMPLIANT (Critical Gap)
|
||||
- ISSUE: No implementation code in Phase D. The skill is only a blueprint. No Merkle-Tree integration for context stack snapshots or rollbacks.
|
||||
- SAFETY: N/A (Missing).
|
||||
- MERKLE: FAILED.
|
||||
** DONE org-skill-delegation.org [X]
|
||||
- STATUS: COMPLIANT (Consolidated -> Task Orchestrator)
|
||||
- SAFETY: HIGH. Integrated consensus gate and delegation hooks in core.lisp.
|
||||
- MERKLE: COMPLIANT.
|
||||
** DONE org-skill-environment-config.org [ ]
|
||||
- STATUS: NON-COMPLIANT (Safety/Technical Mastery Violation)
|
||||
- ISSUE: No validation or authorization gating for configuration changes. Direct hash-table modification skips the new Merkle-Tree versioning system in the Object Store.
|
||||
- SAFETY: MEDIUM (Risk of misconfiguration).
|
||||
- MERKLE: FAILED.
|
||||
** DONE org-skill-formal-verification.org [X]
|
||||
- STATUS: COMPLIANT
|
||||
- ISSUE: Implemented Lisp-Native Symbolic Prover for security invariants.
|
||||
- SAFETY: HIGH. Implements path-confinement and no-network-exfil.
|
||||
- MERKLE: COMPLIANT.
|
||||
** DONE org-skill-function-calling.org [ ]
|
||||
- STATUS: NON-COMPLIANT (Critical Gap)
|
||||
- ISSUE: No implementation code in Phase D. The skill is only a blueprint. No Merkle-Tree integration for recording and rolling back tool-use history or state.
|
||||
- SAFETY: N/A (Missing).
|
||||
- MERKLE: FAILED.
|
||||
** DONE org-skill-inbound-gateway.org [ ]
|
||||
- STATUS: NON-COMPLIANT (Critical Gap)
|
||||
- ISSUE: No implementation code in Phase D. The skill is only a blueprint. No Merkle-Tree integration for recording and rolling back inbound message history or state.
|
||||
- SAFETY: N/A (Missing).
|
||||
- MERKLE: FAILED.
|
||||
** DONE org-skill-inbox-processor.org [ ]
|
||||
- STATUS: NON-COMPLIANT (Safety/Technical Mastery Violation)
|
||||
- ISSUE: Physical move logic is a "Simulation". No implementation of actual file refactoring. No Merkle-Tree integration for recording or rolling back inbox-related state changes.
|
||||
- SAFETY: MEDIUM (Simulation only).
|
||||
- MERKLE: FAILED.
|
||||
** DONE org-skill-latent-reflection.org [ ]
|
||||
- STATUS: NON-COMPLIANT (Safety/Technical Mastery Violation)
|
||||
- ISSUE: No validation or authorization gating for reflected state changes. Random sampling is inefficient. No Merkle-Tree integration for recording or rolling back reflected state changes.
|
||||
- SAFETY: MEDIUM (Risk of unintended modifications).
|
||||
- MERKLE: FAILED.
|
||||
** DONE org-skill-lisp-machine-bootstrap.org [ ]
|
||||
- STATUS: NON-COMPLIANT (Critical Gap)
|
||||
- ISSUE: No implementation code in Phase D. The skill is only a blueprint. No Merkle-Tree integration for recording or rolling back bootstrap-related state changes or ISA simulation history.
|
||||
- SAFETY: N/A (Missing).
|
||||
- MERKLE: FAILED.
|
||||
** DONE org-skill-log-aggregator.org [ ]
|
||||
- STATUS: NON-COMPLIANT (Critical Gap)
|
||||
- ISSUE: No implementation code in Phase D. The skill is only a blueprint. No Merkle-Tree integration for recording or rolling back log-related state changes or observability history.
|
||||
- SAFETY: N/A (Missing).
|
||||
- MERKLE: FAILED.
|
||||
** DONE org-skill-memex.org [ ]
|
||||
- STATUS: NON-COMPLIANT (Critical Gap)
|
||||
- ISSUE: No implementation code in Phase D. The skill is only a blueprint. No Merkle-Tree integration for recording or rolling back memex-related state changes or metadata audits.
|
||||
- SAFETY: N/A (Missing).
|
||||
- MERKLE: FAILED.
|
||||
** DONE org-skill-model-explorer.org [ ]
|
||||
- STATUS: NON-COMPLIANT (Critical Gap)
|
||||
- ISSUE: No implementation code or blueprint. The skill is only a title and overview. No Merkle-Tree integration for model discovery or state changes.
|
||||
- SAFETY: N/A (Missing).
|
||||
- MERKLE: FAILED.
|
||||
** DONE org-skill-onboarding.org [ ]
|
||||
- STATUS: NON-COMPLIANT (Critical Gap)
|
||||
- ISSUE: No implementation code in Phase D. The skill is only a blueprint. No Merkle-Tree integration for recording or rolling back onboarding-related state changes or environment calibration.
|
||||
- SAFETY: N/A (Missing).
|
||||
- MERKLE: FAILED.
|
||||
** DONE org-skill-lisp-validator.org [ ]
|
||||
- STATUS: NON-COMPLIANT (Safety/Technical Mastery Violation)
|
||||
- ISSUE: No validation or authorization gate for dynamic symbol registration. No Merkle-Tree integration for recording or rolling back safety-related state changes or verification history.
|
||||
- SAFETY: HIGH (The core of the system's safety).
|
||||
- MERKLE: FAILED.
|
||||
** DONE org-skill-self-fix.org [ ]
|
||||
- STATUS: NON-COMPLIANT (Safety/Technical Mastery Violation)
|
||||
- ISSUE: No validation or authorization gate for proposed self-fixes. Fixes are applied directly to files. No Merkle-Tree integration for recording or rolling back self-fix-related state changes or repair history.
|
||||
- SAFETY: LOW (Risk of unintended/malicious modifications).
|
||||
- MERKLE: FAILED.
|
||||
** DONE org-skill-shell-actuator.org [ ]
|
||||
- STATUS: NON-COMPLIANT (Safety/Sovereignty Violation)
|
||||
- ISSUE: No validation or authorization gate for synthesized script execution. Script synthesis bypasses the shell whitelist. No Merkle-Tree integration for recording or rolling back shell-related state changes or command history.
|
||||
- SAFETY: MEDIUM (Whitelisted, but script synthesis is a gap).
|
||||
- MERKLE: FAILED.
|
||||
** DONE org-skill-sub-agent-manager.org [ ]
|
||||
- STATUS: NON-COMPLIANT (Critical Gap)
|
||||
- ISSUE: No implementation code in Phase D. The skill is only a blueprint. No Merkle-Tree integration for recording or rolling back sub-agent-related state changes or concurrent thoughts.
|
||||
- SAFETY: N/A (Missing).
|
||||
- MERKLE: FAILED.
|
||||
** DONE org-skill-task-integrity.org [ ]
|
||||
- STATUS: NON-COMPLIANT (Critical Gap)
|
||||
- ISSUE: No implementation code in Phase D. The skill is only a blueprint. No Merkle-Tree integration for recording or rolling back task-related state changes or transition history.
|
||||
- SAFETY: N/A (Missing).
|
||||
- MERKLE: FAILED.
|
||||
** DONE org-skill-token-accountant.org [ ]
|
||||
- STATUS: NON-COMPLIANT (Safety/Sovereignty Violation)
|
||||
- ISSUE: Hot-patches the kernel's core variables (`*provider-cascade*`, `*model-selector-fn*`) directly, bypassing the skill registration system's safety. No Merkle-Tree integration for recording or rolling back provider-related state changes or pain history.
|
||||
- SAFETY: LOW (Direct kernel mutation).
|
||||
- MERKLE: FAILED.
|
||||
|
||||
* Findings Log
|
||||
| Skill | Issue | Priority | Status |
|
||||
|-------+-------+----------+--------|
|
||||
| | | | |
|
||||
@@ -1,32 +0,0 @@
|
||||
# Implementation Plan: Component IV - Peripheral Vision Extraction
|
||||
|
||||
## Objective
|
||||
Implement a sophisticated "Foveal-Peripheral" context model. This ensures the agent has high-resolution focus on the current task (Foveal) while maintaining a low-resolution "skeletal" awareness of the broader Memex structure (Peripheral), optimized for token efficiency and reasoning accuracy.
|
||||
|
||||
## Key Files & Context
|
||||
- **Target:** `projects/org-agent/literate/context.org` (Source of `src/context.lisp`)
|
||||
- **Core Concept:** Deep pruning of the Org AST based on semantic distance and structural hierarchy.
|
||||
|
||||
## Implementation Steps
|
||||
|
||||
### 1. Identify Foveal Focus
|
||||
- Extend the `SIGNAL` structure processing to identify a `target-id` (the current headline being operated on).
|
||||
|
||||
### 2. Implement Tree Pruning (`context-extract-peripheral-vision`)
|
||||
- Create a recursive function that walks the Object Store starting from the root (or active projects).
|
||||
- **Rule A (Foveal):** If the node matches `target-id`, include it and its immediate children in **Full Resolution** (Content + Attributes).
|
||||
- **Rule B (Peripheral):** For ancestors and siblings of the target, include only **Title and ID**.
|
||||
- **Rule C (Background):** For unrelated nodes, omit entirely or include only at Level 1.
|
||||
|
||||
### 3. AST to Org Renderer (`context-render-to-org`)
|
||||
- Implement a serializer that transforms our `org-object` structures back into valid Org-mode strings.
|
||||
- This allows the LLM to "see" the Memex in its native habitat.
|
||||
|
||||
### 4. Integrate with `context-assemble-global-awareness`
|
||||
- Update this function to use the new extraction and rendering logic.
|
||||
- Ensure it respects a maximum token/character budget to prevent context overflow.
|
||||
|
||||
## Phase E: Chaos (Verification)
|
||||
- **Structural Test:** Verify that ancestors are rendered as "skeletons" (no body text).
|
||||
- **Foveal Test:** Verify that the target node is rendered with its full body text.
|
||||
- **Budget Test:** Verify that the output string stays within defined limits even for large Memex structures.
|
||||
@@ -1,37 +0,0 @@
|
||||
# Implementation Plan: Reactive Signal Pipeline Refactor
|
||||
|
||||
## Objective
|
||||
Refactor the monolithic recursive `cognitive-loop` into a functional, gate-based `reactive-signal-pipeline`. This flattens the execution stack, enables multi-backend consensus, and improves observability according to Component VII of the evolutionary roadmap.
|
||||
|
||||
## Key Files & Context
|
||||
- **Target:** `projects/org-agent/literate/core.org` (Source of `src/core.lisp`)
|
||||
- **Architectural Reference:** `projects/org-agent/literate/evolution.org`
|
||||
|
||||
## Implementation Steps
|
||||
|
||||
### 1. Define the Signal Structure
|
||||
Transition from raw plists to a structured `:SIGNAL` format that tracks state as it moves through the pipeline.
|
||||
- Attributes: `:status`, `:payload`, `:context`, `:depth`, `:proposals`, `:reply-stream`.
|
||||
|
||||
### 2. Implement the Pipeline Gates
|
||||
Extract existing logic from `cognitive-loop` into discrete functional gates:
|
||||
- **`perceive-gate`**: Normalizes input, updates `*object-store*`.
|
||||
- **`neuro-gate`**: Invokes Probabilistic Engine. Support for future parallel backend calls.
|
||||
- **`consensus-gate`**: (New) Selects the best proposal from multiple backends (initially a pass-through for the single proposal).
|
||||
- **`decide-gate`**: Invokes Deterministic Engine safety checks.
|
||||
- **`dispatch-gate`**: Executes tools or physical actuators.
|
||||
|
||||
### 3. Implement the Pipeline Orchestrator (`process-signal`)
|
||||
Create a function that moves a signal through the sequence of gates.
|
||||
- **Flattening Recursion:** If `dispatch-gate` results in a tool output or error, it MUST NOT call the pipeline recursively. Instead, it returns a new `:SIGNAL` with `depth + 1`, which the orchestrator then re-injects into the top of the pipe via a loop or queue.
|
||||
|
||||
### 4. Refactor `inject-stimulus`
|
||||
Update `inject-stimulus` to initialize a Signal and hand it to the `process-signal` pipeline instead of `cognitive-loop`.
|
||||
|
||||
### 5. Cleanup
|
||||
Remove the obsolete `cognitive-loop` function and update `literate/core.org` documentation/diagrams to reflect the new architecture.
|
||||
|
||||
## Verification & Testing (Phase E: Chaos)
|
||||
- **Unit Tests:** Verify each gate function in isolation.
|
||||
- **Pipeline Test:** Simulate a complex multi-turn interaction (e.g., User Prompt -> Tool Call -> Tool Result -> LLM Final Answer) and ensure the stack depth remains flat.
|
||||
- **Immune System Test:** Verify that the depth limit (Max depth 10) still correctly terminates runaway loops.
|
||||
120
projects/agora/TODO.org
Normal file
@@ -0,0 +1,120 @@
|
||||
# Agora Project Tasks
|
||||
# All Agora-related TODOs live here. gtd.org links to this file.
|
||||
# Cross-reference: Passepartout integration at projects/passepartout
|
||||
|
||||
* PHASE: SPECIFICATION COMPLETE
|
||||
All 10 requirement sections have been written. Gap analysis is done.
|
||||
|
||||
** DONE Create atomic notes for all 10 Agora sections
|
||||
** DONE Fill CRITICAL and HIGH gaps [5 CRITICAL / 15 HIGH]
|
||||
** DONE All MEDIUM and LOW gaps resolved
|
||||
** FINAL STATUS: All Agora specification gaps complete
|
||||
|
||||
** PENDING INTEGRATE scattered specifications into requirements files [1/4]
|
||||
Properties:
|
||||
CREATED: [2026-03-18 Wed 02:00]
|
||||
|
||||
NEXT: Move content flag schema into Section 04
|
||||
NEXT: Move PDS sync into Section 03
|
||||
NEXT: Move delta sync into Section 08
|
||||
NEXT: Delete duplicate documents after integration
|
||||
|
||||
* PHASE: PASSEPARTOUT INTEGRATION (Parallel Track)
|
||||
|
||||
This is a PARALLEL TRACK — does not block the core Passepartout roadmap (v0.3.0 → v1.0.0).
|
||||
Identity + DIDComm gateway skills can be built anytime without core changes.
|
||||
PDS transformation should wait until v1.0.0+.
|
||||
|
||||
The goal: make Passepartout a first-class AI Sub-Agent on the Agora network.
|
||||
Architecture: Passepartout IS the PDS. Notes use plists natively with dual UUID + CID addressing.
|
||||
|
||||
Key design decisions (captured 2026-05-02):
|
||||
1. Passepartout IS the PDS — the agent runs a personal data store in-process
|
||||
2. Agora Notes use plists natively, not JSON — the PDS speaks Lisp
|
||||
3. Dual addressing: every Note has a stable UUID (same across edits) and a CID (content hash)
|
||||
4. Org files on disk ARE the user-facing view of Notes — no separate format
|
||||
5. Clients and Relays are separate components, can be in any language, speak HTTP
|
||||
6. The unified plist format is internal to PDS ↔ agent; clients request JSON
|
||||
7. Integration is a PARALLEL TRACK — does not block or delay the core Passepartout roadmap (v0.3.0 → v1.0.0)
|
||||
8. Timeline: Identity DID + DIDComm gateway = anytime (small skills). PDS transformation = v1.0.0+
|
||||
|
||||
The unified data model bridges memory-object → Agora Note:
|
||||
| memory-object field | Agora Note field |
|
||||
|---------------------|------------------|
|
||||
| org-object-id | uuid (stable) |
|
||||
| org-object-hash | cid (content hash) |
|
||||
| getf attrs :TITLE | payload (derived) |
|
||||
| getf attrs :TAGS | routing/access-control hints |
|
||||
| org-object-children | child CIDs, reply_to, thread_root |
|
||||
| org-object-content | payload body |
|
||||
| merkle hash | CIDv1 (same SHA-256, different formatting)
|
||||
|
||||
** DRAFT 1. DID Identity Skill (identity-did.org)
|
||||
A new skill that manages an Ed25519 keypair and DID document for the agent.
|
||||
- Generate master keypair on first run (BIP-44 derived or Ed25519 fresh)
|
||||
- Construct ~did:agora:<fingerprint>~ DID
|
||||
- Sign outputs with the key for provenance
|
||||
- Store keys in the vault (~*vault-memory*~, already exists in passepartout.security-vault)
|
||||
|
||||
File: ~org/identity-did.org~ (new)
|
||||
Depends on: ~ironclad~ (already in ASDF deps), ~cl-json~ (already in ASDF deps)
|
||||
|
||||
** DRAFT 2. DIDComm Gateway (gateway-didcomm.org)
|
||||
A new gateway following the same pattern as Telegram/Signal in ~gateway-manager~.
|
||||
- Register poll/send functions in ~*gateway-registry*~
|
||||
- Poll: listen for incoming DIDComm messages from the Relay Network or PDS
|
||||
- Send: wrap an action in a DIDComm encrypted envelope (~JWE~) and deliver via Relay
|
||||
- Messages arrive as framed protocol plists (same as CLI/TUI/Telegram)
|
||||
|
||||
The DIDComm spec is complex (DIDComm v2, JWM/JWE, HMAC, etc.). Initial implementation
|
||||
can be a thin wrapper: JSON plist → sign with DID key → send to PDS → poll for replies.
|
||||
|
||||
File: ~org/gateway-didcomm.org~ (new)
|
||||
Depends on: ~identity-did~, ~cl-json~, + DIDComm serialization library
|
||||
|
||||
** DRAFT 3. Memory — Note Adapter (system-memory-note.org)
|
||||
Bridges Agora Notes into Passepartout's memory system.
|
||||
- ~note-ingest~: take a CIDv1 + JSON payload, compute Merkle hash, store in ~*memory-history*~
|
||||
- ~note-index~: extract key fields (title, author, timestamp) from JSON and store in
|
||||
~*memory-store*~ as a memory-object with ~:cid~ attribute pointing to the history entry
|
||||
- ~note-edit~: create a new draft with modifications, new CID, pending signature
|
||||
- ~note-publish~: sign the draft, push to PDS via DIDComm gateway
|
||||
|
||||
This is Option C: Notes are canonical (in history), memory is derivative (in active store).
|
||||
|
||||
File: ~org/system-memory-note.org~ (new)
|
||||
Depends on: ~gateway-didcomm~, ~core-memory~ (existing)
|
||||
|
||||
** DRAFT 4. Agent Persona (system-agent-persona.org)
|
||||
Publish Passepartout itself as an Agora AI Persona (per Section 07).
|
||||
- Register a DID for the agent
|
||||
- Expose a "capabilities" Note listing the agent's skills as algorithms
|
||||
- Accept invocation Notes from other persona owners
|
||||
- Log all actions to an auditable Note chain
|
||||
|
||||
File: ~org/system-agent-persona.org~ (new)
|
||||
Depends on: ~identity-did~, ~gateway-didcomm~, ~core-skills~
|
||||
|
||||
** DRAFT 5. Compute Marketplace (system-compute-provider.org)
|
||||
Optional: expose Passepartout's LLM backends as a compute offering on Agora's marketplace.
|
||||
- Register available models (Ollama, etc.) as compute offerings
|
||||
- Accept inference requests via encrypted DIDComm
|
||||
- Settle via Lightning Network payments (when Agora's payment layer is implemented)
|
||||
|
||||
File: ~org/system-compute-provider.org~ (future)
|
||||
Depends on: ~identity-did~, ~gateway-didcomm~, ~gateway-llm~, ~gateway-provider~
|
||||
|
||||
* PHASE: ALETHEIA ANALYSIS
|
||||
|
||||
** TODO Critically analyze Master_Architecture_Document for lessons learned
|
||||
and incorporation into Agora
|
||||
Properties:
|
||||
STATUS: PENDING USER INSTRUCTION
|
||||
NOTES: User to provide pointers before commencing critical reading.
|
||||
Do not proceed without explicit instruction.
|
||||
|
||||
* REFERENCE LINKS
|
||||
- Agora requirements: ~/home/user/memex/projects/agora/docs/
|
||||
- Gap analysis: ~/home/user/memex/projects/agora/docs/agora-consolidated-gap-analysis.org
|
||||
- Passepartout repo: ~/home/user/memex/projects/passepartout
|
||||
- Passepartout GTD: ~/home/user/memex/projects/passepartout/TODO.org
|
||||
@@ -1,26 +0,0 @@
|
||||
#+title: Emacs Setup Improvement & Documentation Project
|
||||
#+author: Amero Garcia
|
||||
#+created: [2026-03-16 Mon 13:58]
|
||||
#+begin_comment
|
||||
This file outlines the project to collaboratively improve and document Amr's Emacs setup, aiming to make Emacs his primary computing tool.
|
||||
#+end_comment
|
||||
|
||||
* Emacs Setup Improvement & Documentation Project
|
||||
|
||||
*Goal:** To collaboratively improve and comprehensively document Amr's Emacs configuration, transitioning Emacs into his primary computing environment.
|
||||
|
||||
*Initial Scope:**
|
||||
- Reviewing the existing Emacs Org-mode configuration file (tangled to set up Emacs).
|
||||
- Identifying areas for optimization, new functionalities, and better integration with workflows.
|
||||
- Documenting each significant setting, function, and package.
|
||||
|
||||
*Information Needed from Amr:**
|
||||
- Location of the current Emacs Org-mode configuration file.
|
||||
- Key pain points or areas where Emacs currently falls short as a "main computing tool."
|
||||
- Specific desired functionalities or integrations (e.g., mail, calendar, task management, coding environments, note-taking, web browsing within Emacs).
|
||||
- Any existing documentation or design principles for the current setup.
|
||||
|
||||
*Next Steps:**
|
||||
1. Receive Emacs configuration file location from Amr.
|
||||
2. Analyze current setup.
|
||||
3. Propose documentation structure and initial improvements.
|
||||
@@ -1,27 +0,0 @@
|
||||
#+TITLE: Amr's Modular Emacs Configuration
|
||||
#+PROPERTY: header-args :tangle no ; This file is for loading other modules, not for tangling itself.
|
||||
|
||||
* Configuration Modules
|
||||
|
||||
This file loads the modular Emacs configuration files. It should be the primary way Emacs is configured, replacing or integrating with the original `~/.emacs`, `~/.emacs.d/init.el`, `~/.emacs.d/early-init.el`, and `~/.emacs.d/config.el`.
|
||||
|
||||
#+begin_src emacs-lisp :exports none
|
||||
;; Load early-init.el first, if it exists and is separate (though it's now part of emacs-early-init.org)
|
||||
;; (load-file (expand-file-name "emacs-early-init.org" (file-name-directory load-file-name)))
|
||||
|
||||
;; Load the core settings, including package management and essential setup.
|
||||
(org-babel-load-file (expand-file-name "emacs-core.org" (file-name-directory load-file-name)))
|
||||
|
||||
;; Load early init settings (if separate and not fully covered by core)
|
||||
(org-babel-load-file (expand-file-name "emacs-early-init.org" (file-name-directory load-file-name)))
|
||||
|
||||
;; Load other modules in a logical order
|
||||
(org-babel-load-file (expand-file-name "emacs-org.org" (file-name-directory load-file-name)))
|
||||
(org-babel-load-file (expand-file-name "emacs-gtd.org" (file-name-directory load-file-name)))
|
||||
(org-babel-load-file (expand-file-name "emacs-roam.org" (file-name-directory load-file-name)))
|
||||
(org-babel-load-file (expand-file-name "emacs-writing.org" (file-name-directory load-file-name)))
|
||||
(org-babel-load-file (expand-file-name "emacs-media.org" (file-name-directory load-file-name)))
|
||||
(org-babel-load-file (expand-file-name "emacs-shell.org" (file-name-directory load-file-name)))
|
||||
(org-babel-load-file (expand-file-name "emacs-ai.org" (file-name-directory load-file-name)))
|
||||
(org-babel-load-file (expand-file-name "emacs-misc.org" (file-name-directory load-file-name)))
|
||||
#+end_src
|
||||
@@ -1,104 +0,0 @@
|
||||
#+TITLE: AI Configuration
|
||||
#+PROPERTY: header-args :tangle ~/.emacs.d/config.el
|
||||
|
||||
* AI Settings
|
||||
|
||||
** Ellama
|
||||
|
||||
#+begin_src elisp :tangle no
|
||||
;; YOU DON'T NEED NONE OF THIS CODE FOR SIMPLE INSTALL
|
||||
;; IT IS AN EXAMPLE OF CUSTOMIZATION.
|
||||
(use-package ellama
|
||||
:init
|
||||
(require 'llm-openai)
|
||||
;; setup key bindings
|
||||
(setq ellama-keymap-prefix "C-c e")
|
||||
)
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp ~/.emacs.d/custom.el :tangle no
|
||||
(setopt ellama-providers
|
||||
'(
|
||||
;; Ollama Provider (added here with a name)
|
||||
("ollama" . (make-llm-ollama
|
||||
;; Consider a dedicated embedding model if gemma isn't ideal for it.
|
||||
:chat-model "gemma3:latest"
|
||||
:embedding-model "gemma3:latest" ; Or e.g., "nomic-embed-text"
|
||||
:default-chat-non-standard-params '(("num_ctx" . 8192))))
|
||||
|
||||
("openai" . (make-llm-openai
|
||||
:key (auth-source-pass-get "api-key" "www/openai.com/amr@gharbeia.net")
|
||||
:chat-model "gpt-4o"
|
||||
:embedding-model "text-embedding-3-large"))
|
||||
|
||||
("groq" . (make-llm-openai-compatible
|
||||
:url "https://api.groq.com/openai/v1"
|
||||
:key (auth-source-pass-get "api-key" "www/console.groq.com/groq@amr.gharbeia.net")
|
||||
;; Check Groq console for available models, these might change
|
||||
:chat-model "llama3-70b-8192" ; Example, verify on Groq
|
||||
:embedding-model "llama3-70b-8192")) ; Groq might not offer dedicated embedding models via this API
|
||||
))
|
||||
|
||||
;; --- Set Active Providers ---
|
||||
;; Choose your default provider from the list above by its name
|
||||
(setopt ellama-provider "ollama") ; Or "ollama", "openai", "groq"
|
||||
|
||||
;; You can specify different providers for different tasks if needed
|
||||
(setopt ellama-translation-provider "ollama")
|
||||
(setopt ellama-naming-provider "ollama")
|
||||
(setopt ellama-naming-scheme 'ellama-generate-name-by-llm)
|
||||
|
||||
(setq llm-debug t)
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp
|
||||
(use-package ellama
|
||||
:ensure t
|
||||
:bind ("C-c e" . ellama)
|
||||
;; send last message in chat buffer with C-c C-c
|
||||
:hook (org-ctrl-c-ctrl-c-final . ellama-chat-send-last-message)
|
||||
:init (setopt ellama-auto-scroll t)
|
||||
:config
|
||||
;; show ellama context in header line in all buffers
|
||||
(ellama-context-header-line-global-mode +1)
|
||||
;; show ellama session id in header line in all buffers
|
||||
(ellama-session-header-line-global-mode +1))
|
||||
#+end_src
|
||||
|
||||
** GPTel
|
||||
|
||||
#+begin_src elisp :tangle no
|
||||
(use-package gptel)
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp :tangle no
|
||||
(setq gptel-api-key (auth-source-pass-get "api-key" "www/console.groq.com/groq@amr.gharbeia.net"))
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp :tangle no
|
||||
(gptel-make-openai "Groq" ;Any name you want
|
||||
:host "api.groq.com"
|
||||
:endpoint "/openai/v1/chat/completions"
|
||||
:stream t
|
||||
:key (auth-source-pass-get "api-key" "www/console.groq.com/groq@amr.gharbeia.net") ;can be a function that returns the key
|
||||
:models '(llama-3.1-70b-versatile
|
||||
llama-3.1-8b-instant
|
||||
llama3-70b-8192
|
||||
llama3-8b-8192
|
||||
mixtral-8x7b-32768
|
||||
gemma-7b-it))
|
||||
#+end_src
|
||||
|
||||
** Elisa
|
||||
|
||||
#+begin_src elisp :tangle no
|
||||
(use-package elisa
|
||||
:init
|
||||
(setopt elisa-limit 5)
|
||||
(require 'llm-ollama)
|
||||
(setopt elisa-embeddings-provider (make-llm-ollama :embedding-model "nomic-embed-text"))
|
||||
(setopt elisa-chat-provider (make-llm-ollama
|
||||
:chat-model "sskostyaev/openchat:8k-rag"
|
||||
:embedding-model "nomic-embed-text"))
|
||||
)
|
||||
#+end_src
|
||||
@@ -1,169 +0,0 @@
|
||||
#+TITLE: Core Emacs Configuration
|
||||
#+PROPERTY: header-args :tangle ~/.emacs.d/config.el
|
||||
|
||||
* Front matter
|
||||
|
||||
#+begin_src elisp :tangle ~/.emacs
|
||||
;;; .emacs --- Global settings
|
||||
;;; Commentary:
|
||||
;;; Code:
|
||||
|
||||
;; -*- lexical-binding: t; -*-
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp
|
||||
;;; config.el --- Summary
|
||||
;;; Commentary:
|
||||
;;; Code:
|
||||
|
||||
;; -*- lexical-binding: t; -*-
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp :tangle ~/.emacs.d/custom.el
|
||||
;;; custom.el --- Summary
|
||||
;;; Commentary:
|
||||
;;; Code:
|
||||
|
||||
;; -*- lexical-binding: t; -*-
|
||||
#+end_src
|
||||
|
||||
* Garbage collector
|
||||
|
||||
Increase threshold to 500 MB to ease startup
|
||||
#+begin_src elisp :tangle ~/.emacs
|
||||
(setq gc-cons-threshold (* 500 1024 1024))
|
||||
#+end_src
|
||||
|
||||
Decrease threshold to 5 MB after init
|
||||
#+begin_src elisp :tangle ~/.emacs
|
||||
(add-hook 'after-init-hook (lambda () (setq gc-cons-threshold (* 5 1024 1024))))
|
||||
#+end_src
|
||||
|
||||
* Straight.el and use-package
|
||||
|
||||
Bootstrap Straight.el and install use-package
|
||||
#+begin_src elisp :tangle ~/.emacs
|
||||
(setq straight-repository-branch "develop") ;; Using develop branch temporarily to fix the org-roam-dailies issue.
|
||||
|
||||
(eval-and-compile
|
||||
(defvar bootstrap-version)
|
||||
(let ((bootstrap-file
|
||||
(expand-file-name "straight/repos/straight.el/bootstrap.el"
|
||||
(or (bound-and-true-p straight-base-dir)
|
||||
user-emacs-directory)))
|
||||
(bootstrap-version 7))
|
||||
(unless (file-exists-p bootstrap-file)
|
||||
(with-current-buffer
|
||||
(url-retrieve-synchronously "https://raw.githubusercontent.com/radian-software/straight.el/develop/install.el" 'silent 'inhibit-cookies)
|
||||
(goto-char (point-max))
|
||||
(eval-print-last-sexp)))
|
||||
(load bootstrap-file nil 'nomessage))
|
||||
|
||||
(straight-use-package 'use-package)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
Integrate use-package and straight
|
||||
#+begin_src elisp :tangle ~/.emacs
|
||||
(setq straight-use-package-by-default t)
|
||||
#+end_src
|
||||
|
||||
Make sure Org is installed (straight.el)
|
||||
#+begin_src elisp :tangle ~/.emacs
|
||||
(unless (file-directory-p "~/.emacs.d/straight/versions") (make-directory (concat user-emacs-directory "straight/versions")))
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp :tangle ~/.emacs
|
||||
(use-package org)
|
||||
#+end_src
|
||||
|
||||
A use-package declaration for simplifying your .emacs
|
||||
#+begin_src elisp
|
||||
(require 'use-package)
|
||||
#+end_src
|
||||
|
||||
* Custom file
|
||||
|
||||
#+begin_src elisp
|
||||
(setq custom-file (expand-file-name "custom.el" user-emacs-directory))
|
||||
(when (file-exists-p custom-file) (load custom-file))
|
||||
#+end_src
|
||||
|
||||
* System information
|
||||
|
||||
#+begin_src elisp :tangle ~/.emacs.d/custom.el
|
||||
(defvar my-laptop-p (equal (system-name) "lilitop"))
|
||||
(defvar my-server-p (and (equal (system-name) "localhost") (equal user-login-name "root")))
|
||||
(defvar my-phone-p (not (null (getenv "ANDROID_ROOT")))
|
||||
"If non-nil, GNU Emacs is running on Termux.")
|
||||
(when my-phone-p (defvar gnutls-algorithm-priority "NORMAL:-VERS-TLS1.3"))
|
||||
(global-auto-revert-mode) ; simplifies syncing
|
||||
#+end_src
|
||||
|
||||
* Persistent history
|
||||
|
||||
#+begin_src elisp
|
||||
(savehist-mode)
|
||||
#+end_src
|
||||
|
||||
* Backup and versioning
|
||||
|
||||
#+begin_src emacs-lisp
|
||||
(use-package magit
|
||||
:ensure t
|
||||
)
|
||||
#+end_src
|
||||
|
||||
* Personal information
|
||||
|
||||
#+begin_src elisp :tangle ~/.emacs.d/custom.el
|
||||
(setq user-full-name "Amr Gharbeia")
|
||||
(defvar email-address "amr@gharbeia.net")
|
||||
(defvar calendar-latitude 39.0)
|
||||
(defvar calendar-longitude -77.1)
|
||||
(defvar calendar-location-name "Washington, DC")
|
||||
(defvar calendar-time-zone -300)
|
||||
(defvar calendar-standard-time-zone-name "EST")
|
||||
(defvar calendar-daylight-time-zone-name "EDT")
|
||||
#+end_src
|
||||
|
||||
* Saving Emacs Sessions
|
||||
|
||||
Close frame when done
|
||||
#+begin_src elisp
|
||||
(add-hook 'server-done-hook (lambda () (delete-frame)))
|
||||
#+end_src
|
||||
|
||||
Save desktop session
|
||||
#+begin_src elisp
|
||||
(desktop-save-mode t)
|
||||
#+end_src
|
||||
|
||||
* Security
|
||||
|
||||
#+begin_src elisp :tangle no
|
||||
(use-package password-store)
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp
|
||||
(use-package auth-source
|
||||
:config (auth-source-pass-enable)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
* End matter
|
||||
|
||||
#+begin_src elisp :tangle ~/.emacs
|
||||
(provide '.emacs)
|
||||
;;; .emacs ends here
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp
|
||||
(provide 'config)
|
||||
;;; config.el ends here
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp :tangle ~/.emacs.d/custom.el
|
||||
(provide 'custom)
|
||||
;;; custom.el ends here
|
||||
#+end_src
|
||||
@@ -1,157 +0,0 @@
|
||||
#+TITLE: GTD & Agenda Configuration
|
||||
#+PROPERTY: header-args :tangle ~/.emacs.d/config.el
|
||||
|
||||
* Agenda
|
||||
|
||||
Basic agenda settings
|
||||
#+begin_src elisp
|
||||
(setq org-deadline-warning-days 7)
|
||||
(setq org-agenda-skip-additional-timestamps-same-entry t)
|
||||
(setq org-agenda-span 'fortnight)
|
||||
(setq org-agenda-tags-column 'auto)
|
||||
(setq org-agenda-skip-scheduled-if-deadline-is-shown t)
|
||||
#+end_src
|
||||
|
||||
Agenda files
|
||||
#+begin_src elisp
|
||||
(setq org-agenda-files (list
|
||||
(concat org-directory "inbox.org")
|
||||
(concat org-directory "gtd.org")
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
Better agenda views
|
||||
#+begin_src elisp :tangle no
|
||||
(use-package org-super-agenda)
|
||||
#+end_src
|
||||
|
||||
* To-do
|
||||
|
||||
Basic todo
|
||||
#+begin_src elisp
|
||||
(setq org-todo-keywords
|
||||
'(
|
||||
(sequence "TODO(t)" "NEXT(n)" "WAIT(w@/!)" "|" "DONE(d!)" "CNCL(c@)")
|
||||
)
|
||||
)
|
||||
|
||||
(setq org-todo-keyword-faces
|
||||
'(
|
||||
("TODO" :foreground "red" :weight bold)
|
||||
("NEXT" :foreground "red" :weight bold)
|
||||
("WAIT" :foreground "yellow" :weight bold)
|
||||
("DONE" :foreground "green" :weight bold)
|
||||
("CNCL" :foreground "blue" :weight bold)
|
||||
)
|
||||
)
|
||||
|
||||
(setq org-enforce-todo-dependencies t)
|
||||
(setq org-tags-exclude-from-inheritance '("crypt" "!private"))
|
||||
#+end_src
|
||||
|
||||
Switch entry to 'DONE' when all subentries are done
|
||||
#+begin_src elisp
|
||||
(defun org-summary-todo (n-done n-not-done)
|
||||
"Switch entry to 'DONE' when all subentries are done, to 'TODO' otherwise.
|
||||
Uses N-DONE and N-NOT-DONE"
|
||||
(let (org-log-done org-log-states) ; turn off logging
|
||||
(org-todo (if (= n-not-done 0) "DONE" "TODO")
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
(add-hook 'org-after-todo-statistics-hook #'org-summary-todo)
|
||||
#+end_src
|
||||
|
||||
* Getting Things Done (GTD)
|
||||
#+begin_src elisp
|
||||
(use-package org-gtd
|
||||
:defer t
|
||||
:init (setq org-gtd-update-ack "4.0.0")
|
||||
:after org
|
||||
:config
|
||||
(setq org-edna-use-inheritance t)
|
||||
(org-edna-mode)
|
||||
(setq org-gtd-keyword-mapping
|
||||
'((todo . "TODO")
|
||||
(next . "NEXT")
|
||||
(wait . "WAIT")
|
||||
(done . "DONE")
|
||||
(canceled . "CNCL")))
|
||||
(setq org-gtd-custom-node-paths
|
||||
'(("Actionable" . '("~/memex/gtd.org" "Actions"))
|
||||
("Incubate" . '("~/memex/gtd.org" "Incubate"))))
|
||||
(org-gtd-mode)
|
||||
:bind (
|
||||
("C-c d c" . org-gtd-capture)
|
||||
("C-c d e" . org-gtd-engage)
|
||||
("C-c d p" . org-gtd-process-inbox)
|
||||
:map org-gtd-clarify-map
|
||||
("C-c c" . org-gtd-organize)
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp
|
||||
(defvar org-gtd-directory org-directory)
|
||||
(defvar org-gtd-organize-hooks '(org-gtd-set-area-of-focus org-set-tags-command))
|
||||
(defvar org-gtd-organize-hooks '(org-gtd-set-area-of-focus))
|
||||
(defvar org-gtd-areas-of-focus '(
|
||||
"Atoms"
|
||||
"Bits"
|
||||
"Cells"
|
||||
"Flags"
|
||||
"Business"
|
||||
"Wealth"
|
||||
"Learning"
|
||||
"Skills"
|
||||
"Privacy"
|
||||
"Archive"
|
||||
"Library"
|
||||
"Writing"
|
||||
"Health"
|
||||
"Home"
|
||||
"Family"
|
||||
"Social"
|
||||
"Egypt"
|
||||
)
|
||||
)
|
||||
(defvar org-gtd-clarify-show-horizons 'right)
|
||||
#+end_src
|
||||
|
||||
Logging
|
||||
#+begin_src elisp
|
||||
(setq org-log-into-drawer "LOGBOOK")
|
||||
#+end_src
|
||||
|
||||
Clocking work in drawer
|
||||
#+begin_src elisp :tangle no
|
||||
(setq org-clock-into-drawer t)
|
||||
#+end_src
|
||||
|
||||
Habits
|
||||
#+begin_src elisp :tangle no
|
||||
(setq org-habit-graph-column 80)
|
||||
(setq org-habit-show-habits-only-for-today nil)
|
||||
#+end_src
|
||||
|
||||
* Refile
|
||||
|
||||
org-refile targets
|
||||
#+begin_src elisp
|
||||
(setq org-refile-targets '((nil :maxlevel . 9)
|
||||
(org-agenda-files :maxlevel . 9)
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
Set type of refile targets completion
|
||||
#+begin_src elisp
|
||||
(setq org-outline-path-complete-in-steps nil)
|
||||
#+end_src
|
||||
|
||||
Allow refiling to new parents created on the go after confirmation
|
||||
#+begin_src elisp
|
||||
(setq org-refile-allow-creating-parent-nodes 'confirm)
|
||||
#+end_src
|
||||
@@ -1,175 +0,0 @@
|
||||
#+TITLE: Media and Books Configuration
|
||||
#+PROPERTY: header-args :tangle ~/.emacs.d/config.el
|
||||
|
||||
* Read ebooks (calibredb)
|
||||
|
||||
#+begin_src elisp
|
||||
(use-package calibredb
|
||||
:defer t
|
||||
:config
|
||||
(setq calibredb-format-all-the-icons t)
|
||||
(setq calibredb-format-icons-in-terminal t)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp
|
||||
;; Forcefully reset the variable after loading calibredb
|
||||
(defvar calibredb-root-dir (concat (getenv "HOME") "/library/books"))
|
||||
(defvar calibredb-db-dir (expand-file-name "metadata.db" calibredb-root-dir))
|
||||
; (defvar calibredb-library-alist (concat (getenv "HOME") "/library/books"))
|
||||
;; (defvar calibredb-search-page-max-rows 1000)
|
||||
(defvar calibredb-id-width 6)
|
||||
(defvar calibredb-title-width 100)
|
||||
(defvar calibredb-format-width 0)
|
||||
(defvar calibredb-date-width 0)
|
||||
(defvar calibredb-author-width 20)
|
||||
(defvar calibredb-comment-width 0)
|
||||
(defvar calibredb-tag-width 0)
|
||||
#+end_src
|
||||
|
||||
Some keybindings
|
||||
|
||||
#+begin_src elisp ~/.emacs.d/custom.el
|
||||
(defvar calibredb-show-mode-map
|
||||
(let ((map (make-sparse-keymap)))
|
||||
(define-key map "?" #'calibredb-entry-dispatch)
|
||||
(define-key map "o" #'calibredb-find-file)
|
||||
(define-key map "O" #'calibredb-find-file-other-frame)
|
||||
(define-key map "V" #'calibredb-open-file-with-default-tool)
|
||||
(define-key map "s" #'calibredb-set-metadata-dispatch)
|
||||
(define-key map "e" #'calibredb-export-dispatch)
|
||||
(define-key map "q" #'calibredb-entry-quit)
|
||||
(define-key map "y" #'calibredb-yank-dispatch)
|
||||
(define-key map "," #'calibredb-quick-look)
|
||||
(define-key map "." #'calibredb-dired-open)
|
||||
(define-key map "\M-/" #'calibredb-rga)
|
||||
(define-key map "\M-t" #'calibredb-set-metadata--tags)
|
||||
(define-key map "\M-a" #'calibredb-set-metadata--author_sort)
|
||||
(define-key map "\M-A" #'calibredb-set-metadata--authors)
|
||||
(define-key map "\M-T" #'calibredb-set-metadata--title)
|
||||
(define-key map "\M-c" #'calibredb-set-metadata--comments)
|
||||
map)
|
||||
"Keymap for `calibredb-show-mode'.")
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp
|
||||
(defvar calibredb-search-mode-map
|
||||
(let ((map (make-sparse-keymap)))
|
||||
(define-key map [mouse-3] #'calibredb-search-mouse)
|
||||
(define-key map (kbd "<RET>") #'calibredb-find-file)
|
||||
(define-key map "?" #'calibredb-dispatch)
|
||||
(define-key map "a" #'calibredb-add)
|
||||
(define-key map "A" #'calibredb-add-dir)
|
||||
(define-key map "c" #'calibredb-clone)
|
||||
(define-key map "d" #'calibredb-remove)
|
||||
(define-key map "D" #'calibredb-remove-marked-items)
|
||||
(define-key map "j" #'calibredb-next-entry)
|
||||
(define-key map "k" #'calibredb-previous-entry)
|
||||
(define-key map "l" #'calibredb-virtual-library-list)
|
||||
(define-key map "L" #'calibredb-library-list)
|
||||
(define-key map "n" #'calibredb-virtual-library-next)
|
||||
(define-key map "N" #'calibredb-library-next)
|
||||
(define-key map "p" #'calibredb-virtual-library-previous)
|
||||
(define-key map "P" #'calibredb-library-previous)
|
||||
(define-key map "s" #'calibredb-set-metadata-dispatch)
|
||||
(define-key map "S" #'calibredb-switch-library)
|
||||
(define-key map "o" #'calibredb-find-file)
|
||||
(define-key map "O" #'calibredb-find-file-other-frame)
|
||||
(define-key map "v" #'calibredb-view)
|
||||
(define-key map "V" #'calibredb-open-file-with-default-tool)
|
||||
(define-key map "," #'calibredb-quick-look)
|
||||
(define-key map "." #'calibredb-dired-open)
|
||||
(define-key map "y" #'calibredb-yank-dispatch)
|
||||
(define-key map "b" #'calibredb-catalog-bib-dispatch)
|
||||
(define-key map "e" #'calibredb-export-dispatch)
|
||||
(define-key map "r" #'calibredb-search-refresh-and-clear-filter)
|
||||
(define-key map "R" #'calibredb-search-clear-filter)
|
||||
(define-key map "q" #'calibredb-search-quit)
|
||||
(define-key map "m" #'calibredb-mark-and-forward)
|
||||
(define-key map "f" #'calibredb-toggle-favorite-at-point)
|
||||
(define-key map "x" #'calibredb-toggle-archive-at-point)
|
||||
(define-key map "h" #'calibredb-toggle-highlight-at-point)
|
||||
(define-key map "u" #'calibredb-unmark-and-forward)
|
||||
(define-key map "i" #'calibredb-edit-annotation)
|
||||
(define-key map (kbd "<DEL>") #'calibredb-unmark-and-backward)
|
||||
(define-key map (kbd "<backtab>") #'calibredb-toggle-view)
|
||||
(define-key map (kbd "TAB") #'calibredb-toggle-view-at-point)
|
||||
(define-key map "\M-n" #'calibredb-show-next-entry)
|
||||
(define-key map "\M-p" #'calibredb-show-previous-entry)
|
||||
(define-key map "/" #'calibredb-search-live-filter)
|
||||
(define-key map "\M-t" #'calibredb-set-metadata--tags)
|
||||
(define-key map "\M-a" #'calibredb-set-metadata--author_sort)
|
||||
(define-key map "\M-A" #'calibredb-set-metadata--authors)
|
||||
(define-key map "\M-T" #'calibredb-set-metadata--title)
|
||||
(define-key map "\M-c" #'calibredb-set-metadata--comments)
|
||||
map)
|
||||
"Keymap for `calibredb-search-mode'.")
|
||||
#+end_src
|
||||
|
||||
* Annotate PDFs and EPUBs (org-noter)
|
||||
|
||||
#+begin_src elisp :tangle no
|
||||
(use-package org-noter)
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp :tangle ~/.emacs.d/custom.el
|
||||
(defvar org-noter-notes-search-path (list (concat org-directory "/library/books")))
|
||||
(defvar org-noter-default-notes-file-names '("books.org"))
|
||||
#+end_src
|
||||
|
||||
* Link PDFs (org-noter-pdftools)
|
||||
|
||||
#+begin_src elisp
|
||||
(use-package org-noter-pdftools
|
||||
:after org-noter
|
||||
:config
|
||||
;; Add a function to ensure precise note is inserted
|
||||
(defun org-noter-pdftools-insert-precise-note (&optional toggle-no-questions)
|
||||
(interactive "P")
|
||||
(org-noter--with-valid-session
|
||||
(let ((org-noter-insert-note-no-questions (if toggle-no-questions
|
||||
(not org-noter-insert-note-no-questions)
|
||||
org-noter-insert-note-no-questions))
|
||||
(org-pdftools-use-isearch-link t)
|
||||
(org-pdftools-use-freepointer-annot t))
|
||||
(org-noter-insert-note (org-noter--get-precise-info)))))
|
||||
|
||||
;; fix https://github.com/weirdNox/org-noter/pull/93/commits/f8349ae7575e599f375de1be6be2d0d5de4e6cbf
|
||||
(defun org-noter-set-start-location (&optional arg)
|
||||
"When opening a session with this document, go to the current location.
|
||||
With a prefix ARG, remove start location."
|
||||
(interactive "P")
|
||||
(org-noter--with-valid-session
|
||||
(let ((inhibit-read-only t)
|
||||
(ast (org-noter--parse-root))
|
||||
(location (org-noter--doc-approx-location (when (called-interactively-p 'any) 'interactive))))
|
||||
(with-current-buffer (org-noter--session-notes-buffer session)
|
||||
(org-with-wide-buffer
|
||||
(goto-char (org-element-property :begin ast))
|
||||
(if arg
|
||||
(org-entry-delete nil org-noter-property-note-location)
|
||||
(org-entry-put nil org-noter-property-note-location
|
||||
(org-noter--pretty-print-location location))))))))
|
||||
(with-eval-after-load 'pdf-annot
|
||||
(add-hook 'pdf-annot-activate-handler-functions #'org-noter-pdftools-jump-to-note)
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
* View EPUBs (nov.el)
|
||||
|
||||
#+begin_src elisp :tangle no
|
||||
(use-package nov
|
||||
:config
|
||||
(add-to-list 'auto-mode-alist '("\\.epub\\'" . nov-mode))
|
||||
)
|
||||
#+end_src
|
||||
|
||||
* Zotero (helm-bibtex)
|
||||
#+begin_src elisp :tangle no
|
||||
(use-package helm-bibtex)
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp :tangle ~/.emacs.d/custom.el
|
||||
(defvar bibtex-completion-bibliography '("~/bibliography/zotero.bib"))
|
||||
#+end_src
|
||||
@@ -1,46 +0,0 @@
|
||||
#+TITLE: Miscellaneous Configuration
|
||||
#+PROPERTY: header-args :tangle ~/.emacs.d/config.el
|
||||
|
||||
* Browser (eww)
|
||||
|
||||
#+begin_src elisp
|
||||
(use-package eww
|
||||
:bind* (("M-m g x" . eww)
|
||||
("M-m g :" . eww-browse-with-external-browser)
|
||||
("M-m g #" . eww-list-histories)
|
||||
("M-m g {" . eww-back-url)
|
||||
("M-m g }" . eww-forward-url))
|
||||
:config
|
||||
(progn
|
||||
(add-hook 'eww-mode-hook 'visual-line-mode)
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
* Manage Docker in Emacs
|
||||
|
||||
#+begin_src elisp
|
||||
(use-package docker
|
||||
:bind ("C-c d" . docker)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
* Periodic table of the elements
|
||||
|
||||
#+begin_src elisp :tangle no
|
||||
(use-package chemtable)
|
||||
#+end_src
|
||||
|
||||
* Accounting (beancount)
|
||||
|
||||
#+begin_src elisp :tangle no
|
||||
(use-package beancount
|
||||
:straight (beancount :type git :host github :repo "beancount/beancount-mode")
|
||||
:config
|
||||
(add-to-list 'auto-mode-alist '("\\.beancount\\'" . beancount-mode))
|
||||
(add-hook 'beancount-mode-hook #'outline-minor-mode)
|
||||
(define-key beancount-mode-map (kbd "C-c C-n") #'outline-next-visible-heading)
|
||||
(define-key beancount-mode-map (kbd "C-c C-p") #'outline-previous-visible-heading)
|
||||
(add-hook 'beancount-mode-hook #'flymake-bean-check-enable)
|
||||
)
|
||||
#+end_src
|
||||
@@ -1,233 +0,0 @@
|
||||
#+TITLE: Org Mode Configuration
|
||||
#+PROPERTY: header-args :tangle ~/.emacs.d/config.el
|
||||
|
||||
* Org Mode
|
||||
|
||||
** Basic setup
|
||||
|
||||
#+begin_src elisp
|
||||
(use-package org
|
||||
:config
|
||||
(defvar org-outline-path-complete-in-steps nil)
|
||||
:bind (("C-c l" . org-store-link)
|
||||
("C-c a" . org-agenda)
|
||||
("C-c c" . org-capture)
|
||||
:map org-mode-map)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp
|
||||
(defvar org-directory (concat (getenv "HOME") "/memex/"))
|
||||
#+end_src
|
||||
|
||||
** Looks
|
||||
|
||||
Basic
|
||||
#+begin_src elisp
|
||||
(defvar org-pretty-entities t) ; Improve org mode looks
|
||||
(defvar org-hide-emphasis-markers t) ; Hide emphasis markup
|
||||
(defvar org-num-mode nil)
|
||||
(defvar org-startup-folded 'shw2levels)
|
||||
#+end_src
|
||||
|
||||
Indentation of headers
|
||||
#+begin_src elisp
|
||||
(defvar org-startup-indented t) ; Indent org heirarchy
|
||||
(defvar org-adapt-indentation t)
|
||||
(defvar org-hide-leading-stars t) ; Minimal Outline
|
||||
(defvar org-odd-levels-only nil)
|
||||
#+end_src
|
||||
|
||||
Indentation of lists
|
||||
#+begin_src elisp
|
||||
(setq org-list-demote-modify-bullet t)
|
||||
#+end_src
|
||||
|
||||
Org-modern
|
||||
#+begin_src elisp
|
||||
(use-package org-modern
|
||||
:ensure t
|
||||
:config
|
||||
;; Choose some fonts
|
||||
(set-face-attribute 'default nil :family "sans-serif")
|
||||
(set-face-attribute 'variable-pitch nil :family "sans-serif")
|
||||
(set-face-attribute 'org-modern-symbol nil :family "Iosevka")
|
||||
|
||||
;; Edit settings
|
||||
(defvar org-auto-align-tags nil)
|
||||
(defvar org-tags-column 0)
|
||||
(defvar org-catch-invisible-edits 'show-and-error)
|
||||
(defvar org-special-ctrl-a/e t)
|
||||
(defvar org-insert-heading-respect-content t)
|
||||
|
||||
;; Org styling, hide markup etc.
|
||||
(defvar org-hide-emphasis-markers t)
|
||||
(defvar org-pretty-entities t)
|
||||
|
||||
;; Agenda styling
|
||||
(defvar org-agenda-tags-column 0)
|
||||
(defvar org-agenda-block-separator ?─)
|
||||
(defvar org-agenda-time-grid
|
||||
'((daily today require-timed)
|
||||
(800 1000 1200 1400 1600 1800 2000)
|
||||
" ┄┄┄┄┄ " "┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄"))
|
||||
(defvar org-agenda-current-time-string
|
||||
"◀── now ─────────────────────────────────────────────────")
|
||||
|
||||
;; Ellipsis styling
|
||||
(defvar org-ellipsis "…")
|
||||
(set-face-attribute 'org-ellipsis nil :inherit 'default :box nil)
|
||||
|
||||
(global-org-modern-mode)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
Highlight Sourcecode Syntax
|
||||
#+begin_src elisp
|
||||
(setq org-src-fontify-natively t)
|
||||
(setq org-src-tab-acts-natively t)
|
||||
#+end_src
|
||||
|
||||
Images
|
||||
#+begin_src elisp
|
||||
(setq org-startup-with-inline-images t)
|
||||
(setq org-image-actual-width '(300))
|
||||
#+end_src
|
||||
|
||||
** Capture
|
||||
|
||||
#+begin_src elisp
|
||||
(defvar org-default-notes-file (concat org-directory "inbox.org"))
|
||||
#+end_src
|
||||
|
||||
*** Org-protocol
|
||||
|
||||
Linux configuration
|
||||
#+begin_src bash :tangle no
|
||||
[Desktop Entry]
|
||||
Name=org-protocol
|
||||
Comment=Intercept calls from emacsclient to trigger custom actions
|
||||
Categories=Other;
|
||||
Keywords=org-protocol;
|
||||
Icon=emacs
|
||||
Type=Application
|
||||
Exec=emacsclient -- %u
|
||||
Terminal=false
|
||||
StartupWMClass=Emacs
|
||||
MimeType=x-scheme-handler/org-protocol;
|
||||
#+end_src
|
||||
|
||||
#+begin_src bash :tangle no
|
||||
update-desktop-database ~/.local/share/applications/
|
||||
#+end_src
|
||||
|
||||
Basic configuration
|
||||
#+begin_src elisp
|
||||
(require 'org-protocol)
|
||||
(setq org-protocol-default-buffer-for-file-links "*scratch*") ; fixes 'no buffers remain to edit error for org-protocol capturer
|
||||
#+end_src
|
||||
|
||||
Org-protocol templates
|
||||
#+begin_src elisp :tangle ~/.emacs.d/custom.el
|
||||
(defvar org-capture-templates '(
|
||||
("p" "Protocol"
|
||||
entry
|
||||
(file "inbox.org")
|
||||
"* %^{Title}\nSource: %u, %c\n #+BEGIN_QUOTE\n%i\n#+END_QUOTE\n\n\n%?"
|
||||
)
|
||||
("L" "Protocol Link"
|
||||
entry
|
||||
(file "inbox.org")
|
||||
"* %? [[%:link][%:description]]\n:PROPERTIES:\n:TITLE: %:description\n:URI: %:link\n:CREATED: %U\n:END:"
|
||||
:prepend nil
|
||||
:empty-lines 1
|
||||
:created t
|
||||
:kill-buffer t
|
||||
)
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp
|
||||
(setq org-protocol-default-template-key "L")
|
||||
#+end_src
|
||||
|
||||
Convert Orgzly captures to org-protocol captures standard
|
||||
#+begin_src elisp
|
||||
(defun my/org-convert-orgzly-to-org-protocol ()
|
||||
"Reformat Orgzly bookmark at point to org-protocol bookmark."
|
||||
(interactive)
|
||||
(when (org-at-heading-p)
|
||||
(let ((headline (nth 4 (org-heading-components))))
|
||||
;; Find and store the link. Delete the link line.
|
||||
(search-forward-regexp "^https?://\\S-*" nil t)
|
||||
(let ((link (match-string 0)))
|
||||
(beginning-of-line)
|
||||
(kill-line)
|
||||
;; Delete any trailing blank spaces
|
||||
(org-back-to-heading)
|
||||
(end-of-line)
|
||||
(when (not (org-on-heading-p))
|
||||
(delete-char 1)
|
||||
)
|
||||
;; Set new headline
|
||||
(goto-char (org-entry-beginning-position))
|
||||
(org-edit-headline (format "[[%s][%s]]" link headline))
|
||||
;; Set new properties
|
||||
(org-set-property "TITLE" headline)
|
||||
(org-set-property "URI" link)
|
||||
(message "Reformatted Orgzly bookmark at point to org-protocol bookmark")
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
** Exporting
|
||||
|
||||
#+begin_src elisp :tangle no
|
||||
(setq org-export-with-smart-quotes t)
|
||||
(setq org-export-backends '(beamer html latex md))
|
||||
#+end_src
|
||||
|
||||
Export to EPUB
|
||||
#+begin_src elisp :tangle no
|
||||
(use-package ox-epub)
|
||||
#+end_src
|
||||
|
||||
** org-attach
|
||||
|
||||
#+begin_src elisp
|
||||
(defvar org-attach-id-dir (concat org-directory "/library"))
|
||||
#+end_src
|
||||
|
||||
** Enable shell scripting support in org-babel
|
||||
|
||||
#+begin_src elisp
|
||||
(defvar org-babel-do-load-languages 'org-babel-load-languages '((shell . t)))
|
||||
#+end_src
|
||||
|
||||
** Insert org-mode links from clipboard
|
||||
#+begin_src elisp :tangle no
|
||||
(use-package org-cliplink
|
||||
:bind
|
||||
(("C-x p i" . org-cliplink))
|
||||
)
|
||||
#+end_src
|
||||
|
||||
** Deft
|
||||
#+begin_src elisp :tangle no
|
||||
(use-package deft
|
||||
:commands (deft)
|
||||
:init
|
||||
(defvar deft-extensions '("org"))
|
||||
(defvar deft-recursive nil)
|
||||
(defvar deft-use-filename-as-title t)
|
||||
:config
|
||||
(defvar deft-directory org-directory)
|
||||
(defvar deft-recursive t)
|
||||
(defvar deft-strip-summary-regexp ":PROPERTIES:\n\\(.+\n\\)+:END:\n")
|
||||
(defvar deft-use-filename-as-title t)
|
||||
:bind ("C-c n d" . deft)
|
||||
)
|
||||
#+end_src
|
||||
@@ -1,140 +0,0 @@
|
||||
#+TITLE: Org-Roam Configuration
|
||||
#+PROPERTY: header-args :tangle ~/.emacs.d/config.el
|
||||
|
||||
* Org-roam
|
||||
|
||||
** Basic org-roam setup
|
||||
|
||||
#+begin_src elisp
|
||||
(use-package org-roam
|
||||
:init (setq org-roam-v2-ack t) ;; Acknowledge V2 upgrade
|
||||
:after org
|
||||
:config
|
||||
(org-roam-db-autosync-enable)
|
||||
(require 'org-roam-dailies)
|
||||
:bind (
|
||||
("C-c n f" . org-roam-node-find)
|
||||
("C-c n g" . org-roam-graph)
|
||||
("C-c n r" . org-roam-node-random)
|
||||
("C-c n h" . org-roam-node-convert-headline)
|
||||
("C-c n i" . org-roam-node-insert)
|
||||
("C-c n o" . org-id-get-create)
|
||||
("C-c n t" . org-roam-tag-add)
|
||||
("C-c n a" . org-roam-alias-add)
|
||||
("C-c n l" . org-roam-buffer-display-dedicated)
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp
|
||||
(setq org-roam-directory (concat org-directory "notes"))
|
||||
(setq org-roam-dailies-directory (concat org-directory "daily"))
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp :tangle no
|
||||
(use-package sqlite3)
|
||||
(require 'sqlite3)
|
||||
#+end_src
|
||||
|
||||
Include subdirectories in org-roam
|
||||
#+begin_src elisp
|
||||
(setq org-roam-file-exclude-regexp "^[.][.]?/")
|
||||
#+end_src
|
||||
|
||||
** Display in org-roam-buffer
|
||||
#+begin_src elisp :tangle no
|
||||
(setq org-roam-mode-sections
|
||||
(list #'org-roam-backlinks-section
|
||||
#'org-roam-reflinks-section
|
||||
#'org-roam-unlinked-references-section
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
** Filter org-roam nodes find by tag
|
||||
|
||||
#+begin_src elisp :tangle no
|
||||
(defun my/org-roam-node-has-tag (node tag)
|
||||
"Filter function to check if the given NODE has the specified TAG."
|
||||
(member tag (org-roam-node-tags node))
|
||||
)
|
||||
|
||||
(defun my/org-roam-node-find-by-tag ()
|
||||
"Find and open an Org-roam node based on a specified tag."
|
||||
(interactive)
|
||||
(let ((tag (read-string "Enter tag: ")))
|
||||
(org-roam-node-find nil nil (lambda (node) (my/org-roam-node-has-tag node tag))))
|
||||
)
|
||||
#+end_src
|
||||
|
||||
** org-roam-capture templates
|
||||
#+begin_src elisp
|
||||
(setq org-roam-capture-templates
|
||||
'(
|
||||
("L" "link" plain
|
||||
(function org-roam--capture-get-point)
|
||||
"%?"
|
||||
:file-name "web/%<%Y-%m-%dT%H%M%S>.org"
|
||||
:head "#+TITLE: ${title}\n#+CREATED: %<%Y-%m-%dT%H%M%S>"
|
||||
:immediate-finish t
|
||||
:unnarrowed t
|
||||
)
|
||||
|
||||
("h" "hugo post" plain
|
||||
"%?"
|
||||
:target (file+head "posts/${slug}.org"
|
||||
"#+TITLE: ${title}\n#+DATE: %U\n#+HUGO_BASE_DIR: ~/gharbeia.net\n#+HUGO_SECTION: ./posts\n#+HUGO_AUTO_SET_LASTMOD: t\n#+HUGO_TAGS: article\n#+HUGO_DRAFT: true\n")
|
||||
:immediate-finish t
|
||||
:unnarrowed t
|
||||
)
|
||||
|
||||
("p" "person" plain
|
||||
"%?"
|
||||
:if-new (file+head "people/${slug}.org"
|
||||
"#+TITLE: ${title}")
|
||||
:immediate-finish t
|
||||
:unnarrowed t
|
||||
)
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp
|
||||
(setq org-roam-dailies-capture-templates
|
||||
'(
|
||||
("d" "daily" plain
|
||||
""
|
||||
:target ("file+heaed %<%Y-%m-%d>.org" "#+title: %<%Y-%m-%d>\n\n")
|
||||
:immediate-finish t
|
||||
)
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
** Move org header to org-roam-daily
|
||||
|
||||
#+begin_src elisp :tangle no
|
||||
(defun my/org-move-entry-to-daily-notes ()
|
||||
"Move the current org-mode headline to the daily notes file based on its :CREATED: property."
|
||||
(interactive)
|
||||
(let*
|
||||
(
|
||||
(created-prop (org-entry-get nil "CREATED"))
|
||||
(created-date (when created-prop
|
||||
(org-parse-time-string created-prop)))
|
||||
(year (nth 5 created-date)) ; Extract year (6th element)
|
||||
(month (nth 4 created-date)) ; Extract month (5th element)
|
||||
(day (nth 3 created-date)) ; Extract day (4th element)
|
||||
(target-date (format "%04d-%02d-%02d" year month day)) ; Format date string
|
||||
(target-file (org-roam-dailies-goto target-date))
|
||||
)
|
||||
(when target-file
|
||||
(org-cut-subtree)
|
||||
(find-file target-file)
|
||||
(goto-char (point-max))
|
||||
(unless (bolp) (newline))
|
||||
(org-paste-subtree)
|
||||
)
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
@@ -1,73 +0,0 @@
|
||||
#+TITLE: Shell Configuration
|
||||
#+PROPERTY: header-args :tangle ~/.emacs.d/config.el
|
||||
|
||||
* Shell
|
||||
|
||||
** Bash completion
|
||||
|
||||
#+begin_src elisp
|
||||
(use-package bash-completion
|
||||
:config
|
||||
(require 'bash-completion)
|
||||
(bash-completion-setup)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp
|
||||
(defvar shell-dynamic-complete-functions t)
|
||||
#+end_src
|
||||
|
||||
** Eshell
|
||||
|
||||
Add programmable bash completion to Emacs shell-mode
|
||||
#+begin_src elisp :tangle no
|
||||
(require 'bash-completion)
|
||||
(add-hook 'eshell-mode-hook
|
||||
(lambda ()
|
||||
(add-hook 'completion-at-point-functions
|
||||
'bash-completion-capf-nonexclusive nil t
|
||||
)
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
Use colors in eshell
|
||||
#+begin_src elisp :tangle no
|
||||
(use-package xterm-color
|
||||
:commands (xterm-color-filter)
|
||||
)
|
||||
|
||||
(use-package eshell
|
||||
:after xterm-color
|
||||
:config
|
||||
(define-key eshell-hist-mode-map (kbd "M-r") #'consult-history)
|
||||
(add-hook 'eshell-mode-hook
|
||||
(lambda ()
|
||||
(setenv "TERM" "xterm-256color")))
|
||||
(add-hook 'eshell-before-prompt-hook (setq xterm-color-preserve-properties t))
|
||||
(add-to-list 'eshell-preoutput-filter-functions 'xterm-color-filter)
|
||||
(setq eshell-output-filter-functions
|
||||
(remove 'eshell-handle-ansi-color eshell-output-filter-functions)
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
Eshell completion
|
||||
#+begin_src elisp :tangle no
|
||||
(add-hook 'eshell-mode-hook
|
||||
(lambda ()
|
||||
(add-hook 'completion-at-point-functions
|
||||
'bash-completion-capf-nonexclusive nil t)))
|
||||
#+end_src
|
||||
|
||||
Emulate A Terminal (EAT)
|
||||
#+begin_src elisp :tangle no
|
||||
(use-package eat
|
||||
:config
|
||||
;; For `eat-eshell-mode'.
|
||||
(add-hook 'eshell-load-hook #'eat-eshell-mode)
|
||||
|
||||
;; For `eat-eshell-visual-command-mode'.
|
||||
(add-hook 'eshell-load-hook #'eat-eshell-visual-command-mode)
|
||||
)
|
||||
#+end_src
|
||||
@@ -1,255 +0,0 @@
|
||||
#+TITLE: Reading and Writing Configuration
|
||||
#+PROPERTY: header-args :tangle ~/.emacs.d/config.el
|
||||
|
||||
* Text and Case
|
||||
|
||||
** Convert DOuble capitals to single capitals
|
||||
|
||||
#+begin_src elisp :tangle no
|
||||
(defun my/dcaps-to-scaps ()
|
||||
"Convert word in DOuble CApitals to Single Capitals."
|
||||
(interactive)
|
||||
(and (= ?w (char-syntax (char-before)))
|
||||
(save-excursion
|
||||
(and (if (called-interactively-p)
|
||||
(skip-syntax-backward "w")
|
||||
(= -3 (skip-syntax-backward "w"))
|
||||
)
|
||||
(let (case-fold-search)
|
||||
(looking-at "\\b[[:upper:]]\\{2\\}[[:lower:]]")
|
||||
)
|
||||
(capitalize-word 1)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
Then, let’s define a minor mode for it to be activated.
|
||||
#+begin_src elisp :tangle no
|
||||
(define-minor-mode my-dubcaps-mode
|
||||
"Toggle 'my-dubcaps-mode' and convert words in DOuble CApitals to Single Capitals as you type."
|
||||
:init-value nil
|
||||
:lighter (" DC")
|
||||
(if my-dubcaps-mode
|
||||
(add-hook 'post-self-insert-hook #'my/dcaps-to-scaps nil 'local)
|
||||
(remove-hook 'post-self-insert-hook #'my/dcaps-to-scaps 'local)))
|
||||
#+end_src
|
||||
|
||||
Finally, let’s add a hook so that it is on for all the text files Emacs opens.
|
||||
#+begin_src elisp :tangle no
|
||||
(add-hook 'text-mode-hook #'my-dubcaps-mode)
|
||||
#+end_src
|
||||
|
||||
Also, since we add a minor mode string (it might be useful sometimes), currently I prefer to diminish it.
|
||||
#+begin_src elisp :tangle no
|
||||
(defun my/diminish-dubcaps ()
|
||||
(interactive)
|
||||
(diminish 'my-dubcaps-mode ""))
|
||||
(add-hook 'my-dubcaps-mode-hook 'my/diminish-dubcaps)
|
||||
#+end_src
|
||||
|
||||
* Reading and Writing
|
||||
|
||||
** Move correctly over camelCased words
|
||||
|
||||
#+begin_src elisp
|
||||
(subword-mode)
|
||||
#+end_src
|
||||
|
||||
** Understand the more common sentence with double space
|
||||
|
||||
#+begin_src elisp
|
||||
(setq sentence-end-double-space nil)
|
||||
#+end_src
|
||||
|
||||
** Join lines into paragraph
|
||||
|
||||
#+begin_src elisp
|
||||
(defun my/fill-or-unfill-paragraph (&optional unfill region)
|
||||
"Fill paragraph (or REGION). With the prefix argument UNFILL, fill it instead."
|
||||
(interactive (progn
|
||||
(barf-if-buffer-read-only)
|
||||
(list (if current-prefix-arg 'fill) t)))
|
||||
(let ((fill-column (if unfill fill-column (point-max))))
|
||||
(fill-paragraph nil region)))
|
||||
|
||||
(bind-key "M-q" 'my/fill-or-unfill-paragraph)
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp
|
||||
(defun my/fill-or-unfill-all-paragraphs (&optional unfill)
|
||||
"Fill or unfill all paragraphs in the current buffer.
|
||||
With the prefix argument UNFILL, fill them instead."
|
||||
(interactive (list (if current-prefix-arg 'fill)))
|
||||
(let ((fill-column (if unfill fill-column (point-max))))
|
||||
(save-excursion
|
||||
(goto-char (point-min))
|
||||
(while (not (eobp))
|
||||
(fill-paragraph nil t)
|
||||
(forward-paragraph)))))
|
||||
|
||||
(bind-key "M-Q" 'my/fill-or-unfill-all-paragraphs)
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp
|
||||
(remove-hook 'text-mode-hook #'turn-on-auto-fill)
|
||||
(add-hook 'text-mode-hook 'turn-on-visual-line-mode)
|
||||
#+end_src
|
||||
|
||||
** Expand some words with auto-correct
|
||||
|
||||
#+begin_src elisp :tangle no
|
||||
(setq save-abbrevs 'silently)
|
||||
(setq-default abbrev-mode t)
|
||||
#+end_src
|
||||
|
||||
** ediff
|
||||
|
||||
#+begin_src elisp :tangle no
|
||||
(setq ediff-window-setup-function 'ediff-setup-windows-plain)
|
||||
(setq ediff-split-window-function 'split-window-horizontally)
|
||||
#+end_src
|
||||
|
||||
** tramp
|
||||
|
||||
#+begin_src elisp :tangle no
|
||||
(setq tramp-default-method "ssh"
|
||||
tramp-backup-directory-alist backup-directory-alist
|
||||
tramp-ssh-controlmaster-options "ssh")
|
||||
#+end_src
|
||||
|
||||
** Clean up space
|
||||
#+begin_src elisp :tangle no
|
||||
(bind-key "M-SPC" 'cycle-spacing)
|
||||
#+end_src
|
||||
|
||||
** Transform <a href> links into org links
|
||||
|
||||
#+begin_src elisp :tangle no
|
||||
(defun my/transform-html-links-to-org ()
|
||||
"Transform all HTML <a> links in the current buffer into 'org-mode' links."
|
||||
(interactive)
|
||||
(goto-char (point-min))
|
||||
(while (re-search-forward "<a href=\"\\(.*?\\)\">\\(.*?\\)</a>" nil t)
|
||||
(replace-match (org-make-link-string (match-string 1) (match-string 2)))))
|
||||
#+end_src
|
||||
|
||||
** Count words per minute
|
||||
#+begin_src elisp :tangle no
|
||||
(require 'org-clock)
|
||||
(defun my/org-entry-wpm ()
|
||||
(interactive)
|
||||
(save-restriction
|
||||
(save-excursion
|
||||
(org-narrow-to-subtree)
|
||||
(goto-char (point-min))
|
||||
(let* ((words (count-words-region (point-min) (point-max)))
|
||||
|
||||
(minutes (org-clock-sum-current-item))
|
||||
(wpm (/ words minutes)))
|
||||
(message "WPM: %d (words: %d, minutes: %d)" wpm words minutes)
|
||||
(kill-new (number-to-string wpm))
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
** Enable dict mode
|
||||
#+begin_src elisp :tangle no
|
||||
(setq dictionary-server "automatic")
|
||||
#+end_src
|
||||
|
||||
** Pick out passive voice and weasel words
|
||||
#+begin_src elisp :tangle no
|
||||
(use-package writegood-mode
|
||||
:diminish writegood-mode
|
||||
:config
|
||||
(progn (add-hook 'text-mode-hook 'writegood-mode))
|
||||
)
|
||||
#+end_src
|
||||
|
||||
** Org-babel docker
|
||||
#+begin_src elisp :tangle no
|
||||
(use-package ob-docker-build
|
||||
:straight (ob-docker-build :type git :host github :repo "ifitzpat/ob-docker-build")
|
||||
:defer t
|
||||
:config
|
||||
(add-to-list 'org-babel-load-languages '(docker-build . t))
|
||||
(org-babel-do-load-languages 'org-babel-load-languages org-babel-load-languages)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
* Spelling and syntax
|
||||
|
||||
** Spell checking
|
||||
|
||||
This requires installation of hunspell
|
||||
#+begin_src bash :tangle no
|
||||
sudo apt install hunspell
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp
|
||||
(use-package flyspell
|
||||
:config (setq ispell-program-name "hunspell"
|
||||
ispell-default-dictionary "en_US"
|
||||
)
|
||||
:diminish (flyspell-mode . "φ")
|
||||
:hook (text-mode . flyspell-mode)
|
||||
:bind (
|
||||
("M-<f7>" . flyspell-buffer)
|
||||
("<f7>" . flyspell-word)
|
||||
("C-;" . flyspell-auto-correct-previous-word)
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
** Flyspell correct
|
||||
#+begin_src elisp :tangle no
|
||||
(use-package flyspell-correct
|
||||
:after flyspell
|
||||
:bind (:map flyspell-mode-map ("C-;" . flyspell-correct-wrapper))
|
||||
)
|
||||
#+end_src
|
||||
|
||||
** Flycheck
|
||||
|
||||
Needs external checkers installed
|
||||
|
||||
#+begin_src elisp
|
||||
(use-package flycheck
|
||||
:init (global-flycheck-mode)
|
||||
:diminish (flycheck-mode . "")
|
||||
:config
|
||||
(add-hook 'after-init-hook #'global-flycheck-mode)
|
||||
(setq flycheck-emacs-lisp-load-path 'inherit)
|
||||
(setq flycheck-emacs-lisp-load-path (concat user-emacs-directory "straight/build"))
|
||||
)
|
||||
#+end_src
|
||||
|
||||
** Flycheck bash
|
||||
#+begin_src bash :tangle no
|
||||
sudo apt install devscripts
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp :tangle no
|
||||
(use-package flycheck-checkbashisms
|
||||
:config
|
||||
(flycheck-checkbashisms-setup)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
** Yaml
|
||||
#+begin_src elisp :tangle no
|
||||
(use-package yaml-mode
|
||||
:config
|
||||
(add-to-list 'auto-mode-alist '("\\.yml\\'" . yaml-mode))
|
||||
(add-to-list 'auto-mode-alist '("\\.yaml\\'" . yaml-mode))
|
||||
)
|
||||
#+end_src
|
||||
|
||||
** Docker
|
||||
#+begin_src elisp :tangle no
|
||||
(use-package docker-compose-mode)
|
||||
#+end_src
|
||||
@@ -1,7 +1,10 @@
|
||||
(let ((config-dir "~/memex/system/"))
|
||||
(let ((config-dir "~/memex/projects/dotemacs/modules/"))
|
||||
;; Load the core settings, including package management and essential setup.
|
||||
(org-babel-load-file (expand-file-name "emacs-core.org" config-dir))
|
||||
|
||||
;; Load UI and theme settings
|
||||
(org-babel-load-file (expand-file-name "emacs-ui.org" config-dir))
|
||||
|
||||
;; Load early init settings (if separate and not fully covered by core)
|
||||
;; (org-babel-load-file (expand-file-name "emacs-early-init.org" config-dir))
|
||||
|
||||
@@ -6,10 +6,13 @@
|
||||
This file loads the modular Emacs configuration files. It should be the primary way Emacs is configured, replacing or integrating with the original `~/.emacs`, `~/.emacs.d/init.el`, `~/.emacs.d/early-init.el`, and `~/.emacs.d/config.el`.
|
||||
|
||||
#+begin_src emacs-lisp
|
||||
(let ((config-dir "~/memex/system/"))
|
||||
(let ((config-dir "~/memex/projects/dotemacs/modules/"))
|
||||
;; Load the core settings, including package management and essential setup.
|
||||
(org-babel-load-file (expand-file-name "emacs-core.org" config-dir))
|
||||
|
||||
;; Load UI and theme settings
|
||||
(org-babel-load-file (expand-file-name "emacs-ui.org" config-dir))
|
||||
|
||||
;; Load early init settings (if separate and not fully covered by core)
|
||||
;; (org-babel-load-file (expand-file-name "emacs-early-init.org" config-dir))
|
||||
|
||||
@@ -79,13 +79,13 @@
|
||||
:embedding-model "nomic-embed-text"))
|
||||
)
|
||||
|
||||
(use-package org-agent
|
||||
(use-package opencortex
|
||||
:straight nil
|
||||
:load-path "~/.local/share/org-agent/src"
|
||||
:commands (org-agent-connect org-agent-disconnect)
|
||||
:load-path "~/.local/share/opencortex/src"
|
||||
:commands (opencortex-connect opencortex-disconnect)
|
||||
:init
|
||||
(setq org-agent-host "127.0.0.1")
|
||||
(setq org-agent-port 9105)
|
||||
(setq org-agent-executable-path "~/.local/share/org-agent/bin/org-agent-server")
|
||||
(setq opencortex-host "127.0.0.1")
|
||||
(setq opencortex-port 9105)
|
||||
(setq opencortex-executable-path "~/.local/share/opencortex/bin/opencortex-server")
|
||||
:config
|
||||
(message "org-agent: Local brain configured at %s" org-agent-executable-path))
|
||||
(message "opencortex: Local brain configured at %s" opencortex-executable-path))
|
||||
@@ -1,21 +1,120 @@
|
||||
#+TITLE: Emacs AI Configuration
|
||||
#+property: header-args :tangle ~/.emacs.d/modules/ai.el
|
||||
#+TITLE: AI Configuration
|
||||
#+PROPERTY: header-args :tangle yes
|
||||
|
||||
* ellama
|
||||
#+begin_src elisp
|
||||
* AI Settings
|
||||
|
||||
** Ellama
|
||||
|
||||
#+begin_src elisp :tangle yes
|
||||
;; YOU DON'T NEED NONE OF THIS CODE FOR SIMPLE INSTALL
|
||||
;; IT IS AN EXAMPLE OF CUSTOMIZATION.
|
||||
(use-package ellama
|
||||
:ensure t
|
||||
:bind ("C-c e" . ellama)
|
||||
:hook (org-ctrl-c-ctrl-c-final . ellama-chat-send-last-message)
|
||||
:init (setopt ellama-auto-scroll t)
|
||||
:config
|
||||
(ellama-context-header-line-global-mode +1)
|
||||
(ellama-session-header-line-global-mode +1)
|
||||
:init
|
||||
(require 'llm-openai)
|
||||
;; setup key bindings
|
||||
(setq ellama-keymap-prefix "C-c e")
|
||||
)
|
||||
#+end_src
|
||||
|
||||
* Providers
|
||||
#+begin_src elisp
|
||||
#+begin_src elisp :tangle yes
|
||||
(setopt ellama-providers
|
||||
'(
|
||||
;; Ollama Provider (added here with a name)
|
||||
("ollama" . (make-llm-ollama
|
||||
;; Consider a dedicated embedding model if gemma isn't ideal for it.
|
||||
:chat-model "gemma3:latest"
|
||||
:embedding-model "gemma3:latest" ; Or e.g., "nomic-embed-text"
|
||||
:default-chat-non-standard-params '(("num_ctx" . 8192))))
|
||||
|
||||
("openai" . (make-llm-openai
|
||||
:key (auth-source-pass-get "api-key" "www/openai.com/amr@gharbeia.net")
|
||||
:chat-model "gpt-4o"
|
||||
:embedding-model "text-embedding-3-large"))
|
||||
|
||||
("groq" . (make-llm-openai-compatible
|
||||
:url "https://api.groq.com/openai/v1"
|
||||
:key (auth-source-pass-get "api-key" "www/console.groq.com/groq@amr.gharbeia.net")
|
||||
;; Check Groq console for available models, these might change
|
||||
:chat-model "llama3-70b-8192" ; Example, verify on Groq
|
||||
:embedding-model "llama3-70b-8192")) ; Groq might not offer dedicated embedding models via this API
|
||||
))
|
||||
|
||||
;; --- Set Active Providers ---
|
||||
;; Choose your default provider from the list above by its name
|
||||
(setopt ellama-provider "ollama") ; Or "ollama", "openai", "groq"
|
||||
|
||||
;; You can specify different providers for different tasks if needed
|
||||
(setopt ellama-translation-provider "ollama")
|
||||
(setopt ellama-naming-provider "ollama")
|
||||
(setopt ellama-naming-scheme 'ellama-generate-name-by-llm)
|
||||
|
||||
(setq llm-debug t)
|
||||
;; Note: API keys should be handled via auth-source as seen in original config
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp
|
||||
(use-package ellama
|
||||
:ensure t
|
||||
:bind ("C-c e" . ellama)
|
||||
;; send last message in chat buffer with C-c C-c
|
||||
:hook (org-ctrl-c-ctrl-c-final . ellama-chat-send-last-message)
|
||||
:init (setopt ellama-auto-scroll t)
|
||||
:config
|
||||
;; show ellama context in header line in all buffers
|
||||
(ellama-context-header-line-global-mode +1)
|
||||
;; show ellama session id in header line in all buffers
|
||||
(ellama-session-header-line-global-mode +1))
|
||||
#+end_src
|
||||
|
||||
** GPTel
|
||||
|
||||
#+begin_src elisp :tangle yes
|
||||
(use-package gptel)
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp :tangle yes
|
||||
(setq gptel-api-key (auth-source-pass-get "api-key" "www/console.groq.com/groq@amr.gharbeia.net"))
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp :tangle yes
|
||||
(gptel-make-openai "Groq" ;Any name you want
|
||||
:host "api.groq.com"
|
||||
:endpoint "/openai/v1/chat/completions"
|
||||
:stream t
|
||||
:key (auth-source-pass-get "api-key" "www/console.groq.com/groq@amr.gharbeia.net") ;can be a function that returns the key
|
||||
:models '(llama-3.1-70b-versatile
|
||||
llama-3.1-8b-instant
|
||||
llama3-70b-8192
|
||||
llama3-8b-8192
|
||||
mixtral-8x7b-32768
|
||||
gemma-7b-it))
|
||||
#+end_src
|
||||
|
||||
** Elisa
|
||||
|
||||
#+begin_src elisp :tangle yes
|
||||
(use-package elisa
|
||||
:defer t
|
||||
:init
|
||||
(setopt elisa-limit 5)
|
||||
(require 'llm-ollama)
|
||||
(setopt elisa-embeddings-provider (make-llm-ollama :embedding-model "nomic-embed-text"))
|
||||
(setopt elisa-chat-provider (make-llm-ollama
|
||||
:chat-model "sskostyaev/openchat:8k-rag"
|
||||
:embedding-model "nomic-embed-text"))
|
||||
)
|
||||
#+end_src
|
||||
|
||||
** OpenCortex (Local Foundry)
|
||||
|
||||
#+begin_src elisp :tangle yes
|
||||
(use-package opencortex
|
||||
:straight nil
|
||||
:load-path "~/.local/share/opencortex/src"
|
||||
:commands (opencortex-connect opencortex-disconnect)
|
||||
:init
|
||||
(setq opencortex-host "127.0.0.1")
|
||||
(setq opencortex-port 9105)
|
||||
(setq opencortex-executable-path "~/.local/share/opencortex/bin/opencortex-server")
|
||||
:config
|
||||
(message "opencortex: Local brain configured at %s" opencortex-executable-path))
|
||||
#+end_src
|
||||
@@ -16,6 +16,36 @@
|
||||
(unless (file-directory-p (expand-file-name "~/.emacs.d/straight/versions")) (make-directory (expand-file-name "~/.emacs.d/straight/versions") t))
|
||||
(use-package org)
|
||||
|
||||
(use-package ef-themes
|
||||
:config
|
||||
;; If you like two specific themes and want to switch between them, you
|
||||
;; can specify them in `ef-themes-to-toggle' and then invoke the command
|
||||
;; `ef-themes-toggle'. All the themes are included in the variable
|
||||
;; `ef-themes-collection'.
|
||||
(setq ef-themes-to-toggle '(ef-summer ef-winter))
|
||||
|
||||
(setq ef-themes-headings ; read the manual's entry or the doc string
|
||||
'((0 variable-pitch light 1.9)
|
||||
(1 variable-pitch light 1.8)
|
||||
(2 variable-pitch regular 1.7)
|
||||
(3 variable-pitch regular 1.6)
|
||||
(4 variable-pitch regular 1.5)
|
||||
(5 variable-pitch 1.4) ; absence of weight means `bold'
|
||||
(6 variable-pitch 1.3)
|
||||
(7 variable-pitch 1.2)
|
||||
(t variable-pitch 1.1)))
|
||||
|
||||
;; They are nil by default...
|
||||
(setq ef-themes-mixed-fonts t)
|
||||
(setq ef-themes-variable-pitch-ui t)
|
||||
|
||||
;; Disable all other themes to avoid awkward blending:
|
||||
(mapc #'disable-theme custom-enabled-themes)
|
||||
|
||||
;; Load the theme of choice:
|
||||
(load-theme 'ef-winter :no-confirm)
|
||||
)
|
||||
|
||||
(setq custom-file (expand-file-name "custom.el" user-emacs-directory))
|
||||
(when (file-exists-p custom-file) (load custom-file))
|
||||
|
||||
@@ -49,7 +79,7 @@
|
||||
|
||||
(add-hook 'server-done-hook (lambda () (delete-frame)))
|
||||
|
||||
(desktop-save-mode t)
|
||||
;; (desktop-save-mode t)
|
||||
|
||||
(use-package password-store)
|
||||
|
||||
@@ -1,55 +1,199 @@
|
||||
#+TITLE: Emacs Core Configuration
|
||||
#+property: header-args :tangle ~/.emacs.d/modules/core.el
|
||||
#+TITLE: Core Emacs Configuration
|
||||
#+PROPERTY: header-args :tangle yes
|
||||
|
||||
* early-init.el
|
||||
For straight.el to pick up before package.el
|
||||
* Initialization Bootstrap
|
||||
|
||||
#+begin_src elisp :tangle ~/.emacs.d/early-init.el
|
||||
(setq package-enable-at-startup nil)
|
||||
#+end_src
|
||||
This section tangles directly to ~/.emacs to bootstrap the entire system.
|
||||
|
||||
* Straight.el Bootstrap
|
||||
#+begin_src elisp :tangle ~/.emacs
|
||||
;;; .emacs --- Global settings -*- lexical-binding: t; -*-
|
||||
|
||||
(setq gc-cons-threshold (* 500 1024 1024))
|
||||
(add-hook 'after-init-hook (lambda () (setq gc-cons-threshold (* 5 1024 1024))))
|
||||
|
||||
(setq straight-repository-branch "develop")
|
||||
(eval-and-compile
|
||||
(defvar bootstrap-version)
|
||||
(let ((bootstrap-file
|
||||
(expand-file-name "straight/repos/straight.el/bootstrap.el"
|
||||
(or (bound-and-true-p straight-base-dir)
|
||||
user-emacs-directory)))
|
||||
(bootstrap-version 7))
|
||||
(unless (file-exists-p bootstrap-file)
|
||||
(with-current-buffer
|
||||
(url-retrieve-synchronously "https://raw.githubusercontent.com/radian-software/straight.el/develop/install.el" 'silent 'inhibit-cookies)
|
||||
(goto-char (point-max))
|
||||
(eval-print-last-sexp)))
|
||||
(load bootstrap-file nil 'nomessage))
|
||||
|
||||
(straight-use-package 'use-package)
|
||||
)
|
||||
|
||||
(eval-and-compile
|
||||
(defvar bootstrap-version)
|
||||
(let ((bootstrap-file
|
||||
(expand-file-name "straight/repos/straight.el/bootstrap.el"
|
||||
(or (bound-and-true-p straight-base-dir)
|
||||
user-emacs-directory)))
|
||||
(bootstrap-version 7))
|
||||
(unless (file-exists-p bootstrap-file)
|
||||
(with-current-buffer
|
||||
(url-retrieve-synchronously "https://raw.githubusercontent.com/radian-software/straight.el/develop/install.el" 'silent 'inhibit-cookies)
|
||||
(goto-char (point-max))
|
||||
(eval-print-last-sexp)))
|
||||
(load bootstrap-file nil 'nomessage))
|
||||
|
||||
(straight-use-package 'use-package)
|
||||
(straight-use-package 'org))
|
||||
|
||||
(setq straight-use-package-by-default t)
|
||||
|
||||
(require 'ob-tangle)
|
||||
|
||||
;; Load the modular configuration starting from dotemacs.org
|
||||
(org-babel-load-file (expand-file-name "~/memex/projects/dotemacs/dotemacs.org"))
|
||||
|
||||
(provide '.emacs)
|
||||
#+end_src
|
||||
|
||||
* Server and Performance
|
||||
#+begin_src elisp :tangle ~/.emacs.d/early-init.el
|
||||
(require 'server)
|
||||
(unless (server-running-p) (server-start))
|
||||
(defvar server-max-buffers 100)
|
||||
#+end_src
|
||||
* Front matter
|
||||
|
||||
#+begin_src elisp
|
||||
;;; emacs-core.el --- Summary
|
||||
;;; Commentary:
|
||||
;;; Code:
|
||||
|
||||
;; -*- lexical-binding: t; -*-
|
||||
#+end_src
|
||||
|
||||
* Garbage collector
|
||||
|
||||
Increase threshold to 500 MB to ease startup
|
||||
#+begin_src elisp
|
||||
(setq gc-cons-threshold (* 500 1024 1024))
|
||||
#+end_src
|
||||
|
||||
Decrease threshold to 5 MB after init
|
||||
#+begin_src elisp
|
||||
(add-hook 'after-init-hook (lambda () (setq gc-cons-threshold (* 5 1024 1024))))
|
||||
#+end_src
|
||||
|
||||
* System Information
|
||||
#+begin_src elisp :tangle ~/.emacs.d/custom.el
|
||||
* Straight.el and use-package
|
||||
|
||||
Integrate use-package and straight
|
||||
#+begin_src elisp
|
||||
(setq straight-use-package-by-default t)
|
||||
(require 'use-package)
|
||||
(straight-use-package 'diminish)
|
||||
(require 'diminish)
|
||||
#+end_src
|
||||
|
||||
Make sure Org is installed (straight.el)
|
||||
#+begin_src elisp
|
||||
(unless (file-directory-p (expand-file-name "~/.emacs.d/straight/versions")) (make-directory (expand-file-name "~/.emacs.d/straight/versions") t))
|
||||
(use-package org)
|
||||
#+end_src
|
||||
|
||||
* UI and Themes
|
||||
|
||||
#+begin_src elisp
|
||||
(use-package ef-themes
|
||||
:config
|
||||
;; If you like two specific themes and want to switch between them, you
|
||||
;; can specify them in `ef-themes-to-toggle' and then invoke the command
|
||||
;; `ef-themes-toggle'. All the themes are included in the variable
|
||||
;; `ef-themes-collection'.
|
||||
(setq ef-themes-to-toggle '(ef-summer ef-winter))
|
||||
|
||||
(setq ef-themes-headings ; read the manual's entry or the doc string
|
||||
'((0 variable-pitch light 1.9)
|
||||
(1 variable-pitch light 1.8)
|
||||
(2 variable-pitch regular 1.7)
|
||||
(3 variable-pitch regular 1.6)
|
||||
(4 variable-pitch regular 1.5)
|
||||
(5 variable-pitch 1.4) ; absence of weight means `bold'
|
||||
(6 variable-pitch 1.3)
|
||||
(7 variable-pitch 1.2)
|
||||
(t variable-pitch 1.1)))
|
||||
|
||||
;; They are nil by default...
|
||||
(setq ef-themes-mixed-fonts t)
|
||||
(setq ef-themes-variable-pitch-ui t)
|
||||
|
||||
;; Disable all other themes to avoid awkward blending:
|
||||
(mapc #'disable-theme custom-enabled-themes)
|
||||
|
||||
;; Load the theme of choice:
|
||||
(load-theme 'ef-winter :no-confirm)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
* Custom file
|
||||
|
||||
#+begin_src elisp
|
||||
(setq custom-file (expand-file-name "custom.el" user-emacs-directory))
|
||||
(when (file-exists-p custom-file) (load custom-file))
|
||||
#+end_src
|
||||
|
||||
* System information
|
||||
|
||||
#+begin_src elisp
|
||||
(defvar my-laptop-p (equal (system-name) "lilitop"))
|
||||
(defvar my-server-p (and (equal (system-name) "localhost") (equal user-login-name "root")))
|
||||
(defvar my-phone-p (not (null (getenv "ANDROID_ROOT")))
|
||||
"If non-nil, GNU Emacs is running on Termux.")
|
||||
(when my-phone-p (defvar gnutls-algorithm-priority "NORMAL:-VERS-TLS1.3"))
|
||||
(global-auto-revert-mode)
|
||||
(savehist-mode)
|
||||
(desktop-save-mode t)
|
||||
(global-auto-revert-mode) ; simplifies syncing
|
||||
#+end_src
|
||||
|
||||
* Persistent history
|
||||
|
||||
#+begin_src elisp
|
||||
(savehist-mode)
|
||||
#+end_src
|
||||
|
||||
* Disable Syntax Checkers (Diagnostic)
|
||||
|
||||
#+begin_src elisp
|
||||
(when (fboundp 'flycheck-mode)
|
||||
(setq flycheck-global-modes nil)
|
||||
(global-flycheck-mode -1))
|
||||
(when (fboundp 'flymake-mode)
|
||||
(setq help-at-pt-display-when-idle t)
|
||||
;; Disable flymake in all buffers
|
||||
(add-hook 'find-file-hook (lambda () (flymake-mode -1))))
|
||||
#+end_src
|
||||
|
||||
* Backup and versioning
|
||||
|
||||
#+begin_src emacs-lisp
|
||||
(use-package magit)
|
||||
#+end_src
|
||||
|
||||
* Personal information
|
||||
|
||||
#+begin_src elisp
|
||||
(setq user-full-name "Amr Gharbeia")
|
||||
(defvar email-address "amr@gharbeia.net")
|
||||
(defvar calendar-latitude 39.0)
|
||||
(defvar calendar-longitude -77.1)
|
||||
(defvar calendar-location-name "Washington, DC")
|
||||
(defvar calendar-time-zone -300)
|
||||
(defvar calendar-standard-time-zone-name "EST")
|
||||
(defvar calendar-daylight-time-zone-name "EDT")
|
||||
#+end_src
|
||||
|
||||
* Saving Emacs Sessions
|
||||
|
||||
Close frame when done
|
||||
#+begin_src elisp
|
||||
(add-hook 'server-done-hook (lambda () (delete-frame)))
|
||||
#+end_src
|
||||
|
||||
Save desktop session
|
||||
#+begin_src elisp
|
||||
;; (desktop-save-mode t)
|
||||
#+end_src
|
||||
|
||||
* Security
|
||||
|
||||
#+begin_src elisp
|
||||
(use-package password-store)
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp
|
||||
(use-package auth-source
|
||||
:config (auth-source-pass-enable)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
* End matter
|
||||
|
||||
#+begin_src elisp
|
||||
(provide 'emacs-core)
|
||||
;;; emacs-core.el ends here
|
||||
#+end_src
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
(concat org-directory "/inbox.org")
|
||||
(concat org-directory "/gtd.org")
|
||||
(concat org-directory "/org-gtd-tasks.org")
|
||||
(concat org-directory "/projects/passepartout/TODO.org")
|
||||
)
|
||||
)
|
||||
|
||||
@@ -1,30 +1,113 @@
|
||||
#+TITLE: Emacs GTD Configuration
|
||||
#+property: header-args :tangle ~/.emacs.d/modules/gtd.el
|
||||
#+TITLE: GTD & Agenda Configuration
|
||||
#+PROPERTY: header-args :tangle yes
|
||||
|
||||
* org-gtd
|
||||
* Agenda
|
||||
|
||||
Basic agenda settings
|
||||
#+begin_src elisp
|
||||
(use-package org-gtd
|
||||
:defer t
|
||||
:init (setq org-gtd-update-ack "3.0.0")
|
||||
:after org
|
||||
:config
|
||||
(setq org-edna-use-inheritance t)
|
||||
(org-edna-mode)
|
||||
:bind (
|
||||
("C-c d c" . org-gtd-capture)
|
||||
("C-c d e" . org-gtd-engage)
|
||||
("C-c d p" . org-gtd-process-inbox)
|
||||
:map org-gtd-clarify-map
|
||||
("C-c c" . org-gtd-organize)
|
||||
)
|
||||
)
|
||||
(setq org-deadline-warning-days 7)
|
||||
(setq org-agenda-skip-additional-timestamps-same-entry t)
|
||||
(setq org-agenda-span 'fortnight)
|
||||
(setq org-agenda-tags-column 'auto)
|
||||
(setq org-agenda-skip-scheduled-if-deadline-is-shown t)
|
||||
#+end_src
|
||||
|
||||
* GTD Directory and Areas
|
||||
Agenda files
|
||||
#+begin_src elisp
|
||||
(defvar org-gtd-directory org-directory)
|
||||
(defvar org-gtd-organize-hooks '(org-gtd-set-area-of-focus))
|
||||
(defvar org-gtd-areas-of-focus '(
|
||||
(setq org-agenda-files (list
|
||||
(concat org-directory "/inbox.org")
|
||||
(concat org-directory "/gtd.org")
|
||||
(concat org-directory "/org-gtd-tasks.org")
|
||||
(concat org-directory "/projects/passepartout/TODO.org")
|
||||
)
|
||||
)
|
||||
|
||||
#+end_src
|
||||
|
||||
Better agenda views
|
||||
#+begin_src elisp :tangle yes
|
||||
(use-package org-super-agenda)
|
||||
#+end_src
|
||||
|
||||
* To-do
|
||||
|
||||
Basic todo
|
||||
#+begin_src elisp
|
||||
(setq org-todo-keywords
|
||||
'(
|
||||
(sequence "TODO(t)" "NEXT(n)" "WAIT(w@/!)" "|" "DONE(d!)" "CNCL(c@)")
|
||||
)
|
||||
)
|
||||
|
||||
(setq org-todo-keyword-faces
|
||||
'(
|
||||
("TODO" :foreground "red" :weight bold)
|
||||
("NEXT" :foreground "red" :weight bold)
|
||||
("WAIT" :foreground "yellow" :weight bold)
|
||||
("DONE" :foreground "green" :weight bold)
|
||||
("CNCL" :foreground "blue" :weight bold)
|
||||
)
|
||||
)
|
||||
|
||||
(setq org-enforce-todo-dependencies t)
|
||||
(setq org-tags-exclude-from-inheritance '("crypt" "!private"))
|
||||
#+end_src
|
||||
|
||||
Switch entry to 'DONE' when all subentries are done
|
||||
#+begin_src elisp
|
||||
(defun org-summary-todo (n-done n-not-done)
|
||||
"Switch entry to 'DONE' when all subentries are done, to 'TODO' otherwise.
|
||||
Uses N-DONE and N-NOT-DONE"
|
||||
(let (org-log-done org-log-states) ; turn off logging
|
||||
(org-todo (if (= n-not-done 0) "DONE" "TODO")
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
;; (add-hook 'org-after-todo-statistics-hook #'org-summary-todo)
|
||||
#+end_src
|
||||
|
||||
* Getting Things Done (GTD)
|
||||
|
||||
#+begin_src elisp
|
||||
(use-package f)
|
||||
(use-package dash)
|
||||
(use-package s)
|
||||
(use-package org-edna
|
||||
:config
|
||||
(setq org-edna-use-inheritance t)
|
||||
(org-edna-mode))
|
||||
|
||||
(use-package org-gtd
|
||||
:straight (org-gtd :type git :host github :repo "Trevoke/org-gtd.el")
|
||||
:demand t
|
||||
:init (setq org-gtd-update-ack "4.0.0")
|
||||
:config
|
||||
(setq org-gtd-keyword-mapping
|
||||
'((todo . "TODO")
|
||||
(next . "NEXT")
|
||||
(wait . "WAIT")
|
||||
(done . "DONE")
|
||||
(canceled . "CNCL")))
|
||||
(setq org-gtd-custom-node-paths
|
||||
(list (list "Actionable" (expand-file-name "~/memex/gtd.org") "Actions")
|
||||
(list "Legacy" (expand-file-name "~/memex/org-gtd-tasks.org") "Actions")
|
||||
(list "Projects" (expand-file-name "~/memex/gtd.org") "Projects")
|
||||
(list "Incubate" (expand-file-name "~/memex/gtd.org") "Incubate")))
|
||||
(org-gtd-mode)
|
||||
)
|
||||
|
||||
(global-set-key (kbd "C-c d c") #'org-gtd-capture)
|
||||
(global-set-key (kbd "C-c d e") #'org-gtd-engage)
|
||||
(global-set-key (kbd "C-c d p") #'org-gtd-process-inbox)
|
||||
(with-eval-after-load 'org-gtd
|
||||
(define-key org-gtd-clarify-map (kbd "C-c c") #'org-gtd-organize))
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp
|
||||
(setq org-gtd-directory org-directory)
|
||||
(setq org-gtd-organize-hooks '(org-gtd-set-area-of-focus))
|
||||
(setq org-gtd-areas-of-focus '(
|
||||
"Atoms"
|
||||
"Bits"
|
||||
"Cells"
|
||||
@@ -44,5 +127,41 @@
|
||||
"Egypt"
|
||||
)
|
||||
)
|
||||
(defvar org-gtd-clarify-show-horizons 'right)
|
||||
(setq org-gtd-clarify-show-horizons 'right)
|
||||
#+end_src
|
||||
|
||||
Logging
|
||||
#+begin_src elisp
|
||||
(setq org-log-into-drawer "LOGBOOK")
|
||||
#+end_src
|
||||
|
||||
Clocking work in drawer
|
||||
#+begin_src elisp :tangle yes
|
||||
(setq org-clock-into-drawer t)
|
||||
#+end_src
|
||||
|
||||
Habits
|
||||
#+begin_src elisp :tangle yes
|
||||
(setq org-habit-graph-column 80)
|
||||
(setq org-habit-show-habits-only-for-today nil)
|
||||
#+end_src
|
||||
|
||||
* Refile
|
||||
|
||||
org-refile targets
|
||||
#+begin_src elisp
|
||||
(setq org-refile-targets '((nil :maxlevel . 9)
|
||||
(org-agenda-files :maxlevel . 9)
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
Set type of refile targets completion
|
||||
#+begin_src elisp
|
||||
(setq org-outline-path-complete-in-steps nil)
|
||||
#+end_src
|
||||
|
||||
Allow refiling to new parents created on the go after confirmation
|
||||
#+begin_src elisp
|
||||
(setq org-refile-allow-creating-parent-nodes 'confirm)
|
||||
#+end_src
|
||||
@@ -21,6 +21,9 @@
|
||||
(setq org-noter-notes-search-path (list (expand-file-name "~/memex/library/books")))
|
||||
(setq org-noter-default-notes-file-names '("books.org")))
|
||||
|
||||
(setq org-noter-notes-search-path (list (concat org-directory "/library/books")))
|
||||
(setq org-noter-default-notes-file-names '("books.org"))
|
||||
|
||||
(use-package org-noter-pdftools
|
||||
:after org-noter
|
||||
:config
|
||||
@@ -62,3 +65,5 @@ With a prefix ARG, remove start location."
|
||||
)
|
||||
|
||||
(use-package helm-bibtex)
|
||||
|
||||
(setq bibtex-completion-bibliography '("~/bibliography/zotero.bib"))
|
||||
@@ -1,39 +1,101 @@
|
||||
#+TITLE: Emacs Media and E-books Configuration
|
||||
#+property: header-args :tangle ~/.emacs.d/modules/media.el
|
||||
#+TITLE: Media and Books Configuration
|
||||
#+PROPERTY: header-args :tangle yes
|
||||
|
||||
* Read ebooks (calibredb)
|
||||
|
||||
* calibredb
|
||||
#+begin_src elisp
|
||||
(use-package calibredb
|
||||
:defer t
|
||||
:config
|
||||
(setq calibredb-format-all-the-icons t)
|
||||
(setq calibredb-format-icons-in-terminal t)
|
||||
)
|
||||
(setq calibredb-format-all-the-icons t)
|
||||
(setq calibredb-format-icons-in-terminal t))
|
||||
#+end_src
|
||||
|
||||
(defvar calibredb-root-dir (concat (getenv "HOME") "/library/books"))
|
||||
#+begin_src elisp
|
||||
(defvar calibredb-root-dir (expand-file-name "~/memex/library/books"))
|
||||
(defvar calibredb-db-dir (expand-file-name "metadata.db" calibredb-root-dir))
|
||||
(defvar calibredb-id-width 6)
|
||||
(defvar calibredb-title-width 100)
|
||||
(defvar calibredb-author-width 20)
|
||||
#+end_src
|
||||
|
||||
* nov.el (EPUB Viewer)
|
||||
* PDF Tools
|
||||
|
||||
#+begin_src elisp
|
||||
(use-package pdf-tools
|
||||
:mode ("\\.pdf\\'" . pdf-view-mode)
|
||||
:config
|
||||
(pdf-tools-install :no-query)
|
||||
(setq-default pdf-view-display-size 'fit-page)
|
||||
(setq pdf-annot-activate-created-annotations t))
|
||||
#+end_src
|
||||
|
||||
* Annotate PDFs and EPUBs (org-noter)
|
||||
|
||||
#+begin_src elisp
|
||||
(use-package org-noter
|
||||
:config
|
||||
(setq org-noter-notes-search-path (list (expand-file-name "~/memex/library/books")))
|
||||
(setq org-noter-default-notes-file-names '("books.org")))
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp :tangle yes
|
||||
(setq org-noter-notes-search-path (list (concat org-directory "/library/books")))
|
||||
(setq org-noter-default-notes-file-names '("books.org"))
|
||||
#+end_src
|
||||
|
||||
* Link PDFs (org-noter-pdftools)
|
||||
|
||||
#+begin_src elisp
|
||||
(use-package org-noter-pdftools
|
||||
:after org-noter
|
||||
:config
|
||||
;; Add a function to ensure precise note is inserted
|
||||
(defun org-noter-pdftools-insert-precise-note (&optional toggle-no-questions)
|
||||
(interactive "P")
|
||||
(org-noter--with-valid-session
|
||||
(let ((org-noter-insert-note-no-questions (if toggle-no-questions
|
||||
(not org-noter-insert-note-no-questions)
|
||||
org-noter-insert-note-no-questions))
|
||||
(org-pdftools-use-isearch-link t)
|
||||
(org-pdftools-use-freepointer-annot t))
|
||||
(org-noter-insert-note (org-noter--get-precise-info)))))
|
||||
|
||||
;; fix https://github.com/weirdNox/org-noter/pull/93/commits/f8349ae7575e599f375de1be6be2d0d5de4e6cbf
|
||||
(defun org-noter-set-start-location (&optional arg)
|
||||
"When opening a session with this document, go to the current location.
|
||||
With a prefix ARG, remove start location."
|
||||
(interactive "P")
|
||||
(org-noter--with-valid-session
|
||||
(let ((inhibit-read-only t)
|
||||
(ast (org-noter--parse-root))
|
||||
(location (org-noter--doc-approx-location (when (called-interactively-p 'any) 'interactive))))
|
||||
(with-current-buffer (org-noter--session-notes-buffer session)
|
||||
(org-with-wide-buffer
|
||||
(goto-char (org-element-property :begin ast))
|
||||
(if arg
|
||||
(org-entry-delete nil org-noter-property-note-location)
|
||||
(org-entry-put nil org-noter-property-note-location
|
||||
(org-noter--pretty-print-location location))))))))
|
||||
(with-eval-after-load 'pdf-annot
|
||||
(add-hook 'pdf-annot-activate-handler-functions #'org-noter-pdftools-jump-to-note)
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
* View EPUBs (nov.el)
|
||||
|
||||
#+begin_src elisp :tangle yes
|
||||
(use-package nov
|
||||
:config
|
||||
(add-to-list 'auto-mode-alist '("\\.epub\\'" . nov-mode))
|
||||
)
|
||||
#+end_src
|
||||
|
||||
* org-noter and PDF Tools
|
||||
#+begin_src elisp
|
||||
(use-package org-noter)
|
||||
|
||||
(use-package org-noter-pdftools
|
||||
:after org-noter
|
||||
:config
|
||||
(with-eval-after-load 'pdf-annot
|
||||
(add-hook 'pdf-annot-activate-handler-functions #'org-noter-pdftools-jump-to-note)
|
||||
)
|
||||
)
|
||||
* Zotero (helm-bibtex)
|
||||
#+begin_src elisp :tangle yes
|
||||
(use-package helm-bibtex)
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp :tangle yes
|
||||
(setq bibtex-completion-bibliography '("~/bibliography/zotero.bib"))
|
||||
#+end_src
|
||||
@@ -68,6 +68,24 @@
|
||||
(require 'org-protocol)
|
||||
(setq org-protocol-default-buffer-for-file-links "*scratch*") ; fixes 'no buffers remain to edit error for org-protocol capturer
|
||||
|
||||
(setq org-capture-templates '(
|
||||
("p" "Protocol"
|
||||
entry
|
||||
(file "inbox.org")
|
||||
"* %^{Title}\nSource: %u, %c\n #+BEGIN_QUOTE\n%i\n#+END_QUOTE\n\n\n%?"
|
||||
)
|
||||
("L" "Protocol Link"
|
||||
entry
|
||||
(file "inbox.org")
|
||||
"* %? [[%:link][%:description]]\n:PROPERTIES:\n:TITLE: %:description\n:URI: %:link\n:CREATED: %U\n:END:"
|
||||
:prepend nil
|
||||
:empty-lines 1
|
||||
:created t
|
||||
:kill-buffer t
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
(setq org-protocol-default-template-key "L")
|
||||
|
||||
(defun my/org-convert-orgzly-to-org-protocol ()
|
||||
@@ -1,7 +1,10 @@
|
||||
#+TITLE: Emacs Org-mode Configuration
|
||||
#+property: header-args :tangle ~/.emacs.d/modules/org.el
|
||||
#+TITLE: Org Mode Configuration
|
||||
#+PROPERTY: header-args :tangle yes
|
||||
|
||||
* Org Mode
|
||||
|
||||
** Basic setup
|
||||
|
||||
* Core Org Setup
|
||||
#+begin_src elisp
|
||||
(use-package org
|
||||
:config
|
||||
@@ -11,41 +14,130 @@
|
||||
("C-c c" . org-capture)
|
||||
:map org-mode-map)
|
||||
)
|
||||
(defvar org-directory (concat (getenv "HOME") "/org/"))
|
||||
#+end_src
|
||||
|
||||
* Agenda
|
||||
#+begin_src elisp
|
||||
(setq org-deadline-warning-days 7)
|
||||
(setq org-agenda-skip-additional-timestamps-same-entry t)
|
||||
(setq org-agenda-span 'fortnight)
|
||||
(setq org-agenda-tags-column 'auto)
|
||||
(setq org-agenda-skip-scheduled-if-deadline-is-shown t)
|
||||
(setq org-agenda-files (list
|
||||
(concat org-directory "/0_inbox/inbox.org")
|
||||
(concat org-directory "/0_inbox/org-gtd-tasks.org")
|
||||
)
|
||||
)
|
||||
(setq org-directory (expand-file-name "~/memex/"))
|
||||
#+end_src
|
||||
|
||||
* Capture and Protocol
|
||||
** Looks
|
||||
|
||||
Basic
|
||||
#+begin_src elisp
|
||||
(defvar org-pretty-entities t) ; Improve org mode looks
|
||||
(defvar org-hide-emphasis-markers t) ; Hide emphasis markup
|
||||
(defvar org-num-mode nil)
|
||||
(defvar org-startup-folded 'shw2levels)
|
||||
#+end_src
|
||||
|
||||
Indentation of headers
|
||||
#+begin_src elisp
|
||||
(defvar org-startup-indented t) ; Indent org heirarchy
|
||||
(defvar org-adapt-indentation t)
|
||||
(defvar org-hide-leading-stars t) ; Minimal Outline
|
||||
(defvar org-odd-levels-only nil)
|
||||
#+end_src
|
||||
|
||||
Indentation of lists
|
||||
#+begin_src elisp
|
||||
(setq org-list-demote-modify-bullet t)
|
||||
#+end_src
|
||||
|
||||
Org-modern
|
||||
#+begin_src elisp
|
||||
(use-package org-modern
|
||||
:ensure t
|
||||
:config
|
||||
;; Choose some fonts
|
||||
(set-face-attribute 'default nil :family "sans-serif")
|
||||
(set-face-attribute 'variable-pitch nil :family "sans-serif")
|
||||
(set-face-attribute 'org-modern-symbol nil :family "Iosevka")
|
||||
|
||||
;; Edit settings
|
||||
(defvar org-auto-align-tags nil)
|
||||
(defvar org-tags-column 0)
|
||||
(defvar org-catch-invisible-edits 'show-and-error)
|
||||
(defvar org-special-ctrl-a/e t)
|
||||
(defvar org-insert-heading-respect-content t)
|
||||
|
||||
;; Org styling, hide markup etc.
|
||||
(defvar org-hide-emphasis-markers t)
|
||||
(defvar org-pretty-entities t)
|
||||
|
||||
;; Agenda styling
|
||||
(defvar org-agenda-tags-column 0)
|
||||
(defvar org-agenda-block-separator ?─)
|
||||
(defvar org-agenda-time-grid
|
||||
'((daily today require-timed)
|
||||
(800 1000 1200 1400 1600 1800 2000)
|
||||
" ┄┄┄┄┄ " "┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄"))
|
||||
(defvar org-agenda-current-time-string
|
||||
"◀── now ─────────────────────────────────────────────────")
|
||||
|
||||
;; Ellipsis styling
|
||||
(defvar org-ellipsis "…")
|
||||
(set-face-attribute 'org-ellipsis nil :inherit 'default :box nil)
|
||||
|
||||
(global-org-modern-mode)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
Highlight Sourcecode Syntax
|
||||
#+begin_src elisp
|
||||
(setq org-src-fontify-natively t)
|
||||
(setq org-src-tab-acts-natively t)
|
||||
#+end_src
|
||||
|
||||
Images
|
||||
#+begin_src elisp
|
||||
(setq org-startup-with-inline-images t)
|
||||
(setq org-image-actual-width '(300))
|
||||
#+end_src
|
||||
|
||||
** Capture
|
||||
|
||||
#+begin_src elisp
|
||||
(defvar org-default-notes-file (concat org-directory "inbox.org"))
|
||||
#+end_src
|
||||
|
||||
*** Org-protocol
|
||||
|
||||
Linux configuration
|
||||
#+begin_src bash :tangle yes
|
||||
[Desktop Entry]
|
||||
Name=org-protocol
|
||||
Comment=Intercept calls from emacsclient to trigger custom actions
|
||||
Categories=Other;
|
||||
Keywords=org-protocol;
|
||||
Icon=emacs
|
||||
Type=Application
|
||||
Exec=emacsclient -- %u
|
||||
Terminal=false
|
||||
StartupWMClass=Emacs
|
||||
MimeType=x-scheme-handler/org-protocol;
|
||||
#+end_src
|
||||
|
||||
#+begin_src bash :tangle yes
|
||||
update-desktop-database ~/.local/share/applications/
|
||||
#+end_src
|
||||
|
||||
Basic configuration
|
||||
#+begin_src elisp
|
||||
(require 'org-protocol)
|
||||
(setq org-protocol-default-buffer-for-file-links "*scratch*")
|
||||
(defvar org-default-notes-file (concat org-directory "/0_inbox/inbox.org"))
|
||||
(setq org-protocol-default-template-key "L")
|
||||
(setq org-protocol-default-buffer-for-file-links "*scratch*") ; fixes 'no buffers remain to edit error for org-protocol capturer
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp :tangle ~/.emacs.d/custom.el
|
||||
(defvar org-capture-templates '(
|
||||
Org-protocol templates
|
||||
#+begin_src elisp :tangle yes
|
||||
(setq org-capture-templates '(
|
||||
("p" "Protocol"
|
||||
entry
|
||||
(file "0_inbox/inbox.org")
|
||||
(file "inbox.org")
|
||||
"* %^{Title}\nSource: %u, %c\n #+BEGIN_QUOTE\n%i\n#+END_QUOTE\n\n\n%?"
|
||||
)
|
||||
("L" "Protocol Link"
|
||||
entry
|
||||
(file "0_inbox/inbox.org")
|
||||
(file "inbox.org")
|
||||
"* %? [[%:link][%:description]]\n:PROPERTIES:\n:TITLE: %:description\n:URI: %:link\n:CREATED: %U\n:END:"
|
||||
:prepend nil
|
||||
:empty-lines 1
|
||||
@@ -56,14 +148,86 @@
|
||||
)
|
||||
#+end_src
|
||||
|
||||
* TODO Settings
|
||||
#+begin_src elisp
|
||||
(setq org-todo-keywords
|
||||
'(
|
||||
(sequence "TODO(t)" "NEXT(n)" "|" "DONE(d!)")
|
||||
(sequence "WAIT(w@/!)" "|" "CNCL(c@)")
|
||||
)
|
||||
)
|
||||
(setq org-enforce-todo-dependencies t)
|
||||
(setq org-log-into-drawer "LOGBOOK")
|
||||
(setq org-protocol-default-template-key "L")
|
||||
#+end_src
|
||||
|
||||
Convert Orgzly captures to org-protocol captures standard
|
||||
#+begin_src elisp
|
||||
(defun my/org-convert-orgzly-to-org-protocol ()
|
||||
"Reformat Orgzly bookmark at point to org-protocol bookmark."
|
||||
(interactive)
|
||||
(when (org-at-heading-p)
|
||||
(let ((headline (nth 4 (org-heading-components))))
|
||||
;; Find and store the link. Delete the link line.
|
||||
(search-forward-regexp "^https?://\\S-*" nil t)
|
||||
(let ((link (match-string 0)))
|
||||
(beginning-of-line)
|
||||
(kill-line)
|
||||
;; Delete any trailing blank spaces
|
||||
(org-back-to-heading)
|
||||
(end-of-line)
|
||||
(when (not (org-on-heading-p))
|
||||
(delete-char 1)
|
||||
)
|
||||
;; Set new headline
|
||||
(goto-char (org-entry-beginning-position))
|
||||
(org-edit-headline (format "[[%s][%s]]" link headline))
|
||||
;; Set new properties
|
||||
(org-set-property "TITLE" headline)
|
||||
(org-set-property "URI" link)
|
||||
(message "Reformatted Orgzly bookmark at point to org-protocol bookmark")
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
** Exporting
|
||||
|
||||
#+begin_src elisp :tangle yes
|
||||
(setq org-export-with-smart-quotes t)
|
||||
(setq org-export-backends '(beamer html latex md))
|
||||
#+end_src
|
||||
|
||||
Export to EPUB
|
||||
#+begin_src elisp :tangle yes
|
||||
(use-package ox-epub)
|
||||
#+end_src
|
||||
|
||||
** org-attach
|
||||
|
||||
#+begin_src elisp
|
||||
(setq org-attach-id-dir (concat org-directory "/library"))
|
||||
#+end_src
|
||||
|
||||
** Enable shell scripting support in org-babel
|
||||
|
||||
#+begin_src elisp
|
||||
(defvar org-babel-do-load-languages 'org-babel-load-languages '((shell . t)))
|
||||
#+end_src
|
||||
|
||||
** Insert org-mode links from clipboard
|
||||
#+begin_src elisp :tangle yes
|
||||
(use-package org-cliplink
|
||||
:bind
|
||||
(("C-x p i" . org-cliplink))
|
||||
)
|
||||
#+end_src
|
||||
|
||||
** Deft
|
||||
#+begin_src elisp :tangle yes
|
||||
(use-package deft
|
||||
:commands (deft)
|
||||
:init
|
||||
(defvar deft-extensions '("org"))
|
||||
(defvar deft-recursive nil)
|
||||
(defvar deft-use-filename-as-title t)
|
||||
:config
|
||||
(defvar deft-directory org-directory)
|
||||
(defvar deft-recursive t)
|
||||
(defvar deft-strip-summary-regexp ":PROPERTIES:\n\\(.+\n\\)+:END:\n")
|
||||
(defvar deft-use-filename-as-title t)
|
||||
:bind ("C-c n d" . deft)
|
||||
)
|
||||
#+end_src
|
||||
@@ -1,42 +1,73 @@
|
||||
#+TITLE: Emacs Org-roam Configuration
|
||||
#+property: header-args :tangle ~/.emacs.d/modules/roam.el
|
||||
#+TITLE: Org-Roam Configuration
|
||||
#+PROPERTY: header-args :tangle yes
|
||||
|
||||
* Org-roam
|
||||
|
||||
** Basic org-roam setup
|
||||
|
||||
* org-roam Setup
|
||||
#+begin_src elisp
|
||||
(use-package org-roam
|
||||
:init (setq org-roam-v2-ack t)
|
||||
:after org
|
||||
:config
|
||||
(org-roam-db-autosync-enable)
|
||||
(require 'org-roam-dailies)
|
||||
(setq org-roam-mode-sections
|
||||
(list #'org-roam-backlinks-section
|
||||
#'org-roam-reflinks-section
|
||||
#'org-roam-unlinked-references-section
|
||||
)
|
||||
)
|
||||
:bind (
|
||||
("C-c n f" . org-roam-node-find)
|
||||
("C-c n g" . org-roam-graph)
|
||||
("C-c n r" . org-roam-node-random)
|
||||
("C-c n h" . org-roam-node-convert-headline)
|
||||
("C-c n i" . org-roam-node-insert)
|
||||
("C-c n o" . org-id-get-create)
|
||||
("C-c n t" . org-roam-tag-add)
|
||||
("C-c n a" . org-roam-alias-add)
|
||||
("C-c n l" . org-roam-buffer-display-dedicated)
|
||||
)
|
||||
)
|
||||
(use-package org-roam
|
||||
:init (setq org-roam-v2-ack t) ;; Acknowledge V2 upgrade
|
||||
:after org
|
||||
:config
|
||||
(org-roam-db-autosync-enable)
|
||||
(require 'org-roam-dailies)
|
||||
:bind (
|
||||
("C-c n f" . org-roam-node-find)
|
||||
("C-c n g" . org-roam-graph)
|
||||
("C-c n r" . org-roam-node-random)
|
||||
("C-c n h" . org-roam-node-convert-headline)
|
||||
("C-c n i" . org-roam-node-insert)
|
||||
("C-c n o" . org-id-get-create)
|
||||
("C-c n t" . org-roam-tag-add)
|
||||
("C-c n a" . org-roam-alias-add)
|
||||
("C-c n l" . org-roam-buffer-display-dedicated)
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
* Directories
|
||||
#+begin_src elisp
|
||||
(setq org-roam-directory (concat org-directory "/1_thinking"))
|
||||
(setq org-roam-dailies-directory (concat org-directory "/0_inbox/daily"))
|
||||
(setq org-roam-directory (expand-file-name (concat org-directory "notes")))
|
||||
(setq org-roam-dailies-directory (expand-file-name (concat org-directory "daily")))
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp :tangle yes
|
||||
(use-package sqlite3)
|
||||
(require 'sqlite3)
|
||||
#+end_src
|
||||
|
||||
Include subdirectories in org-roam
|
||||
#+begin_src elisp
|
||||
(setq org-roam-file-exclude-regexp "^[.][.]?/")
|
||||
#+end_src
|
||||
|
||||
* Capture Templates
|
||||
** Display in org-roam-buffer
|
||||
#+begin_src elisp :tangle yes
|
||||
(setq org-roam-mode-sections
|
||||
(list #'org-roam-backlinks-section
|
||||
#'org-roam-reflinks-section
|
||||
#'org-roam-unlinked-references-section
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
** Filter org-roam nodes find by tag
|
||||
|
||||
#+begin_src elisp :tangle yes
|
||||
(defun my/org-roam-node-has-tag (node tag)
|
||||
"Filter function to check if the given NODE has the specified TAG."
|
||||
(member tag (org-roam-node-tags node))
|
||||
)
|
||||
|
||||
(defun my/org-roam-node-find-by-tag ()
|
||||
"Find and open an Org-roam node based on a specified tag."
|
||||
(interactive)
|
||||
(let ((tag (read-string "Enter tag: ")))
|
||||
(org-roam-node-find nil nil (lambda (node) (my/org-roam-node-has-tag node tag))))
|
||||
)
|
||||
#+end_src
|
||||
|
||||
** org-roam-capture templates
|
||||
#+begin_src elisp
|
||||
(setq org-roam-capture-templates
|
||||
'(
|
||||
@@ -48,6 +79,7 @@
|
||||
:immediate-finish t
|
||||
:unnarrowed t
|
||||
)
|
||||
|
||||
("h" "hugo post" plain
|
||||
"%?"
|
||||
:target (file+head "posts/${slug}.org"
|
||||
@@ -55,6 +87,7 @@
|
||||
:immediate-finish t
|
||||
:unnarrowed t
|
||||
)
|
||||
|
||||
("p" "person" plain
|
||||
"%?"
|
||||
:if-new (file+head "people/${slug}.org"
|
||||
@@ -64,7 +97,9 @@
|
||||
)
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp
|
||||
(setq org-roam-dailies-capture-templates
|
||||
'(
|
||||
("d" "daily" plain
|
||||
@@ -75,3 +110,31 @@
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
** Move org header to org-roam-daily
|
||||
|
||||
#+begin_src elisp :tangle yes
|
||||
(defun my/org-move-entry-to-daily-notes ()
|
||||
"Move the current org-mode headline to the daily notes file based on its :CREATED: property."
|
||||
(interactive)
|
||||
(let*
|
||||
(
|
||||
(created-prop (org-entry-get nil "CREATED"))
|
||||
(created-date (when created-prop
|
||||
(org-parse-time-string created-prop)))
|
||||
(year (nth 5 created-date)) ; Extract year (6th element)
|
||||
(month (nth 4 created-date)) ; Extract month (5th element)
|
||||
(day (nth 3 created-date)) ; Extract day (4th element)
|
||||
(target-date (format "%04d-%02d-%02d" year month day)) ; Format date string
|
||||
(target-file (org-roam-dailies-goto target-date))
|
||||
)
|
||||
(when target-file
|
||||
(org-cut-subtree)
|
||||
(find-file target-file)
|
||||
(goto-char (point-max))
|
||||
(unless (bolp) (newline))
|
||||
(org-paste-subtree)
|
||||
)
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
@@ -1,18 +1,86 @@
|
||||
#+TITLE: Emacs Shell Configuration
|
||||
#+property: header-args :tangle ~/.emacs.d/modules/shell.el
|
||||
#+TITLE: Shell Configuration
|
||||
#+PROPERTY: header-args :tangle yes
|
||||
|
||||
* Shell
|
||||
|
||||
** Bash completion
|
||||
|
||||
* Bash Completion
|
||||
#+begin_src elisp
|
||||
(use-package bash-completion
|
||||
:config
|
||||
(require 'bash-completion)
|
||||
(bash-completion-setup)
|
||||
)
|
||||
|
||||
(defvar shell-dynamic-complete-functions t)
|
||||
#+end_src
|
||||
|
||||
* Frame Management
|
||||
#+begin_src elisp
|
||||
(add-hook 'server-done-hook (lambda () (delete-frame)))
|
||||
(defvar shell-dynamic-complete-functions t)
|
||||
#+end_src
|
||||
|
||||
** Eshell
|
||||
|
||||
Add programmable bash completion to Emacs shell-mode
|
||||
#+begin_src elisp :tangle yes
|
||||
(require 'bash-completion)
|
||||
(add-hook 'eshell-mode-hook
|
||||
(lambda ()
|
||||
(add-hook 'completion-at-point-functions
|
||||
'bash-completion-capf-nonexclusive nil t
|
||||
)
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
Use colors in eshell
|
||||
#+begin_src elisp :tangle yes
|
||||
(use-package xterm-color
|
||||
:commands (xterm-color-filter)
|
||||
)
|
||||
|
||||
(use-package eshell
|
||||
:after xterm-color
|
||||
:config
|
||||
(define-key eshell-hist-mode-map (kbd "M-r") #'consult-history)
|
||||
(add-hook 'eshell-mode-hook
|
||||
(lambda ()
|
||||
(setenv "TERM" "xterm-256color")))
|
||||
(add-hook 'eshell-before-prompt-hook (setq xterm-color-preserve-properties t))
|
||||
(add-to-list 'eshell-preoutput-filter-functions 'xterm-color-filter)
|
||||
(setq eshell-output-filter-functions
|
||||
(remove 'eshell-handle-ansi-color eshell-output-filter-functions)
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
Eshell completion
|
||||
#+begin_src elisp :tangle yes
|
||||
(add-hook 'eshell-mode-hook
|
||||
(lambda ()
|
||||
(add-hook 'completion-at-point-functions
|
||||
'bash-completion-capf-nonexclusive nil t)))
|
||||
#+end_src
|
||||
|
||||
Emulate A Terminal (EAT)
|
||||
#+begin_src elisp :tangle yes
|
||||
(use-package eat
|
||||
:config
|
||||
;; For `eat-eshell-mode'.
|
||||
(add-hook 'eshell-load-hook #'eat-eshell-mode)
|
||||
|
||||
;; For `eat-eshell-visual-command-mode'.
|
||||
(add-hook 'eshell-load-hook #'eat-eshell-visual-command-mode)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
* Server Actuation (Bash Integration)
|
||||
|
||||
Ensure that emacsclient always opens in a GUI frame by default when called from the shell.
|
||||
|
||||
#+begin_src bash :tangle ~/.bash_aliases
|
||||
# Use emacsclient to open files in the GUI, starting daemon if needed
|
||||
alias em="emacsclient -c -a ''"
|
||||
|
||||
# Set emacsclient as the default editor
|
||||
export EDITOR="emacsclient -c -a ''"
|
||||
export VISUAL="emacsclient -c -a ''"
|
||||
#+end_src
|
||||
16
projects/dotemacs/modules/emacs-ui.el
Normal file
@@ -0,0 +1,16 @@
|
||||
(when (fboundp 'tool-bar-mode) (tool-bar-mode -1))
|
||||
(when (fboundp 'menu-bar-mode) (menu-bar-mode -1))
|
||||
(when (fboundp 'scroll-bar-mode) (scroll-bar-mode -1))
|
||||
|
||||
(setq inhibit-startup-screen t)
|
||||
(setq initial-scratch-message nil)
|
||||
|
||||
(set-face-attribute 'default nil :family "sans-serif" :height 120)
|
||||
(set-face-attribute 'variable-pitch nil :family "sans-serif")
|
||||
|
||||
(use-package org-modern
|
||||
:ensure t
|
||||
:config
|
||||
(set-face-attribute 'org-modern-symbol nil :family "Iosevka")
|
||||
(global-org-modern-mode)
|
||||
)
|
||||
@@ -1,59 +1,32 @@
|
||||
#+TITLE: Emacs UI Configuration
|
||||
#+property: header-args :tangle ~/.emacs.d/modules/ui.el
|
||||
#+PROPERTY: header-args :tangle yes
|
||||
|
||||
* Appearance
|
||||
|
||||
Basic UI settings for a cleaner look.
|
||||
|
||||
#+begin_src elisp
|
||||
(defvar org-pretty-entities t) ; Improve org mode looks
|
||||
(defvar org-hide-emphasis-markers t) ; Hide emphasis markup
|
||||
(defvar org-num-mode nil)
|
||||
(defvar org-startup-folded 'shw2levels)
|
||||
(defvar org-startup-indented t) ; Indent org heirarchy
|
||||
(defvar org-adapt-indentation t)
|
||||
(defvar org-hide-leading-stars t) ; Minimal Outline
|
||||
(defvar org-odd-levels-only nil)
|
||||
(when (fboundp 'tool-bar-mode) (tool-bar-mode -1))
|
||||
(when (fboundp 'menu-bar-mode) (menu-bar-mode -1))
|
||||
(when (fboundp 'scroll-bar-mode) (scroll-bar-mode -1))
|
||||
|
||||
(setq inhibit-startup-screen t)
|
||||
(setq initial-scratch-message nil)
|
||||
#+end_src
|
||||
|
||||
* Org-modern
|
||||
* Fonts
|
||||
|
||||
#+begin_src elisp
|
||||
(set-face-attribute 'default nil :family "sans-serif" :height 120)
|
||||
(set-face-attribute 'variable-pitch nil :family "sans-serif")
|
||||
#+end_src
|
||||
|
||||
* Org-modern (UI elements)
|
||||
#+begin_src elisp
|
||||
(use-package org-modern
|
||||
:ensure t
|
||||
:config
|
||||
;; Choose some fonts
|
||||
(set-face-attribute 'default nil :family "sans-serif")
|
||||
(set-face-attribute 'variable-pitch nil :family "sans-serif")
|
||||
(set-face-attribute 'org-modern-symbol nil :family "Iosevka")
|
||||
|
||||
;; Edit settings
|
||||
(defvar org-auto-align-tags nil)
|
||||
(defvar org-tags-column 0)
|
||||
(defvar org-catch-invisible-edits 'show-and-error)
|
||||
(defvar org-special-ctrl-a/e t)
|
||||
(defvar org-insert-heading-respect-content t)
|
||||
|
||||
;; Org styling, hide markup etc.
|
||||
(defvar org-hide-emphasis-markers t)
|
||||
(defvar org-pretty-entities t)
|
||||
|
||||
;; Agenda styling
|
||||
(defvar org-agenda-tags-column 0)
|
||||
(defvar org-agenda-block-separator ?─)
|
||||
(defvar org-agenda-time-grid
|
||||
'((daily today require-timed)
|
||||
(800 1000 1200 1400 1600 1800 2000)
|
||||
" ┄┄┄┄┄ " "┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄"))
|
||||
(defvar org-agenda-current-time-string
|
||||
"◀── now ─────────────────────────────────────────────────")
|
||||
|
||||
;; Ellipsis styling
|
||||
(defvar org-ellipsis "…")
|
||||
(set-face-attribute 'org-ellipsis nil :inherit 'default :box nil)
|
||||
|
||||
(global-org-modern-mode)
|
||||
(global-org-modern-mode)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
* Syntax Highlighting
|
||||
#+begin_src elisp
|
||||
(setq org-src-fontify-natively t)
|
||||
(setq org-src-tab-acts-natively t)
|
||||
#+end_src
|
||||
|
||||
@@ -1,7 +1,195 @@
|
||||
#+TITLE: Emacs Writing Configuration
|
||||
#+property: header-args :tangle ~/.emacs.d/modules/writing.el
|
||||
#+TITLE: Reading and Writing Configuration
|
||||
#+PROPERTY: header-args :tangle yes
|
||||
|
||||
* Text and Case
|
||||
|
||||
** Convert DOuble capitals to single capitals
|
||||
|
||||
#+begin_src elisp :tangle yes
|
||||
(defun my/dcaps-to-scaps ()
|
||||
"Convert word in DOuble CApitals to Single Capitals."
|
||||
(interactive)
|
||||
(and (= ?w (char-syntax (char-before)))
|
||||
(save-excursion
|
||||
(and (if (called-interactively-p)
|
||||
(skip-syntax-backward "w")
|
||||
(= -3 (skip-syntax-backward "w"))
|
||||
)
|
||||
(let (case-fold-search)
|
||||
(looking-at "\\b[[:upper:]]\\{2\\}[[:lower:]]")
|
||||
)
|
||||
(capitalize-word 1)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
Then, let’s define a minor mode for it to be activated.
|
||||
#+begin_src elisp :tangle yes
|
||||
(define-minor-mode my-dubcaps-mode
|
||||
"Toggle 'my-dubcaps-mode' and convert words in DOuble CApitals to Single Capitals as you type."
|
||||
:init-value nil
|
||||
:lighter (" DC")
|
||||
(if my-dubcaps-mode
|
||||
(add-hook 'post-self-insert-hook #'my/dcaps-to-scaps nil 'local)
|
||||
(remove-hook 'post-self-insert-hook #'my/dcaps-to-scaps 'local)))
|
||||
#+end_src
|
||||
|
||||
Finally, let’s add a hook so that it is on for all the text files Emacs opens.
|
||||
#+begin_src elisp :tangle yes
|
||||
(add-hook 'text-mode-hook #'my-dubcaps-mode)
|
||||
#+end_src
|
||||
|
||||
Also, since we add a minor mode string (it might be useful sometimes), currently I prefer to diminish it.
|
||||
#+begin_src elisp :tangle yes
|
||||
(defun my/diminish-dubcaps ()
|
||||
(interactive)
|
||||
(diminish 'my-dubcaps-mode ""))
|
||||
(add-hook 'my-dubcaps-mode-hook 'my/diminish-dubcaps)
|
||||
#+end_src
|
||||
|
||||
* Reading and Writing
|
||||
|
||||
** Move correctly over camelCased words
|
||||
|
||||
#+begin_src elisp
|
||||
(subword-mode)
|
||||
#+end_src
|
||||
|
||||
** Understand the more common sentence with double space
|
||||
|
||||
#+begin_src elisp
|
||||
(setq sentence-end-double-space nil)
|
||||
#+end_src
|
||||
|
||||
** Join lines into paragraph
|
||||
|
||||
#+begin_src elisp
|
||||
(defun my/fill-or-unfill-paragraph (&optional unfill region)
|
||||
"Fill paragraph (or REGION). With the prefix argument UNFILL, fill it instead."
|
||||
(interactive (progn
|
||||
(barf-if-buffer-read-only)
|
||||
(list (if current-prefix-arg 'fill) t)))
|
||||
(let ((fill-column (if unfill fill-column (point-max))))
|
||||
(fill-paragraph nil region)))
|
||||
|
||||
(bind-key "M-q" 'my/fill-or-unfill-paragraph)
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp
|
||||
(defun my/fill-or-unfill-all-paragraphs (&optional unfill)
|
||||
"Fill or unfill all paragraphs in the current buffer.
|
||||
With the prefix argument UNFILL, fill them instead."
|
||||
(interactive (list (if current-prefix-arg 'fill)))
|
||||
(let ((fill-column (if unfill fill-column (point-max))))
|
||||
(save-excursion
|
||||
(goto-char (point-min))
|
||||
(while (not (eobp))
|
||||
(fill-paragraph nil t)
|
||||
(forward-paragraph)))))
|
||||
|
||||
(bind-key "M-Q" 'my/fill-or-unfill-all-paragraphs)
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp
|
||||
(remove-hook 'text-mode-hook #'turn-on-auto-fill)
|
||||
(add-hook 'text-mode-hook 'turn-on-visual-line-mode)
|
||||
#+end_src
|
||||
|
||||
** Expand some words with auto-correct
|
||||
|
||||
#+begin_src elisp :tangle yes
|
||||
(setq save-abbrevs 'silently)
|
||||
(setq-default abbrev-mode t)
|
||||
#+end_src
|
||||
|
||||
** ediff
|
||||
|
||||
#+begin_src elisp :tangle yes
|
||||
(setq ediff-window-setup-function 'ediff-setup-windows-plain)
|
||||
(setq ediff-split-window-function 'split-window-horizontally)
|
||||
#+end_src
|
||||
|
||||
** tramp
|
||||
|
||||
#+begin_src elisp :tangle yes
|
||||
(setq tramp-default-method "ssh"
|
||||
tramp-backup-directory-alist backup-directory-alist
|
||||
tramp-ssh-controlmaster-options "ssh")
|
||||
#+end_src
|
||||
|
||||
** Clean up space
|
||||
#+begin_src elisp :tangle yes
|
||||
(bind-key "M-SPC" 'cycle-spacing)
|
||||
#+end_src
|
||||
|
||||
** Transform <a href> links into org links
|
||||
|
||||
#+begin_src elisp :tangle yes
|
||||
(defun my/transform-html-links-to-org ()
|
||||
"Transform all HTML <a> links in the current buffer into 'org-mode' links."
|
||||
(interactive)
|
||||
(goto-char (point-min))
|
||||
(while (re-search-forward "<a href=\"\\(.*?\\)\">\\(.*?\\)</a>" nil t)
|
||||
(replace-match (org-make-link-string (match-string 1) (match-string 2)))))
|
||||
#+end_src
|
||||
|
||||
** Count words per minute
|
||||
#+begin_src elisp :tangle yes
|
||||
(require 'org-clock)
|
||||
(defun my/org-entry-wpm ()
|
||||
(interactive)
|
||||
(save-restriction
|
||||
(save-excursion
|
||||
(org-narrow-to-subtree)
|
||||
(goto-char (point-min))
|
||||
(let* ((words (count-words-region (point-min) (point-max)))
|
||||
|
||||
(minutes (org-clock-sum-current-item))
|
||||
(wpm (/ words minutes)))
|
||||
(message "WPM: %d (words: %d, minutes: %d)" wpm words minutes)
|
||||
(kill-new (number-to-string wpm))
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
** Enable dict mode
|
||||
#+begin_src elisp :tangle yes
|
||||
(setq dictionary-server "automatic")
|
||||
#+end_src
|
||||
|
||||
** Pick out passive voice and weasel words
|
||||
#+begin_src elisp :tangle yes
|
||||
(use-package writegood-mode
|
||||
:diminish writegood-mode
|
||||
:config
|
||||
(progn (add-hook 'text-mode-hook 'writegood-mode))
|
||||
)
|
||||
#+end_src
|
||||
|
||||
** Org-babel docker
|
||||
#+begin_src elisp :tangle yes
|
||||
(use-package ob-docker-build
|
||||
:straight (ob-docker-build :type git :host github :repo "ifitzpat/ob-docker-build")
|
||||
:defer t
|
||||
:config
|
||||
(add-to-list 'org-babel-load-languages '(docker-build . t))
|
||||
(org-babel-do-load-languages 'org-babel-load-languages org-babel-load-languages)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
* Spelling and syntax
|
||||
|
||||
** Spell checking
|
||||
|
||||
This requires installation of hunspell
|
||||
#+begin_src bash :tangle yes
|
||||
sudo apt install hunspell
|
||||
#+end_src
|
||||
|
||||
* Spell Checking
|
||||
#+begin_src elisp
|
||||
(use-package flyspell
|
||||
:config (setq ispell-program-name "hunspell"
|
||||
@@ -17,32 +205,50 @@
|
||||
)
|
||||
#+end_src
|
||||
|
||||
* Syntax Checking
|
||||
** Flyspell correct
|
||||
#+begin_src elisp :tangle yes
|
||||
(use-package flyspell-correct
|
||||
:after flyspell
|
||||
:bind (:map flyspell-mode-map ("C-;" . flyspell-correct-wrapper))
|
||||
)
|
||||
#+end_src
|
||||
|
||||
** Flycheck
|
||||
|
||||
Needs external checkers installed
|
||||
|
||||
#+begin_src elisp
|
||||
(use-package flycheck
|
||||
:init (global-flycheck-mode)
|
||||
:defer t
|
||||
:diminish (flycheck-mode . "")
|
||||
:config
|
||||
(add-hook 'after-init-hook #'global-flycheck-mode)
|
||||
(setq flycheck-emacs-lisp-load-path 'inherit)
|
||||
(setq flycheck-emacs-lisp-load-path (concat user-emacs-directory "straight/build"))
|
||||
(setq flycheck-emacs-lisp-load-path (concat user-emacs-directory "straight/build")))
|
||||
|
||||
#+end_src
|
||||
|
||||
** Flycheck bash
|
||||
#+begin_src bash :tangle yes
|
||||
sudo apt install devscripts
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp :tangle yes
|
||||
(use-package flycheck-checkbashisms
|
||||
:config
|
||||
(flycheck-checkbashisms-setup)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
** Yaml
|
||||
#+begin_src elisp :tangle yes
|
||||
(use-package yaml-mode
|
||||
:config
|
||||
(add-to-list 'auto-mode-alist '("\\.yml\\'" . yaml-mode))
|
||||
(add-to-list 'auto-mode-alist '("\\.yaml\\'" . yaml-mode))
|
||||
)
|
||||
#+end_src
|
||||
|
||||
* Text Manipulation
|
||||
#+begin_src elisp
|
||||
(subword-mode)
|
||||
(setq sentence-end-double-space nil)
|
||||
|
||||
(defun my/fill-or-unfill-paragraph (&optional unfill region)
|
||||
"Fill paragraph (or REGION). With the prefix argument UNFILL, fill it instead."
|
||||
(interactive (progn
|
||||
(barf-if-buffer-read-only)
|
||||
(list (if current-prefix-arg 'fill) t)))
|
||||
(let ((fill-column (if unfill fill-column (point-max))))
|
||||
(fill-paragraph nil region)))
|
||||
|
||||
(bind-key "M-q" 'my/fill-or-unfill-paragraph)
|
||||
|
||||
(add-hook 'text-mode-hook 'turn-on-visual-line-mode)
|
||||
#+end_src
|
||||
** Docker
|
||||
#+begin_src elisp :tangle yes
|
||||
(use-package docker-compose-mode)
|
||||
#+end_src
|
||||
@@ -17,7 +17,7 @@ MEMEX_DAILY="memex/1_daily"
|
||||
MEMEX_NOTES="memex/2_notes"
|
||||
MEMEX_DRAFTS="memex/3_drafts"
|
||||
MEMEX_PUBLISHED="memex/4_published"
|
||||
MEMEX_PROJECTS="memex/5_projects"
|
||||
MEMEX_PROJECTS="memex/projects"
|
||||
MEMEX_AREAS="memex/6_areas"
|
||||
MEMEX_RESOURCES="memex/7_resources"
|
||||
MEMEX_ARCHIVES="memex/8_archives"
|
||||
90
projects/infrastructure/docs/qubes-npu-setup.org
Normal file
@@ -0,0 +1,90 @@
|
||||
#+TITLE: Qubes NPU Setup - sys-ai
|
||||
#+AUTHOR: Amr
|
||||
#+CREATED: [2026-04-24 Fri]
|
||||
#+BEGIN_COMMENT
|
||||
Documentation for setting up sys-ai Qube with AMD Ryzen AI NPU for llama.cpp.
|
||||
#+END_COMMENT
|
||||
|
||||
* Hardware
|
||||
|
||||
- *Laptop:* Framework Laptop 13 (AMD)
|
||||
- *CPU:* AMD Ryzen AI 5 340 (6 cores, no SMT)
|
||||
- *NPU:* AMD XDNA2 (Strix Point) - c2:00.1 / dom0:00_08.2-00_00.1
|
||||
- *RAM:* 96GB total
|
||||
|
||||
* Current Progress
|
||||
|
||||
** DONE [X] Create sys-ai AppVM (HVM, 64GB, 2 vCPUs)
|
||||
|
||||
#+begin_src bash
|
||||
# Run in dom0
|
||||
qvm-create --label purple --property netvm=sys-firewall --property memory=65536 --property vcpus=2 --property virt_mode=HVM sys-ai
|
||||
#+end_src
|
||||
|
||||
** DONE [X] Attach NPU PCI device to sys-ai
|
||||
|
||||
#+begin_src bash
|
||||
# Run in dom0
|
||||
qvm-pci attach -o no-strict-reset=true sys-ai dom0:00_08.2-00_00.1 --persistent
|
||||
#+end_src
|
||||
|
||||
** TODO [ ] Fix repository configuration in sys-ai
|
||||
|
||||
*Status:* Package repositories missing in fedora-43-ai template. Fedora 43 uses DNF5 with different repo paths.
|
||||
|
||||
*Next Step:* Qubes OS templates typically get packages installed via `qubes-vm-update` or dom0 commands. Try the Qubes way to install packages.
|
||||
|
||||
** TODO [ ] Verify NPU is accessible inside sys-ai
|
||||
|
||||
#+begin_src bash
|
||||
# Install pciutils
|
||||
sudo dnf install pciutils
|
||||
|
||||
# Check NPU is visible
|
||||
lspci | grep -i neural
|
||||
#+end_src
|
||||
|
||||
** TODO [ ] Install AMD NPU drivers in sys-ai
|
||||
|
||||
#+begin_src bash
|
||||
# Enable Copr repository
|
||||
sudo dnf copr enable xanderlent/amd-npu-driver
|
||||
|
||||
# Install drivers
|
||||
sudo dnf install xrt xdna-driver tcsh
|
||||
|
||||
# Setup environment
|
||||
source /usr/xrt/setup.sh
|
||||
|
||||
# Verify NPU detection
|
||||
xrt-smi examine
|
||||
#+end_src
|
||||
|
||||
** TODO [ ] Build llama.cpp with AMD XDNA2 NPU backend
|
||||
|
||||
#+begin_src bash
|
||||
# Install build dependencies
|
||||
sudo dnf install cmake gcc-c++ python3.11 git
|
||||
|
||||
# Clone NPU fork
|
||||
git clone https://github.com/BrandedTamarasu-glitch/OllamaAMDNPU.git
|
||||
cd OllamaAMDNPU
|
||||
|
||||
# Build with NPU backend
|
||||
cmake -B build -DGGML_XDNA=ON -DGGML_BACKEND_DL=ON -DBUILD_SHARED_LIBS=ON
|
||||
cmake --build build --parallel
|
||||
#+end_src
|
||||
|
||||
** TODO [ ] Download model and test inference
|
||||
|
||||
#+begin_src bash
|
||||
# Download GGUF model (Qwen3 1B or 3B quantized)
|
||||
# ... model download command ...
|
||||
|
||||
# Run with NPU offload
|
||||
./build/bin/llama-cli -m model.gguf -p "Hello" -n 256 --npu-split 1
|
||||
#+end_src
|
||||
|
||||
* Next Step
|
||||
|
||||
Run the repository fix commands from the "Fix repository" step above.
|
||||
@@ -36,5 +36,5 @@ See the actionable tasks for this project in [[file:../../gtd.org::*Lisp Machine
|
||||
|
||||
* Links
|
||||
|
||||
- [[file:../org-agent/][Orchestration: org-agent Microkernel]]
|
||||
- [[file:../opencortex/][Orchestration: opencortex Microkernel]]
|
||||
- [[file:../agora/][Social Layer: Agora Protocol]]
|
||||
|
||||
1
projects/passepartout
Submodule
1
projects/passepartout-contrib
Submodule
1757
quicklisp.lisp
Normal file
|
Before Width: | Height: | Size: 122 KiB After Width: | Height: | Size: 122 KiB |
|
Before Width: | Height: | Size: 123 KiB After Width: | Height: | Size: 123 KiB |
|
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 2.5 KiB |
|
Before Width: | Height: | Size: 197 KiB After Width: | Height: | Size: 197 KiB |
0
skills.org
Normal file
@@ -1,355 +0,0 @@
|
||||
#+TITLE: LLM Fleet Dashboard
|
||||
#+author: Sol (Agent)
|
||||
|
||||
* Model Fleet
|
||||
|
||||
| Provider | Model ID | Context |
|
||||
|------------+---------------------------------------------------------------+---------|
|
||||
| OpenRouter | google/gemma-4-26b-a4b-it | 262144 |
|
||||
| OpenRouter | google/gemma-4-31b-it | 262144 |
|
||||
| OpenRouter | qwen/qwen3.6-plus:free | 1000000 |
|
||||
| OpenRouter | z-ai/glm-5v-turbo | 202752 |
|
||||
| OpenRouter | arcee-ai/trinity-large-thinking | 262144 |
|
||||
| OpenRouter | x-ai/grok-4.20-multi-agent | 2000000 |
|
||||
| OpenRouter | x-ai/grok-4.20 | 2000000 |
|
||||
| OpenRouter | google/lyria-3-pro-preview | 1048576 |
|
||||
| OpenRouter | google/lyria-3-clip-preview | 1048576 |
|
||||
| OpenRouter | kwaipilot/kat-coder-pro-v2 | 256000 |
|
||||
| OpenRouter | rekaai/reka-edge | 16384 |
|
||||
| OpenRouter | xiaomi/mimo-v2-omni | 262144 |
|
||||
| OpenRouter | xiaomi/mimo-v2-pro | 1048576 |
|
||||
| OpenRouter | minimax/minimax-m2.7 | 204800 |
|
||||
| OpenRouter | openai/gpt-5.4-nano | 400000 |
|
||||
| OpenRouter | openai/gpt-5.4-mini | 400000 |
|
||||
| OpenRouter | mistralai/mistral-small-2603 | 262144 |
|
||||
| OpenRouter | z-ai/glm-5-turbo | 202752 |
|
||||
| OpenRouter | nvidia/nemotron-3-super-120b-a12b:free | 262144 |
|
||||
| OpenRouter | nvidia/nemotron-3-super-120b-a12b | 262144 |
|
||||
| OpenRouter | bytedance-seed/seed-2.0-lite | 262144 |
|
||||
| OpenRouter | qwen/qwen3.5-9b | 256000 |
|
||||
| OpenRouter | openai/gpt-5.4-pro | 1050000 |
|
||||
| OpenRouter | openai/gpt-5.4 | 1050000 |
|
||||
| OpenRouter | inception/mercury-2 | 128000 |
|
||||
| OpenRouter | openai/gpt-5.3-chat | 128000 |
|
||||
| OpenRouter | google/gemini-3.1-flash-lite-preview | 1048576 |
|
||||
| OpenRouter | bytedance-seed/seed-2.0-mini | 262144 |
|
||||
| OpenRouter | google/gemini-3.1-flash-image-preview | 65536 |
|
||||
| OpenRouter | qwen/qwen3.5-35b-a3b | 262144 |
|
||||
| OpenRouter | qwen/qwen3.5-27b | 262144 |
|
||||
| OpenRouter | qwen/qwen3.5-122b-a10b | 262144 |
|
||||
| OpenRouter | qwen/qwen3.5-flash-02-23 | 1000000 |
|
||||
| OpenRouter | liquid/lfm-2-24b-a2b | 32768 |
|
||||
| OpenRouter | google/gemini-3.1-pro-preview-customtools | 1048576 |
|
||||
| OpenRouter | openai/gpt-5.3-codex | 400000 |
|
||||
| OpenRouter | aion-labs/aion-2.0 | 131072 |
|
||||
| OpenRouter | google/gemini-3.1-pro-preview | 1048576 |
|
||||
| OpenRouter | anthropic/claude-sonnet-4.6 | 1000000 |
|
||||
| OpenRouter | qwen/qwen3.5-plus-02-15 | 1000000 |
|
||||
| OpenRouter | qwen/qwen3.5-397b-a17b | 262144 |
|
||||
| OpenRouter | minimax/minimax-m2.5:free | 196608 |
|
||||
| OpenRouter | minimax/minimax-m2.5 | 196608 |
|
||||
| OpenRouter | z-ai/glm-5 | 80000 |
|
||||
| OpenRouter | qwen/qwen3-max-thinking | 262144 |
|
||||
| OpenRouter | anthropic/claude-opus-4.6 | 1000000 |
|
||||
| OpenRouter | qwen/qwen3-coder-next | 262144 |
|
||||
| OpenRouter | openrouter/free | 200000 |
|
||||
| OpenRouter | stepfun/step-3.5-flash:free | 256000 |
|
||||
| OpenRouter | stepfun/step-3.5-flash | 262144 |
|
||||
| OpenRouter | arcee-ai/trinity-large-preview:free | 131000 |
|
||||
| OpenRouter | moonshotai/kimi-k2.5 | 262144 |
|
||||
| OpenRouter | upstage/solar-pro-3 | 128000 |
|
||||
| OpenRouter | minimax/minimax-m2-her | 65536 |
|
||||
| OpenRouter | writer/palmyra-x5 | 1040000 |
|
||||
| OpenRouter | liquid/lfm-2.5-1.2b-thinking:free | 32768 |
|
||||
| OpenRouter | liquid/lfm-2.5-1.2b-instruct:free | 32768 |
|
||||
| OpenRouter | openai/gpt-audio | 128000 |
|
||||
| OpenRouter | openai/gpt-audio-mini | 128000 |
|
||||
| OpenRouter | z-ai/glm-4.7-flash | 202752 |
|
||||
| OpenRouter | openai/gpt-5.2-codex | 400000 |
|
||||
| OpenRouter | allenai/olmo-3.1-32b-instruct | 65536 |
|
||||
| OpenRouter | bytedance-seed/seed-1.6-flash | 262144 |
|
||||
| OpenRouter | bytedance-seed/seed-1.6 | 262144 |
|
||||
| OpenRouter | minimax/minimax-m2.1 | 196608 |
|
||||
| OpenRouter | z-ai/glm-4.7 | 202752 |
|
||||
| OpenRouter | google/gemini-3-flash-preview | 1048576 |
|
||||
| OpenRouter | mistralai/mistral-small-creative | 32768 |
|
||||
| OpenRouter | xiaomi/mimo-v2-flash | 262144 |
|
||||
| OpenRouter | nvidia/nemotron-3-nano-30b-a3b:free | 256000 |
|
||||
| OpenRouter | nvidia/nemotron-3-nano-30b-a3b | 262144 |
|
||||
| OpenRouter | openai/gpt-5.2-chat | 128000 |
|
||||
| OpenRouter | openai/gpt-5.2-pro | 400000 |
|
||||
| OpenRouter | openai/gpt-5.2 | 400000 |
|
||||
| OpenRouter | mistralai/devstral-2512 | 262144 |
|
||||
| OpenRouter | relace/relace-search | 256000 |
|
||||
| OpenRouter | z-ai/glm-4.6v | 131072 |
|
||||
| OpenRouter | nex-agi/deepseek-v3.1-nex-n1 | 131072 |
|
||||
| OpenRouter | essentialai/rnj-1-instruct | 32768 |
|
||||
| OpenRouter | openrouter/bodybuilder | 128000 |
|
||||
| OpenRouter | openai/gpt-5.1-codex-max | 400000 |
|
||||
| OpenRouter | amazon/nova-2-lite-v1 | 1000000 |
|
||||
| OpenRouter | mistralai/ministral-14b-2512 | 262144 |
|
||||
| OpenRouter | mistralai/ministral-8b-2512 | 262144 |
|
||||
| OpenRouter | mistralai/ministral-3b-2512 | 131072 |
|
||||
| OpenRouter | mistralai/mistral-large-2512 | 262144 |
|
||||
| OpenRouter | arcee-ai/trinity-mini:free | 131072 |
|
||||
| OpenRouter | arcee-ai/trinity-mini | 131072 |
|
||||
| OpenRouter | deepseek/deepseek-v3.2-speciale | 163840 |
|
||||
| OpenRouter | deepseek/deepseek-v3.2 | 163840 |
|
||||
| OpenRouter | prime-intellect/intellect-3 | 131072 |
|
||||
| OpenRouter | anthropic/claude-opus-4.5 | 200000 |
|
||||
| OpenRouter | allenai/olmo-3-32b-think | 65536 |
|
||||
| OpenRouter | google/gemini-3-pro-image-preview | 65536 |
|
||||
| OpenRouter | x-ai/grok-4.1-fast | 2000000 |
|
||||
| OpenRouter | deepcogito/cogito-v2.1-671b | 128000 |
|
||||
| OpenRouter | openai/gpt-5.1 | 400000 |
|
||||
| OpenRouter | openai/gpt-5.1-chat | 128000 |
|
||||
| OpenRouter | openai/gpt-5.1-codex | 400000 |
|
||||
| OpenRouter | openai/gpt-5.1-codex-mini | 400000 |
|
||||
| OpenRouter | moonshotai/kimi-k2-thinking | 131072 |
|
||||
| OpenRouter | amazon/nova-premier-v1 | 1000000 |
|
||||
| OpenRouter | perplexity/sonar-pro-search | 200000 |
|
||||
| OpenRouter | mistralai/voxtral-small-24b-2507 | 32000 |
|
||||
| OpenRouter | openai/gpt-oss-safeguard-20b | 131072 |
|
||||
| OpenRouter | nvidia/nemotron-nano-12b-v2-vl:free | 128000 |
|
||||
| OpenRouter | nvidia/nemotron-nano-12b-v2-vl | 131072 |
|
||||
| OpenRouter | minimax/minimax-m2 | 196608 |
|
||||
| OpenRouter | qwen/qwen3-vl-32b-instruct | 131072 |
|
||||
| OpenRouter | ibm-granite/granite-4.0-h-micro | 131000 |
|
||||
| OpenRouter | openai/gpt-5-image-mini | 400000 |
|
||||
| OpenRouter | anthropic/claude-haiku-4.5 | 200000 |
|
||||
| OpenRouter | qwen/qwen3-vl-8b-thinking | 131072 |
|
||||
| OpenRouter | qwen/qwen3-vl-8b-instruct | 131072 |
|
||||
| OpenRouter | openai/gpt-5-image | 400000 |
|
||||
| OpenRouter | openai/o3-deep-research | 200000 |
|
||||
| OpenRouter | openai/o4-mini-deep-research | 200000 |
|
||||
| OpenRouter | nvidia/llama-3.3-nemotron-super-49b-v1.5 | 131072 |
|
||||
| OpenRouter | baidu/ernie-4.5-21b-a3b-thinking | 131072 |
|
||||
| OpenRouter | google/gemini-2.5-flash-image | 32768 |
|
||||
| OpenRouter | qwen/qwen3-vl-30b-a3b-thinking | 131072 |
|
||||
| OpenRouter | qwen/qwen3-vl-30b-a3b-instruct | 131072 |
|
||||
| OpenRouter | openai/gpt-5-pro | 400000 |
|
||||
| OpenRouter | z-ai/glm-4.6 | 204800 |
|
||||
| OpenRouter | anthropic/claude-sonnet-4.5 | 1000000 |
|
||||
| OpenRouter | deepseek/deepseek-v3.2-exp | 163840 |
|
||||
| OpenRouter | thedrummer/cydonia-24b-v4.1 | 131072 |
|
||||
| OpenRouter | relace/relace-apply-3 | 256000 |
|
||||
| OpenRouter | google/gemini-2.5-flash-lite-preview-09-2025 | 1048576 |
|
||||
| OpenRouter | qwen/qwen3-vl-235b-a22b-thinking | 131072 |
|
||||
| OpenRouter | qwen/qwen3-vl-235b-a22b-instruct | 262144 |
|
||||
| OpenRouter | qwen/qwen3-max | 262144 |
|
||||
| OpenRouter | qwen/qwen3-coder-plus | 1000000 |
|
||||
| OpenRouter | openai/gpt-5-codex | 400000 |
|
||||
| OpenRouter | deepseek/deepseek-v3.1-terminus | 163840 |
|
||||
| OpenRouter | x-ai/grok-4-fast | 2000000 |
|
||||
| OpenRouter | alibaba/tongyi-deepresearch-30b-a3b | 131072 |
|
||||
| OpenRouter | qwen/qwen3-coder-flash | 1000000 |
|
||||
| OpenRouter | qwen/qwen3-next-80b-a3b-thinking | 131072 |
|
||||
| OpenRouter | qwen/qwen3-next-80b-a3b-instruct:free | 262144 |
|
||||
| OpenRouter | qwen/qwen3-next-80b-a3b-instruct | 262144 |
|
||||
| OpenRouter | meituan/longcat-flash-chat | 131072 |
|
||||
| OpenRouter | qwen/qwen-plus-2025-07-28:thinking | 1000000 |
|
||||
| OpenRouter | qwen/qwen-plus-2025-07-28 | 1000000 |
|
||||
| OpenRouter | nvidia/nemotron-nano-9b-v2:free | 128000 |
|
||||
| OpenRouter | nvidia/nemotron-nano-9b-v2 | 131072 |
|
||||
| OpenRouter | moonshotai/kimi-k2-0905 | 131072 |
|
||||
| OpenRouter | qwen/qwen3-30b-a3b-thinking-2507 | 131072 |
|
||||
| OpenRouter | x-ai/grok-code-fast-1 | 256000 |
|
||||
| OpenRouter | nousresearch/hermes-4-70b | 131072 |
|
||||
| OpenRouter | nousresearch/hermes-4-405b | 131072 |
|
||||
| OpenRouter | deepseek/deepseek-chat-v3.1 | 32768 |
|
||||
| OpenRouter | openai/gpt-4o-audio-preview | 128000 |
|
||||
| OpenRouter | mistralai/mistral-medium-3.1 | 131072 |
|
||||
| OpenRouter | baidu/ernie-4.5-21b-a3b | 120000 |
|
||||
| OpenRouter | baidu/ernie-4.5-vl-28b-a3b | 30000 |
|
||||
| OpenRouter | z-ai/glm-4.5v | 65536 |
|
||||
| OpenRouter | ai21/jamba-large-1.7 | 256000 |
|
||||
| OpenRouter | openai/gpt-5-chat | 128000 |
|
||||
| OpenRouter | openai/gpt-5 | 400000 |
|
||||
| OpenRouter | openai/gpt-5-mini | 400000 |
|
||||
| OpenRouter | openai/gpt-5-nano | 400000 |
|
||||
| OpenRouter | openai/gpt-oss-120b:free | 131072 |
|
||||
| OpenRouter | openai/gpt-oss-120b | 131072 |
|
||||
| OpenRouter | openai/gpt-oss-20b:free | 131072 |
|
||||
| OpenRouter | openai/gpt-oss-20b | 131072 |
|
||||
| OpenRouter | anthropic/claude-opus-4.1 | 200000 |
|
||||
| OpenRouter | mistralai/codestral-2508 | 256000 |
|
||||
| OpenRouter | qwen/qwen3-coder-30b-a3b-instruct | 160000 |
|
||||
| OpenRouter | qwen/qwen3-30b-a3b-instruct-2507 | 262144 |
|
||||
| OpenRouter | z-ai/glm-4.5 | 131072 |
|
||||
| OpenRouter | z-ai/glm-4.5-air:free | 131072 |
|
||||
| OpenRouter | z-ai/glm-4.5-air | 131072 |
|
||||
| OpenRouter | qwen/qwen3-235b-a22b-thinking-2507 | 131072 |
|
||||
| OpenRouter | z-ai/glm-4-32b | 128000 |
|
||||
| OpenRouter | qwen/qwen3-coder:free | 262000 |
|
||||
| OpenRouter | qwen/qwen3-coder | 262144 |
|
||||
| OpenRouter | bytedance/ui-tars-1.5-7b | 128000 |
|
||||
| OpenRouter | google/gemini-2.5-flash-lite | 1048576 |
|
||||
| OpenRouter | qwen/qwen3-235b-a22b-2507 | 262144 |
|
||||
| OpenRouter | switchpoint/router | 131072 |
|
||||
| OpenRouter | moonshotai/kimi-k2 | 131072 |
|
||||
| OpenRouter | mistralai/devstral-medium | 131072 |
|
||||
| OpenRouter | mistralai/devstral-small | 131072 |
|
||||
| OpenRouter | cognitivecomputations/dolphin-mistral-24b-venice-edition:free | 32768 |
|
||||
| OpenRouter | x-ai/grok-4 | 256000 |
|
||||
| OpenRouter | google/gemma-3n-e2b-it:free | 8192 |
|
||||
| OpenRouter | tencent/hunyuan-a13b-instruct | 131072 |
|
||||
| OpenRouter | tngtech/deepseek-r1t2-chimera | 163840 |
|
||||
| OpenRouter | morph/morph-v3-large | 262144 |
|
||||
| OpenRouter | morph/morph-v3-fast | 81920 |
|
||||
| OpenRouter | baidu/ernie-4.5-vl-424b-a47b | 123000 |
|
||||
| OpenRouter | baidu/ernie-4.5-300b-a47b | 123000 |
|
||||
| OpenRouter | inception/mercury | 128000 |
|
||||
| OpenRouter | mistralai/mistral-small-3.2-24b-instruct | 128000 |
|
||||
| OpenRouter | minimax/minimax-m1 | 1000000 |
|
||||
| OpenRouter | google/gemini-2.5-flash | 1048576 |
|
||||
| OpenRouter | google/gemini-2.5-pro | 1048576 |
|
||||
| OpenRouter | openai/o3-pro | 200000 |
|
||||
| OpenRouter | x-ai/grok-3-mini | 131072 |
|
||||
| OpenRouter | x-ai/grok-3 | 131072 |
|
||||
| OpenRouter | google/gemini-2.5-pro-preview | 1048576 |
|
||||
| OpenRouter | deepseek/deepseek-r1-0528 | 163840 |
|
||||
| OpenRouter | anthropic/claude-opus-4 | 200000 |
|
||||
| OpenRouter | anthropic/claude-sonnet-4 | 200000 |
|
||||
| OpenRouter | google/gemma-3n-e4b-it:free | 8192 |
|
||||
| OpenRouter | google/gemma-3n-e4b-it | 32768 |
|
||||
| OpenRouter | mistralai/mistral-medium-3 | 131072 |
|
||||
| OpenRouter | google/gemini-2.5-pro-preview-05-06 | 1048576 |
|
||||
| OpenRouter | arcee-ai/spotlight | 131072 |
|
||||
| OpenRouter | arcee-ai/maestro-reasoning | 131072 |
|
||||
| OpenRouter | arcee-ai/virtuoso-large | 131072 |
|
||||
| OpenRouter | arcee-ai/coder-large | 32768 |
|
||||
| OpenRouter | inception/mercury-coder | 128000 |
|
||||
| OpenRouter | meta-llama/llama-guard-4-12b | 163840 |
|
||||
| OpenRouter | qwen/qwen3-30b-a3b | 40960 |
|
||||
| OpenRouter | qwen/qwen3-8b | 40960 |
|
||||
| OpenRouter | qwen/qwen3-14b | 40960 |
|
||||
| OpenRouter | qwen/qwen3-32b | 40960 |
|
||||
| OpenRouter | qwen/qwen3-235b-a22b | 131072 |
|
||||
| OpenRouter | openai/o4-mini-high | 200000 |
|
||||
| OpenRouter | openai/o3 | 200000 |
|
||||
| OpenRouter | openai/o4-mini | 200000 |
|
||||
| OpenRouter | qwen/qwen2.5-coder-7b-instruct | 32768 |
|
||||
| OpenRouter | openai/gpt-4.1 | 1047576 |
|
||||
| OpenRouter | openai/gpt-4.1-mini | 1047576 |
|
||||
| OpenRouter | openai/gpt-4.1-nano | 1047576 |
|
||||
| OpenRouter | eleutherai/llemma_7b | 4096 |
|
||||
| OpenRouter | alfredpros/codellama-7b-instruct-solidity | 4096 |
|
||||
| OpenRouter | x-ai/grok-3-mini-beta | 131072 |
|
||||
| OpenRouter | x-ai/grok-3-beta | 131072 |
|
||||
| OpenRouter | nvidia/llama-3.1-nemotron-ultra-253b-v1 | 131072 |
|
||||
| OpenRouter | meta-llama/llama-4-maverick | 1048576 |
|
||||
| OpenRouter | meta-llama/llama-4-scout | 327680 |
|
||||
| OpenRouter | qwen/qwen2.5-vl-32b-instruct | 128000 |
|
||||
| OpenRouter | deepseek/deepseek-chat-v3-0324 | 163840 |
|
||||
| OpenRouter | openai/o1-pro | 200000 |
|
||||
| OpenRouter | mistralai/mistral-small-3.1-24b-instruct | 131072 |
|
||||
| OpenRouter | allenai/olmo-2-0325-32b-instruct | 128000 |
|
||||
| OpenRouter | google/gemma-3-4b-it:free | 32768 |
|
||||
| OpenRouter | google/gemma-3-4b-it | 131072 |
|
||||
| OpenRouter | google/gemma-3-12b-it:free | 32768 |
|
||||
| OpenRouter | google/gemma-3-12b-it | 131072 |
|
||||
| OpenRouter | cohere/command-a | 256000 |
|
||||
| OpenRouter | openai/gpt-4o-mini-search-preview | 128000 |
|
||||
| OpenRouter | openai/gpt-4o-search-preview | 128000 |
|
||||
| OpenRouter | rekaai/reka-flash-3 | 65536 |
|
||||
| OpenRouter | google/gemma-3-27b-it:free | 131072 |
|
||||
| OpenRouter | google/gemma-3-27b-it | 131072 |
|
||||
| OpenRouter | thedrummer/skyfall-36b-v2 | 32768 |
|
||||
| OpenRouter | perplexity/sonar-reasoning-pro | 128000 |
|
||||
| OpenRouter | perplexity/sonar-pro | 200000 |
|
||||
| OpenRouter | perplexity/sonar-deep-research | 128000 |
|
||||
| OpenRouter | qwen/qwq-32b | 131072 |
|
||||
| OpenRouter | google/gemini-2.0-flash-lite-001 | 1048576 |
|
||||
| OpenRouter | anthropic/claude-3.7-sonnet | 200000 |
|
||||
| OpenRouter | anthropic/claude-3.7-sonnet:thinking | 200000 |
|
||||
| OpenRouter | mistralai/mistral-saba | 32768 |
|
||||
| OpenRouter | meta-llama/llama-guard-3-8b | 131072 |
|
||||
| OpenRouter | openai/o3-mini-high | 200000 |
|
||||
| OpenRouter | google/gemini-2.0-flash-001 | 1048576 |
|
||||
| OpenRouter | qwen/qwen-vl-plus | 131072 |
|
||||
| OpenRouter | aion-labs/aion-1.0 | 131072 |
|
||||
| OpenRouter | aion-labs/aion-1.0-mini | 131072 |
|
||||
| OpenRouter | aion-labs/aion-rp-llama-3.1-8b | 32768 |
|
||||
| OpenRouter | qwen/qwen-vl-max | 131072 |
|
||||
| OpenRouter | qwen/qwen-turbo | 131072 |
|
||||
| OpenRouter | qwen/qwen2.5-vl-72b-instruct | 32768 |
|
||||
| OpenRouter | qwen/qwen-plus | 1000000 |
|
||||
| OpenRouter | qwen/qwen-max | 32768 |
|
||||
| OpenRouter | openai/o3-mini | 200000 |
|
||||
| OpenRouter | mistralai/mistral-small-24b-instruct-2501 | 32768 |
|
||||
| OpenRouter | deepseek/deepseek-r1-distill-qwen-32b | 32768 |
|
||||
| OpenRouter | perplexity/sonar | 127072 |
|
||||
| OpenRouter | deepseek/deepseek-r1-distill-llama-70b | 131072 |
|
||||
| OpenRouter | deepseek/deepseek-r1 | 64000 |
|
||||
| OpenRouter | minimax/minimax-01 | 1000192 |
|
||||
| OpenRouter | microsoft/phi-4 | 16384 |
|
||||
| OpenRouter | sao10k/l3.1-70b-hanami-x1 | 16000 |
|
||||
| OpenRouter | deepseek/deepseek-chat | 163840 |
|
||||
| OpenRouter | sao10k/l3.3-euryale-70b | 131072 |
|
||||
| OpenRouter | openai/o1 | 200000 |
|
||||
| OpenRouter | cohere/command-r7b-12-2024 | 128000 |
|
||||
| OpenRouter | meta-llama/llama-3.3-70b-instruct:free | 65536 |
|
||||
| OpenRouter | meta-llama/llama-3.3-70b-instruct | 131072 |
|
||||
| OpenRouter | amazon/nova-lite-v1 | 300000 |
|
||||
| OpenRouter | amazon/nova-micro-v1 | 128000 |
|
||||
| OpenRouter | amazon/nova-pro-v1 | 300000 |
|
||||
| OpenRouter | openai/gpt-4o-2024-11-20 | 128000 |
|
||||
| OpenRouter | mistralai/mistral-large-2411 | 131072 |
|
||||
| OpenRouter | mistralai/mistral-large-2407 | 131072 |
|
||||
| OpenRouter | mistralai/pixtral-large-2411 | 131072 |
|
||||
| OpenRouter | qwen/qwen-2.5-coder-32b-instruct | 32768 |
|
||||
| OpenRouter | thedrummer/unslopnemo-12b | 32768 |
|
||||
| OpenRouter | anthropic/claude-3.5-haiku | 200000 |
|
||||
| OpenRouter | anthracite-org/magnum-v4-72b | 16384 |
|
||||
| OpenRouter | qwen/qwen-2.5-7b-instruct | 32768 |
|
||||
| OpenRouter | nvidia/llama-3.1-nemotron-70b-instruct | 131072 |
|
||||
| OpenRouter | inflection/inflection-3-pi | 8000 |
|
||||
| OpenRouter | inflection/inflection-3-productivity | 8000 |
|
||||
| OpenRouter | thedrummer/rocinante-12b | 32768 |
|
||||
| OpenRouter | meta-llama/llama-3.2-3b-instruct:free | 131072 |
|
||||
| OpenRouter | meta-llama/llama-3.2-3b-instruct | 80000 |
|
||||
| OpenRouter | meta-llama/llama-3.2-1b-instruct | 60000 |
|
||||
| OpenRouter | meta-llama/llama-3.2-11b-vision-instruct | 131072 |
|
||||
| OpenRouter | qwen/qwen-2.5-72b-instruct | 32768 |
|
||||
| OpenRouter | cohere/command-r-08-2024 | 128000 |
|
||||
| OpenRouter | cohere/command-r-plus-08-2024 | 128000 |
|
||||
| OpenRouter | sao10k/l3.1-euryale-70b | 131072 |
|
||||
| OpenRouter | nousresearch/hermes-3-llama-3.1-70b | 131072 |
|
||||
| OpenRouter | nousresearch/hermes-3-llama-3.1-405b:free | 131072 |
|
||||
| OpenRouter | nousresearch/hermes-3-llama-3.1-405b | 131072 |
|
||||
| OpenRouter | sao10k/l3-lunaris-8b | 8192 |
|
||||
| OpenRouter | openai/gpt-4o-2024-08-06 | 128000 |
|
||||
| OpenRouter | meta-llama/llama-3.1-8b-instruct | 16384 |
|
||||
| OpenRouter | meta-llama/llama-3.1-70b-instruct | 131072 |
|
||||
| OpenRouter | mistralai/mistral-nemo | 131072 |
|
||||
| OpenRouter | openai/gpt-4o-mini-2024-07-18 | 128000 |
|
||||
| OpenRouter | openai/gpt-4o-mini | 128000 |
|
||||
| OpenRouter | google/gemma-2-27b-it | 8192 |
|
||||
| OpenRouter | google/gemma-2-9b-it | 8192 |
|
||||
| OpenRouter | sao10k/l3-euryale-70b | 8192 |
|
||||
| OpenRouter | nousresearch/hermes-2-pro-llama-3-8b | 8192 |
|
||||
| OpenRouter | openai/gpt-4o | 128000 |
|
||||
| OpenRouter | openai/gpt-4o:extended | 128000 |
|
||||
| OpenRouter | openai/gpt-4o-2024-05-13 | 128000 |
|
||||
| OpenRouter | meta-llama/llama-3-8b-instruct | 8192 |
|
||||
| OpenRouter | meta-llama/llama-3-70b-instruct | 8192 |
|
||||
| OpenRouter | mistralai/mixtral-8x22b-instruct | 65536 |
|
||||
| OpenRouter | microsoft/wizardlm-2-8x22b | 65535 |
|
||||
| OpenRouter | openai/gpt-4-turbo | 128000 |
|
||||
| OpenRouter | anthropic/claude-3-haiku | 200000 |
|
||||
| OpenRouter | mistralai/mistral-large | 128000 |
|
||||
| OpenRouter | openai/gpt-3.5-turbo-0613 | 4095 |
|
||||
| OpenRouter | openai/gpt-4-turbo-preview | 128000 |
|
||||
| OpenRouter | mistralai/mixtral-8x7b-instruct | 32768 |
|
||||
| OpenRouter | alpindale/goliath-120b | 6144 |
|
||||
| OpenRouter | openrouter/auto | 2000000 |
|
||||
| OpenRouter | openai/gpt-4-1106-preview | 128000 |
|
||||
| OpenRouter | mistralai/mistral-7b-instruct-v0.1 | 2824 |
|
||||
| OpenRouter | openai/gpt-3.5-turbo-instruct | 4095 |
|
||||
| OpenRouter | openai/gpt-3.5-turbo-16k | 16385 |
|
||||
| OpenRouter | mancer/weaver | 8000 |
|
||||
| OpenRouter | undi95/remm-slerp-l2-13b | 6144 |
|
||||
| OpenRouter | gryphe/mythomax-l2-13b | 4096 |
|
||||
| OpenRouter | openai/gpt-4-0314 | 8191 |
|
||||
| OpenRouter | openai/gpt-3.5-turbo | 16385 |
|
||||
| OpenRouter | openai/gpt-4 | 8191 |
|
||||
@@ -1 +0,0 @@
|
||||
user@amr.3392:1775060113
|
||||
@@ -2124,42 +2124,42 @@ On package.el, it is a manual install so far
|
||||
(use-package chemtable)
|
||||
#+end_src
|
||||
|
||||
** Org-agent
|
||||
** OpenCortex
|
||||
#+begin_src elisp
|
||||
;; 1. Manually add the path to your load-path
|
||||
(add-to-list 'load-path "~/memex/projects/org-agent/src")
|
||||
(add-to-list 'load-path "~/memex/projects/passepartout/src")
|
||||
|
||||
;; 2. Explicitly load the file
|
||||
(require 'org-agent)
|
||||
(require 'opencortex)
|
||||
|
||||
;; 3. Configure the variables AFTER the package is loaded
|
||||
(setq org-agent-host "10.10.10.201")
|
||||
(setq org-agent-port 9105)
|
||||
(setq opencortex-host "10.10.10.201")
|
||||
(setq opencortex-port 9105)
|
||||
|
||||
(setq org-agent-executable-path nil)
|
||||
(setq opencortex-executable-path nil)
|
||||
;; 4. (Optional) Re-enable use-package features if you prefer
|
||||
(use-package org-agent
|
||||
(use-package opencortex
|
||||
:straight nil
|
||||
:commands (org-agent-connect org-agent-disconnect))
|
||||
(message "org-agent: Actuator manually verified at %s" org-agent-host)
|
||||
:commands (opencortex-connect opencortex-disconnect))
|
||||
(message "opencortex: Actuator manually verified at %s" opencortex-host)
|
||||
|
||||
|
||||
|
||||
;; (use-package org-agent
|
||||
;; (use-package opencortex
|
||||
;; :straight nil
|
||||
;; :load-path "~/memex/projects/org-agent/src" ;; Adjust this to your local clone path
|
||||
;; :commands (org-agent-connect org-agent-disconnect)
|
||||
;; :load-path "~/memex/projects/passepartout/src" ;; Adjust this to your local clone path
|
||||
;; :commands (opencortex-connect opencortex-disconnect)
|
||||
;; :init
|
||||
;; Remote connection settings
|
||||
;; (setq org-agent-host "10.10.10.43") ;; Your Docker server's IP
|
||||
;; (setq org-agent-port 9105) ;; Must match ORG_AGENT_DAEMON_PORT in .env
|
||||
;; (setq opencortex-host "10.10.10.43") ;; Your Docker server's IP
|
||||
;; (setq opencortex-port 9105) ;; Must match ORG_AGENT_DAEMON_PORT in .env
|
||||
|
||||
;; Optimization: Automatically connect when entering Org-mode (optional)
|
||||
;; :hook (org-mode . org-agent-connect)
|
||||
;; :hook (org-mode . opencortex-connect)
|
||||
;; :config
|
||||
;; Ensure Emacs is acting as a proper sensor
|
||||
;; (message "org-agent: Actuator configured for remote brain at %s"
|
||||
;; (org-agent-host))
|
||||
;; (message "opencortex: Actuator configured for remote brain at %s"
|
||||
;; (opencortex-host))
|
||||
;; )
|
||||
#+end_src
|
||||
|
||||
|
||||
|
Before Width: | Height: | Size: 44 KiB |
@@ -1,120 +0,0 @@
|
||||
#+TITLE: AI Configuration
|
||||
#+PROPERTY: header-args :tangle yes
|
||||
|
||||
* AI Settings
|
||||
|
||||
** Ellama
|
||||
|
||||
#+begin_src elisp :tangle yes
|
||||
;; YOU DON'T NEED NONE OF THIS CODE FOR SIMPLE INSTALL
|
||||
;; IT IS AN EXAMPLE OF CUSTOMIZATION.
|
||||
(use-package ellama
|
||||
:init
|
||||
(require 'llm-openai)
|
||||
;; setup key bindings
|
||||
(setq ellama-keymap-prefix "C-c e")
|
||||
)
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp ~/.emacs.d/custom.el :tangle yes
|
||||
(setopt ellama-providers
|
||||
'(
|
||||
;; Ollama Provider (added here with a name)
|
||||
("ollama" . (make-llm-ollama
|
||||
;; Consider a dedicated embedding model if gemma isn't ideal for it.
|
||||
:chat-model "gemma3:latest"
|
||||
:embedding-model "gemma3:latest" ; Or e.g., "nomic-embed-text"
|
||||
:default-chat-non-standard-params '(("num_ctx" . 8192))))
|
||||
|
||||
("openai" . (make-llm-openai
|
||||
:key (auth-source-pass-get "api-key" "www/openai.com/amr@gharbeia.net")
|
||||
:chat-model "gpt-4o"
|
||||
:embedding-model "text-embedding-3-large"))
|
||||
|
||||
("groq" . (make-llm-openai-compatible
|
||||
:url "https://api.groq.com/openai/v1"
|
||||
:key (auth-source-pass-get "api-key" "www/console.groq.com/groq@amr.gharbeia.net")
|
||||
;; Check Groq console for available models, these might change
|
||||
:chat-model "llama3-70b-8192" ; Example, verify on Groq
|
||||
:embedding-model "llama3-70b-8192")) ; Groq might not offer dedicated embedding models via this API
|
||||
))
|
||||
|
||||
;; --- Set Active Providers ---
|
||||
;; Choose your default provider from the list above by its name
|
||||
(setopt ellama-provider "ollama") ; Or "ollama", "openai", "groq"
|
||||
|
||||
;; You can specify different providers for different tasks if needed
|
||||
(setopt ellama-translation-provider "ollama")
|
||||
(setopt ellama-naming-provider "ollama")
|
||||
(setopt ellama-naming-scheme 'ellama-generate-name-by-llm)
|
||||
|
||||
(setq llm-debug t)
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp
|
||||
(use-package ellama
|
||||
:ensure t
|
||||
:bind ("C-c e" . ellama)
|
||||
;; send last message in chat buffer with C-c C-c
|
||||
:hook (org-ctrl-c-ctrl-c-final . ellama-chat-send-last-message)
|
||||
:init (setopt ellama-auto-scroll t)
|
||||
:config
|
||||
;; show ellama context in header line in all buffers
|
||||
(ellama-context-header-line-global-mode +1)
|
||||
;; show ellama session id in header line in all buffers
|
||||
(ellama-session-header-line-global-mode +1))
|
||||
#+end_src
|
||||
|
||||
** GPTel
|
||||
|
||||
#+begin_src elisp :tangle yes
|
||||
(use-package gptel)
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp :tangle yes
|
||||
(setq gptel-api-key (auth-source-pass-get "api-key" "www/console.groq.com/groq@amr.gharbeia.net"))
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp :tangle yes
|
||||
(gptel-make-openai "Groq" ;Any name you want
|
||||
:host "api.groq.com"
|
||||
:endpoint "/openai/v1/chat/completions"
|
||||
:stream t
|
||||
:key (auth-source-pass-get "api-key" "www/console.groq.com/groq@amr.gharbeia.net") ;can be a function that returns the key
|
||||
:models '(llama-3.1-70b-versatile
|
||||
llama-3.1-8b-instant
|
||||
llama3-70b-8192
|
||||
llama3-8b-8192
|
||||
mixtral-8x7b-32768
|
||||
gemma-7b-it))
|
||||
#+end_src
|
||||
|
||||
** Elisa
|
||||
|
||||
#+begin_src elisp :tangle yes
|
||||
(use-package elisa
|
||||
:defer t
|
||||
:init
|
||||
(setopt elisa-limit 5)
|
||||
(require 'llm-ollama)
|
||||
(setopt elisa-embeddings-provider (make-llm-ollama :embedding-model "nomic-embed-text"))
|
||||
(setopt elisa-chat-provider (make-llm-ollama
|
||||
:chat-model "sskostyaev/openchat:8k-rag"
|
||||
:embedding-model "nomic-embed-text"))
|
||||
)
|
||||
#+end_src
|
||||
|
||||
** Org-agent (Local Foundry)
|
||||
|
||||
#+begin_src elisp :tangle yes
|
||||
(use-package org-agent
|
||||
:straight nil
|
||||
:load-path "~/.local/share/org-agent/src"
|
||||
:commands (org-agent-connect org-agent-disconnect)
|
||||
:init
|
||||
(setq org-agent-host "127.0.0.1")
|
||||
(setq org-agent-port 9105)
|
||||
(setq org-agent-executable-path "~/.local/share/org-agent/bin/org-agent-server")
|
||||
:config
|
||||
(message "org-agent: Local brain configured at %s" org-agent-executable-path))
|
||||
#+end_src
|
||||
@@ -1,165 +0,0 @@
|
||||
#+TITLE: Core Emacs Configuration
|
||||
#+PROPERTY: header-args :tangle yes
|
||||
|
||||
* Initialization Bootstrap
|
||||
|
||||
This section tangles directly to ~/.emacs to bootstrap the entire system.
|
||||
|
||||
#+begin_src elisp :tangle ~/.emacs
|
||||
;;; .emacs --- Global settings -*- lexical-binding: t; -*-
|
||||
|
||||
(setq gc-cons-threshold (* 500 1024 1024))
|
||||
(add-hook 'after-init-hook (lambda () (setq gc-cons-threshold (* 5 1024 1024))))
|
||||
|
||||
(setq straight-repository-branch "develop")
|
||||
|
||||
(eval-and-compile
|
||||
(defvar bootstrap-version)
|
||||
(let ((bootstrap-file
|
||||
(expand-file-name "straight/repos/straight.el/bootstrap.el"
|
||||
(or (bound-and-true-p straight-base-dir)
|
||||
user-emacs-directory)))
|
||||
(bootstrap-version 7))
|
||||
(unless (file-exists-p bootstrap-file)
|
||||
(with-current-buffer
|
||||
(url-retrieve-synchronously "https://raw.githubusercontent.com/radian-software/straight.el/develop/install.el" 'silent 'inhibit-cookies)
|
||||
(goto-char (point-max))
|
||||
(eval-print-last-sexp)))
|
||||
(load bootstrap-file nil 'nomessage))
|
||||
|
||||
(straight-use-package 'use-package)
|
||||
(straight-use-package 'org))
|
||||
|
||||
(setq straight-use-package-by-default t)
|
||||
|
||||
(require 'ob-tangle)
|
||||
|
||||
;; Load the modular configuration starting from dotemacs.org
|
||||
(org-babel-load-file (expand-file-name "~/memex/system/dotemacs.org"))
|
||||
|
||||
(provide '.emacs)
|
||||
#+end_src
|
||||
|
||||
* Front matter
|
||||
|
||||
#+begin_src elisp
|
||||
;;; emacs-core.el --- Summary
|
||||
;;; Commentary:
|
||||
;;; Code:
|
||||
|
||||
;; -*- lexical-binding: t; -*-
|
||||
#+end_src
|
||||
|
||||
* Garbage collector
|
||||
|
||||
Increase threshold to 500 MB to ease startup
|
||||
#+begin_src elisp
|
||||
(setq gc-cons-threshold (* 500 1024 1024))
|
||||
#+end_src
|
||||
|
||||
Decrease threshold to 5 MB after init
|
||||
#+begin_src elisp
|
||||
(add-hook 'after-init-hook (lambda () (setq gc-cons-threshold (* 5 1024 1024))))
|
||||
#+end_src
|
||||
|
||||
* Straight.el and use-package
|
||||
|
||||
Integrate use-package and straight
|
||||
#+begin_src elisp
|
||||
(setq straight-use-package-by-default t)
|
||||
(require 'use-package)
|
||||
(straight-use-package 'diminish)
|
||||
(require 'diminish)
|
||||
#+end_src
|
||||
|
||||
Make sure Org is installed (straight.el)
|
||||
#+begin_src elisp
|
||||
(unless (file-directory-p (expand-file-name "~/.emacs.d/straight/versions")) (make-directory (expand-file-name "~/.emacs.d/straight/versions") t))
|
||||
(use-package org)
|
||||
#+end_src
|
||||
|
||||
* Custom file
|
||||
|
||||
#+begin_src elisp
|
||||
(setq custom-file (expand-file-name "custom.el" user-emacs-directory))
|
||||
(when (file-exists-p custom-file) (load custom-file))
|
||||
#+end_src
|
||||
|
||||
* System information
|
||||
|
||||
#+begin_src elisp
|
||||
(defvar my-laptop-p (equal (system-name) "lilitop"))
|
||||
(defvar my-server-p (and (equal (system-name) "localhost") (equal user-login-name "root")))
|
||||
(defvar my-phone-p (not (null (getenv "ANDROID_ROOT")))
|
||||
"If non-nil, GNU Emacs is running on Termux.")
|
||||
(when my-phone-p (defvar gnutls-algorithm-priority "NORMAL:-VERS-TLS1.3"))
|
||||
(global-auto-revert-mode) ; simplifies syncing
|
||||
#+end_src
|
||||
|
||||
* Persistent history
|
||||
|
||||
#+begin_src elisp
|
||||
(savehist-mode)
|
||||
#+end_src
|
||||
|
||||
* Disable Syntax Checkers (Diagnostic)
|
||||
|
||||
#+begin_src elisp
|
||||
(when (fboundp 'flycheck-mode)
|
||||
(setq flycheck-global-modes nil)
|
||||
(global-flycheck-mode -1))
|
||||
(when (fboundp 'flymake-mode)
|
||||
(setq help-at-pt-display-when-idle t)
|
||||
;; Disable flymake in all buffers
|
||||
(add-hook 'find-file-hook (lambda () (flymake-mode -1))))
|
||||
#+end_src
|
||||
|
||||
* Backup and versioning
|
||||
|
||||
#+begin_src emacs-lisp
|
||||
(use-package magit)
|
||||
#+end_src
|
||||
|
||||
* Personal information
|
||||
|
||||
#+begin_src elisp
|
||||
(setq user-full-name "Amr Gharbeia")
|
||||
(defvar email-address "amr@gharbeia.net")
|
||||
(defvar calendar-latitude 39.0)
|
||||
(defvar calendar-longitude -77.1)
|
||||
(defvar calendar-location-name "Washington, DC")
|
||||
(defvar calendar-time-zone -300)
|
||||
(defvar calendar-standard-time-zone-name "EST")
|
||||
(defvar calendar-daylight-time-zone-name "EDT")
|
||||
#+end_src
|
||||
|
||||
* Saving Emacs Sessions
|
||||
|
||||
Close frame when done
|
||||
#+begin_src elisp
|
||||
(add-hook 'server-done-hook (lambda () (delete-frame)))
|
||||
#+end_src
|
||||
|
||||
Save desktop session
|
||||
#+begin_src elisp
|
||||
(desktop-save-mode t)
|
||||
#+end_src
|
||||
|
||||
* Security
|
||||
|
||||
#+begin_src elisp
|
||||
(use-package password-store)
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp
|
||||
(use-package auth-source
|
||||
:config (auth-source-pass-enable)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
* End matter
|
||||
|
||||
#+begin_src elisp
|
||||
(provide 'emacs-core)
|
||||
;;; emacs-core.el ends here
|
||||
#+end_src
|
||||
@@ -1,18 +0,0 @@
|
||||
#+TITLE: Early Init Configuration
|
||||
#+PROPERTY: header-args :tangle ~/.emacs.d/early-init.el
|
||||
|
||||
* early-init.el
|
||||
|
||||
For straight.el to pick up before package.el
|
||||
|
||||
#+begin_src elisp
|
||||
(setq package-enable-at-startup nil)
|
||||
#+end_src
|
||||
|
||||
* Run Emacs as a server
|
||||
|
||||
#+begin_src elisp
|
||||
(require 'server)
|
||||
(unless (server-running-p) (server-start))
|
||||
(defvar server-max-buffers 100)
|
||||
#+end_src
|
||||
@@ -1,166 +0,0 @@
|
||||
#+TITLE: GTD & Agenda Configuration
|
||||
#+PROPERTY: header-args :tangle yes
|
||||
|
||||
* Agenda
|
||||
|
||||
Basic agenda settings
|
||||
#+begin_src elisp
|
||||
(setq org-deadline-warning-days 7)
|
||||
(setq org-agenda-skip-additional-timestamps-same-entry t)
|
||||
(setq org-agenda-span 'fortnight)
|
||||
(setq org-agenda-tags-column 'auto)
|
||||
(setq org-agenda-skip-scheduled-if-deadline-is-shown t)
|
||||
#+end_src
|
||||
|
||||
Agenda files
|
||||
#+begin_src elisp
|
||||
(setq org-agenda-files (list
|
||||
(concat org-directory "/inbox.org")
|
||||
(concat org-directory "/gtd.org")
|
||||
(concat org-directory "/org-gtd-tasks.org")
|
||||
)
|
||||
)
|
||||
|
||||
#+end_src
|
||||
|
||||
Better agenda views
|
||||
#+begin_src elisp :tangle yes
|
||||
(use-package org-super-agenda)
|
||||
#+end_src
|
||||
|
||||
* To-do
|
||||
|
||||
Basic todo
|
||||
#+begin_src elisp
|
||||
(setq org-todo-keywords
|
||||
'(
|
||||
(sequence "TODO(t)" "NEXT(n)" "WAIT(w@/!)" "|" "DONE(d!)" "CNCL(c@)")
|
||||
)
|
||||
)
|
||||
|
||||
(setq org-todo-keyword-faces
|
||||
'(
|
||||
("TODO" :foreground "red" :weight bold)
|
||||
("NEXT" :foreground "red" :weight bold)
|
||||
("WAIT" :foreground "yellow" :weight bold)
|
||||
("DONE" :foreground "green" :weight bold)
|
||||
("CNCL" :foreground "blue" :weight bold)
|
||||
)
|
||||
)
|
||||
|
||||
(setq org-enforce-todo-dependencies t)
|
||||
(setq org-tags-exclude-from-inheritance '("crypt" "!private"))
|
||||
#+end_src
|
||||
|
||||
Switch entry to 'DONE' when all subentries are done
|
||||
#+begin_src elisp
|
||||
(defun org-summary-todo (n-done n-not-done)
|
||||
"Switch entry to 'DONE' when all subentries are done, to 'TODO' otherwise.
|
||||
Uses N-DONE and N-NOT-DONE"
|
||||
(let (org-log-done org-log-states) ; turn off logging
|
||||
(org-todo (if (= n-not-done 0) "DONE" "TODO")
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
;; (add-hook 'org-after-todo-statistics-hook #'org-summary-todo)
|
||||
#+end_src
|
||||
|
||||
* Getting Things Done (GTD)
|
||||
|
||||
#+begin_src elisp
|
||||
(use-package f)
|
||||
(use-package dash)
|
||||
(use-package s)
|
||||
(use-package org-edna
|
||||
:config
|
||||
(setq org-edna-use-inheritance t)
|
||||
(org-edna-mode))
|
||||
|
||||
(use-package org-gtd
|
||||
:straight (org-gtd :type git :host github :repo "Trevoke/org-gtd.el")
|
||||
:demand t
|
||||
:init (setq org-gtd-update-ack "4.0.0")
|
||||
:config
|
||||
(setq org-gtd-keyword-mapping
|
||||
'((todo . "TODO")
|
||||
(next . "NEXT")
|
||||
(wait . "WAIT")
|
||||
(done . "DONE")
|
||||
(canceled . "CNCL")))
|
||||
(setq org-gtd-custom-node-paths
|
||||
(list (list "Actionable" (expand-file-name "~/memex/gtd.org") "Actions")
|
||||
(list "Legacy" (expand-file-name "~/memex/org-gtd-tasks.org") "Actions")
|
||||
(list "Projects" (expand-file-name "~/memex/gtd.org") "Projects")
|
||||
(list "Incubate" (expand-file-name "~/memex/gtd.org") "Incubate")))
|
||||
(org-gtd-mode)
|
||||
)
|
||||
|
||||
(global-set-key (kbd "C-c d c") #'org-gtd-capture)
|
||||
(global-set-key (kbd "C-c d e") #'org-gtd-engage)
|
||||
(global-set-key (kbd "C-c d p") #'org-gtd-process-inbox)
|
||||
(with-eval-after-load 'org-gtd
|
||||
(define-key org-gtd-clarify-map (kbd "C-c c") #'org-gtd-organize))
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp
|
||||
(setq org-gtd-directory org-directory)
|
||||
(setq org-gtd-organize-hooks '(org-gtd-set-area-of-focus))
|
||||
(setq org-gtd-areas-of-focus '(
|
||||
"Atoms"
|
||||
"Bits"
|
||||
"Cells"
|
||||
"Flags"
|
||||
"Business"
|
||||
"Wealth"
|
||||
"Learning"
|
||||
"Skills"
|
||||
"Privacy"
|
||||
"Archive"
|
||||
"Library"
|
||||
"Writing"
|
||||
"Health"
|
||||
"Home"
|
||||
"Family"
|
||||
"Social"
|
||||
"Egypt"
|
||||
)
|
||||
)
|
||||
(setq org-gtd-clarify-show-horizons 'right)
|
||||
#+end_src
|
||||
|
||||
Logging
|
||||
#+begin_src elisp
|
||||
(setq org-log-into-drawer "LOGBOOK")
|
||||
#+end_src
|
||||
|
||||
Clocking work in drawer
|
||||
#+begin_src elisp :tangle yes
|
||||
(setq org-clock-into-drawer t)
|
||||
#+end_src
|
||||
|
||||
Habits
|
||||
#+begin_src elisp :tangle yes
|
||||
(setq org-habit-graph-column 80)
|
||||
(setq org-habit-show-habits-only-for-today nil)
|
||||
#+end_src
|
||||
|
||||
* Refile
|
||||
|
||||
org-refile targets
|
||||
#+begin_src elisp
|
||||
(setq org-refile-targets '((nil :maxlevel . 9)
|
||||
(org-agenda-files :maxlevel . 9)
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
Set type of refile targets completion
|
||||
#+begin_src elisp
|
||||
(setq org-outline-path-complete-in-steps nil)
|
||||
#+end_src
|
||||
|
||||
Allow refiling to new parents created on the go after confirmation
|
||||
#+begin_src elisp
|
||||
(setq org-refile-allow-creating-parent-nodes 'confirm)
|
||||
#+end_src
|
||||
@@ -1,101 +0,0 @@
|
||||
#+TITLE: Media and Books Configuration
|
||||
#+PROPERTY: header-args :tangle yes
|
||||
|
||||
* Read ebooks (calibredb)
|
||||
|
||||
#+begin_src elisp
|
||||
(use-package calibredb
|
||||
:defer t
|
||||
:config
|
||||
(setq calibredb-format-all-the-icons t)
|
||||
(setq calibredb-format-icons-in-terminal t))
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp
|
||||
(defvar calibredb-root-dir (expand-file-name "~/memex/library/books"))
|
||||
(defvar calibredb-db-dir (expand-file-name "metadata.db" calibredb-root-dir))
|
||||
(defvar calibredb-id-width 6)
|
||||
(defvar calibredb-title-width 100)
|
||||
#+end_src
|
||||
|
||||
* PDF Tools
|
||||
|
||||
#+begin_src elisp
|
||||
(use-package pdf-tools
|
||||
:mode ("\\.pdf\\'" . pdf-view-mode)
|
||||
:config
|
||||
(pdf-tools-install :no-query)
|
||||
(setq-default pdf-view-display-size 'fit-page)
|
||||
(setq pdf-annot-activate-created-annotations t))
|
||||
#+end_src
|
||||
|
||||
* Annotate PDFs and EPUBs (org-noter)
|
||||
|
||||
#+begin_src elisp
|
||||
(use-package org-noter
|
||||
:config
|
||||
(setq org-noter-notes-search-path (list (expand-file-name "~/memex/library/books")))
|
||||
(setq org-noter-default-notes-file-names '("books.org")))
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp :tangle ~/.emacs.d/custom.el
|
||||
(defvar org-noter-notes-search-path (list (concat org-directory "/library/books")))
|
||||
(defvar org-noter-default-notes-file-names '("books.org"))
|
||||
#+end_src
|
||||
|
||||
* Link PDFs (org-noter-pdftools)
|
||||
|
||||
#+begin_src elisp
|
||||
(use-package org-noter-pdftools
|
||||
:after org-noter
|
||||
:config
|
||||
;; Add a function to ensure precise note is inserted
|
||||
(defun org-noter-pdftools-insert-precise-note (&optional toggle-no-questions)
|
||||
(interactive "P")
|
||||
(org-noter--with-valid-session
|
||||
(let ((org-noter-insert-note-no-questions (if toggle-no-questions
|
||||
(not org-noter-insert-note-no-questions)
|
||||
org-noter-insert-note-no-questions))
|
||||
(org-pdftools-use-isearch-link t)
|
||||
(org-pdftools-use-freepointer-annot t))
|
||||
(org-noter-insert-note (org-noter--get-precise-info)))))
|
||||
|
||||
;; fix https://github.com/weirdNox/org-noter/pull/93/commits/f8349ae7575e599f375de1be6be2d0d5de4e6cbf
|
||||
(defun org-noter-set-start-location (&optional arg)
|
||||
"When opening a session with this document, go to the current location.
|
||||
With a prefix ARG, remove start location."
|
||||
(interactive "P")
|
||||
(org-noter--with-valid-session
|
||||
(let ((inhibit-read-only t)
|
||||
(ast (org-noter--parse-root))
|
||||
(location (org-noter--doc-approx-location (when (called-interactively-p 'any) 'interactive))))
|
||||
(with-current-buffer (org-noter--session-notes-buffer session)
|
||||
(org-with-wide-buffer
|
||||
(goto-char (org-element-property :begin ast))
|
||||
(if arg
|
||||
(org-entry-delete nil org-noter-property-note-location)
|
||||
(org-entry-put nil org-noter-property-note-location
|
||||
(org-noter--pretty-print-location location))))))))
|
||||
(with-eval-after-load 'pdf-annot
|
||||
(add-hook 'pdf-annot-activate-handler-functions #'org-noter-pdftools-jump-to-note)
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
* View EPUBs (nov.el)
|
||||
|
||||
#+begin_src elisp :tangle yes
|
||||
(use-package nov
|
||||
:config
|
||||
(add-to-list 'auto-mode-alist '("\\.epub\\'" . nov-mode))
|
||||
)
|
||||
#+end_src
|
||||
|
||||
* Zotero (helm-bibtex)
|
||||
#+begin_src elisp :tangle yes
|
||||
(use-package helm-bibtex)
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp :tangle ~/.emacs.d/custom.el
|
||||
(defvar bibtex-completion-bibliography '("~/bibliography/zotero.bib"))
|
||||
#+end_src
|
||||
@@ -1,233 +0,0 @@
|
||||
#+TITLE: Org Mode Configuration
|
||||
#+PROPERTY: header-args :tangle yes
|
||||
|
||||
* Org Mode
|
||||
|
||||
** Basic setup
|
||||
|
||||
#+begin_src elisp
|
||||
(use-package org
|
||||
:config
|
||||
(defvar org-outline-path-complete-in-steps nil)
|
||||
:bind (("C-c l" . org-store-link)
|
||||
("C-c a" . org-agenda)
|
||||
("C-c c" . org-capture)
|
||||
:map org-mode-map)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp
|
||||
(setq org-directory (expand-file-name "~/memex/"))
|
||||
#+end_src
|
||||
|
||||
** Looks
|
||||
|
||||
Basic
|
||||
#+begin_src elisp
|
||||
(defvar org-pretty-entities t) ; Improve org mode looks
|
||||
(defvar org-hide-emphasis-markers t) ; Hide emphasis markup
|
||||
(defvar org-num-mode nil)
|
||||
(defvar org-startup-folded 'shw2levels)
|
||||
#+end_src
|
||||
|
||||
Indentation of headers
|
||||
#+begin_src elisp
|
||||
(defvar org-startup-indented t) ; Indent org heirarchy
|
||||
(defvar org-adapt-indentation t)
|
||||
(defvar org-hide-leading-stars t) ; Minimal Outline
|
||||
(defvar org-odd-levels-only nil)
|
||||
#+end_src
|
||||
|
||||
Indentation of lists
|
||||
#+begin_src elisp
|
||||
(setq org-list-demote-modify-bullet t)
|
||||
#+end_src
|
||||
|
||||
Org-modern
|
||||
#+begin_src elisp
|
||||
(use-package org-modern
|
||||
:ensure t
|
||||
:config
|
||||
;; Choose some fonts
|
||||
(set-face-attribute 'default nil :family "sans-serif")
|
||||
(set-face-attribute 'variable-pitch nil :family "sans-serif")
|
||||
(set-face-attribute 'org-modern-symbol nil :family "Iosevka")
|
||||
|
||||
;; Edit settings
|
||||
(defvar org-auto-align-tags nil)
|
||||
(defvar org-tags-column 0)
|
||||
(defvar org-catch-invisible-edits 'show-and-error)
|
||||
(defvar org-special-ctrl-a/e t)
|
||||
(defvar org-insert-heading-respect-content t)
|
||||
|
||||
;; Org styling, hide markup etc.
|
||||
(defvar org-hide-emphasis-markers t)
|
||||
(defvar org-pretty-entities t)
|
||||
|
||||
;; Agenda styling
|
||||
(defvar org-agenda-tags-column 0)
|
||||
(defvar org-agenda-block-separator ?─)
|
||||
(defvar org-agenda-time-grid
|
||||
'((daily today require-timed)
|
||||
(800 1000 1200 1400 1600 1800 2000)
|
||||
" ┄┄┄┄┄ " "┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄"))
|
||||
(defvar org-agenda-current-time-string
|
||||
"◀── now ─────────────────────────────────────────────────")
|
||||
|
||||
;; Ellipsis styling
|
||||
(defvar org-ellipsis "…")
|
||||
(set-face-attribute 'org-ellipsis nil :inherit 'default :box nil)
|
||||
|
||||
(global-org-modern-mode)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
Highlight Sourcecode Syntax
|
||||
#+begin_src elisp
|
||||
(setq org-src-fontify-natively t)
|
||||
(setq org-src-tab-acts-natively t)
|
||||
#+end_src
|
||||
|
||||
Images
|
||||
#+begin_src elisp
|
||||
(setq org-startup-with-inline-images t)
|
||||
(setq org-image-actual-width '(300))
|
||||
#+end_src
|
||||
|
||||
** Capture
|
||||
|
||||
#+begin_src elisp
|
||||
(defvar org-default-notes-file (concat org-directory "inbox.org"))
|
||||
#+end_src
|
||||
|
||||
*** Org-protocol
|
||||
|
||||
Linux configuration
|
||||
#+begin_src bash :tangle yes
|
||||
[Desktop Entry]
|
||||
Name=org-protocol
|
||||
Comment=Intercept calls from emacsclient to trigger custom actions
|
||||
Categories=Other;
|
||||
Keywords=org-protocol;
|
||||
Icon=emacs
|
||||
Type=Application
|
||||
Exec=emacsclient -- %u
|
||||
Terminal=false
|
||||
StartupWMClass=Emacs
|
||||
MimeType=x-scheme-handler/org-protocol;
|
||||
#+end_src
|
||||
|
||||
#+begin_src bash :tangle yes
|
||||
update-desktop-database ~/.local/share/applications/
|
||||
#+end_src
|
||||
|
||||
Basic configuration
|
||||
#+begin_src elisp
|
||||
(require 'org-protocol)
|
||||
(setq org-protocol-default-buffer-for-file-links "*scratch*") ; fixes 'no buffers remain to edit error for org-protocol capturer
|
||||
#+end_src
|
||||
|
||||
Org-protocol templates
|
||||
#+begin_src elisp :tangle ~/.emacs.d/custom.el
|
||||
(defvar org-capture-templates '(
|
||||
("p" "Protocol"
|
||||
entry
|
||||
(file "inbox.org")
|
||||
"* %^{Title}\nSource: %u, %c\n #+BEGIN_QUOTE\n%i\n#+END_QUOTE\n\n\n%?"
|
||||
)
|
||||
("L" "Protocol Link"
|
||||
entry
|
||||
(file "inbox.org")
|
||||
"* %? [[%:link][%:description]]\n:PROPERTIES:\n:TITLE: %:description\n:URI: %:link\n:CREATED: %U\n:END:"
|
||||
:prepend nil
|
||||
:empty-lines 1
|
||||
:created t
|
||||
:kill-buffer t
|
||||
)
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp
|
||||
(setq org-protocol-default-template-key "L")
|
||||
#+end_src
|
||||
|
||||
Convert Orgzly captures to org-protocol captures standard
|
||||
#+begin_src elisp
|
||||
(defun my/org-convert-orgzly-to-org-protocol ()
|
||||
"Reformat Orgzly bookmark at point to org-protocol bookmark."
|
||||
(interactive)
|
||||
(when (org-at-heading-p)
|
||||
(let ((headline (nth 4 (org-heading-components))))
|
||||
;; Find and store the link. Delete the link line.
|
||||
(search-forward-regexp "^https?://\\S-*" nil t)
|
||||
(let ((link (match-string 0)))
|
||||
(beginning-of-line)
|
||||
(kill-line)
|
||||
;; Delete any trailing blank spaces
|
||||
(org-back-to-heading)
|
||||
(end-of-line)
|
||||
(when (not (org-on-heading-p))
|
||||
(delete-char 1)
|
||||
)
|
||||
;; Set new headline
|
||||
(goto-char (org-entry-beginning-position))
|
||||
(org-edit-headline (format "[[%s][%s]]" link headline))
|
||||
;; Set new properties
|
||||
(org-set-property "TITLE" headline)
|
||||
(org-set-property "URI" link)
|
||||
(message "Reformatted Orgzly bookmark at point to org-protocol bookmark")
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
** Exporting
|
||||
|
||||
#+begin_src elisp :tangle yes
|
||||
(setq org-export-with-smart-quotes t)
|
||||
(setq org-export-backends '(beamer html latex md))
|
||||
#+end_src
|
||||
|
||||
Export to EPUB
|
||||
#+begin_src elisp :tangle yes
|
||||
(use-package ox-epub)
|
||||
#+end_src
|
||||
|
||||
** org-attach
|
||||
|
||||
#+begin_src elisp
|
||||
(setq org-attach-id-dir (concat org-directory "/library"))
|
||||
#+end_src
|
||||
|
||||
** Enable shell scripting support in org-babel
|
||||
|
||||
#+begin_src elisp
|
||||
(defvar org-babel-do-load-languages 'org-babel-load-languages '((shell . t)))
|
||||
#+end_src
|
||||
|
||||
** Insert org-mode links from clipboard
|
||||
#+begin_src elisp :tangle yes
|
||||
(use-package org-cliplink
|
||||
:bind
|
||||
(("C-x p i" . org-cliplink))
|
||||
)
|
||||
#+end_src
|
||||
|
||||
** Deft
|
||||
#+begin_src elisp :tangle yes
|
||||
(use-package deft
|
||||
:commands (deft)
|
||||
:init
|
||||
(defvar deft-extensions '("org"))
|
||||
(defvar deft-recursive nil)
|
||||
(defvar deft-use-filename-as-title t)
|
||||
:config
|
||||
(defvar deft-directory org-directory)
|
||||
(defvar deft-recursive t)
|
||||
(defvar deft-strip-summary-regexp ":PROPERTIES:\n\\(.+\n\\)+:END:\n")
|
||||
(defvar deft-use-filename-as-title t)
|
||||
:bind ("C-c n d" . deft)
|
||||
)
|
||||
#+end_src
|
||||
@@ -1,140 +0,0 @@
|
||||
#+TITLE: Org-Roam Configuration
|
||||
#+PROPERTY: header-args :tangle yes
|
||||
|
||||
* Org-roam
|
||||
|
||||
** Basic org-roam setup
|
||||
|
||||
#+begin_src elisp
|
||||
(use-package org-roam
|
||||
:init (setq org-roam-v2-ack t) ;; Acknowledge V2 upgrade
|
||||
:after org
|
||||
:config
|
||||
(org-roam-db-autosync-enable)
|
||||
(require 'org-roam-dailies)
|
||||
:bind (
|
||||
("C-c n f" . org-roam-node-find)
|
||||
("C-c n g" . org-roam-graph)
|
||||
("C-c n r" . org-roam-node-random)
|
||||
("C-c n h" . org-roam-node-convert-headline)
|
||||
("C-c n i" . org-roam-node-insert)
|
||||
("C-c n o" . org-id-get-create)
|
||||
("C-c n t" . org-roam-tag-add)
|
||||
("C-c n a" . org-roam-alias-add)
|
||||
("C-c n l" . org-roam-buffer-display-dedicated)
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp
|
||||
(setq org-roam-directory (expand-file-name (concat org-directory "notes")))
|
||||
(setq org-roam-dailies-directory (expand-file-name (concat org-directory "daily")))
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp :tangle yes
|
||||
(use-package sqlite3)
|
||||
(require 'sqlite3)
|
||||
#+end_src
|
||||
|
||||
Include subdirectories in org-roam
|
||||
#+begin_src elisp
|
||||
(setq org-roam-file-exclude-regexp "^[.][.]?/")
|
||||
#+end_src
|
||||
|
||||
** Display in org-roam-buffer
|
||||
#+begin_src elisp :tangle yes
|
||||
(setq org-roam-mode-sections
|
||||
(list #'org-roam-backlinks-section
|
||||
#'org-roam-reflinks-section
|
||||
#'org-roam-unlinked-references-section
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
** Filter org-roam nodes find by tag
|
||||
|
||||
#+begin_src elisp :tangle yes
|
||||
(defun my/org-roam-node-has-tag (node tag)
|
||||
"Filter function to check if the given NODE has the specified TAG."
|
||||
(member tag (org-roam-node-tags node))
|
||||
)
|
||||
|
||||
(defun my/org-roam-node-find-by-tag ()
|
||||
"Find and open an Org-roam node based on a specified tag."
|
||||
(interactive)
|
||||
(let ((tag (read-string "Enter tag: ")))
|
||||
(org-roam-node-find nil nil (lambda (node) (my/org-roam-node-has-tag node tag))))
|
||||
)
|
||||
#+end_src
|
||||
|
||||
** org-roam-capture templates
|
||||
#+begin_src elisp
|
||||
(setq org-roam-capture-templates
|
||||
'(
|
||||
("L" "link" plain
|
||||
(function org-roam--capture-get-point)
|
||||
"%?"
|
||||
:file-name "web/%<%Y-%m-%dT%H%M%S>.org"
|
||||
:head "#+TITLE: ${title}\n#+CREATED: %<%Y-%m-%dT%H%M%S>"
|
||||
:immediate-finish t
|
||||
:unnarrowed t
|
||||
)
|
||||
|
||||
("h" "hugo post" plain
|
||||
"%?"
|
||||
:target (file+head "posts/${slug}.org"
|
||||
"#+TITLE: ${title}\n#+DATE: %U\n#+HUGO_BASE_DIR: ~/gharbeia.net\n#+HUGO_SECTION: ./posts\n#+HUGO_AUTO_SET_LASTMOD: t\n#+HUGO_TAGS: article\n#+HUGO_DRAFT: true\n")
|
||||
:immediate-finish t
|
||||
:unnarrowed t
|
||||
)
|
||||
|
||||
("p" "person" plain
|
||||
"%?"
|
||||
:if-new (file+head "people/${slug}.org"
|
||||
"#+TITLE: ${title}")
|
||||
:immediate-finish t
|
||||
:unnarrowed t
|
||||
)
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp
|
||||
(setq org-roam-dailies-capture-templates
|
||||
'(
|
||||
("d" "daily" plain
|
||||
""
|
||||
:target ("file+heaed %<%Y-%m-%d>.org" "#+title: %<%Y-%m-%d>\n\n")
|
||||
:immediate-finish t
|
||||
)
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
** Move org header to org-roam-daily
|
||||
|
||||
#+begin_src elisp :tangle yes
|
||||
(defun my/org-move-entry-to-daily-notes ()
|
||||
"Move the current org-mode headline to the daily notes file based on its :CREATED: property."
|
||||
(interactive)
|
||||
(let*
|
||||
(
|
||||
(created-prop (org-entry-get nil "CREATED"))
|
||||
(created-date (when created-prop
|
||||
(org-parse-time-string created-prop)))
|
||||
(year (nth 5 created-date)) ; Extract year (6th element)
|
||||
(month (nth 4 created-date)) ; Extract month (5th element)
|
||||
(day (nth 3 created-date)) ; Extract day (4th element)
|
||||
(target-date (format "%04d-%02d-%02d" year month day)) ; Format date string
|
||||
(target-file (org-roam-dailies-goto target-date))
|
||||
)
|
||||
(when target-file
|
||||
(org-cut-subtree)
|
||||
(find-file target-file)
|
||||
(goto-char (point-max))
|
||||
(unless (bolp) (newline))
|
||||
(org-paste-subtree)
|
||||
)
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
@@ -1,73 +0,0 @@
|
||||
#+TITLE: Shell Configuration
|
||||
#+PROPERTY: header-args :tangle yes
|
||||
|
||||
* Shell
|
||||
|
||||
** Bash completion
|
||||
|
||||
#+begin_src elisp
|
||||
(use-package bash-completion
|
||||
:config
|
||||
(require 'bash-completion)
|
||||
(bash-completion-setup)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp
|
||||
(defvar shell-dynamic-complete-functions t)
|
||||
#+end_src
|
||||
|
||||
** Eshell
|
||||
|
||||
Add programmable bash completion to Emacs shell-mode
|
||||
#+begin_src elisp :tangle yes
|
||||
(require 'bash-completion)
|
||||
(add-hook 'eshell-mode-hook
|
||||
(lambda ()
|
||||
(add-hook 'completion-at-point-functions
|
||||
'bash-completion-capf-nonexclusive nil t
|
||||
)
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
Use colors in eshell
|
||||
#+begin_src elisp :tangle yes
|
||||
(use-package xterm-color
|
||||
:commands (xterm-color-filter)
|
||||
)
|
||||
|
||||
(use-package eshell
|
||||
:after xterm-color
|
||||
:config
|
||||
(define-key eshell-hist-mode-map (kbd "M-r") #'consult-history)
|
||||
(add-hook 'eshell-mode-hook
|
||||
(lambda ()
|
||||
(setenv "TERM" "xterm-256color")))
|
||||
(add-hook 'eshell-before-prompt-hook (setq xterm-color-preserve-properties t))
|
||||
(add-to-list 'eshell-preoutput-filter-functions 'xterm-color-filter)
|
||||
(setq eshell-output-filter-functions
|
||||
(remove 'eshell-handle-ansi-color eshell-output-filter-functions)
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
Eshell completion
|
||||
#+begin_src elisp :tangle yes
|
||||
(add-hook 'eshell-mode-hook
|
||||
(lambda ()
|
||||
(add-hook 'completion-at-point-functions
|
||||
'bash-completion-capf-nonexclusive nil t)))
|
||||
#+end_src
|
||||
|
||||
Emulate A Terminal (EAT)
|
||||
#+begin_src elisp :tangle yes
|
||||
(use-package eat
|
||||
:config
|
||||
;; For `eat-eshell-mode'.
|
||||
(add-hook 'eshell-load-hook #'eat-eshell-mode)
|
||||
|
||||
;; For `eat-eshell-visual-command-mode'.
|
||||
(add-hook 'eshell-load-hook #'eat-eshell-visual-command-mode)
|
||||
)
|
||||
#+end_src
|
||||
@@ -1,254 +0,0 @@
|
||||
#+TITLE: Reading and Writing Configuration
|
||||
#+PROPERTY: header-args :tangle yes
|
||||
|
||||
* Text and Case
|
||||
|
||||
** Convert DOuble capitals to single capitals
|
||||
|
||||
#+begin_src elisp :tangle yes
|
||||
(defun my/dcaps-to-scaps ()
|
||||
"Convert word in DOuble CApitals to Single Capitals."
|
||||
(interactive)
|
||||
(and (= ?w (char-syntax (char-before)))
|
||||
(save-excursion
|
||||
(and (if (called-interactively-p)
|
||||
(skip-syntax-backward "w")
|
||||
(= -3 (skip-syntax-backward "w"))
|
||||
)
|
||||
(let (case-fold-search)
|
||||
(looking-at "\\b[[:upper:]]\\{2\\}[[:lower:]]")
|
||||
)
|
||||
(capitalize-word 1)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
Then, let’s define a minor mode for it to be activated.
|
||||
#+begin_src elisp :tangle yes
|
||||
(define-minor-mode my-dubcaps-mode
|
||||
"Toggle 'my-dubcaps-mode' and convert words in DOuble CApitals to Single Capitals as you type."
|
||||
:init-value nil
|
||||
:lighter (" DC")
|
||||
(if my-dubcaps-mode
|
||||
(add-hook 'post-self-insert-hook #'my/dcaps-to-scaps nil 'local)
|
||||
(remove-hook 'post-self-insert-hook #'my/dcaps-to-scaps 'local)))
|
||||
#+end_src
|
||||
|
||||
Finally, let’s add a hook so that it is on for all the text files Emacs opens.
|
||||
#+begin_src elisp :tangle yes
|
||||
(add-hook 'text-mode-hook #'my-dubcaps-mode)
|
||||
#+end_src
|
||||
|
||||
Also, since we add a minor mode string (it might be useful sometimes), currently I prefer to diminish it.
|
||||
#+begin_src elisp :tangle yes
|
||||
(defun my/diminish-dubcaps ()
|
||||
(interactive)
|
||||
(diminish 'my-dubcaps-mode ""))
|
||||
(add-hook 'my-dubcaps-mode-hook 'my/diminish-dubcaps)
|
||||
#+end_src
|
||||
|
||||
* Reading and Writing
|
||||
|
||||
** Move correctly over camelCased words
|
||||
|
||||
#+begin_src elisp
|
||||
(subword-mode)
|
||||
#+end_src
|
||||
|
||||
** Understand the more common sentence with double space
|
||||
|
||||
#+begin_src elisp
|
||||
(setq sentence-end-double-space nil)
|
||||
#+end_src
|
||||
|
||||
** Join lines into paragraph
|
||||
|
||||
#+begin_src elisp
|
||||
(defun my/fill-or-unfill-paragraph (&optional unfill region)
|
||||
"Fill paragraph (or REGION). With the prefix argument UNFILL, fill it instead."
|
||||
(interactive (progn
|
||||
(barf-if-buffer-read-only)
|
||||
(list (if current-prefix-arg 'fill) t)))
|
||||
(let ((fill-column (if unfill fill-column (point-max))))
|
||||
(fill-paragraph nil region)))
|
||||
|
||||
(bind-key "M-q" 'my/fill-or-unfill-paragraph)
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp
|
||||
(defun my/fill-or-unfill-all-paragraphs (&optional unfill)
|
||||
"Fill or unfill all paragraphs in the current buffer.
|
||||
With the prefix argument UNFILL, fill them instead."
|
||||
(interactive (list (if current-prefix-arg 'fill)))
|
||||
(let ((fill-column (if unfill fill-column (point-max))))
|
||||
(save-excursion
|
||||
(goto-char (point-min))
|
||||
(while (not (eobp))
|
||||
(fill-paragraph nil t)
|
||||
(forward-paragraph)))))
|
||||
|
||||
(bind-key "M-Q" 'my/fill-or-unfill-all-paragraphs)
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp
|
||||
(remove-hook 'text-mode-hook #'turn-on-auto-fill)
|
||||
(add-hook 'text-mode-hook 'turn-on-visual-line-mode)
|
||||
#+end_src
|
||||
|
||||
** Expand some words with auto-correct
|
||||
|
||||
#+begin_src elisp :tangle yes
|
||||
(setq save-abbrevs 'silently)
|
||||
(setq-default abbrev-mode t)
|
||||
#+end_src
|
||||
|
||||
** ediff
|
||||
|
||||
#+begin_src elisp :tangle yes
|
||||
(setq ediff-window-setup-function 'ediff-setup-windows-plain)
|
||||
(setq ediff-split-window-function 'split-window-horizontally)
|
||||
#+end_src
|
||||
|
||||
** tramp
|
||||
|
||||
#+begin_src elisp :tangle yes
|
||||
(setq tramp-default-method "ssh"
|
||||
tramp-backup-directory-alist backup-directory-alist
|
||||
tramp-ssh-controlmaster-options "ssh")
|
||||
#+end_src
|
||||
|
||||
** Clean up space
|
||||
#+begin_src elisp :tangle yes
|
||||
(bind-key "M-SPC" 'cycle-spacing)
|
||||
#+end_src
|
||||
|
||||
** Transform <a href> links into org links
|
||||
|
||||
#+begin_src elisp :tangle yes
|
||||
(defun my/transform-html-links-to-org ()
|
||||
"Transform all HTML <a> links in the current buffer into 'org-mode' links."
|
||||
(interactive)
|
||||
(goto-char (point-min))
|
||||
(while (re-search-forward "<a href=\"\\(.*?\\)\">\\(.*?\\)</a>" nil t)
|
||||
(replace-match (org-make-link-string (match-string 1) (match-string 2)))))
|
||||
#+end_src
|
||||
|
||||
** Count words per minute
|
||||
#+begin_src elisp :tangle yes
|
||||
(require 'org-clock)
|
||||
(defun my/org-entry-wpm ()
|
||||
(interactive)
|
||||
(save-restriction
|
||||
(save-excursion
|
||||
(org-narrow-to-subtree)
|
||||
(goto-char (point-min))
|
||||
(let* ((words (count-words-region (point-min) (point-max)))
|
||||
|
||||
(minutes (org-clock-sum-current-item))
|
||||
(wpm (/ words minutes)))
|
||||
(message "WPM: %d (words: %d, minutes: %d)" wpm words minutes)
|
||||
(kill-new (number-to-string wpm))
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
** Enable dict mode
|
||||
#+begin_src elisp :tangle yes
|
||||
(setq dictionary-server "automatic")
|
||||
#+end_src
|
||||
|
||||
** Pick out passive voice and weasel words
|
||||
#+begin_src elisp :tangle yes
|
||||
(use-package writegood-mode
|
||||
:diminish writegood-mode
|
||||
:config
|
||||
(progn (add-hook 'text-mode-hook 'writegood-mode))
|
||||
)
|
||||
#+end_src
|
||||
|
||||
** Org-babel docker
|
||||
#+begin_src elisp :tangle yes
|
||||
(use-package ob-docker-build
|
||||
:straight (ob-docker-build :type git :host github :repo "ifitzpat/ob-docker-build")
|
||||
:defer t
|
||||
:config
|
||||
(add-to-list 'org-babel-load-languages '(docker-build . t))
|
||||
(org-babel-do-load-languages 'org-babel-load-languages org-babel-load-languages)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
* Spelling and syntax
|
||||
|
||||
** Spell checking
|
||||
|
||||
This requires installation of hunspell
|
||||
#+begin_src bash :tangle yes
|
||||
sudo apt install hunspell
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp
|
||||
(use-package flyspell
|
||||
:config (setq ispell-program-name "hunspell"
|
||||
ispell-default-dictionary "en_US"
|
||||
)
|
||||
:diminish (flyspell-mode . "φ")
|
||||
:hook (text-mode . flyspell-mode)
|
||||
:bind (
|
||||
("M-<f7>" . flyspell-buffer)
|
||||
("<f7>" . flyspell-word)
|
||||
("C-;" . flyspell-auto-correct-previous-word)
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
** Flyspell correct
|
||||
#+begin_src elisp :tangle yes
|
||||
(use-package flyspell-correct
|
||||
:after flyspell
|
||||
:bind (:map flyspell-mode-map ("C-;" . flyspell-correct-wrapper))
|
||||
)
|
||||
#+end_src
|
||||
|
||||
** Flycheck
|
||||
|
||||
Needs external checkers installed
|
||||
|
||||
#+begin_src elisp
|
||||
(use-package flycheck
|
||||
:defer t
|
||||
:diminish (flycheck-mode . "")
|
||||
:config
|
||||
(setq flycheck-emacs-lisp-load-path 'inherit)
|
||||
(setq flycheck-emacs-lisp-load-path (concat user-emacs-directory "straight/build")))
|
||||
|
||||
#+end_src
|
||||
|
||||
** Flycheck bash
|
||||
#+begin_src bash :tangle yes
|
||||
sudo apt install devscripts
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp :tangle yes
|
||||
(use-package flycheck-checkbashisms
|
||||
:config
|
||||
(flycheck-checkbashisms-setup)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
** Yaml
|
||||
#+begin_src elisp :tangle yes
|
||||
(use-package yaml-mode
|
||||
:config
|
||||
(add-to-list 'auto-mode-alist '("\\.yml\\'" . yaml-mode))
|
||||
(add-to-list 'auto-mode-alist '("\\.yaml\\'" . yaml-mode))
|
||||
)
|
||||
#+end_src
|
||||
|
||||
** Docker
|
||||
#+begin_src elisp :tangle yes
|
||||
(use-package docker-compose-mode)
|
||||
#+end_src
|
||||
@@ -46,7 +46,7 @@ notes/org-skill-memex.org|2026-03-31T13:03:26-04:00|2026-04-07T13:42:42-04:00
|
||||
notes/org-skill-model-explorer.org|2026-03-30T21:16:05-04:00|2026-04-07T13:42:42-04:00
|
||||
notes/org-skill-object-store-persistence.org|2026-03-31T18:28:47-04:00|2026-04-07T13:42:42-04:00
|
||||
notes/org-skill-onboarding.org|2026-03-31T18:13:26-04:00|2026-04-07T13:42:42-04:00
|
||||
notes/org-skill-org-agent.org|2026-04-07T12:57:15-04:00|2026-04-07T13:42:42-04:00
|
||||
notes/org-skill-opencortex.org|2026-04-07T12:57:15-04:00|2026-04-07T13:42:42-04:00
|
||||
notes/org-skill-org-delivery.org|2026-03-30T21:16:05-04:00|2026-04-07T13:42:42-04:00
|
||||
notes/org-skill-org-gtd-archive-roam-daily.org|2026-03-31T16:14:37-04:00|2026-04-07T13:42:42-04:00
|
||||
notes/org-skill-org-json-bridge.org|2026-03-31T16:14:37-04:00|2026-04-07T13:42:42-04:00
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
(require 'org)
|
||||
|
||||
(defun org-agent-inject-metadata (file created edited)
|
||||
(defun opencortex-inject-metadata (file created edited)
|
||||
(with-current-buffer (find-file-noselect file)
|
||||
(org-with-wide-buffer
|
||||
(goto-char (point-min))
|
||||
@@ -9,12 +9,12 @@
|
||||
(org-id-get-create) ; Ensure drawer exists
|
||||
(setq props (org-get-property-block))))
|
||||
|
||||
(org-set-property "CREATED" (org-agent-format-iso created))
|
||||
(org-set-property "EDITED" (org-agent-format-iso edited))
|
||||
(org-set-property "CREATED" (opencortex-format-iso created))
|
||||
(org-set-property "EDITED" (opencortex-format-iso edited))
|
||||
(save-buffer)
|
||||
(kill-buffer))))
|
||||
|
||||
(defun org-agent-format-iso (iso-date)
|
||||
(defun opencortex-format-iso (iso-date)
|
||||
"Convert 2026-04-07T10:00:00+00:00 to [2026-04-07 Tue 10:00]"
|
||||
(let ((time (parse-time-string iso-date)))
|
||||
(format-time-string "[%Y-%m-%d %a %H:%M]" (apply #'encode-time time))))
|
||||
@@ -26,4 +26,4 @@
|
||||
(dolist (line lines)
|
||||
(let ((parts (split-string line "|")))
|
||||
(when (= (length parts) 3)
|
||||
(org-agent-inject-metadata (nth 0 parts) (nth 1 parts) (nth 2 parts))))))
|
||||
(opencortex-inject-metadata (nth 0 parts) (nth 1 parts) (nth 2 parts))))))
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
(ql:quickload :usocket :silent t)
|
||||
|
||||
(defun send-to-swank (form-string)
|
||||
(let* ((msg (format nil "(:emacs-rex (swank:interactive-eval ~s) :org-agent t 1)" form-string))
|
||||
(let* ((msg (format nil "(:emacs-rex (swank:interactive-eval ~s) :opencortex t 1)" form-string))
|
||||
(len (format nil "~6,'0x" (length msg)))
|
||||
(socket (usocket:socket-connect "127.0.0.1" 4005))
|
||||
(stream (usocket:socket-stream socket)))
|
||||
|
||||
@@ -1,16 +0,0 @@
|
||||
(let ((config-dir "~/memex/system/"))
|
||||
;; Load the core settings, including package management and essential setup.
|
||||
(org-babel-load-file (expand-file-name "emacs-core.org" config-dir))
|
||||
|
||||
;; Load early init settings (if separate and not fully covered by core)
|
||||
(org-babel-load-file (expand-file-name "emacs-early-init.org" config-dir))
|
||||
|
||||
;; Load other modules in a logical order
|
||||
(org-babel-load-file (expand-file-name "emacs-org.org" config-dir))
|
||||
(org-babel-load-file (expand-file-name "emacs-gtd.org" config-dir))
|
||||
(org-babel-load-file (expand-file-name "emacs-roam.org" config-dir))
|
||||
(org-babel-load-file (expand-file-name "emacs-writing.org" config-dir))
|
||||
(org-babel-load-file (expand-file-name "emacs-media.org" config-dir))
|
||||
(org-babel-load-file (expand-file-name "emacs-shell.org" config-dir))
|
||||
(org-babel-load-file (expand-file-name "emacs-ai.org" config-dir))
|
||||
(org-babel-load-file (expand-file-name "emacs-misc.org" config-dir)))
|
||||
@@ -1,4 +1,4 @@
|
||||
(in-package :org-agent.skills.org-skill-architect)
|
||||
(in-package :opencortex.skills.org-skill-architect)
|
||||
|
||||
(defun architect-actuate (action context)
|
||||
(declare (ignore context))
|
||||
@@ -9,11 +9,11 @@
|
||||
|
||||
(if (and note-path blueprint-content)
|
||||
(progn
|
||||
(org-agent:kernel-log "ARCHITECT - Appending PROTOCOL to ~a" note-path)
|
||||
(opencortex:kernel-log "ARCHITECT - Appending PROTOCOL to ~a" note-path)
|
||||
(with-open-file (out note-path :direction :output :if-exists :append)
|
||||
(format out "~%* Phase B: Blueprint (PROTOCOL)~%:PROPERTIES:~%:STATUS: SIGNED~%:END:~%~%~a"
|
||||
blueprint-content))
|
||||
(format nil "SUCCESS - Architect established PROTOCOL in ~a" note-path))
|
||||
(progn
|
||||
(org-agent:kernel-log "ARCHITECT FAILURE - Missing path or content in action: ~a" action)
|
||||
(opencortex:kernel-log "ARCHITECT FAILURE - Missing path or content in action: ~a" action)
|
||||
nil))))
|
||||
|
||||