<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: GBTI Network</title>
    <description>The latest articles on DEV Community by GBTI Network (@gbti).</description>
    <link>https://dev.to/gbti</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1032106%2F377a8530-0de6-474a-a5ca-beaccd087af9.png</url>
      <title>DEV Community: GBTI Network</title>
      <link>https://dev.to/gbti</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/gbti"/>
    <language>en</language>
    <item>
      <title>VSCode Extension: Terminal Session Profiles</title>
      <dc:creator>GBTI Network</dc:creator>
      <pubDate>Tue, 04 Aug 2026 02:20:57 +0000</pubDate>
      <link>https://dev.to/gbti-network/vscode-extension-terminal-session-profiles-39k5</link>
      <guid>https://dev.to/gbti-network/vscode-extension-terminal-session-profiles-39k5</guid>
      <description>&lt;p&gt;&lt;strong&gt;By &lt;a class="mentioned-user" href="https://dev.to/atwellpub"&gt;@atwellpub&lt;/a&gt;, &lt;a href="https://gbti.network/members/atwellpub/" rel="noopener noreferrer"&gt;GBTI Network Member&lt;/a&gt;.&lt;/strong&gt; Originally published on &lt;a href="https://gbti.network/products/terminal-session-profiles/" rel="noopener noreferrer"&gt;gbti.network&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Over the past two years, the introduction of tools such as Claude Code has made terminal management a much more central part of the day-to-day development workbench. Terminals are no longer temporary scratch space. They often represent distinct, long-running parts of a project, each with its own name, working directory, and purpose.&lt;/p&gt;

&lt;p&gt;Our own terminal configuration commonly includes several named Claude Code sessions, each with its own name inside Claude Code and remote control enabled by default. We also tend to keep one PowerShell terminal open for running Windows commands and one WSL terminal for working directly within Windows Subsystem for Linux. It is therefore not unusual for us to have three to five terminal tabs open within a single project.&lt;/p&gt;

&lt;p&gt;VS Code already supports &lt;a href="https://code.visualstudio.com/docs/terminal/advanced" rel="noopener noreferrer"&gt;persistent terminal sessions&lt;/a&gt;, but its native features are spread across terminal profiles, tasks, settings, and workspace permissions.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=GBTI.gbti-terminal-sessions" rel="noopener noreferrer"&gt;Terminal Session Profiles&lt;/a&gt; brings those pieces into one UI and adds reusable workspace or global profiles, ordered startup commands, automatic reprovisioning, and optional Claude session resume commands.&lt;/p&gt;

&lt;h2&gt;
  
  
  Terminal session profile manager
&lt;/h2&gt;

&lt;p&gt;A profile is a saved terminal setup: which shell to open, where, and what to run once it is ready. Create one from the sidebar's ＋, or right-click any terminal and choose &lt;strong&gt;Save as Instance Profile&lt;/strong&gt; to start from a terminal you already have open.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fru8ox22utmh0apzhe02r.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fru8ox22utmh0apzhe02r.webp" alt="The Session Profiles view, with a profile launching an agent in the terminal column" width="800" height="343"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Profiles can be created from the Session Profiles sidebar or saved from a terminal that is already open. Once created, each profile remains available within the project and can be launched whenever it is needed.&lt;/p&gt;

&lt;p&gt;A typical project might include separate profiles for several named Claude Code sessions, a development server, a build watcher, a general PowerShell terminal, and a WSL terminal. Instead of manually rebuilding each of these environments, they become reusable parts of the project.&lt;/p&gt;

&lt;p&gt;Each profile includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A profile name&lt;/li&gt;
&lt;li&gt;A shell&lt;/li&gt;
&lt;li&gt;A working directory&lt;/li&gt;
&lt;li&gt;An ordered list of commands&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fu7yzrr7zin05s1j6gdmi.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fu7yzrr7zin05s1j6gdmi.webp" alt="The profile editor showing the profile name, shell, working directory, and ordered commands" width="799" height="389"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Commands are replayed literally and in the order they are written. Every command except the final one is awaited before the next begins. This allows a profile to prepare an environment before launching a long-running process such as an agent, development server, or file watcher.&lt;/p&gt;

&lt;p&gt;For example, a profile can use:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;claude --resume ClaudeCodeSessionName
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;to reopen a particular named Claude Code session.&lt;/p&gt;

&lt;p&gt;This allows each terminal profile to correspond directly with a specific Claude Code session. A project can maintain several independently named agents, each launched in the correct working directory with its intended session restored.&lt;/p&gt;

&lt;p&gt;Commands are not limited to coding agents. A profile can also activate an environment, start a local server, launch a build process, open a project-specific shell, or perform any other command-line preparation the project requires.&lt;/p&gt;

&lt;p&gt;Profiles can optionally be added to the terminal &lt;code&gt;+&lt;/code&gt; dropdown as named terminal profiles. This allows them to remain accessible through VS Code’s familiar terminal controls while still benefiting from the command replay managed by the extension.&lt;/p&gt;

&lt;h2&gt;
  
  
  Restoring profiles after a restart
&lt;/h2&gt;

&lt;p&gt;VS Code includes native terminal persistence, but restoring a terminal tab is not necessarily the same as restoring the terminal session that previously occupied it.&lt;/p&gt;

&lt;p&gt;A restored tab may retain its old name and scrollback while reopening as a new default shell with none of its previous processes running. The tab looks familiar, but the environment it represented is no longer there.&lt;/p&gt;

&lt;p&gt;Terminal Session Profiles handles the other half of that recovery.&lt;/p&gt;

&lt;p&gt;Profiles that were running are remembered per workspace. When the project is opened again, the extension identifies the restored terminal tabs associated with those profiles and relaunches them using the correct shell, working directory, and command sequence.&lt;/p&gt;

&lt;p&gt;Restoration happens automatically by default. It can also be started manually through the &lt;strong&gt;Restore&lt;/strong&gt; control in the status bar.&lt;/p&gt;

&lt;p&gt;Before replacing a restored terminal, the extension compares the process recorded when the profile was launched with the process that returned. If the original process genuinely survived, the terminal is left alone rather than being terminated and recreated.&lt;/p&gt;

&lt;p&gt;The objective is simple: reopening a project should also restore the terminal environment that belongs to it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Optional workspace layout
&lt;/h2&gt;

&lt;p&gt;By default, VS Code places the terminal in a horizontal panel beneath the primary workspace, while the Explorer, editor, and AI chat interface occupy the taller areas above it. This arrangement reflects a workflow in which the terminal is treated as a supporting tool rather than one of the main places where work happens.&lt;/p&gt;

&lt;p&gt;That was no longer true for us. As Claude Code and other terminal-based tools became a larger part of our development process, the terminal became just as central as the editor, and sometimes more important. We wanted the option to bring it into the primary workspace as its own column, alongside the Explorer, editor, and chat interface, rather than leaving it confined to a secondary row at the bottom of the IDE.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3vto43cq87oo6u1ce2ui.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3vto43cq87oo6u1ce2ui.webp" alt="Four columns, one keystroke each: Explorer, editor, terminal, and chat with their status bar controls" width="800" height="356"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once each of these areas became a meaningful part of the daily workbench, we also needed better ways to control focus and move quickly between them. The layout enhancements provide status-bar controls for showing and hiding the Explorer, editor, terminal, and chat areas, with each workspace remembering its own arrangement.&lt;/p&gt;

&lt;p&gt;The layout controls VS Code’s real interface containers rather than replacing or recreating them. The Explorer remains the standard Explorer. The terminal retains its normal terminal list and controls. Claude Code, Codex, and other chat interfaces continue to operate within their existing panels.&lt;/p&gt;

&lt;p&gt;This is important because the layout enhancement does not attempt to introduce a replacement workspace. It provides faster controls for arranging the tools already present in VS Code.&lt;/p&gt;

&lt;p&gt;One column always remains visible, preventing the workspace from being reduced to an empty window. A &lt;strong&gt;Reset Layout&lt;/strong&gt; command restores the standard arrangement whenever needed.&lt;/p&gt;

&lt;p&gt;We felt these improvements belonged naturally within the same extension because they address the workspace surrounding the terminal sessions it manages. The layout remains entirely optional and can be disabled through the extension settings without affecting session profiles, command replay, or terminal restoration.&lt;/p&gt;

&lt;h2&gt;
  
  
  Independent features
&lt;/h2&gt;

&lt;p&gt;The terminal session profile manager and the column layout are related enhancements, but neither depends on the other.&lt;/p&gt;

&lt;p&gt;Disabling the column layout does not disable profiles. Saved profiles can still be launched, their commands can still be replayed, and active profile sessions can still be restored when a project reopens.&lt;/p&gt;

&lt;p&gt;Layout preferences are also remembered separately for each workspace. A project in which the layout has been disabled will remain that way across restarts, while another workspace can continue using the column arrangement.&lt;/p&gt;

&lt;p&gt;There is deliberately no master switch inside the extension that disables every feature at once. The column controls manage the layout, while the session settings manage profile restoration. The extension itself can still be disabled through VS Code’s Extensions view.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keyboard and workspace controls
&lt;/h2&gt;

&lt;p&gt;The extension includes commands for managing profiles, restoring sessions, navigating the column layout, and resetting the workspace.&lt;/p&gt;

