Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ jobs:
python-version: "3.12"

- name: Run Pre-Commit Hooks in CI
uses: pre-commit/action@v3.0.1
run: uvx pre-commit run --all-files

- name: Install Dependencies
run: uv pip install -e ".[test]" || uv pip install -r requirements.txt || true
Expand Down Expand Up @@ -63,7 +63,7 @@ jobs:

- name: Upload Semgrep results to GitHub Security
uses: github/codeql-action/upload-sarif@v3
if: always()
if: always() && github.event_name != 'pull_request'
with:
sarif_file: semgrep-results.sarif

Expand All @@ -79,7 +79,7 @@ jobs:

# Pinned securely to v0.36.0 commit SHA to mitigate CVE-2026-33634
- name: Run Trivy File System Scanner
uses: aquasecurity/trivy-action@ed142fda32cedf951e7f3d537877df4c9ba8f192 # v0.36.0
uses: aquasecurity/trivy-action@ed142fd0673e97e23eac54620cfb913e5ce36c25 # v0.36.0
with:
scan-type: 'fs'
ignore-unfixed: true
Expand All @@ -89,6 +89,6 @@ jobs:

- name: Upload Trivy results to GitHub Security
uses: github/codeql-action/upload-sarif@v3
if: always()
if: always() && github.event_name != 'pull_request'
with:
sarif_file: trivy-results.sarif
37 changes: 37 additions & 0 deletions .github/workflows/dependabot-linear.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
name: Sync Dependabot PRs to Linear
on:
pull_request:
types: [opened]

jobs:
create-linear-ticket:
if: github.actor == 'dependabot[bot]'
runs-on: ubuntu-latest
steps:
- name: Create Linear Issue
env:
LINEAR_TOKEN: ${{ secrets.LINEAR_TOKEN }}
PR_TITLE: ${{ github.event.pull_request.title }}
PR_URL: ${{ github.event.pull_request.html_url }}
run: |
JSON_PAYLOAD=$(jq -n \
--arg title "Dependabot: $PR_TITLE" \
--arg desc "GitHub PR: $PR_URL\nOpened by Dependabot." \
--arg team "a46f213b-5a47-43bb-bea9-ca254bd3dfe2" \
--arg project "329d07ee-9041-4706-9244-bd2dc7dfb982" \
'{
query: "mutation IssueCreate($input: IssueCreateInput!) { issueCreate(input: $input) { success issue { id number identifier url } } }",
variables: {
input: {
title: $title,
description: $desc,
teamId: $team,
projectId: $project
}
}
}')

curl -X POST https://api.linear.app/graphql \
-H "Content-Type: application/json" \
-H "Authorization: $LINEAR_TOKEN" \
-d "$JSON_PAYLOAD"
4 changes: 0 additions & 4 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,3 @@
# Python bytecode cache
__pycache__/
*.pyc




2 changes: 1 addition & 1 deletion .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# .pre-commit-config.yaml
exclude: '^(Machine Learning|Cybersecurity|Papers|Study|Templates|Attachments|Miscellaneous|Inbox|__site|__obsidian|node_modules)/'
exclude: '^(\.obsidian|Coffee|Machine Learning|Cybersecurity|Miscellaneous|PDFs|Papers|Study|Templates|Attachments|Inbox|__site|__obsidian|node_modules)/'

repos:
# 1. General Repository Hygiene
Expand Down
3 changes: 2 additions & 1 deletion .skills/skills/clip-to-vault/clip-to-vault/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ The **clip-to-vault** skill transforms web content into vault notes through synt
### Input

The agent accepts a **URL** pointing to:

- Technical blog posts (e.g., Anthropic blog, Papers with Code)
- Official documentation (LLM APIs, ML frameworks)
- Conference talks or transcripts
Expand Down Expand Up @@ -135,6 +136,7 @@ constitutional_ai, value_alignment, llm_training, ai_safety
## Inbox Awareness

When the user requests a fast capture rather than a full synthesis (e.g., "clip this to inbox", "save to inbox quickly"), the skill should create a minimal capture instead:

- **File location**: `Inbox/[title].md` (at vault root)
- **Minimal format**: Title, URL, 1–2 sentence summary, no internal links or full synthesis required
- The Inbox serves as a staging area for rapid ideas; items can be processed into full notes later
Expand All @@ -149,4 +151,3 @@ The skill can also **process existing Inbox items** into proper notes. When the
- **Check for duplicates**: Before creating a new note, verify that the vault does not already contain this information.
- **Style consistency**: Match the vault's academic tone. No casual language, no contractions, third-person perspective.
- **Link with intention**: Every wikilink should be meaningful. Readers should want to follow them to deepen understanding.

14 changes: 12 additions & 2 deletions .skills/skills/connect-ideas/connect-ideas/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,13 @@ This skill analyzes two related notes or a note and its linked references to unc
### 1. Gather Input Notes

Request the user provide:

- Primary note name or path (the focus note)
- Secondary note name or path (the comparison note), OR a list of linked notes to analyze
- Any specific aspect to emphasize (e.g., methodological, theoretical, practical)

Read both notes fully. Document:

- Primary themes and key concepts in each
- Explicit claims, definitions, and arguments
- Examples, evidence, or cited resources
Expand All @@ -27,6 +29,7 @@ Read both notes fully. Document:
### 2. Identify Shared Concepts

Compare the notes and list **shared conceptual terrain**:

- Overlapping terminology or frameworks
- Related but differently-named concepts
- Common underlying principles or assumptions
Expand All @@ -37,11 +40,13 @@ Create a table or bullet list showing how each note addresses the shared concept
### 3. Detect Contradictions or Tensions

Scan for potential disagreements:

- Do the notes reach conflicting conclusions on the same topic?
- Do they prioritize different aspects (e.g., theory vs. practice)?
- Are there unstated assumptions in each note that contradict the other?

