zulip-cogen

Zulip Cogen Skill 🐸⚑

16 stars

Best use case

zulip-cogen is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

Zulip Cogen Skill 🐸⚑

Teams using zulip-cogen should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/zulip-cogen/SKILL.md --create-dirs "https://raw.githubusercontent.com/plurigrid/asi/main/plugins/asi/skills/zulip-cogen/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/zulip-cogen/SKILL.md inside your project
  3. Restart your AI agent β€” it will auto-discover the skill

How zulip-cogen Compares

Feature / Agentzulip-cogenStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

Zulip Cogen Skill 🐸⚑

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

SKILL.md Source

# Zulip Cogen Skill 🐸⚑

**Trit**: +1 (PLUS - Generator)
**GF(3) Triad**: `dynamic-sufficiency (-1) βŠ— proof-of-frog (0) βŠ— zulip-cogen (+1) = 0`

## Overview

Code generator from Category Theory Zulip knowledge base with **dynamic sufficiency gating**. Transforms 121k messages into executable artifacts only when sufficient context is verified via Ξ΅-machine coverage.

> *"No generation without sufficient witness. The Ξ΅-machine observes, the gate permits."*

## Architecture

```
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    ZULIP COGEN                          β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  INPUT                    OUTPUT                        β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚  β”‚ CT Zulip     │───────▢│ Lean4 proofs            β”‚   β”‚
β”‚  β”‚ 121k msgs    β”‚        β”‚ Mermaid diagrams        β”‚   β”‚
β”‚  β”‚ 81 ponds     β”‚        β”‚ Julia/Python impls      β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜        β”‚ ACSet schemas           β”‚   β”‚
β”‚                          β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
```

## Generation Modes

| Mode | Input | Output |
|------|-------|--------|
| `proof` | Math discussion | Lean4 theorem |
| `diagram` | Category description | Mermaid/tikzcd |
| `impl` | Algorithm discussion | Julia/Python code |
| `schema` | Data structure talk | ACSet definition |
| `skill` | Topic cluster | SKILL.md |

## Usage

```bash
# Generate Lean4 proof from discussion
zulip-cogen proof "adjoint functors" --pond theory:-category-theory

# Generate diagram from thread
zulip-cogen diagram --thread-id 12345 --format mermaid

# Generate implementation
zulip-cogen impl "kan extension" --lang julia

# Generate ACSet schema
zulip-cogen schema "simplicial sets" 

# Generate skill from pond
zulip-cogen skill --pond theory:-topos-theory
```

## Example Generations

### Proof Mode
```
Input: Discussion about "left adjoints preserve colimits"
Output:
```lean
theorem left_adjoint_preserves_colimits 
    {C D : Category} (F : Functor C D) (G : Functor D C)
    (adj : F ⊣ G) : PreservesColimits F := by
  intro J K c hc
  exact adj.leftAdjointPreservesColimits c hc
```

### Diagram Mode
```
Input: "The Yoneda embedding is fully faithful"
Output:
```mermaid
graph LR
    C[C] -->|y| PSh["[Cα΅’α΅–, Set]"]
    subgraph "Yoneda"
        y["y: C β†’ Hom(-, C)"]
    end
    style y fill:#08bed5
```

### Implementation Mode
```
Input: Discussion on "computing left Kan extensions"
Output:
```julia
function left_kan(F::Functor, K::Functor)
    # Lan_K(F)(d) = colim_{(c,k) ∈ (K↓d)} F(c)
    d -> begin
        comma = comma_category(K, d)
        colimit(c -> F(c.source), comma)
    end
end
```

## Pipeline

```python
class ZulipCogen:
    def __init__(self, db_path: str):
        self.db = duckdb.connect(db_path)
        self.gay_seed = 0x6761795f636f6c6f
    
    def generate(self, mode: str, query: str, **kwargs) -> str:
        # 1. Retrieve relevant messages
        context = self.retrieve(query, kwargs.get('pond'))
        
        # 2. Extract structure
        structure = self.extract_structure(context, mode)
        
        # 3. Generate artifact
        return self.synthesize(structure, mode, kwargs.get('lang'))
    
    def retrieve(self, query: str, pond: str = None) -> List[Message]:
        sql = """
            SELECT content, sender, color 
            FROM ct_zulip_messages m
            JOIN ct_zulip_streams s ON m.stream_id = s.id
            WHERE m.content LIKE ?
        """
        if pond:
            sql += " AND s.name LIKE ?"
        return self.db.execute(sql, params).fetchall()
```

## Dynamic Sufficiency Integration

### Ξ΅-Machine Gating

Before ANY generation, verify sufficient context:

```python
def pre_generation_gate(query: str, mode: str) -> Verdict:
    """Gate generation on sufficient Zulip context."""
    messages = retrieve(query)
    coverage = compute_coverage(query, messages)
    
    if coverage.score >= 0.7:  # 70% threshold for generation
        return Verdict.PROCEED
    elif coverage.score >= 0.3:
        return Verdict.WARN(f"Low coverage: {coverage.score:.0%}")
    else:
        return Verdict.ABORT(f"Insufficient context: {len(messages)} msgs")
```

### Causal States for Generation

| Causal State | Required Coverage | Artifact |
|--------------|------------------|----------|
| `PROOF_READY` | 3+ math discussions | Lean4 theorem |
| `DIAGRAM_READY` | 2+ structural mentions | Mermaid |
| `IMPL_READY` | 5+ code references | Julia/Python |
| `SCHEMA_READY` | 3+ type discussions | ACSet |

### Variational Bound

```
min(sufficiency) ≀ generation ≀ max(fanout)

dynamic-sufficiency GATES: Prevents generation without context
zulip-cogen GENERATES: Synthesizes artifacts from sufficient context
```

## Frog Lifecycle as Cogen Pipeline

| Stage | Trit | Cogen Phase | Sufficiency Check |
|-------|------|-------------|-------------------|
| πŸ₯’ TADPOLE | -1 | Retrieve context | Ξ΅-machine inference |
| 🐸 FROGLET | 0 | Extract structure | Coverage β‰₯ 0.7 |
| 🦎 MATURE | +1 | Synthesize artifact | Generate if sufficient |

## Integration with Skills

Generated artifacts feed back into skill ecosystem:

```
zulip-cogen skill --pond theory:-type-theory
    ↓
~/.claude/skills/type-theory-ct/SKILL.md
    ↓
proof-of-frog verifies GF(3) balance
```

## Gay.jl Coloring

Each generation gets deterministic color based on query hash:

```python
def generation_color(query: str, mode: str) -> str:
    h = fnv1a(f"{query}:{mode}")
    seed = splitmix64(GAY_SEED ^ h)
    return seed_to_color(seed)
```

## Files

| Path | Purpose |
|------|---------|
| `~/ies/hatchery.duckdb` | CT Zulip archive |
| `~/ies/zulip_cogen.py` | Generator implementation |
| `~/.claude/skills/zulip-cogen/` | Skill definition |

## References

- [CT Zulip Archive](https://github.com/plurigrid/ct-zulip-archive)
- [Mathlib4](https://github.com/leanprover-community/mathlib4)
- [AlgebraicJulia](https://github.com/AlgebraicJulia)
- [cats-for-ai Zulip](https://cats-for-ai.zulipchat.com/)