Skip to content

Commit 04e4280

Browse files
committed
ai-assisted knowledge gardening qmd tool + yazi and tmux
1 parent 6451584 commit 04e4280

9 files changed

Lines changed: 129 additions & 64 deletions

journals/2025_07_10.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
- ## [[AI]]
55
- #Filed
66
- [[MCP/Tool/Idea/Wrap Atlassian MCP Server in Script to convert Confluence to Markdown]]
7-
- [[ChatGPT Tasks]] - today I paused a task I made with #o3 to summarize [[HN]] headlines because it was getting repetitive. Not quite sure how to reason about the context
7+
- [[ChatGPT Tasks]] - today I paused a task I made with #o3 to summarize [[HackerNews]] headlines because it was getting repetitive. Not quite sure how to reason about the context
88
- [[ChatGPT/App/Desktop/How To/Not open chatgpt links in the desktop app]]
99
- [[HeavyAI]]
1010
- a platform for analytics, particularly with spatial / [[GIS]]

journals/2025_12_24.md

Lines changed: 1 addition & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -1,65 +1,5 @@
11
- [[LangChain/Ecosystem]]
2-
- for some reason it's always so hard for me to find [Observability in Studio - Docs by LangChain](https://docs.langchain.com/langsmith/observability-studio#full-example-configuration), which is, to the best of my knowledge, one of the only pieces of documentation which shows how to do this configuration of langgraph assistants using `Annotated[Literal[...]]` and `json_schema_extra`
3-
- ```python
4-
## Using Pydantic
5-
from pydantic import BaseModel, Field
6-
from typing import Annotated, Literal
7-
8-
class Configuration(BaseModel):
9-
"""The configuration for the agent."""
10-
11-
system_prompt: str = Field(
12-
default="You are a helpful AI assistant.",
13-
description="The system prompt to use for the agent's interactions. "
14-
"This prompt sets the context and behavior for the agent.",
15-
json_schema_extra={
16-
"langgraph_nodes": ["call_model"],
17-
"langgraph_type": "prompt",
18-
},
19-
)
20-
21-
model: Annotated[
22-
Literal[
23-
"anthropic/claude-sonnet-4-5-20250929",
24-
"anthropic/claude-haiku-4-5-20251001",
25-
"openai/o1",
26-
"openai/gpt-4o-mini",
27-
"openai/o1-mini",
28-
"openai/o3-mini",
29-
],
30-
{"__template_metadata__": {"kind": "llm"}},
31-
] = Field(
32-
default="openai/gpt-4o-mini",
33-
description="The name of the language model to use for the agent's main interactions. "
34-
"Should be in the form: provider/model-name.",
35-
json_schema_extra={"langgraph_nodes": ["call_model"]},
36-
)
37-
38-
## Using Dataclasses
39-
from dataclasses import dataclass, field
40-
41-
@dataclass(kw_only=True)
42-
class Configuration:
43-
"""The configuration for the agent."""
44-
45-
system_prompt: str = field(
46-
default="You are a helpful AI assistant.",
47-
metadata={
48-
"description": "The system prompt to use for the agent's interactions. "
49-
"This prompt sets the context and behavior for the agent.",
50-
"json_schema_extra": {"langgraph_nodes": ["call_model"]},
51-
},
52-
)
53-
54-
model: Annotated[str, {"__template_metadata__": {"kind": "llm"}}] = field(
55-
default="anthropic/claude-3-5-sonnet-20240620",
56-
metadata={
57-
"description": "The name of the language model to use for the agent's main interactions. "
58-
"Should be in the form: provider/model-name.",
59-
"json_schema_extra": {"langgraph_nodes": ["call_model"]},
60-
},
61-
)
62-
```
2+
- Moved the LangGraph assistant configuration notes (`Annotated[Literal[...]]`, `json_schema_extra`, `__template_metadata__`) to [[LangSmith/Docs/Observability Studio/LangGraph assistant configuration]].
633
- [[DevContainer/Report/25/12/Multi-Env DevContainer Setup]]
644
- This morning I was about to start on [🐛 fix(devcontainer): docker-compose.override.yml not picked up by JetBrains Gateway rebuilds · Issue #718 · codekiln/langstar](https://github.com/codekiln/langstar/issues/718) with the plan to make multiple devcontainer configurations in [[Langstar]], and I opened a devcontainer for [[JetBrains/RustRover]] inside of a [[git/worktree]] that was at `<repo-root>/wip/<branch>`. When I got it open, I had problems with accessing git, which makes sense; there was no [[git/.git]] directory.
655
- This made me wonder ... what's the fastest, best, most secure way to spin up a different devcontainer for each [[AI/Coding/Agent]] while keeping them isolated? Sure, git worktrees let you parallelize development, but the ability to do git work in that environment is conditioned on your ability to access the .git directory.

journals/2026_04_07.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
- # garddiff
2+
- ## [[Filed]]
3+
- [[LangSmith/Docs/Observability Studio/LangGraph assistant configuration]]
4+
- Needed this today; there is a new LangSmith-oriented MCP that works well—see [Use these docs — Connect with Claude Code](https://docs.langchain.com/use-these-docs?utm_source=chatgpt.com#connect-with-claude-code).
5+
- [[yazi/Q/Does yazi have a git integration that copies a file path relative to the repository root? If so, what is the keyshort?]]
6+
- [[tmux/Q/In copy mode with vi keys, can you drop a selection without leaving copy mode?]]
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
# [Observability in Studio — full example configuration](https://docs.langchain.com/langsmith/observability-studio#full-example-configuration)
2+
- Popped out from [[2025-12-24]] (was under [[LangChain/Ecosystem]]) so the LangGraph assistant configuration recipe is one link away.
3+
- See also [[langgraph/Docs/Cloud/How To/Prompt Engineer in LangGraph Studio]] for `langgraph_nodes`, `langgraph_type`, and how Studio binds fields to nodes.
4+
- For some reason it's always so hard for me to find this page, which is, to the best of my knowledge, one of the only pieces of documentation that shows how to configure LangGraph assistants using `Annotated[Literal[...]]` and `json_schema_extra`.
5+
- ### Pydantic and dataclass examples
6+
- ```python
7+
## Using Pydantic
8+
from pydantic import BaseModel, Field
9+
from typing import Annotated, Literal
10+
11+
class Configuration(BaseModel):
12+
"""The configuration for the agent."""
13+
14+
system_prompt: str = Field(
15+
default="You are a helpful AI assistant.",
16+
description="The system prompt to use for the agent's interactions. "
17+
"This prompt sets the context and behavior for the agent.",
18+
json_schema_extra={
19+
"langgraph_nodes": ["call_model"],
20+
"langgraph_type": "prompt",
21+
},
22+
)
23+
24+
model: Annotated[
25+
Literal[
26+
"anthropic/claude-sonnet-4-5-20250929",
27+
"anthropic/claude-haiku-4-5-20251001",
28+
"openai/o1",
29+
"openai/gpt-4o-mini",
30+
"openai/o1-mini",
31+
"openai/o3-mini",
32+
],
33+
{"__template_metadata__": {"kind": "llm"}},
34+
] = Field(
35+
default="openai/gpt-4o-mini",
36+
description="The name of the language model to use for the agent's main interactions. "
37+
"Should be in the form: provider/model-name.",
38+
json_schema_extra={"langgraph_nodes": ["call_model"]},
39+
)
40+
41+
## Using Dataclasses
42+
from dataclasses import dataclass, field
43+
44+
@dataclass(kw_only=True)
45+
class Configuration:
46+
"""The configuration for the agent."""
47+
48+
system_prompt: str = field(
49+
default="You are a helpful AI assistant.",
50+
metadata={
51+
"description": "The system prompt to use for the agent's interactions. "
52+
"This prompt sets the context and behavior for the agent.",
53+
"json_schema_extra": {"langgraph_nodes": ["call_model"]},
54+
},
55+
)
56+
57+
model: Annotated[str, {"__template_metadata__": {"kind": "llm"}}] = field(
58+
default="anthropic/claude-3-5-sonnet-20240620",
59+
metadata={
60+
"description": "The name of the language model to use for the agent's main interactions. "
61+
"Should be in the form: provider/model-name.",
62+
"json_schema_extra": {"langgraph_nodes": ["call_model"]},
63+
},
64+
)
65+
```
Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
logseq-entity:: [[Logseq/Entity/question]]
22
see-also:: [[Lazygit/Keyshort]]
3+
34
- # In [[Lazygit]], what's a basic workflow for listing modified files in a worktree and then committing them on the worktree?
45
- ## Answer
56
- [[AI/Response]]
67
- A [[git worktree]] is just another working copy of the same repo; [[Lazygit]] always shows **that checkout's** `git status` in the **Files** panel. The basic loop is the same as in the main repo: see changed paths → stage → commit.
78
- **Work directly in the worktree (simplest):** `cd` into the worktree directory and run `lazygit`. The Files panel lists modified/untracked/staged files for that path. Stage with **space** (or **a** for stage all), optionally **enter** on a file for line/hunk staging, then **c** to commit staged changes (see [Keybindings_en.md — Files](https://github.com/jesseduffield/lazygit/blob/master/docs/keybindings/Keybindings_en.md) and [Main panel (staging)](https://github.com/jesseduffield/lazygit/blob/master/docs/keybindings/Keybindings_en.md)).
8-
- **Stay in one lazygit instance (main repo checkout):** use the list-panel tabs — **]** / **[** cycle tabs until **Worktrees** is selected — pick the worktree and **switch** into it (lazygit rebinds the session to that worktree). Then open the **Files** panel again; it now reflects that worktree's working tree. Stage and **c** to commit as above. The dedicated **Worktrees** bindings (e.g. **n** new, remove **d**) are documented in the same [Worktrees](https://github.com/jesseduffield/lazygit/blob/master/docs/keybindings/Keybindings_en.md) section. Creating a worktree from a branch is also described under [Worktrees in the README](https://github.com/jesseduffield/lazygit#worktrees) (e.g. worktree options from the branches view).
9+
- **Stay in one lazygit instance (main repo checkout):** use the list-panel tabs — `[` and `]` cycle tabs until **Worktrees** is selected — pick the worktree and **switch** into it (lazygit rebinds the session to that worktree). Then open the **Files** panel again; it now reflects that worktree's working tree. Stage and **c** to commit as above. The dedicated **Worktrees** bindings (e.g. **n** new, remove **d**) are documented in the same [Worktrees](https://github.com/jesseduffield/lazygit/blob/master/docs/keybindings/Keybindings_en.md) section. Creating a worktree from a branch is also described under [Worktrees in the README](https://github.com/jesseduffield/lazygit#worktrees) (e.g. worktree options from the branches view).
910
- **Filter / refresh:** **/** filters the current side panel; **R** refreshes git state if the list looks stale ([global keybindings](https://github.com/jesseduffield/lazygit/blob/master/docs/keybindings/Keybindings_en.md)).
1011
- ## My Notes
11-
- *placeholder*
12+
- *placeholder*

pages/Person___Tobi Lutke.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
alias:: [[Person/Tobias Lütke]]
2+
- # Tobi Lutke
3+
- ## About
4+
- Co-founder and long-time CEO of [[Shopify]]; builds and ships software in public under the GitHub handle `tobi`.
5+
- ## Web
6+
- GitHub: https://github.com/tobi

pages/qmd.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
logseq-entity:: [[Logseq/Entity/software-project]]
2+
via:: [[Person/Andrej Karpathy/GitHub/Gist/26/04/llm-wiki]]
3+
alias:: [[Person/Tobi Lutke/GitHub/qmd]]
4+
tags:: [[CLI/Tool]]
5+
created-by:: [[Person/Tobi Lutke]]
6+
- # [tobi/qmd: mini cli search engine for your docs, knowledge bases, meeting notes, whatever. Tracking current sota approaches while being all local](https://github.com/tobi/qmd)
7+
- Local-first **CLI** for searching personal docs, knowledge bases, meeting notes, and similar text—positioned as tracking current strong approaches while staying offline.
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
logseq-entity:: [[Logseq/Entity/question]]
2+
tags:: [[Question]]
3+
see-also:: [[tmux/Q/What is a conceptual overview of how copy paste works in oh-my-tmux with nvim?]], [[tmux/Q/Is there a way to do rectangular selection when using oh-my-tmux and tmux with vim visual selection mode?]]
4+
5+
- # In [[tmux]] copy mode with vi keys, can you drop a selection without leaving copy mode?
6+
- ## Answer
7+
- [[AI/Response]]
8+
- **Yes, tmux can do this** with the copy-mode command **`clear-selection`**, which removes the highlight **without** leaving copy mode, so your **scroll position stays put**.
9+
- ### Why `v` does not “toggle off” like Vim
10+
- In typical **[[tmux/oh-my-tmux]]**-style vi copy-mode tables, **`v` is bound to `begin-selection`**, not to “exit visual.” Pressing **`v` again usually starts or resets selection behavior rather than acting like Vim’s visual toggle—so your observation is expected.
11+
- **`C-v`** is often **`rectangle-toggle`** in the default vi table (orthogonal to “exit visual”).
12+
- ### Why **Escape** may kick you out entirely
13+
- Many configs (including common **oh-my-tmux** patterns) bind **`Escape` in `copy-mode-vi` to `cancel`**, which **exits copy mode**—the opposite of “only clear the selection.” That matches **`tmux list-keys -T copy-mode-vi`** on typical setups. Stock documentation sometimes describes **`Escape` as “clear selection”** in older tables or mixed emacs/vi docs; **trust `tmux list-keys -T copy-mode-vi` for your session**.
14+
- ### What to use instead
15+
- **Bind `clear-selection` to a key you can reach in copy mode**, for example **`C-g`** (mnemonic: cancel *selection*, not the whole mode):
16+
- ~~~text
17+
bind-key -T copy-mode-vi C-g send-keys -X clear-selection
18+
~~~
19+
- Or make **`Escape` conditional** so it clears when something is selected and only cancels when there is no selection (pattern discussed in community answers and blog posts):
20+
- ~~~text
21+
bind-key -T copy-mode-vi Escape if-shell -F "#{selection_present}" "send-keys -X clear-selection" "send-keys -X cancel"
22+
~~~
23+
- After adding bindings, reload config (**`tmux source-file ~/.tmux.conf`**) or restart tmux.
24+
- ### Verify your table
25+
- Run **`tmux list-keys -T copy-mode-vi`** and look for **`clear-selection`**; if nothing is bound, you need one of the binds above.
26+
- ### Sources
27+
- [tmux(1) — OpenBSD man page](https://man.openbsd.org/tmux.1) (copy-mode / `send-keys -X` commands)
28+
- [How to stop marking while in tmux copy-mode? (Unix & Linux SE)](https://unix.stackexchange.com/questions/537452/how-to-stop-marking-while-in-tmux-copy-mode)
29+
- [Selecting text in Tmux copy mode (Super User)](https://superuser.com/questions/196060/selecting-text-in-tmux-copy-mode) (historical key tables; cross-check with `list-keys`)
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
logseq-entity:: [[Logseq/Entity/question]]
2+
see-also:: [[yazi/Keyshort]]
3+
4+
- # Does [[yazi]] have a [[git]] integration that copies a file path relative to the repository root? If so, what is the keyshort?
5+
- ## Answer
6+
- [[AI/Response]]
7+
- **No — not as a built-in “git integration.”** Stock [[yazi]] does **not** define a `copy` variant that is **relative to `git rev-parse --show-toplevel`**. The manager **`copy`** action only supports **`path`** (the file’s URL, i.e. the usual absolute filesystem path), **`dirname`**, **`filename`**, and **`name_without_ext`**, plus optional **`--separator`** (`unix` vs platform default) — there is no **`git_root`** (or similar) option in the documented action ([keymap — mgr.copy](https://yazi-rs.github.io/docs/configuration/keymap/#mgr.copy)).
8+
- **Default path-copy keybindings** (preset chord **`c`** then second key; “`c` ⇒ `c`” means press **`c`**, then **`c`** again): **`c` ⇒ `c`** copies the **file path**; **`c` ⇒ `d`** parent **directory** path; **`c` ⇒ `f`** **filename**; **`c` ⇒ `n`** filename **without extension** ([Quick Start — Copy paths](https://yazi-rs.github.io/docs/quick-start)). Those are the shipped shortcuts for clipboard path operations; none of them is “relative to repo root.”
9+
- **Practical workaround:** bind **`shell`** to run a one-liner that computes a path relative to the repo root (e.g. `realpath` / `git rev-parse` / `python -c …`) and pipes to **`pbcopy`** on macOS or **`wl-copy`** / **`xclip`** on Linux, or use a **community plugin** if you want a maintained implementation (search the [Yazi resources / plugin ecosystem](https://yazi-rs.github.io/docs/resources) for “git” / “relative path” plugins).
10+
- ## My Notes
11+
- *placeholder*

0 commit comments

Comments
 (0)