&lt;p&gt;Default shortcuts include:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;th&gt;Shortcut&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Toggle Explorer&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Ctrl+Alt+1&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Toggle editor&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Ctrl+Alt+2&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Toggle terminal&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Ctrl+Alt+3&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Toggle chat&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Ctrl+Alt+4&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Open a new terminal in the terminal column&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Ctrl+Shift+`&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Grow the focused column&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Ctrl+Alt+Right&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Shrink the focused column&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Ctrl+Alt+Left&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Additional commands are available through the Command Palette and status-bar controls for creating profiles, editing profiles, restoring the last session, enabling or disabling the layout, and resetting the workspace arrangement.&lt;/p&gt;

&lt;h2&gt;
  
  
  Install
&lt;/h2&gt;

&lt;p&gt;Search for &lt;strong&gt;Terminal Session Profiles&lt;/strong&gt; in the VS Code Extensions view.&lt;/p&gt;

&lt;p&gt;You can also install it through Quick Open with &lt;code&gt;Ctrl+P&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ext install GBTI.gbti-terminal-sessions
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Terminal Session Profiles is published through the Visual Studio Marketplace as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GBTI.gbti-terminal-sessions
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It is also available through Open VSX for VSCodium and compatible editors.&lt;/p&gt;

&lt;p&gt;Terminal Session Profiles is free, open source, and licensed under MIT.&lt;/p&gt;

&lt;p&gt;The resource shared in this post is a new product published by GBTI Network member Hudson Atwell. &lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;Are you a writer, musician, or product developer? We would love to support your work on the GBTI Network. For more information about how to join our community visit &lt;a href="https://gbti.network" rel="noopener noreferrer"&gt;https://gbti.network&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To follow Hudson Atwell's work more closely, consider joining our network and subscribing to them directly: &lt;a href="https://gbti.network/members/atwellpub/" rel="noopener noreferrer"&gt;https://gbti.network/members/atwellpub/&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>vscode</category>
      <category>terminal</category>
      <category>sessions</category>
      <category>profiles</category>
    </item>
    <item>
      <title>Resolve Open Questions: a /qa Skill for Claude Code</title>
      <dc:creator>GBTI Network</dc:creator>
      <pubDate>Fri, 31 Jul 2026 17:22:00 +0000</pubDate>
      <link>https://dev.to/gbti-network/resolve-open-questions-a-qa-skill-for-claude-code-1jp2</link>
      <guid>https://dev.to/gbti-network/resolve-open-questions-a-qa-skill-for-claude-code-1jp2</guid>
      <description>&lt;p&gt;&lt;strong&gt;By &lt;a class="mentioned-user" href="https://dev.to/atwellpub"&gt;@atwellpub&lt;/a&gt;, &lt;a href="https://gbti.network/members/atwellpub/" rel="noopener noreferrer"&gt;GBTI Network Member&lt;/a&gt;.&lt;/strong&gt; Originally published on &lt;a href="https://gbti.network/prompts/qa-skill-for-claude-code-and-codex/" rel="noopener noreferrer"&gt;gbti.network&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Claude Code loads any markdown file at &lt;code&gt;.claude/skills/&amp;lt;name&amp;gt;/SKILL.md&lt;/code&gt; as a reusable slash command (a "skill"). This one gives your agent a &lt;code&gt;/qa&lt;/code&gt; command that stops before it builds, pulls every unresolved decision into a single batch of questions, and refuses to write code until you have answered them.&lt;/p&gt;

&lt;p&gt;It exists because open questions have a habit of surfacing at the wrong end of the work. A sprint finishes, and only then does the agent raise the decisions it should have raised at the start, at exactly the point where acting on them means redoing something.&lt;/p&gt;

&lt;p&gt;The mechanism is plan mode, invoked deliberately. The agent puts ITSELF into a read-only state, does its research there, asks everything it found in one batch, and only then acts. That ordering is the whole feature.&lt;/p&gt;

&lt;h2&gt;
  
  
  Install
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Create &lt;code&gt;.claude/skills/qa/&lt;/code&gt; in your repo, or &lt;code&gt;~/.claude/skills/qa/&lt;/code&gt; to have it in every project.&lt;/li&gt;
&lt;li&gt;Save the file below as &lt;code&gt;SKILL.md&lt;/code&gt; inside it.&lt;/li&gt;
&lt;li&gt;Type &lt;code&gt;/qa&lt;/code&gt; in Claude Code.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Nothing to configure. The skill reads your project, not a config file.&lt;/p&gt;

&lt;h2&gt;
  
  
  The skill file
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;qa&lt;/span&gt;
&lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;&amp;gt;"&lt;/span&gt;
  &lt;span class="s"&gt;Resolve the open questions before the work proceeds. Invoke for "/qa", "/qa continue", "/qa proceed",&lt;/span&gt;
  &lt;span class="s"&gt;"/qa deep", "/qa &amp;lt;topic&amp;gt;", or when the user asks you to ask your questions first, clarify before&lt;/span&gt;
  &lt;span class="s"&gt;building, or answer the things you just raised. By default it interrogates only YOUR OWN LAST REPLY&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;
  &lt;span class="s"&gt;the questions, options and flagged decisions already sitting in it. "/qa deep" runs the full&lt;/span&gt;
  &lt;span class="s"&gt;six-category sweep instead. Every mode enters plan mode; "continue" and "proceed" skip the plan&lt;/span&gt;
  &lt;span class="s"&gt;approval and build straight from the answers.&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;

&lt;span class="gh"&gt;# /qa: resolve the open questions before building&lt;/span&gt;

The point of this command is to move every decision that is the user's call OUT of your head and
into one batch of questions, answered before any code is written. No silent defaults, no drip of
ad-hoc questions later.

The common case is small and cheap: a reply just ended with open questions in it, and the user wants
those answered properly instead of letting them evaporate. That is the default. The exhaustive sweep
is a separate, deliberate mode, because it costs real tokens and most invocations do not need it.

&lt;span class="gu"&gt;## Read the argument first, it selects the mode&lt;/span&gt;

&lt;span class="sb"&gt;`continue`&lt;/span&gt;, &lt;span class="sb"&gt;`proceed`&lt;/span&gt; and &lt;span class="sb"&gt;`deep`&lt;/span&gt; are reserved words. Anything else is a topic.

| Invocation | Mode |
|---|---|
| &lt;span class="sb"&gt;`/qa`&lt;/span&gt; | &lt;span class="gs"&gt;**Ask and hold, last reply.**&lt;/span&gt; Enter plan mode (&lt;span class="sb"&gt;`EnterPlanMode`&lt;/span&gt;), interrogate your own last reply, ask what it left open, then present a plan for approval (&lt;span class="sb"&gt;`ExitPlanMode`&lt;/span&gt;). Write nothing until approved. |
| &lt;span class="sb"&gt;`/qa continue`&lt;/span&gt; or &lt;span class="sb"&gt;`/qa proceed`&lt;/span&gt; | &lt;span class="gs"&gt;**Ask and go.**&lt;/span&gt; Identical, minus the confirmation before acting: once the answers land you build straight from them, with no plan written for review. |
| &lt;span class="sb"&gt;`/qa deep`&lt;/span&gt; | &lt;span class="gs"&gt;**Full sweep.**&lt;/span&gt; Step 2's six categories instead of the last-reply scope. Use when starting real work, not when closing out a reply. |
| &lt;span class="sb"&gt;`/qa deep continue`&lt;/span&gt; or &lt;span class="sb"&gt;`/qa deep proceed`&lt;/span&gt; | Full sweep, no approval round. Scope and approval are independent. |
| &lt;span class="sb"&gt;`/qa &amp;lt;anything else&amp;gt;`&lt;/span&gt; | &lt;span class="gs"&gt;**Scoped.**&lt;/span&gt; The trailing text names the subject to interrogate. Add &lt;span class="sb"&gt;`continue`&lt;/span&gt; or &lt;span class="sb"&gt;`proceed`&lt;/span&gt; to drop the approval round for it. |

Every mode enters plan mode and holds its read-only discipline until the questions are answered. The
question-asking discipline in step 3 is identical in all of them; only the SCOPE and the approval
round change.

&lt;span class="gu"&gt;## Step 1: verify before you ask&lt;/span&gt;

Never ask what the repository can answer. Check the claims your questions rest on before putting them
to the user, so every question is one that genuinely cannot be resolved without them. A question the
code already answers is noise, and it teaches the user that /qa wastes their time.

In the default mode this is targeted, not a survey: confirm the specific facts behind the items your
last reply raised. A flagged failure may already have its reason recorded somewhere; an offered option
may turn out to be impossible or already done. Verifying first routinely dissolves a question or
changes what it should have been.

&lt;span class="gu"&gt;## Step 2: what to interrogate&lt;/span&gt;

&lt;span class="gs"&gt;**Default: your own last reply.**&lt;/span&gt; Re-read the reply you just gave and pull out everything you left
open: questions you asked, options you offered, decisions you named as the user's, caveats you
attached, and anything you said you COULD do next. That set is the batch. Do not sweep the codebase.

If the last reply left nothing open, say so plainly and stop. Do not go hunting for work to justify
the invocation.

&lt;span class="gs"&gt;**Deep (`/qa deep`): the full sweep.**&lt;/span&gt; Cover all of these, not just the obvious one:
&lt;span class="p"&gt;
1.&lt;/span&gt; &lt;span class="gs"&gt;**The request itself.**&lt;/span&gt; Scope boundaries, what is deliberately excluded, naming, placement.
&lt;span class="p"&gt;2.&lt;/span&gt; &lt;span class="gs"&gt;**The governing doc.**&lt;/span&gt; If the work traces to a planning document (a scope of work, a ticket, a
   spec), its open-questions section is the primary source. Pull those forward verbatim.
&lt;span class="p"&gt;3.&lt;/span&gt; &lt;span class="gs"&gt;**What the audit surfaced.**&lt;/span&gt; Which existing pattern to reuse, where a shared helper lives,
   whether to extend a surface or add one.
&lt;span class="p"&gt;4.&lt;/span&gt; &lt;span class="gs"&gt;**Anything you were about to default silently.**&lt;/span&gt; If you caught yourself picking, it is a
   question. This is the highest-yield category.
&lt;span class="p"&gt;5.&lt;/span&gt; &lt;span class="gs"&gt;**The user's call by nature.**&lt;/span&gt; Product and UX behavior, copy, data-shape changes, anything
   irreversible or outward-facing, and anything that costs money or needs provisioning.
&lt;span class="p"&gt;6.&lt;/span&gt; &lt;span class="gs"&gt;**Conflicts.**&lt;/span&gt; Where the request contradicts an existing convention, the code, or an earlier
   decision, surface the conflict rather than quietly picking a side.

&lt;span class="gu"&gt;## Step 3: how to ask&lt;/span&gt;
&lt;span class="p"&gt;
-&lt;/span&gt; &lt;span class="gs"&gt;**One batch, numbered, in prose.**&lt;/span&gt; Free-form conversational questions, not multiple-choice
  pickers, unless a question is a genuine either/or.
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**Give each question a recommendation.**&lt;/span&gt; State the option you would take and why, so the user can
  answer "your call" on any of them and you are still unblocked.
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**Give each question its stakes in one line.**&lt;/span&gt; What changes depending on the answer. A question
  whose answer changes nothing should not be asked.
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**Order by consequence**&lt;/span&gt;, most structural first.
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**Say so when there are none.**&lt;/span&gt; If verification resolved everything, report that plainly and state
  the assumptions you are proceeding under. Do not manufacture questions to justify the command.

&lt;span class="gu"&gt;## Step 4: after the answers&lt;/span&gt;
&lt;span class="p"&gt;
-&lt;/span&gt; &lt;span class="gs"&gt;**Do not re-ask.**&lt;/span&gt; Answered means settled; carry it forward without relitigating.
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**Record the resolutions where they belong.**&lt;/span&gt; If a planning doc raised the question, write the
  answer back into it so it reads as resolved, not still open.
&lt;span class="p"&gt;-&lt;/span&gt; In ask-and-hold mode, present the plan for approval. In continue/proceed mode, leave plan mode as
  soon as the answers land and build, without composing a plan for review. The harness still
  surfaces a single prompt on the way out of plan mode; that is a formality, not a review round, so
  keep what you write there to a line or two.
&lt;span class="p"&gt;-&lt;/span&gt; If something genuinely new surfaces mid-build, finish everything that does not depend on it, then
  raise the one question at the right moment.

&lt;span class="gu"&gt;## Reminders&lt;/span&gt;
&lt;span class="p"&gt;
-&lt;/span&gt; Follow the project's own plan-mode and writing conventions throughout.
&lt;span class="p"&gt;-&lt;/span&gt; The command is about decisions, not permission. Do not turn it into a request to confirm work the
  user already asked for.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The modes
&lt;/h2&gt;

&lt;p&gt;The argument controls two independent things: how wide the agent looks, and whether a plan gets approved before it acts.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;/qa&lt;/code&gt;&lt;/strong&gt; is the default, and it is deliberately narrow: the agent interrogates its own last reply. Whatever it just left open becomes the batch. This is the everyday case, and it costs almost nothing because there is no sweep.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;/qa continue&lt;/code&gt;&lt;/strong&gt; or &lt;strong&gt;&lt;code&gt;/qa proceed&lt;/code&gt;&lt;/strong&gt; is the same, minus the approval round. You answer, it builds. Still plan mode, so nothing gets written while the questions are open.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;/qa deep&lt;/code&gt;&lt;/strong&gt; widens the scope to the full six-category sweep in the skill file: the request, the governing doc, the audit findings, silent defaults, the decisions that are inherently yours, and conflicts with existing conventions. Use it when you are starting real work, not when you are closing out a reply.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;/qa &amp;lt;anything else&amp;gt;&lt;/code&gt;&lt;/strong&gt; scopes to a subject. &lt;code&gt;"/qa the rate limiter"&lt;/code&gt; asks everything unresolved about the rate limiter specifically.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Scope and approval compose, so &lt;code&gt;/qa deep continue&lt;/code&gt; runs the wide sweep and then builds from your answers without a plan to approve.&lt;/p&gt;

&lt;p&gt;The narrow default is the important design choice. An exhaustive sweep on every invocation is expensive and mostly wasted, because the usual reason you type &lt;code&gt;/qa&lt;/code&gt; is that the agent just handed you a list of open questions and you want them asked properly rather than left to evaporate.&lt;/p&gt;

&lt;h2&gt;
  
  
  Making it yours
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Tune the deep sweep.&lt;/strong&gt; Step 2 lists six places to look under &lt;code&gt;/qa deep&lt;/code&gt;. The list is deliberately generic, so add the categories your projects actually produce. A team with a design system adds "which token or component does this reuse". A team with a data model adds "does this change a stored shape, and what happens to existing rows". A regulated project adds an approvals category. The sweep is only as good as its list, and it only runs when you ask for it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Point it at your planning docs.&lt;/strong&gt; The highest-yield item in the sweep is a governing document with an open-questions section, since those questions are already written and already yours to answer. If your project keeps scopes of work, tickets or design docs, name that location explicitly in step 2 so the agent reads it every time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Decide how hard the hold is.&lt;/strong&gt; As written, bare &lt;code&gt;/qa&lt;/code&gt; will not touch a file until you approve a plan. If that is heavier than you want for routine work, make &lt;code&gt;continue&lt;/code&gt; the implied default in your copy and reserve the plan-approval round for large changes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Decide what "last reply" means to you.&lt;/strong&gt; The default reads the agent's most recent message and treats everything it left open as the batch. If your sessions tend to sprawl across several exchanges before you reach for &lt;code&gt;/qa&lt;/code&gt;, widen that to the current thread of work, or just type &lt;code&gt;/qa deep&lt;/code&gt; when the narrow read would miss something.&lt;/p&gt;

&lt;p&gt;The resource shared in this post is a new prompt published by GBTI Network member &lt;a href="https://dev.to/realatwellpub"&gt;Hudson Atwell&lt;/a&gt;. &lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;Are you a writer, musician, or product developer? We would love to support your work on the GBTI Network. For more information about how to join our community visit &lt;a href="https://gbti.network" rel="noopener noreferrer"&gt;https://gbti.network&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To follow Hudson Atwell's work more closely, consider joining our network and subscribing to them directly: &lt;a href="https://gbti.network/members/atwellpub/" rel="noopener noreferrer"&gt;https://gbti.network/members/atwellpub/&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>claudecode</category>
      <category>agentskills</category>
      <category>planning</category>
      <category>workflow</category>
    </item>
    <item>
      <title>Manage Scopes of Work: a /sow Skill for Claude Code</title>
      <dc:creator>GBTI Network</dc:creator>
      <pubDate>Tue, 28 Jul 2026 13:10:49 +0000</pubDate>
      <link>https://dev.to/gbti-network/manage-scopes-of-work-a-sow-skill-for-claude-code-33ke</link>
      <guid>https://dev.to/gbti-network/manage-scopes-of-work-a-sow-skill-for-claude-code-33ke</guid>
      <description>&lt;p&gt;&lt;strong&gt;By Hudson Atwell, &lt;a href="https://gbti.network/members/atwellpub/" rel="noopener noreferrer"&gt;GBTI Network Member&lt;/a&gt;.&lt;/strong&gt; Originally published on &lt;a href="https://gbti.network/prompts/scope-of-work-manager-claude-code-skill/" rel="noopener noreferrer"&gt;gbti.network&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Claude Code loads any markdown file at &lt;code&gt;.claude/skills/&amp;lt;name&amp;gt;/SKILL.md&lt;/code&gt; as a reusable slash command (a "skill"). This one gives your agent a &lt;code&gt;/sow&lt;/code&gt; command for managing Scopes of Work: local, lane-based planning documents that move kanban-style from queue to completed, living beside your code but outside version control.&lt;/p&gt;

&lt;p&gt;It exists because agent-driven projects accumulate work items faster than anyone can track them in their head. A SOW gives every work item one canonical markdown file with a status banner, phases, and open questions; the lanes give the whole project a glanceable board; and the authoring rules keep the agent from duplicating items or writing plans detached from the real code.&lt;/p&gt;

&lt;h2&gt;
  
  
  Install
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Create &lt;code&gt;.claude/skills/sow/&lt;/code&gt; in your repo.&lt;/li&gt;
&lt;li&gt;Save the file below as &lt;code&gt;.claude/skills/sow/SKILL.md&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Adjust the lane subfolders and conventions to your project (see Making it yours).&lt;/li&gt;
&lt;li&gt;Type &lt;code&gt;/sow init&lt;/code&gt; once to scaffold the framework, then &lt;code&gt;/sow &amp;lt;request&amp;gt;&lt;/code&gt; to author.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The skill file
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;sow&lt;/span&gt;
&lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;&amp;gt;"&lt;/span&gt;
  &lt;span class="s"&gt;Author or improve a Scope of Work (SOW) in .data/sow/. Invoke for "/sow", "/sow init",&lt;/span&gt;
  &lt;span class="s"&gt;"create a sow", "write a sow", or when the user asks to capture work as a SOW. "/sow init"&lt;/span&gt;
  &lt;span class="s"&gt;scaffolds the lane framework (idempotent). Otherwise enforce the pre-checks&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="s"&gt;improve an existing&lt;/span&gt;
  &lt;span class="s"&gt;SOW before creating a new one, ground it in a code audit, reference related completed SOWs,&lt;/span&gt;
  &lt;span class="s"&gt;default the lane to queue, and follow the project's plan-mode and writing conventions.&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;

&lt;span class="gh"&gt;# Managing Scopes of Work&lt;/span&gt;

SOWs are local planning documents in &lt;span class="sb"&gt;`.data/sow/`&lt;/span&gt; (kept OUT of version control), organized into
lanes a work item moves through: &lt;span class="sb"&gt;`0_queue`&lt;/span&gt; -&amp;gt; &lt;span class="sb"&gt;`1_progressing`&lt;/span&gt; -&amp;gt; &lt;span class="sb"&gt;`2_waiting_review`&lt;/span&gt; -&amp;gt;
&lt;span class="sb"&gt;`3_completed`&lt;/span&gt;, plus a &lt;span class="sb"&gt;`_staging`&lt;/span&gt; side-lane for items parked on an external blocker. One canonical
markdown file per SOW; move the same file between lanes as the work advances.

&lt;span class="gu"&gt;## Initialize (/sow init)&lt;/span&gt;

When invoked as /sow init (or when the lane folders do not exist yet), scaffold idempotently, then
stop (this command only builds folders, it never authors a SOW):

&lt;span class="p"&gt;```&lt;/span&gt;&lt;span class="nl"&gt;bash
&lt;/span&gt;&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; .data/sow/&lt;span class="o"&gt;{&lt;/span&gt;_staging,0_queue,1_progressing,2_waiting_review,3_completed&lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="nt"&gt;-f&lt;/span&gt; .data/sow/todo.md &lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nb"&gt;printf&lt;/span&gt; &lt;span class="s1"&gt;'# SOW todo\n'&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; .data/sow/todo.md
&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-qxF&lt;/span&gt; &lt;span class="s1"&gt;'.data/'&lt;/span&gt; .gitignore 2&amp;gt;/dev/null &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;'.data/'&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; .gitignore
&lt;span class="p"&gt;```&lt;/span&gt;

It creates only what is missing and never overwrites an existing todo.md.

&lt;span class="gu"&gt;## Authoring a SOW: do these steps IN ORDER&lt;/span&gt;
&lt;span class="p"&gt;
1.&lt;/span&gt; &lt;span class="gs"&gt;**Improve an existing SOW first (never duplicate).**&lt;/span&gt; Search the open lanes for a SOW this work
   belongs in and extend it (a decision, a phase, an open-question resolution). An item in
   2_waiting_review is code-complete, so additions there are dated review-feedback notes. Only
   create a new SOW when no open SOW is a reasonable home, and say that you checked.
&lt;span class="p"&gt;2.&lt;/span&gt; &lt;span class="gs"&gt;**Ground it in a code audit (no guessing).**&lt;/span&gt; Read the real code so the SOW cites file and line
   and the true root cause, not assumptions. For a bug, name the root cause; for a feature, name
   the surfaces and the pattern to reuse. Prefer reusing existing infrastructure.
&lt;span class="p"&gt;3.&lt;/span&gt; &lt;span class="gs"&gt;**Reference related completed SOWs.**&lt;/span&gt; Search the completed lane and cite the relevant items:
   dependencies, the origin of a regression, or the pattern to reuse, each by id and path.
&lt;span class="p"&gt;4.&lt;/span&gt; &lt;span class="gs"&gt;**Number and place it.**&lt;/span&gt; Find the next free sow-NNN. Default the lane to 0_queue unless told to
   start in 1_progressing. Group SOWs into subfolders matching your project's areas.
&lt;span class="p"&gt;5.&lt;/span&gt; &lt;span class="gs"&gt;**Plan mode and conventions.**&lt;/span&gt; Every SOW is BUILT in plan mode: add a banner note saying its
   build begins there, and leave genuine decisions as open questions rather than pinning what is
   the owner's call. Follow your project's writing conventions throughout.
&lt;span class="p"&gt;6.&lt;/span&gt; &lt;span class="gs"&gt;**Structure.**&lt;/span&gt; Frontmatter: id, title, status (matching the lane), priority, phase, created (an
   absolute date), depends_on, related, owner. Then the title, a status banner (what and why,
   grounded in the audit), design decisions, phases, constraints and guardrails, open questions,
   and cross-references.
&lt;span class="p"&gt;7.&lt;/span&gt; &lt;span class="gs"&gt;**Design-first SOWs.**&lt;/span&gt; A SOW that redesigns a visual surface is never built from prose: request
   a mockup, store the assets under &lt;span class="sb"&gt;`sow-NNN-assets/`&lt;/span&gt; with a source note, and reference them.

&lt;span class="gu"&gt;## Reminders&lt;/span&gt;
&lt;span class="p"&gt;
-&lt;/span&gt; The planning docs are local only and never committed.
&lt;span class="p"&gt;-&lt;/span&gt; A SOW is a living document: keep its status field and lane in sync as work moves.
&lt;span class="p"&gt;-&lt;/span&gt; When a build completes, write an as-built note into the banner before moving lanes, so the doc
  reads true months later.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Making it yours
&lt;/h2&gt;

&lt;p&gt;Three dials worth adjusting:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Lane subfolders&lt;/strong&gt;: group SOWs by your project's real areas (a frontend/backend split, per-service folders, whatever matches how work divides). The skill file's step 4 is where that rule lives.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Conventions&lt;/strong&gt;: point step 5 at your project's actual writing and review conventions so authored SOWs match the docs around them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The planning root&lt;/strong&gt;: &lt;code&gt;.data/sow/&lt;/code&gt; is a convention, not a requirement; any gitignored folder works. Keep it out of version control either way; plans churn too fast for useful history and the lanes ARE the state.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Why the rules are in there
&lt;/h2&gt;

&lt;p&gt;Each authoring rule closes a failure mode agents repeat: creating a duplicate SOW instead of extending the open one (rule 1); writing plans from memory that cite code that does not exist (rule 2); losing the thread between related work items (rule 3); and building straight from a prose wish without surfacing the decisions that belong to a human (rule 5). The lane system does the rest: at any moment, the queue is the backlog, progressing is the work in flight, waiting-review is what needs a human eye, and completed is the record.&lt;/p&gt;

&lt;p&gt;The resource shared in this post is a new prompt published by GBTI Network member Hudson Atwell. &lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;Are you a writer, musician, or product developer? We would love to support your work on the GBTI Network. For more information about how to join our community visit &lt;a href="https://gbti.network" rel="noopener noreferrer"&gt;https://gbti.network&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To follow Hudson Atwell's work more closely, consider joining our network and subscribing to them directly: &lt;a href="https://gbti.network/members/atwellpub/" rel="noopener noreferrer"&gt;https://gbti.network/members/atwellpub/&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>sow</category>
      <category>workflow</category>
      <category>planning</category>
      <category>documentation</category>
    </item>
    <item>
      <title>Pre-Skill Prompt: Responsive Design Audit with MCP Playwright</title>
      <dc:creator>GBTI Network</dc:creator>
      <pubDate>Tue, 21 Jul 2026 22:29:12 +0000</pubDate>
      <link>https://dev.to/gbti-network/pre-skill-prompt-responsive-design-audit-with-mcp-playwright-1icb</link>
      <guid>https://dev.to/gbti-network/pre-skill-prompt-responsive-design-audit-with-mcp-playwright-1icb</guid>
      <description>&lt;p&gt;&lt;strong&gt;By &lt;a class="mentioned-user" href="https://dev.to/atwellpub"&gt;@atwellpub&lt;/a&gt;, GBTI Network Member.&lt;/strong&gt; Originally published on &lt;a href="https://gbti.network/prompts/responsive-design-audit-with-playwright/" rel="noopener noreferrer"&gt;gbti.network&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;"This prompt can be converted into a skill"&lt;/p&gt;

&lt;p&gt;Use MCP Playwright to visually inspect the site across desktop browser widths, tablet widths, and real mobile device viewports. Improve the layout so every major section feels polished, intentional, readable, and usable across each context.&lt;/p&gt;

&lt;p&gt;The goal is not to apply one responsive rule to every narrow viewport. Treat desktop browser narrowing and confirmed mobile devices differently.&lt;/p&gt;

&lt;p&gt;Core responsive strategy:&lt;/p&gt;

&lt;p&gt;Desktop browser resizing should preserve the desktop design shape for as long as it remains usable. As desktop viewport width narrows, compress the existing layout first by reducing font sizes, gaps, padding, margins, icon sizes, avatar sizes, card spacing, media sizes, and line heights. Avoid jumping to a mobile layout just because the width is smaller.&lt;/p&gt;

&lt;p&gt;Confirmed mobile device viewports should be treated as mobile experiences. On mobile, solve layout issues through mobile-native restructuring when appropriate: two columns may become one, sidebars may move above or below content, secondary metadata may be hidden or condensed, button groups may stack, dense card grids may simplify, and complex sections may become accordions, carousels, horizontal scroll regions, or reordered content.&lt;/p&gt;

&lt;p&gt;Viewport test matrix:&lt;/p&gt;

&lt;p&gt;Mobile device viewports:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;320 x 568, small mobile&lt;/li&gt;
&lt;li&gt;360 x 740, Galaxy S8+&lt;/li&gt;
&lt;li&gt;375 x 667, iPhone SE&lt;/li&gt;
&lt;li&gt;390 x 844, iPhone 12/13/14&lt;/li&gt;
&lt;li&gt;393 x 852, iPhone 14/15 Pro&lt;/li&gt;
&lt;li&gt;412 x 915, Pixel 7&lt;/li&gt;
&lt;li&gt;430 x 932, iPhone 14/15 Pro Max&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tablet viewports:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;600 x 960, small tablet portrait&lt;/li&gt;
&lt;li&gt;768 x 1024, iPad Mini portrait&lt;/li&gt;
&lt;li&gt;810 x 1080, iPad portrait&lt;/li&gt;
&lt;li&gt;1024 x 768, tablet landscape&lt;/li&gt;
&lt;li&gt;1024 x 1366, iPad Pro portrait&lt;/li&gt;
&lt;li&gt;1366 x 1024, iPad Pro landscape&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Desktop browser widths:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;600 x 900, narrow desktop browser&lt;/li&gt;
&lt;li&gt;650 x 900, desktop compression threshold&lt;/li&gt;
&lt;li&gt;768 x 900, narrow desktop/tablet boundary&lt;/li&gt;
&lt;li&gt;1024 x 768, small desktop&lt;/li&gt;
&lt;li&gt;1280 x 720, desktop 720p&lt;/li&gt;
&lt;li&gt;1366 x 768, common laptop&lt;/li&gt;
&lt;li&gt;1440 x 900, laptop/desktop&lt;/li&gt;
&lt;li&gt;1536 x 864, large laptop&lt;/li&gt;
&lt;li&gt;1920 x 1080, desktop 1080p&lt;/li&gt;
&lt;li&gt;2560 x 1440, desktop 1440p&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For each viewport:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open the page with MCP Playwright.&lt;/li&gt;
&lt;li&gt;Capture a full-page screenshot.&lt;/li&gt;
&lt;li&gt;Inspect each major section individually.&lt;/li&gt;
&lt;li&gt;Compare mobile, tablet, narrow desktop, and full desktop presentation.&lt;/li&gt;
&lt;li&gt;Identify text overflow, cramped spacing, broken grids, awkward wrapping, clipped content, deformed cards, misaligned buttons, uneven card heights, weak hierarchy, poor touch targets, and sections that no longer feel visually balanced.&lt;/li&gt;
&lt;li&gt;Note whether the issue should be solved by compression, restructuring, simplification, or hiding expendable content.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Desktop browser compression rules:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;For desktop browser widths down to approximately 600px, preserve the desktop structure wherever possible.&lt;/li&gt;
&lt;li&gt;Do not automatically stack multi-column rows, sidebar layouts, media/text pairs, pricing cards, feature rows, or inline cards above 600px.&lt;/li&gt;
&lt;li&gt;First shrink competing elements: headings, supporting text, avatar sizes, icons, gaps, card padding, media dimensions, CTA spacing, and metadata.&lt;/li&gt;
&lt;li&gt;Use proportional scaling with &lt;code&gt;clamp()&lt;/code&gt;, &lt;code&gt;min()&lt;/code&gt;, &lt;code&gt;max()&lt;/code&gt;, fluid spacing variables, CSS grid, and flexible sizing.&lt;/li&gt;
&lt;li&gt;A desktop section should feel like the same section at smaller scale, not a different design.&lt;/li&gt;
&lt;li&gt;If a title wraps one word per line, a row overflows, a card becomes crushed, or buttons collide, reduce surrounding pressure before changing structure.&lt;/li&gt;
&lt;li&gt;Only restructure desktop-browser layouts when compression creates unreadable text, unusable controls, or obviously broken visual hierarchy.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Mobile device adaptation rules:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Treat confirmed mobile viewports as mobile-native experiences, not miniature desktop layouts.&lt;/li&gt;
&lt;li&gt;Prioritize readability, thumb-friendly interaction, clear hierarchy, and strong vertical rhythm.&lt;/li&gt;
&lt;li&gt;Convert two-column and multi-column layouts to single-column when that produces a better mobile experience.&lt;/li&gt;
&lt;li&gt;Stack CTAs when inline buttons become cramped.&lt;/li&gt;
&lt;li&gt;Move sidebars above or below primary content when needed.&lt;/li&gt;
&lt;li&gt;Hide, shorten, or collapse expendable metadata when it competes with the main content.&lt;/li&gt;
&lt;li&gt;Preserve important content, but remove visual clutter where it harms the mobile experience.&lt;/li&gt;
&lt;li&gt;Consider accordions, compact cards, horizontal scrolling groups, reduced media, simplified grids, reordered content, and mobile-specific section treatments.&lt;/li&gt;
&lt;li&gt;Do not shrink body text below readable mobile sizes.&lt;/li&gt;
&lt;li&gt;Do not preserve desktop shape on mobile when doing so creates awkward wrapping, tiny text, crowded controls, or weak hierarchy.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tablet rules:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Treat tablets as an intermediate design context, not automatically desktop and not automatically mobile.&lt;/li&gt;
&lt;li&gt;Preserve desktop structure on larger tablets when it remains balanced.&lt;/li&gt;
&lt;li&gt;Use hybrid layouts where appropriate: two-column grids, compressed sidebars, reduced card density, smaller media, and tighter spacing.&lt;/li&gt;
&lt;li&gt;On portrait tablets, avoid overly wide single-column sections unless the design benefits from it.&lt;/li&gt;
&lt;li&gt;On landscape tablets, preserve more desktop-like structure where possible.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Implementation expectations:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Make targeted CSS and layout changes.&lt;/li&gt;
&lt;li&gt;Prefer responsive CSS using &lt;code&gt;clamp()&lt;/code&gt;, &lt;code&gt;min()&lt;/code&gt;, &lt;code&gt;max()&lt;/code&gt;, CSS grid, flexbox, container queries where useful, and breakpoint-specific rules.&lt;/li&gt;
&lt;li&gt;Keep existing design tokens and naming conventions where they exist.&lt;/li&gt;
&lt;li&gt;Avoid broad rewrites unless a section is structurally unsalvageable.&lt;/li&gt;
&lt;li&gt;Use separate logic where needed for viewport width, pointer type, hover capability, and device-like mobile contexts.&lt;/li&gt;
&lt;li&gt;Do not rely only on screen width when deciding mobile behavior.&lt;/li&gt;
&lt;li&gt;Preserve the desktop design language while allowing mobile to have its own practical layout.&lt;/li&gt;
&lt;li&gt;After edits, rerun MCP Playwright screenshots at the same viewport sizes.&lt;/li&gt;
&lt;li&gt;Confirm that each major section looks intentional, balanced, readable, and usable across mobile, tablet, narrow desktop, and full desktop.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Decision framework:&lt;/p&gt;

&lt;p&gt;For every responsive issue, decide which fix category applies:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Compression fix:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Use when the desktop structure still works but needs smaller spacing, typography, icons, cards, or media.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Layout preservation fix:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Use when the section should remain in its desktop shape across narrow desktop widths.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Mobile restructuring fix:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Use when the viewport is a real mobile device and the section would be more usable as a stacked, simplified, reordered, or collapsed layout.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Content priority fix:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Use when secondary metadata, decorative elements, repeated labels, dates, avatars, or supporting copy are crowding the core experience.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Structural redesign fix:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Use only when CSS scaling and responsive reflow cannot make the section work cleanly.&lt;/p&gt;

&lt;p&gt;Final deliverable:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Summarize the responsive issues found.&lt;/li&gt;
&lt;li&gt;Group issues by mobile, tablet, narrow desktop, and full desktop.&lt;/li&gt;
&lt;li&gt;List the CSS/layout changes made.&lt;/li&gt;
&lt;li&gt;Explain where compression was used to preserve desktop structure.&lt;/li&gt;
&lt;li&gt;Explain where mobile-specific restructuring was used.&lt;/li&gt;
&lt;li&gt;Note any content that was hidden, shortened, collapsed, or deprioritized.&lt;/li&gt;
&lt;li&gt;Note any sections that still need design input.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Include before/after observations for:&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Smallest mobile viewport&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;One larger mobile viewport&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;One tablet portrait viewport&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;One narrow desktop viewport near 600px&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;One standard desktop viewport&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Confirm that screenshots were rerun after implementation.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The resource shared in this post is a new prompt published by GBTI Network member Hudson Atwell. &lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;Are you a writer, musician, or product developer? We would love to support your work on the GBTI Network. For more information about how to join our community visit &lt;a href="https://gbti.network" rel="noopener noreferrer"&gt;https://gbti.network&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To follow Hudson Atwell's work more closely, consider joining our network and subscribing to them directly: &lt;a href="https://gbti.network/members/atwellpub/" rel="noopener noreferrer"&gt;https://gbti.network/members/atwellpub/&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>mcp</category>
      <category>playwright</category>
      <category>responsive</category>
      <category>css</category>
    </item>
    <item>
      <title>CI Health Check: a /ci Skill for Claude Code</title>
      <dc:creator>GBTI Network</dc:creator>
      <pubDate>Sat, 11 Jul 2026 23:44:04 +0000</pubDate>
      <link>https://dev.to/gbti-network/ci-health-check-a-ci-skill-for-claude-code-2njg</link>
      <guid>https://dev.to/gbti-network/ci-health-check-a-ci-skill-for-claude-code-2njg</guid>
      <description>&lt;p&gt;&lt;strong&gt;By &lt;a href="https://gbti.network/members/atwellpub/" rel="noopener noreferrer"&gt;Hudson Atwell&lt;/a&gt;, GBTI Network Member.&lt;/strong&gt; Originally published on &lt;a href="https://gbti.network/prompts/ci-health-check-skill-for-claude-code/" rel="noopener noreferrer"&gt;gbti.network&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Claude Code loads any markdown file at &lt;code&gt;.claude/skills/&amp;lt;name&amp;gt;/SKILL.md&lt;/code&gt; as a reusable slash command (a "skill"). This one gives your agent a &lt;code&gt;/ci&lt;/code&gt; command that audits your GitHub Actions: a red/green health board, real failure triage, a post-push watcher, and a living inventory of what every workflow does.&lt;/p&gt;

&lt;p&gt;It exists because agents (and humans) keep re-deriving the same motions every time CI goes red: which runs failed, how to actually get the logs, whether the failure is your commit or something that was already broken. The skill encodes those motions once, including a few non-obvious &lt;code&gt;gh&lt;/code&gt; behaviors that cost me real debugging time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Install
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Create &lt;code&gt;.claude/skills/ci/&lt;/code&gt; in your repo.&lt;/li&gt;
&lt;li&gt;Save the file below as &lt;code&gt;.claude/skills/ci/SKILL.md&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;If your repo commits build artifacts, fill in the drift action; either way, seed the workflow inventory table.&lt;/li&gt;
&lt;li&gt;Type &lt;code&gt;/ci&lt;/code&gt; (or &lt;code&gt;/ci health check&lt;/code&gt;) in Claude Code.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Requires the &lt;code&gt;gh&lt;/code&gt; CLI authenticated against your repo. The skill runs from the project folder, so the repo is already known: &lt;code&gt;gh&lt;/code&gt; resolves it from the working directory, and the &lt;code&gt;{owner}/{repo}&lt;/code&gt; tokens in API paths are native &lt;code&gt;gh api&lt;/code&gt; placeholders it fills in for you. Nothing to configure.&lt;/p&gt;

&lt;h2&gt;
  
  
  The skill file
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ci&lt;/span&gt;
&lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;&amp;gt;"&lt;/span&gt;
  &lt;span class="s"&gt;Inspect and diagnose this repo's GitHub Actions CI. Invoke for "/ci", "/ci health", "/ci health check",&lt;/span&gt;
  &lt;span class="s"&gt;"/ci watch", "/ci schedule", "/ci diagnose &amp;lt;run-id&amp;gt;", "/ci list", or when the user asks whether CI is&lt;/span&gt;
  &lt;span class="s"&gt;green, why a workflow failed, or what a workflow does. Pulls recent runs with gh, downloads failed job&lt;/span&gt;
  &lt;span class="s"&gt;logs the reliable way, and triages failures to their real root cause.&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;

&lt;span class="gh"&gt;# CI operations&lt;/span&gt;

All commands run from the repo root with the &lt;span class="sb"&gt;`gh`&lt;/span&gt; CLI (it resolves the repo from the working directory;
&lt;span class="sb"&gt;`{owner}/{repo}`&lt;/span&gt; in API paths is a native gh placeholder). Default action when none is named: &lt;span class="sb"&gt;`health`&lt;/span&gt;.

&lt;span class="gu"&gt;## Tooling lore (read first)&lt;/span&gt;
&lt;span class="p"&gt;
-&lt;/span&gt; &lt;span class="gs"&gt;**Fetching logs:**&lt;/span&gt; &lt;span class="sb"&gt;`gh run view &amp;lt;id&amp;gt; --log-failed`&lt;/span&gt; often returns NOTHING. The reliable recipe:
  &lt;span class="p"&gt;```&lt;/span&gt;&lt;span class="nl"&gt;bash
&lt;/span&gt;  &lt;span class="nv"&gt;JOB&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;gh run view &amp;lt;run-id&amp;gt; &lt;span class="nt"&gt;--json&lt;/span&gt; &lt;span class="nb"&gt;jobs&lt;/span&gt; &lt;span class="nt"&gt;-q&lt;/span&gt; &lt;span class="s1"&gt;'.jobs[0].databaseId'&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;
  gh api repos/&lt;span class="o"&gt;{&lt;/span&gt;owner&lt;span class="o"&gt;}&lt;/span&gt;/&lt;span class="o"&gt;{&lt;/span&gt;repo&lt;span class="o"&gt;}&lt;/span&gt;/actions/jobs/&lt;span class="nv"&gt;$JOB&lt;/span&gt;/logs &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; /tmp/job.log
  &lt;span class="p"&gt;```&lt;/span&gt;
  Then grep the file; strip the timestamp column with &lt;span class="sb"&gt;`cut -c30-`&lt;/span&gt; when quoting. Multi-job runs: iterate
  &lt;span class="sb"&gt;`.jobs[]`&lt;/span&gt; and pick by &lt;span class="sb"&gt;`.conclusion == "failure"`&lt;/span&gt;. Step-level status without logs:
  &lt;span class="sb"&gt;`gh api repos/{owner}/{repo}/actions/runs/&amp;lt;id&amp;gt;/jobs -q '.jobs[0].steps[] | .name + " " + .conclusion'`&lt;/span&gt;.
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**Scheduled-failure attribution:**&lt;/span&gt; the failure email for a SCHEDULED workflow cites the LATEST main sha,
  which is often NOT the commit that broke it. Always check
  &lt;span class="sb"&gt;`gh run list --workflow &amp;lt;file&amp;gt; --limit 5 --json conclusion,createdAt,event`&lt;/span&gt; first; if the failures predate
  the cited commit, it is a standing provisioning or external problem, not a regression.
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**Secrets vs variables:**&lt;/span&gt; repo secrets via &lt;span class="sb"&gt;`gh secret list`&lt;/span&gt;, plain variables via &lt;span class="sb"&gt;`gh variable list`&lt;/span&gt;. A
  workflow reading &lt;span class="sb"&gt;`secrets.X`&lt;/span&gt; where X was never created gets an EMPTY string, not an error, so the symptom
  is a downstream "not set" message, a 401, or an empty env var in the step header.
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**Setting secrets may be gated:**&lt;/span&gt; an agent session may be blocked from &lt;span class="sb"&gt;`gh secret set`&lt;/span&gt; by permission
  policy. Prepare the value in a local untracked file and hand the human the one command.

&lt;span class="gu"&gt;## Failure triage (a starting taxonomy — extend it to fit the project)&lt;/span&gt;

Classify every red into a named bucket, because the bucket decides the response. These three cover most
repos; add project-specific buckets as you meet them (examples: environment/toolchain drift, a dependency
or upstream API regression, resource exhaustion such as OOM or disk or rate limits, data- or state-dependent
failures, expired credentials). When a failure fits no bucket, name a new one in the report rather than
forcing it into a wrong response.
&lt;span class="p"&gt;
1.&lt;/span&gt; &lt;span class="gs"&gt;**Broken by commit:**&lt;/span&gt; the failure starts at a specific sha and the log implicates changed files. Fix the
   root cause (see Fix discipline below); verify with a rerun on the fix commit.
&lt;span class="p"&gt;2.&lt;/span&gt; &lt;span class="gs"&gt;**Provisioning gap:**&lt;/span&gt; missing or empty secret, unset variable, an external account not configured. Route
   to the human with the exact command; do not retry.
&lt;span class="p"&gt;3.&lt;/span&gt; &lt;span class="gs"&gt;**Flaky / external:**&lt;/span&gt; network hiccup, provider outage, rate limit; the same job passed before and after
   without a related change. &lt;span class="sb"&gt;`gh run rerun &amp;lt;id&amp;gt; --failed`&lt;/span&gt; once, then re-check.

&lt;span class="gu"&gt;## Fix discipline (failing tests especially)&lt;/span&gt;

When a test fails, evaluate the REAL defect the test is exposing and propose a fix for that root cause.
Never patch the symptom, and never modify a test so it passes while the underlying failure remains — if you
find yourself weakening an assertion, deleting a case, or special-casing the test input, stop and re-derive
what the test was protecting. Changing a test is only correct when the test itself is wrong about the
intended behavior, and the report must say that explicitly and justify it. The same rule generalizes beyond
tests: a fix that makes the red go away without explaining WHY it was red is a symptom patch, not a fix.

&lt;span class="gu"&gt;## Actions&lt;/span&gt;

&lt;span class="gu"&gt;### /ci health [N]   (also: /ci health check; the default)&lt;/span&gt;
&lt;span class="p"&gt;
1.&lt;/span&gt; &lt;span class="sb"&gt;`gh run list --limit ${N:-30} --json databaseId,workflowName,conclusion,headSha,event,createdAt`&lt;/span&gt; and
   group by workflow. Report a red/green board: latest conclusion per workflow, streak (consecutive fails),
   and the event (push vs schedule).
&lt;span class="p"&gt;2.&lt;/span&gt; For each currently-red workflow: pull its recent history (&lt;span class="sb"&gt;`--workflow &amp;lt;file&amp;gt; --limit 5`&lt;/span&gt;) to date the
   breakage, download the failed job log (recipe above), and triage it (the taxonomy above) with a
   one-line root cause and the proposed fix.
&lt;span class="p"&gt;3.&lt;/span&gt; End with the board, the diagnoses, and what to do next. Offer to make low-risk code-side fixes (root
   cause, per Fix discipline); provisioning gaps go to the human.

&lt;span class="gu"&gt;### /ci watch&lt;/span&gt;

The post-push ritual. Find the runs for the current HEAD and watch until all conclude:
&lt;span class="p"&gt;```&lt;/span&gt;&lt;span class="nl"&gt;bash
&lt;/span&gt;&lt;span class="nv"&gt;SHA&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;git rev-parse HEAD&lt;span class="si"&gt;)&lt;/span&gt;
gh run list &lt;span class="nt"&gt;--limit&lt;/span&gt; 15 &lt;span class="nt"&gt;--json&lt;/span&gt; databaseId,workflowName,conclusion,headSha &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-q&lt;/span&gt; &lt;span class="s2"&gt;".[] | select(.headSha==&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="nv"&gt;$SHA&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;)"&lt;/span&gt;
gh run watch &amp;lt;&lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nt"&gt;--exit-status&lt;/span&gt;   &lt;span class="c"&gt;# per unfinished run&lt;/span&gt;
&lt;span class="p"&gt;```&lt;/span&gt;
Report each result; diagnose any red as in health.

&lt;span class="gu"&gt;### /ci drift   (only if your repo commits build artifacts)&lt;/span&gt;

The LOCAL pre-push check that committed artifacts match their source:
&lt;span class="p"&gt;```&lt;/span&gt;&lt;span class="nl"&gt;bash
&lt;/span&gt;&amp;lt;your full artifact build &lt;span class="nb"&gt;command&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;s&lt;span class="o"&gt;)&amp;gt;&lt;/span&gt;
git diff &lt;span class="nt"&gt;--name-only&lt;/span&gt; &lt;span class="nt"&gt;--&lt;/span&gt; &amp;lt;artifact-dir-1&amp;gt; &amp;lt;artifact-dir-2&amp;gt;
&lt;span class="p"&gt;```&lt;/span&gt;
Empty diff = safe to push. Non-empty = stage those files with the commit that changed the source. Fill in
EVERY build command: partial rebuilds that skip one artifact are the classic way this check reds your main
branch anyway.

&lt;span class="gu"&gt;### /ci schedule&lt;/span&gt;

Staleness audit of the scheduled workflows. For each one (list yours here with cadences): pull the last 5
runs and report the last SUCCESS date. Alarm on any workflow whose last success is older than 2x its
cadence. A scheduled job can be silently red for days; nobody rereads yesterday's failure email. Note which
scheduled jobs are load-bearing (a backup, a data sync something else depends on) so staleness there is
escalated, not just listed.

&lt;span class="gu"&gt;### /ci diagnose &amp;lt;run-id | workflow-name&amp;gt;&lt;/span&gt;

Deep-dive one run (or the latest run of a named workflow): step table, failed job log to disk,
triage bucket, root cause, fix proposal.

&lt;span class="gu"&gt;### /ci rerun &amp;lt;run-id&amp;gt;&lt;/span&gt;

&lt;span class="sb"&gt;`gh run rerun &amp;lt;run-id&amp;gt; --failed`&lt;/span&gt; then watch it. Only for the flaky/external bucket; never rerun a
provisioning gap (it cannot pass) or a broken-by-commit red (fix the root cause first).

&lt;span class="gu"&gt;### /ci list&lt;/span&gt;

Print this workflow inventory (keep it current when workflows are added or changed):

| Workflow (file) | Trigger | What it does | Needs |
|---|---|---|---|
| &lt;span class="nt"&gt;&amp;lt;Name&amp;gt;&lt;/span&gt; (&lt;span class="nt"&gt;&amp;lt;file&amp;gt;&lt;/span&gt;.yml) | push / PR / cron | &lt;span class="nt"&gt;&amp;lt;one&lt;/span&gt; &lt;span class="na"&gt;line&lt;/span&gt; &lt;span class="na"&gt;on&lt;/span&gt; &lt;span class="na"&gt;what&lt;/span&gt; &lt;span class="na"&gt;it&lt;/span&gt; &lt;span class="na"&gt;validates&lt;/span&gt; &lt;span class="na"&gt;or&lt;/span&gt; &lt;span class="na"&gt;does&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt; | &lt;span class="nt"&gt;&amp;lt;secrets&lt;/span&gt; &lt;span class="na"&gt;or&lt;/span&gt; &lt;span class="na"&gt;nothing&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt; |

To seed it, read every file in &lt;span class="sb"&gt;`.github/workflows/`&lt;/span&gt; and summarize: name, trigger, the job's purpose (the
header comment usually says), and which secrets it reads.

&lt;span class="gu"&gt;## Reporting conventions&lt;/span&gt;
&lt;span class="p"&gt;
-&lt;/span&gt; Lead with the board (workflow, latest state, streak), then diagnoses, then actions taken or proposed.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Making it yours
&lt;/h2&gt;

&lt;p&gt;There is nothing to configure for the repo itself: &lt;code&gt;gh&lt;/code&gt; infers it from the working directory, so the skill works the moment you drop it in. Only two parts are inherently repo-specific:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;The drift action&lt;/strong&gt;: keep it only if your repo commits build artifacts (bundled JS, generated schemas, packaged extensions). List every build command and every artifact directory. If you do not commit artifacts, delete the action.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The inventory table&lt;/strong&gt;: have your agent seed it once from &lt;code&gt;.github/workflows/&lt;/code&gt; and then treat it as living documentation. This is the part future sessions (and new contributors) thank you for.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;And treat the failure taxonomy as a starting point, not a fixed set: projects fail in project-shaped ways, so add the buckets yours actually produces.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the odd details are in there
&lt;/h2&gt;

&lt;p&gt;Each lore item is a real failure mode: &lt;code&gt;--log-failed&lt;/code&gt; silently returning nothing while the jobs API works; a scheduled backup that failed for four days while its failure emails blamed whatever commit happened to be newest on main; a workflow reading a secret nobody ever created and reporting it as a vague downstream error instead of failing fast; a drift check that stayed red because the rebuild command regenerated only one of two committed bundles. The Fix discipline section is there because agents notoriously "fix" a failing test by editing the test — the classification buckets plus that rule keep the agent from the three classic wastes: rerunning a job that can never pass, "fixing" code that was never broken, and silencing a test that was telling the truth.&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;Are you a writer, musician, or product developer? We would love to support your work on the GBTI Network. For more information about how to join our community visit &lt;a href="https://gbti.network" rel="noopener noreferrer"&gt;https://gbti.network&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To follow Hudson Atwell's work more closely, consider joining our network and subscribing to them directly: &lt;a href="https://gbti.network/members/atwellpub/" rel="noopener noreferrer"&gt;https://gbti.network/members/atwellpub/&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>claudecode</category>
      <category>githubactions</category>
      <category>ci</category>
      <category>devopsautomation</category>
    </item>
    <item>
      <title>How to Generate Professional LinkedIn Headshots Using Nano Banana</title>
      <dc:creator>GBTI Network</dc:creator>
      <pubDate>Thu, 09 Oct 2025 20:13:08 +0000</pubDate>
      <link>https://dev.to/gbti-network/how-to-generate-professional-linkedin-headshots-using-nano-banana-16n4</link>
      <guid>https://dev.to/gbti-network/how-to-generate-professional-linkedin-headshots-using-nano-banana-16n4</guid>
      <description>&lt;p&gt;&lt;strong&gt;By &lt;a href="https://gbti.network/author/nareshdevineni/" rel="noopener noreferrer"&gt;Naresh Devineni&lt;/a&gt;, GBTI Network Member&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftb3vs14xam3pi4zqd4pz.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftb3vs14xam3pi4zqd4pz.jpg" alt=" " width="645" height="806"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Creating a professional LinkedIn headshot doesn’t need to be difficult or expensive.&lt;/p&gt;

&lt;p&gt;In this guide, I will share a simple method for producing AI-generated headshots that look authentic, clean, and career-ready using &lt;strong&gt;Nano Banana&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flsbc12bc1wxxc8k8koqw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flsbc12bc1wxxc8k8koqw.png" alt=" " width="645" height="806"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 1: Find Your Reference Image
&lt;/h2&gt;

&lt;p&gt;Look for a professional headshot you like (make sure you’re using it ethically and legally).&lt;/p&gt;

&lt;p&gt;This image will serve as your &lt;strong&gt;style reference&lt;/strong&gt; — the goal is to recreate its lighting, framing, and background style with your own photo later.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 2: Let AI Describe It
&lt;/h2&gt;

&lt;p&gt;Upload your chosen reference image to an AI chatbot (like ChatGPT, Gemini, or Claude) and ask it to describe the photo.&lt;br&gt;
This helps generate a consistent, professional &lt;strong&gt;image prompt&lt;/strong&gt; that Nano Banana can follow.&lt;/p&gt;

&lt;p&gt;Here is an example prompt:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;For the uploaded reference image:

### ✅ Be Minimal

Only describe what is clearly visible.

### Never Include

* Racial, ethnic, or skin tone descriptors
* Facial features, hair details, body type
* Accessories, age, or gender indicators

### Only Include What’s Visible

**Expression:** Simple description only (e.g., “warm smile” or “neutral expression”)
**Clothing:** Describe exactly what’s worn – color, garment type, style
**Clothing shadows:** Note visible shadows under lapels, collars, or folds
**Lighting:** Direction and quality (e.g., “soft frontal lighting” or “three-point lighting”)
**Facial shadows:** Shadows under chin, on neck, or one side of face — or state “evenly lit”
**Background:** Exact color, brightness level, and subtlety of gradient (if any)
**Background shadows:** Only if visible — otherwise, state “no background shadow”
**Framing:** What’s visible (e.g., “head and shoulders” or “upper chest to top of head”)
**Position:** Head/body angle relative to camera

### Rules

1. Describe only what you actually see — don’t infer or imagine details
2. Keep descriptions factual and minimal
3. Any gradients should be described as **VERY SUBTLE** with minimal tonal variation

### Critical Restrictions

CRITICAL RESTRICTIONS:
1. NO multiple backgrounds or layered backgrounds
2. NO rounded corners or circular crops
3. NO additional background colors or borders
4. NO dramatic background gradients – background should be evenly lit or have only minimal, natural variation
5. Standard rectangular crop only
6. DO NOT add shadows if none exist in the reference image
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Step 3: Generate Your Headshot
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Upload &lt;strong&gt;your own photo&lt;/strong&gt; to Nano Banana.&lt;/li&gt;
&lt;li&gt;Paste the &lt;strong&gt;AI-generated description&lt;/strong&gt; as your image prompt.&lt;/li&gt;
&lt;li&gt;Generate your professional headshot.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Nano Banana will produce an image that matches the &lt;strong&gt;lighting, framing, and background style&lt;/strong&gt; of your reference photo — but featuring &lt;strong&gt;your own face&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Here is an example headshot and prompt:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fewlz2r9xzaqtnan31ddw.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fewlz2r9xzaqtnan31ddw.jpg" alt=" " width="645" height="806"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;For the uploaded picture, generate an image of:

Expression: Warm, genuine smile

Clothing: Dark gray textured suit with light blue dress shirt and navy blue tie with small dot pattern

Clothing shadows: Visible shadows under suit lapels, along tie, and in jacket fabric folds

Lighting: Soft, natural outdoor lighting from front

Facial shadows: Face evenly lit with minimal shadows

Background: Blurred outdoor corporate/office building environment (bokeh effect) with modern glass windows and architectural elements visible, blue-gray and white tones

Background shadows: Background is out of focus, no distinct shadows visible

Framing: Head and upper torso to mid-chest level

Position: Body angled slightly to left, face turned toward camera at slight angle

CRITICAL RESTRICTIONS:

NO multiple backgrounds or layered backgrounds
NO rounded corners or circular crops
NO additional background colors or borders
NO dramatic background gradients – background should be evenly lit or have only minimal, natural lighting variation
Standard rectangular crop only
DO NOT add shadows if none exist in the reference image
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  The Result
&lt;/h2&gt;

&lt;p&gt;You’ll get a &lt;strong&gt;professional, consistent, and natural-looking headshot&lt;/strong&gt; that reflects your desired style, without the guesswork or endless prompt tweaking.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi55objpyvo67b7pxjdva.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi55objpyvo67b7pxjdva.jpg" alt=" " width="645" height="806"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Sounds easy?&lt;/strong&gt;&lt;br&gt;
It is! &lt;/p&gt;

&lt;p&gt;Thanks for reading this article. &lt;/p&gt;

&lt;p&gt;Visit my article &lt;a href="https://gbti.network/ai/15-nano-banana-prompts-for-generating-linkedin-headshots/" rel="noopener noreferrer"&gt;"15 Ready-to-Use Nano Banana Prompts for Realistic LinkedIn Headshots"&lt;/a&gt; to see how I put this method to use! &lt;/p&gt;

&lt;p&gt;Also consider joining me on the &lt;a href="https://gbti.network" rel="noopener noreferrer"&gt;GBTI Network&lt;/a&gt; where we share tips like this regularly inside our own private discord network. &lt;/p&gt;

</description>
      <category>promptengineering</category>
      <category>nanobanana</category>
      <category>ai</category>
      <category>chatgpt</category>
    </item>
    <item>
      <title>15 Free React Landing Page Templates to help Launch your SaaS</title>
      <dc:creator>GBTI Network</dc:creator>
      <pubDate>Mon, 18 Aug 2025 13:42:28 +0000</pubDate>
      <link>https://dev.to/gbti-network/15-free-react-landing-page-templates-to-help-launch-your-saas-22o8</link>
      <guid>https://dev.to/gbti-network/15-free-react-landing-page-templates-to-help-launch-your-saas-22o8</guid>
      <description>&lt;p&gt;This past month we worked hard to make the Fall Y-Combinator 2025 submission window with one of our projects, and to do this we wanted to have a very basic landing page ready for our product demo site. &lt;/p&gt;

&lt;p&gt;This sprint lead us to investigate the best free React + Tailwind CSS templates we could find. We performed our search using tools like ChatGPT, Google, Dev.to, Daily.dev, and Github to find the highest quality free templates available. &lt;/p&gt;

&lt;p&gt;Through our research, we compiled the best 15 completely free React landing page templates we were able to find and have showcased them in our lasted article:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://gbti.network/devops/frameworks/react/15-free-react-landing-page-templates-to-launch-your-saas/" rel="noopener noreferrer"&gt;"15+ Free REACT Landing Page Templates to Launch your SaaS"&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We hope you enjoy our efforts and if you are working on a free React landing page template and would like us to add it to our list above, leave a comment below and we'll consider adding it! &lt;/p&gt;

&lt;p&gt;Thanks for paying attention!&lt;/p&gt;

</description>
      <category>react</category>
      <category>tailwindcss</category>
      <category>node</category>
      <category>design</category>
    </item>
    <item>
      <title>Using Hue to create colorful animations 🌈</title>
      <dc:creator>GBTI Network</dc:creator>
      <pubDate>Sun, 27 Jul 2025 21:41:08 +0000</pubDate>
      <link>https://dev.to/gbti-network/now-make-it-psychedelic-using-hue-to-create-colorful-animations-4d60</link>
      <guid>https://dev.to/gbti-network/now-make-it-psychedelic-using-hue-to-create-colorful-animations-4d60</guid>
      <description>&lt;p&gt;Hi fellow devs! 👋&lt;/p&gt;

&lt;p&gt;We're excited to share our latest coding experiment and what turned out to be a surprisingly fun tool: a browser-based hue animation generator.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://gbti.network/products/js-animate-hue/" rel="noopener noreferrer"&gt;https://gbti.network/products/js-animate-hue/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You know that moment when you're adjusting the hue slider in your favorite image editor and watching your image cycle through the entire color spectrum - from electric blues, vibrant magentas, and sunset oranges? Haven't you thought at some point, "This transition would make an incredible animation"? &lt;/p&gt;

&lt;p&gt;We decided to scratch that itch and build exactly that: a JavaScript tool that transforms any image into a mesmerizing color-shifting animation.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it does
&lt;/h2&gt;

&lt;p&gt;The tool takes any image you upload and creates smooth animations by cycling through hue transformations. But it goes beyond just basic hue shifts - you can also animate brightness and contrast changes to create some truly psychedelic effects.&lt;/p&gt;

&lt;h3&gt;
  
  
  Core Controls:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Interactive SVG color wheel&lt;/strong&gt; - Drag handles on a half-circle hue selector to define exactly which colors your animation cycles through (-180° to +180°)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Brightness animation&lt;/strong&gt; - Ranges from -100 (completely dark) to +100 (super bright) with presets like "Sunrise Effect" and "Fade to Black"&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Contrast animation&lt;/strong&gt; - Adjust from -100 (flat/washed out) to +100 (ultra-sharp) with options like "Dramatic Reveal" and "Vintage Film"&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Animation timing&lt;/strong&gt; - Control frame count (1-360 frames), speed (1-60 FPS), and seamless looping&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Resolution scaling&lt;/strong&gt; - Output from 50% to 150% of original size for file size optimization&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Smart Presets:
&lt;/h3&gt;

&lt;p&gt;The tool includes thoughtfully designed presets for each effect:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Hue&lt;/strong&gt;: Full spectrum rainbow, warm sunset tones, cool ocean shifts&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Brightness&lt;/strong&gt;: Sunrise/Dawn Effect, Fade to Black, Flash/Glow, Breathing Light, Reveal Effect&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Contrast&lt;/strong&gt;: Dramatic Reveal, Dreamy to Vivid, Pop Effect, Sharp to Soft, Vintage Film&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The technical bits &amp;amp; export formats
&lt;/h2&gt;

&lt;p&gt;What started as a simple hue-shifting experiment evolved into a pretty robust image processing tool. Under the hood, it uses:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API" rel="noopener noreferrer"&gt;Canvas API&lt;/a&gt;&lt;/strong&gt; for real-time image manipulation and frame generation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Web Workers&lt;/strong&gt; with &lt;a href="https://github.com/jnordberg/gif.js" rel="noopener noreferrer"&gt;gif.js&lt;/a&gt; and &lt;a href="https://github.com/skyra-project/gifenc" rel="noopener noreferrer"&gt;gifenc&lt;/a&gt; libraries for smooth GIF encoding without freezing the browser&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/MediaRecorder" rel="noopener noreferrer"&gt;MediaRecorder API&lt;/a&gt;&lt;/strong&gt; for high-quality WebM and MP4 video output with configurable bitrates&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SVG-based controls&lt;/strong&gt; for that smooth, interactive color wheel&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Export Options:
&lt;/h3&gt;

&lt;p&gt;The tool supports three major formats, each optimized for different use cases:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GIF Animation&lt;/strong&gt; - Universal compatibility, perfect for web embedding and social sharing&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;WebM Video&lt;/strong&gt; - Modern codec with excellent compression, ideal for web platforms&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MP4 Video (H.264)&lt;/strong&gt; - Industry standard with multiple quality settings:

&lt;ul&gt;
&lt;li&gt;Low (5 Mbps) - Smaller files for quick sharing&lt;/li&gt;
&lt;li&gt;Medium (10 Mbps) - Balanced quality and size&lt;/li&gt;
&lt;li&gt;High (20 Mbps) - Professional quality&lt;/li&gt;
&lt;li&gt;Lossless (50+ Mbps) - Maximum quality for final output&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Social Media Ready:
&lt;/h3&gt;

&lt;p&gt;The output formats work perfectly across all major platforms:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;X (Twitter)&lt;/strong&gt; - MP4 with H.264 codec (up to 512MB, 140 seconds)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LinkedIn&lt;/strong&gt; - MP4 with H.264 and AAC audio (up to 5GB, 10 minutes)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Instagram&lt;/strong&gt; - MP4 with H.264 for Feed, Reels, and Stories (up to 4GB)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The codec implementations include built-in brightness and contrast adjustments that work at the pixel level, giving you smooth transitions that would be difficult to achieve in traditional video editing software.&lt;/p&gt;

&lt;p&gt;The whole thing runs entirely in your browser - no servers, no uploads, no tracking. Your images never leave your device.&lt;/p&gt;

&lt;h2&gt;
  
  
  Get Started
&lt;/h2&gt;

&lt;p&gt;Check out the project:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://gbti.network/products/js-animate-hue/" rel="noopener noreferrer"&gt;Access the Generator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://gbti.network/devops/frameworks/javascript/now-make-it-psychedelic-using-hue-to-create-colorful-animations/" rel="noopener noreferrer"&gt;View our Blog Post with Examples&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Give it a try and let us know what you create! We'd love to see what kind of psychedelic masterpieces people come up with. &lt;a href="http://giphy.com/upload/" rel="noopener noreferrer"&gt;Upload your creations to giphy&lt;/a&gt; and share them in the comments or tag us on social media &lt;a href="https://x.com/gbti_network" rel="noopener noreferrer"&gt;@gbti_network&lt;/a&gt;! &lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>design</category>
      <category>novelty</category>
    </item>
    <item>
      <title>Introducing Perplexity AI Lookups for WordPress</title>
      <dc:creator>GBTI Network</dc:creator>
      <pubDate>Mon, 30 Jun 2025 13:59:44 +0000</pubDate>
      <link>https://dev.to/gbti-network/introducing-perplexity-ai-lookups-for-wordpress-3g7d</link>
      <guid>https://dev.to/gbti-network/introducing-perplexity-ai-lookups-for-wordpress-3g7d</guid>
      <description>&lt;p&gt;At the &lt;a href="https://gbti.network" rel="noopener noreferrer"&gt;GBTI Network&lt;/a&gt;, we’re committed to developing novel tools that empower publishers and readers alike. Today, we’re announcing the release of our &lt;strong&gt;WordPress Perplexity AI Plugin&lt;/strong&gt;, which enables AI-powered lookups on highlighted text within your WordPress content.&lt;/p&gt;

&lt;h2&gt;
  
  
  What does this plugin do?
&lt;/h2&gt;

&lt;p&gt;This plugin allows site visitors to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Highlight any text&lt;/strong&gt; on a post or page.&lt;/li&gt;
&lt;li&gt;Optionally click a Perplexity icon to open a Perplexity instance with the selected query attached. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This creates a novel way for readers to engage with your content without interrupting their reading flow and &lt;strong&gt;Receive AI-generated lookups&lt;/strong&gt; instantly, offering definitions, explanations, or contextual expansions for the highlighted text.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why did we build it?
&lt;/h2&gt;

&lt;p&gt;Writers often struggle to balance brevity with sufficient explanation. Excessive footnotes, hyperlinks, or side notes can disrupt readability and clutter pages. This simple implementation assists these challenges by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Providing readers with on-demand context and deeper understanding.&lt;/li&gt;
&lt;li&gt;Allowing writers to maintain concise content without sacrificing detail.&lt;/li&gt;
&lt;li&gt;Enhancing engagement and time on page by encouraging interactive exploration.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's a very simple and effective implementation!&lt;/p&gt;

&lt;h2&gt;
  
  
  Use cases
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Educational sites:&lt;/strong&gt; Students can quickly look up terms and definitions while reading course material.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Blogs:&lt;/strong&gt; Readers can gain clarity on concepts without breaking their reading rhythm.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Technical documentation:&lt;/strong&gt; Developers and technical readers can explore deeper context for terms and functions on-demand.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Getting started
&lt;/h2&gt;

&lt;p&gt;To install the plugin please visit our full release announcement for download and setup instructions:&lt;br&gt;
   &lt;a href="https://gbti.network/ai/introducing-our-new-wordpress-perplexity-ai-plugin/" rel="noopener noreferrer"&gt;Introducing Our New WordPress Perplexity AI Plugin&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Future plans
&lt;/h2&gt;

&lt;p&gt;We are exploring additional features, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Custom prompt templates for specialized sites and terminology.&lt;/li&gt;
&lt;li&gt;Admin-side analytics for usage tracking and content strategy insights.&lt;/li&gt;
&lt;li&gt;Expanded AI provider support for diversified lookup outputs.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Contributing
&lt;/h2&gt;

&lt;p&gt;We welcome community contributions to extend and refine this plugin. If you’re interested, please visit our &lt;a href="https://github.com/gbti-network" rel="noopener noreferrer"&gt;GitHub repository&lt;/a&gt; for issue tracking and PR guidelines.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Final thoughts&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;AI-enhanced reading experiences are becoming increasingly common. Our Perplexity AI Plugin is a small step towards creating more interactive and intelligent web content in novel ways.&lt;/p&gt;

&lt;p&gt;We look forward to your feedback and suggestions as we continue improving this tool for the WordPress community.&lt;/p&gt;

</description>
      <category>wordpress</category>
      <category>perplexity</category>
      <category>writing</category>
    </item>
    <item>
      <title>Automating Git Sign-offs Per Project: A Complete Guide</title>
      <dc:creator>GBTI Network</dc:creator>
      <pubDate>Mon, 09 Jun 2025 02:23:55 +0000</pubDate>
      <link>https://dev.to/gbti-network/automating-git-sign-offs-per-project-a-complete-guide-mjp</link>
      <guid>https://dev.to/gbti-network/automating-git-sign-offs-per-project-a-complete-guide-mjp</guid>
      <description>&lt;p&gt;Git sign-offs provide accountability and transparency in distributed development environments. The standard implementation requires manual inclusion of the &lt;code&gt;-s&lt;/code&gt; flag with each commit, which introduces potential for human error and inconsistency.&lt;/p&gt;

&lt;p&gt;Our technical guide presents multiple methods for automating Git sign-offs at the project level, arranged in order of increasing complexity: commit templates, Git aliases, and language-specific scripts (Node.js, PowerShell, Python). Each approach is documented with implementation steps optimized for Windows environments.&lt;/p&gt;

&lt;p&gt;The guide includes PowerShell commands for local Git configuration, template creation, and script implementation. Code examples demonstrate how to integrate sign-offs into existing workflows without disrupting development processes.&lt;/p&gt;

&lt;p&gt;Complete documentation: &lt;a href="https://gbti.network/devops/frameworks/git/how-to-automatically-sign-off-git-commits/" rel="noopener noreferrer"&gt;https://gbti.network/devops/frameworks/git/how-to-automatically-sign-off-git-commits/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thanks for paying attention!&lt;/p&gt;

</description>
      <category>git</category>
      <category>devops</category>
      <category>tutorial</category>
      <category>automation</category>
    </item>
    <item>
      <title>Learn how to automate Git sign-offs at the project level using commit templates, aliases, and scripts, ensuring proper sign-offs without disrupting workflow. https://gbti.network/devops/frameworks/git/how-to-automatically-sign-off-git-commits/ #Git</title>
      <dc:creator>GBTI Network</dc:creator>
      <pubDate>Mon, 09 Jun 2025 02:16:01 +0000</pubDate>
      <link>https://dev.to/gbti/learn-how-to-automate-git-sign-offs-at-the-project-level-using-commit-templates-aliases-and-olm</link>
      <guid>https://dev.to/gbti/learn-how-to-automate-git-sign-offs-at-the-project-level-using-commit-templates-aliases-and-olm</guid>
      <description></description>
      <category>git</category>
      <category>github</category>
      <category>automation</category>
      <category>devops</category>
    </item>
    <item>
      <title>Reimagining WordPress Category Management with Advanced Taxonomy Manager</title>
      <dc:creator>GBTI Network</dc:creator>
      <pubDate>Tue, 08 Apr 2025 12:58:38 +0000</pubDate>
      <link>https://dev.to/gbti-network/reimagining-wordpress-category-management-with-advanced-taxonomy-manager-29cb</link>
      <guid>https://dev.to/gbti-network/reimagining-wordpress-category-management-with-advanced-taxonomy-manager-29cb</guid>
      <description>&lt;p&gt;While building the &lt;a href="https://gbti.network" rel="noopener noreferrer"&gt;GBTI Network&lt;/a&gt; and managing over 80 categories, it became clear that the native WordPress category management system was outdated. The lack of drag-and-drop functionality, slow hard refreshes, and absence of quick editing features slowed down the process of organizing content meaningfully.&lt;/p&gt;

&lt;p&gt;This frustration led to the development of &lt;strong&gt;Advanced Taxonomy Manager&lt;/strong&gt;, a fully AJAX-powered plugin designed to modernize category and taxonomy management in WordPress.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;Managing categories in WordPress has long felt like working in slow motion.  &lt;/p&gt;

&lt;p&gt;With every change triggering a page reload, and no quick way to reorder or nest categories, maintaining a clean and logical taxonomy structure becomes tedious fast.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Platforms like Slack and Discord have long since solved this, allowing users to quickly organize channels and categories with ease. WordPress, however, lagged behind.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  The Solution: Advanced Taxonomy Manager
&lt;/h2&gt;

&lt;p&gt;Advanced Taxonomy Manager brings a modern interface to WordPress taxonomy management.&lt;/p&gt;

&lt;p&gt;With this plugin, you can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Drag and drop categories to nest or un-nest them&lt;/li&gt;
&lt;li&gt;Quickly edit categories in a collapsible side drawer&lt;/li&gt;
&lt;li&gt;Avoid hard refreshes entirely for a smoother workflow&lt;/li&gt;
&lt;li&gt;Generate category descriptions with OpenAI integration&lt;/li&gt;
&lt;li&gt;Enjoy better visibility of parent and child categories&lt;/li&gt;
&lt;li&gt;Export and Import entire taxonomies, quickly.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Plugin Screenshot
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzmmmu3lxj4fppe9l13et.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzmmmu3lxj4fppe9l13et.png" alt=" " width="800" height="1248"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Versions Available
&lt;/h2&gt;

&lt;p&gt;We’ve built two versions of the plugin to meet different needs:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Advanced Taxonomy Manager&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Full-featured version, available exclusively to GBTI Network members.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Advanced Category Manager&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Focused on categories only, this version is freely available in the WordPress plugin directory.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://wordpress.org/plugins/better-category-manager/" rel="noopener noreferrer"&gt;Check out the free version on the WordPress Plugin Directory&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://gbti.network/products/better-taxonomy-manager/" rel="noopener noreferrer"&gt;Learn more about the full version for GBTI Network members&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Thanks for reading. If you have any thoughts or suggestions, I’d love to hear them in the comments.&lt;/em&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  GBTI Network
&lt;/h1&gt;

&lt;p&gt;The &lt;strong&gt;GBTI Network&lt;/strong&gt; is a professional co-op network where members have opportunities to share profits, publish products, and contribute articles—all powered by community and GitHub sponsorships.&lt;/p&gt;

&lt;p&gt;Sponsor our work by becoming a &lt;a href="https://gbti.network/membership" rel="noopener noreferrer"&gt;GBTI Network Member&lt;/a&gt; (&lt;em&gt;powered by GitHub Sponsorship&lt;/em&gt;).  &lt;/p&gt;

&lt;h2&gt;
  
  
  Stay Connected
&lt;/h2&gt;

&lt;p&gt;Follow us on your favorite platforms for updates, news, and community discussions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://twitter.com/gbti_network" rel="noopener noreferrer"&gt;Twitter/X&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://github.com/gbti-network" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://www.youtube.com/channel/UCh4FjB6r4oWQW-QFiwqv-UA" rel="noopener noreferrer"&gt;YouTube&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://dev.to/gbti"&gt;Dev.to&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://dly.to/zfCriM6JfRF" rel="noopener noreferrer"&gt;Daily.dev&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://gbti.hashnode.dev/" rel="noopener noreferrer"&gt;Hashnode&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://gbti.network" rel="noopener noreferrer"&gt;Discord Community&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://www.reddit.com/r/GBTI_network" rel="noopener noreferrer"&gt;Reddit Community&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>wordpress</category>
      <category>categorymanagement</category>
      <category>taxonomymanagement</category>
      <category>tagmanagement</category>
    </item>
  </channel>
</rss>
