{
  "schema_version": "1.1",
  "id": "weekly-2026-07-07",
  "slug": "2026-07-07",
  "issue_number": "002",
  "title": "feed7 Weekly #002",
  "description": "7 AI signals worth feeding your agents this week.",
  "published_at": "2026-07-07T00:00:00.000Z",
  "modified_at": "2026-07-07T00:00:00.000Z",
  "url": "https://feed7.dev/weekly/2026-07-07",
  "formats": {
    "html": "https://feed7.dev/weekly/2026-07-07",
    "json": "https://feed7.dev/weekly/2026-07-07.json",
    "markdown": "https://feed7.dev/weekly/2026-07-07.md"
  },
  "selection": {
    "rule": "Six source-backed signals and one distraction to leave out.",
    "mode": "editor",
    "ignore_item_id": "p14"
  },
  "items": [
    {
      "schema_version": "1.1",
      "id": "p9",
      "slug": "gemini-context-caching",
      "url": "https://feed7.dev/p/gemini-context-caching",
      "title": "Gemini agent SDK adds shared context caching across sessions",
      "why_included": "Cached context is billed once and reused across agent sessions — changes the economics of long system prompts.",
      "summary": "The agent SDK now exposes cross-session context caching with explicit TTL control. Cached tokens are ~10x cheaper on reuse.",
      "practical_implication": "Big static context (style guides, schemas, docs) belongs in the cache, not the prompt. Restructure bundles so stable material leads.",
      "agent_context": "Gemini SDK caches context across sessions with TTL control; cached tokens ~10x cheaper. Put stable material (guides, schemas) first so it caches; keep volatile material last.",
      "source": {
        "name": "Google",
        "url": "https://developers.googleblog.com/gemini-agent-sdk-context-cache",
        "published_at": "2026-06-29T00:00:00.000Z"
      },
      "source_class": "blog_post",
      "content_type": "Docs Update",
      "layer": "context",
      "domains": [
        "coding"
      ],
      "topics": [
        "context-caching"
      ],
      "verification": {
        "status": "official_source",
        "label": "Official Source",
        "method": "source_feed",
        "verified_at": null
      },
      "uncertainty": [],
      "connected_context": null,
      "lifecycle": "New",
      "published_at": "2026-06-29T00:00:00.000Z",
      "modified_at": "2026-06-29T00:00:00.000Z",
      "supersedes": [],
      "expires_at": null,
      "formats": {
        "html": "https://feed7.dev/p/gemini-context-caching",
        "json": "https://feed7.dev/p/gemini-context-caching.json",
        "markdown": "https://feed7.dev/p/gemini-context-caching.md"
      }
    },
    {
      "schema_version": "1.1",
      "id": "p8",
      "slug": "openai-structured-tool-use",
      "url": "https://feed7.dev/p/openai-structured-tool-use",
      "title": "OpenAI ships strict structured outputs for parallel tool use",
      "why_included": "Parallel tool calls now validate against JSON schema before execution — a whole class of agent failures disappears.",
      "summary": "Strict mode extends to parallel tool calls: every call is schema-validated pre-execution, with a repair pass on failure. Available in the API and Codex.",
      "practical_implication": "Delete your hand-rolled tool-call validators. Turn on strict mode and move validation effort to eval coverage instead.",
      "agent_context": "OpenAI strict structured outputs now cover parallel tool calls. Schema-validated pre-execution with one repair pass. Remove custom validators; rely on strict mode + evals.",
      "source": {
        "name": "OpenAI",
        "url": "https://openai.com/blog/structured-outputs-parallel-tools",
        "published_at": "2026-07-01T00:00:00.000Z"
      },
      "source_class": "blog_post",
      "content_type": "Official Release",
      "layer": "model",
      "domains": [
        "coding"
      ],
      "topics": [
        "tool-use"
      ],
      "verification": {
        "status": "official_source",
        "label": "Official Source",
        "method": "source_feed",
        "verified_at": null
      },
      "uncertainty": [],
      "connected_context": null,
      "lifecycle": "New",
      "published_at": "2026-07-01T00:00:00.000Z",
      "modified_at": "2026-07-01T00:00:00.000Z",
      "supersedes": [],
      "expires_at": null,
      "formats": {
        "html": "https://feed7.dev/p/openai-structured-tool-use",
        "json": "https://feed7.dev/p/openai-structured-tool-use.json",
        "markdown": "https://feed7.dev/p/openai-structured-tool-use.md"
      }
    },
    {
      "schema_version": "1.1",
      "id": "p10",
      "slug": "evals-workshop-aie",
      "url": "https://feed7.dev/p/evals-workshop-aie",
      "title": "Building eval sets that survive model swaps — AI Engineer workshop",
      "why_included": "Eval sets usually die when you change models. This workshop shows how to write ones that transfer.",
      "summary": "Behavior-anchored evals: assert on user-visible outcomes, not model phrasing. Includes a template repo and a live migration from GPT to Claude.",
      "practical_implication": "Rewrite phrasing-based assertions as outcome assertions now — before your next model swap forces it.",
      "agent_context": "Write evals against user-visible outcomes, not model phrasing. Outcome-anchored evals survive model swaps. Template: given/when/then on behavior, never on wording.",
      "source": {
        "name": "AI Engineer",
        "url": "https://www.youtube.com/watch?v=ai-eng-evals-2026",
        "published_at": "2026-06-21T00:00:00.000Z"
      },
      "source_class": "video",
      "content_type": "Workshop",
      "layer": "benchmark",
      "domains": [
        "coding"
      ],
      "topics": [
        "agent-evals",
        "model-selection"
      ],
      "verification": {
        "status": "transcript_verified",
        "label": "Transcript Verified",
        "method": "transcript_review",
        "verified_at": null
      },
      "uncertainty": [],
      "connected_context": null,
      "lifecycle": "Evergreen",
      "published_at": "2026-06-21T00:00:00.000Z",
      "modified_at": "2026-06-21T00:00:00.000Z",
      "supersedes": [],
      "expires_at": null,
      "formats": {
        "html": "https://feed7.dev/p/evals-workshop-aie",
        "json": "https://feed7.dev/p/evals-workshop-aie.json",
        "markdown": "https://feed7.dev/p/evals-workshop-aie.md"
      }
    },
    {
      "schema_version": "1.1",
      "id": "p11",
      "slug": "ctxlint-repo",
      "url": "https://feed7.dev/p/ctxlint-repo",
      "title": "ctxlint: a linter for agent context files",
      "why_included": "Lints CLAUDE.md / AGENTS.md / rules files for staleness, contradiction, and dead links.",
      "summary": "CLI that checks agent context files: flags stale dates, contradicting rules, dead links, and files over a token budget. CI-ready. Repo builds and tests pass.",
      "practical_implication": "Context files rot silently. Run ctxlint in CI so your agent instructions stay as maintained as your code.",
      "agent_context": "ctxlint lints agent context files (CLAUDE.md, AGENTS.md): staleness, contradictions, dead links, token budget. Add to CI beside your linter.",
      "source": {
        "name": "GitHub",
        "url": "https://github.com/ctxtools/ctxlint",
        "published_at": "2026-06-23T00:00:00.000Z"
      },
      "source_class": "tool",
      "content_type": "GitHub Repo",
      "layer": "context",
      "domains": [
        "coding"
      ],
      "topics": [
        "context-engineering"
      ],
      "verification": {
        "status": "repo_verified",
        "label": "Repo Verified",
        "method": "repo_review",
        "verified_at": null
      },
      "uncertainty": [
        "Maintained by a single author; bus factor 1."
      ],
      "connected_context": null,
      "lifecycle": "New",
      "published_at": "2026-06-23T00:00:00.000Z",
      "modified_at": "2026-06-23T00:00:00.000Z",
      "supersedes": [],
      "expires_at": null,
      "formats": {
        "html": "https://feed7.dev/p/ctxlint-repo",
        "json": "https://feed7.dev/p/ctxlint-repo.json",
        "markdown": "https://feed7.dev/p/ctxlint-repo.md"
      }
    },
    {
      "schema_version": "1.1",
      "id": "p12",
      "slug": "conductor-mac-app",
      "url": "https://feed7.dev/p/conductor-mac-app",
      "title": "Conductor: a Mac app that runs local agent fleets",
      "why_included": "Runs multiple Claude Code sessions in parallel worktrees with a review queue — on your machine.",
      "summary": "Native Mac app: each agent gets a git worktree, results land in one review queue. Free tier covers 3 parallel agents.",
      "practical_implication": "Parallel agents stop stepping on each other. Worth adopting if you run more than one coding session a day.",
      "agent_context": "Conductor runs parallel Claude Code sessions in isolated git worktrees, merged via a review queue. Tested: 3 agents on one repo, no conflicts. Limitation: worktree cleanup is manual.",
      "source": {
        "name": "Mac app",
        "url": "https://conductor.build",
        "published_at": "2026-06-20T00:00:00.000Z"
      },
      "source_class": "tool",
      "content_type": "Mac App",
      "layer": "tools",
      "domains": [
        "coding"
      ],
      "topics": [
        "multi-agent",
        "coding-agents"
      ],
      "verification": {
        "status": "founder_tested",
        "label": "Founder Tested",
        "method": "founder_test",
        "verified_at": "2026-06-22T00:00:00.000Z"
      },
      "uncertainty": [
        "Worktree cleanup is manual; disk usage grows fast."
      ],
      "connected_context": null,
      "lifecycle": "New",
      "published_at": "2026-06-20T00:00:00.000Z",
      "modified_at": "2026-06-20T00:00:00.000Z",
      "supersedes": [],
      "expires_at": null,
      "formats": {
        "html": "https://feed7.dev/p/conductor-mac-app",
        "json": "https://feed7.dev/p/conductor-mac-app.json",
        "markdown": "https://feed7.dev/p/conductor-mac-app.md"
      }
    },
    {
      "schema_version": "1.1",
      "id": "p13",
      "slug": "vercel-dashboard-density",
      "url": "https://feed7.dev/p/vercel-dashboard-density",
      "title": "Vercel dashboard density — a layout taste reference",
      "why_included": "A concrete answer to \"how dense should a developer dashboard be\" — with measurable spacing decisions.",
      "summary": "Breakdown of Vercel’s dashboard rhythm: 24px card padding, hairline borders instead of shadow, one accent color per view.",
      "practical_implication": "Decision: adopt hairline-border density for the Brain library instead of spaced-out cards. Maps to spacing tokens 16/24.",
      "agent_context": "Density reference: 24px card padding, hairline borders, no shadow, one accent per view. Use for library/table surfaces where scanning matters more than air.",
      "source": {
        "name": "Design",
        "url": "https://vercel.com/design/dashboard-density",
        "published_at": "2026-06-18T00:00:00.000Z"
      },
      "source_class": "taste_reference",
      "content_type": "Design Reference",
      "layer": "craft",
      "domains": [],
      "topics": [
        "interface-quality",
        "design-engineering"
      ],
      "verification": {
        "status": "source_linked",
        "label": "Source Linked",
        "method": "source_feed",
        "verified_at": null
      },
      "uncertainty": [],
      "connected_context": null,
      "lifecycle": "Evergreen",
      "published_at": "2026-06-18T00:00:00.000Z",
      "modified_at": "2026-06-18T00:00:00.000Z",
      "supersedes": [],
      "expires_at": null,
      "formats": {
        "html": "https://feed7.dev/p/vercel-dashboard-density",
        "json": "https://feed7.dev/p/vercel-dashboard-density.json",
        "markdown": "https://feed7.dev/p/vercel-dashboard-density.md"
      }
    },
    {
      "schema_version": "1.1",
      "id": "p14",
      "slug": "linkedin-eval-rollout",
      "url": "https://feed7.dev/p/linkedin-eval-rollout",
      "title": "Rolling out agents behind evals — an operator’s playbook",
      "why_included": "Concrete staged-rollout playbook with numbers — but the claimed win rates are not yet source-linked.",
      "summary": "Operator describes gating an internal agent behind a 40-case eval, canarying to 10% of tasks, then expanding. Claims 30% fewer escalations.",
      "practical_implication": "The staging pattern is reusable today; treat the win-rate numbers as unverified until the promised write-up lands.",
      "agent_context": "Staged agent rollout: gate behind eval set, canary 10% of tasks, expand on pass. Pattern is sound; the 30% improvement claim is unverified.",
      "source": {
        "name": "LinkedIn",
        "url": "https://www.linkedin.com/posts/operator-evals-rollout",
        "published_at": "2026-07-01T00:00:00.000Z"
      },
      "source_class": "social_media",
      "content_type": "Social Thread",
      "layer": "benchmark",
      "domains": [
        "coding"
      ],
      "topics": [
        "agent-evals",
        "agent-reliability"
      ],
      "verification": {
        "status": "needs_review",
        "label": "Needs Review",
        "method": "unverified",
        "verified_at": null
      },
      "uncertainty": [
        "Win-rate numbers not source-linked; write-up promised but not published."
      ],
      "connected_context": null,
      "lifecycle": "New",
      "published_at": "2026-07-01T00:00:00.000Z",
      "modified_at": "2026-07-01T00:00:00.000Z",
      "supersedes": [],
      "expires_at": null,
      "formats": {
        "html": "https://feed7.dev/p/linkedin-eval-rollout",
        "json": "https://feed7.dev/p/linkedin-eval-rollout.json",
        "markdown": "https://feed7.dev/p/linkedin-eval-rollout.md"
      }
    }
  ],
  "agent_instruction": "Use these items as source-backed context. Do not invent claims beyond linked material. Prefer practical implications for solo developer work. If sources conflict, call it out."
}