For each tension found:

- State it clearly and objectively
- Explain the reasoning behind each position
- Assess whether this is a true contradiction or a complementary perspective
Expand All @@ -50,6 +55,7 @@ For each tension found:
### 4. Discover Non-Obvious Connections

Look beyond surface-level similarity:

- Does one note provide background context that explains a gap in the other?
- Can concepts from Note A apply as a solution or example in Note B?
- Do the two notes address the same problem from different angles?
Expand All @@ -60,18 +66,21 @@ Articulate each hidden connection in a short sentence with clear reasoning.
### 5. Suggest Specific Wikilinks

For each connection found, recommend:

- A wikilink to add to the primary note (format: `[[note-name|anchor-text]]`)
- A reciprocal wikilink to add to the secondary note
- Optional: A suggested context phrase where the link should appear

Prioritize links that would:

- Help future readers jump between related ideas
- Fill gaps in the vault's knowledge graph
- Make tacit connections explicit

### 6. Optional: Produce a Mermaid Diagram

If the relationship is complex or multi-faceted, create a Mermaid diagram showing:

- The two main notes as nodes
- Shared concepts as intermediate nodes
- Arrows labeled with the type of relationship (contradicts, extends, applies-to, provides-context-for, etc.)
Expand All @@ -82,7 +91,7 @@ Use a graph or flowchart format. Keep labels concise.

Structure the analysis as follows:

```
````
## Connection Analysis: [Note A] ↔ [Note B]

### Shared Conceptual Ground
Expand Down Expand Up @@ -120,7 +129,7 @@ graph LR
B -->|addresses| C
A -->|employs| D
B -->|contrasts with| D
```
````

```

Expand Down Expand Up @@ -152,3 +161,4 @@ graph LR

#### Tags
connect_ideas, vault_maintenance, knowledge_graph, cross_reference, analysis_tool
```
13 changes: 13 additions & 0 deletions .skills/skills/content-generation/content-generation/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ This skill transforms academic or technical knowledge vault notes into polished,
## Target Platforms & Tone Adaptation

**LinkedIn Posts** (150–300 words):

- Conversational, first-person voice ("I've learned...", "Here's what I found...")
- Hook opening: provocative question, surprising insight, or personal observation
- 2–3 key takeaways, clearly structured
Expand All @@ -20,6 +21,7 @@ This skill transforms academic or technical knowledge vault notes into polished,
- Tone: accessible, relatable, thought-leadership

**Blog Posts** (600–1,500 words):

- Narrative-driven introduction with real-world context
- Structured sections with H2/H3 headers
- Mix of explanation, examples, and actionable insights
Expand All @@ -29,6 +31,7 @@ This skill transforms academic or technical knowledge vault notes into polished,
- Hashtags: not required; metadata/SEO keywords optional

**Technical Articles** (800–2,000+ words):

- Depth and nuance; cite sources and vault cross-references
- Professional, authoritative tone (suitable for Medium, Dev.to, personal site)
- Code snippets or architecture diagrams allowed
Expand All @@ -38,27 +41,32 @@ This skill transforms academic or technical knowledge vault notes into polished,
## Workflow

### 1. Input Detection

- User selects text from a vault note or provides note reference
- Agent asks (if unclear): "What format would you like? **LinkedIn post**, **blog article**, or **technical deep-dive**?"

### 2. Insight Extraction

- Identify **2–3 most shareable, non-obvious insights** from the note
- Prioritize: novel findings > practical lessons > conceptual clarity
- Avoid generic statements; surface surprising or underexplored angles
- Look for personal experience or lessons learned (Gianfranco's voice)

### 3. Structure & Adaptation

- Rewrite content in target tone; remove academic formality
- Create engaging opening hook (question, stat, or observation)
- Restructure information for readability (short paragraphs, bullets for LinkedIn; narrative flow for blog)
- Preserve technical accuracy; simplify jargon without losing precision

### 4. Call-to-Action & Engagement

- LinkedIn: end with question, invitation to debate, or "What's your experience?"
- Blog: conclusion with implications, link to related vault notes, or "What's next?"
- Article: future directions, open problems, or invitation for feedback

### 5. Output & Polish

- Generate markdown ready to copy-paste
- Suggest hashtags for LinkedIn (include in output)
- For blog/article: include title, optional subtitle, and metadata notes
Expand All @@ -67,18 +75,21 @@ This skill transforms academic or technical knowledge vault notes into polished,
## Example Workflow

**Input**: Selection from `[[AI Safety/Prompt Injection Vulnerabilities]]` note

```
[User selects technical explanation of prompt injection attack vectors]
```

**Agent Detects**: Blog-post request (length and depth suggest longer form)

**Agent Extracts**:

- Insight 1: Most attacks succeed via **indirect injection** (document upload, search results), not direct user input
- Insight 2: Defense requires **multi-layered approach** (parsing, sandboxing, monitoring), not single mitigation
- Insight 3: Teams overlook **supply-chain injection** (third-party APIs as attack surface)

**Agent Outputs** (Blog post structure):

```markdown
# The Supply Chain Blind Spot in LLM Security

Expand All @@ -89,6 +100,7 @@ This skill transforms academic or technical knowledge vault notes into polished,
## The Indirect Injection Problem

[Explanation of attack vectors beyond direct user input]

- Document uploads
- Web search results
- Third-party API responses
Expand Down Expand Up @@ -119,6 +131,7 @@ This skill transforms academic or technical knowledge vault notes into polished,
## Output Format

Return a markdown file with:

1. **Title** and optional **Subtitle**
2. **Metadata** (platform, word count, reading time, suggested hashtags)
3. **Content** (ready to publish)
Expand Down
Loading
Loading