Sr. Content Developer at Microsoft, working remotely in PA, TechBash conference organizer, former Microsoft MVP, Husband, Dad and Geek.
145488 stories
·
32 followers

Azure Boards integration with GitHub Copilot (Private Preview)

1 Share

Several months ago, GitHub introduced the public preview of its Copilot coding agent, a powerful new capability that allows you to assign GitHub Issues directly to Copilot. From there, the agent works independently in the background, much like a human developer, to complete the task. Copilot evaluates the request based on the information you provide, whether from the issue description or a chat message, then makes the necessary code changes and opens a pull request. Once the work is complete, Copilot asks for your review, giving you the chance to leave comments and request iterations just as you would with any teammate.

It’s a great experience for GitHub users. But what about Azure DevOps customers who rely on Azure Boards for planning and tracking?

Today, we’re excited to announce a new capability in our Azure Boards and GitHub integration: the ability to connect Azure Boards work items with the Copilot coding agent. This means you can create and fill out work items in Azure Boards, then send them directly to GitHub Copilot to handle a wide range of tasks such as:

  • Fixing bugs
  • Implementing incremental features
  • Improving test coverage
  • Updating documentation
  • Addressing technical debt

🐿 How it works

The first step is providing well-crafted instructions in the work item description.

From there, you can click on the Copilot button on the work item to “Create a pull request with GitHub Copilot”. Then select the repository of choice and add any additional instructions as needed.

image on how to create a pull request using copilot on a work item

Once you click Create, the work item is sent to the Copilot coding agent to begin processing. We pass along all relevant content from any large text fields such as Description or Repro Steps, as well as the last 50 comments. The coding agent then generates a branch and a draft pull request, which is automatically linked back to the work item for full traceability.

Screenshot comments branch pr image

Depending on the complexity of the requested change, the coding agent may need some time to create and execute its plan. Once the work is complete, its status is updated on the work item. We also add a comment in the discussion letting you know the pull request is ready for review.

image showing copilot pull request is ready for review on work item

From there, it is up to you to review and interact with the pull request directly in GitHub.

✅ Requirements to use this feature

There are a couple of items that are required before you can interact with the GitHub Coding agent from the work item.

  1. You must have the Azure Boards and GitHub integration enabled, with the repositories connected to your Azure DevOps project. Learn more.

  2. The repos connected to the Azure DevOps project must have the Copilot coding agent enabled. If you are a GitHub Copilot Enterprise or GitHub Copilot Business subscriber, Copilot coding agent is disabled by default and must be enabled by an administrator before it is available for use. If you are a GitHub Copilot Pro or Pro+ subscriber, Copilot coding agent is enabled by default.

    Learn more about how to enable the coding agent on your repositories.

  3. Your organization must be enabled for the private preview. See below for details.

  4. Go to the Installed GitHub App page and update the Azure Boards app to approve the recent permission changes. This will allow the Azure Boards app to communicate with GitHub Copilot.

    Update OAuth Permissions image

📝 Signing up for the preview

This feature is currently in private preview, which means it is enabled for organizations by request only. Limiting participation allows us to keep the number of organizations manageable, collect feedback effectively, and work through any technical issues that may arise.

To request access for your organization:

  1. Confirm with your organization admin that enabling this feature is approved.
  2. Email us your organization name (for example: dev.azure.com/contoso).
  3. We will notify you by email once the feature has been enabled.

🤝 Expectations

We worked quickly to get this into customers’ hands, so not all planned features are yet included in the preview. Some elements were deferred in order to start gathering feedback earlier. We will be working on these items over the next couple of sprints.

  • Backlog levels: The coding agent integration is currently available for most work item types. In the future, this will be refined so that it is only available for work item types in the requirements and task backlog levels, including bugs and issues.

  • GitHub Enterprise Cloud with Data Residency: Support for the coding agent was only recently released. Additional work is needed before full integration with Data Residency is available.

💭 Collecting Feedback

If you run into any issues or want to share feedback, please create a report through our Developer Community site. Be sure to include “Azure Boards Coding Agent” in the title so we can track it quickly.

🙋‍♂️ What is next?

As noted above, we still have a couple of sprints of work ahead to round out the experience and continue refining based on your feedback.

We’re excited to put this feature in your hands and can’t wait to see the creative ways you use it. Your feedback is invaluable, and we look forward to hearing from you as we continue to improve this new integration between Azure Boards and GitHub.

The post Azure Boards integration with GitHub Copilot (Private Preview) appeared first on Azure DevOps Blog.

Read the whole story
alvinashcraft
6 hours ago
reply
Pennsylvania, USA
Share this story
Delete

Webinar: Building AI Agents in RavenDB

1 Share

Tomorrow I’ll be giving a webinar on Building AI Agents in RavenDB. I’m going to show off some really cool ways to apply AI agents on your data, as well as our approach to AI and LLM in general.

I’m looking forward to seeing you there.

Caution: This is going to blow your mind.

Read the whole story
alvinashcraft
6 hours ago
reply
Pennsylvania, USA
Share this story
Delete

Building towards age prediction

1 Share
Learn how OpenAI is building age prediction and parental controls in ChatGPT to create safer, age-appropriate experiences for teens while supporting families with new tools.
Read the whole story
alvinashcraft
6 hours ago
reply
Pennsylvania, USA
Share this story
Delete

Teen safety, freedom, and privacy

1 Share
Explore OpenAI’s approach to balancing teen safety, freedom, and privacy in AI use.
Read the whole story
alvinashcraft
6 hours ago
reply
Pennsylvania, USA
Share this story
Delete

Announcing Computer Use tool (Preview) in Azure AI Foundry Agent Service

1 Share

Overview 

We are excited to announce Computer Use—are now available in preview in Azure AI Foundry Agent Service. It brings feature parity with the Azure OpenAI Responses API, but with the added advantage of seamless integration into the Foundry agent runtime and enterprise security. With this release, developers can create agents that not only reason over text, retrieve knowledge, or call APIs, but also directly interact with computer interfaces through natural language instructions. At launch, it is accessible through REST API and SDK, giving developers the flexibility to embed them directly into their applications, pipelines, and automation workflows. 

computer use preview image

By adding Computer Use, Foundry Agent Service expands the scope of what an agent can achieve in multi-step conversations. If you want to navigate complex enterprise applications, it opens the door to new, creative, and highly practical scenarios for enterprise AI. 

 

Use cases 

Computer Use addresses distinct, high-value scenarios.  Computer Use allows agents to interact with applications in the same way a human user would. It enables agents that not only reason and respond but also take meaningful actions across digital environments. 

Computer Use 

  • Web & desktop automation: Fill out forms, upload/download artifacts, or complete tasks in apps without APIs. 
  • Operational copilots: Help employees triage tickets or manage workflows across multiple enterprise dashboards. 
  • Legacy integration: Interact with older desktop apps by simulating clicks and keystrokes. 
  • Human-in-the-loop workflows: Require users to approve sensitive or high-risk steps before they are executed. 

How it works 

Computer Use operates as a continuous loop of suggested actions, execution, and screenshot feedback. 

Computer Use 

  • Action loop: The agent requests actions (e.g., click, type, screenshot) from the computer-use-preview model. 
  • Execution environment: Your code performs the action in a controlled environment (browser or desktop) and captures a screenshot. 
  • Screenshot feedback: The screenshot is sent back to the model to inform the next step. 
  • Pixel-based reasoning: Unlike Browser Automation, Computer Use interprets raw pixels, enabling adaptation to unfamiliar or dynamic UIs. 
  • Safety checks: Malicious instructions, irrelevant domains, or sensitive domains trigger warnings that require human acknowledgment before proceeding. 

Compared with Browser Automation, Computer Use offers richer visualization, broader cross-application support, and more human-like interaction patterns. However, because of its power, we strongly recommend using it only on low-privilege virtual machines that do not contain sensitive data or credentials. 

  Browser Automation   Computer Use 
Model support   Most models supported by Foundry Agent Service Computer-use-preview model  
Visualize whats happening   No   Yes  
How it understands the screen   Parse the HTML or XML pages into DOM documents   Raw pixel data from screenshots  
How it acts   A list of actions provided by the model   Virtual keyword and mouse  
Multi-step?   Yes    Yes   
Interfaces    Browser    Computer and browser  
Can I bring my own resource   BYO Playwright resource and store keys in connection   No resource required, we recommend using low-privilege virtual machines 

 

Security and responsible use 

WARNING: 

The Computer Use tool comes with significant security and privacy risks, including prompt injection attacks. Learn more about intended uses, capabilities, limitations, risks, and considerations when choosing a use case in the Azure OpenAI transparency note.  

 

Code samples 

# pylint: disable=line-too-long,useless-suppression
# ------------------------------------
# Copyright (c) Microsoft Corporation.
# Licensed under the MIT License.
# ------------------------------------

"""
DESCRIPTION:
    This sample demonstrates how to use agent operations with the Computer Use tool (preview)
    using a synchronous client. This sample uses fake screenshot to demonstrate how output actions work,
    but the actual implementation would involve mapping the output action types to their corresponding
    API calls in the user's preferred managed environment framework (e.g. Playwright or Docker).

    NOTE: Usage of the computer-use-preview model currently requires approval. Please see
    https://learn.microsoft.com/azure/ai-foundry/openai/how-to/computer-use for more information.

USAGE:
    python sample_agents_computer_use.py

    Before running the sample:

    pip install azure-ai-agents --pre
    pip install azure-ai-projects azure-identity

    Set these environment variables with your own values:
    1) PROJECT_ENDPOINT - The Azure AI Project endpoint, as found in the Overview
       page of your Azure AI Foundry portal.
    2) MODEL_DEPLOYMENT_NAME - The deployment name of the AI model, as found under the "Name" column in
       the "Models + endpoints" tab in your Azure AI Foundry project.

    Optional:
    - To target a specific environment, set COMPUTER_USE_ENVIRONMENT to one of: windows, mac, linux, browser
      Otherwise defaults to 'browser'.
"""

import os, time, base64
from typing import List
from azure.ai.agents.models._models import ComputerScreenshot, TypeAction
from azure.ai.projects import AIProjectClient
from azure.ai.agents.models import (
    MessageRole,
    RunStepToolCallDetails,
    RunStepComputerUseToolCall,
    ComputerUseTool,
    ComputerToolOutput,
    MessageInputContentBlock,
    MessageImageUrlParam,
    MessageInputTextBlock,
    MessageInputImageUrlBlock,
    RequiredComputerUseToolCall,
    SubmitToolOutputsAction,
)
from azure.identity import DefaultAzureCredential


def image_to_base64(image_path: str) -> str:
    """
    Convert an image file to a Base64-encoded string.

    :param image_path: The path to the image file (e.g. 'image_file.png')
    :return: A Base64-encoded string representing the image.
    :raises FileNotFoundError: If the provided file path does not exist.
    :raises OSError: If there's an error reading the file.
    """
    if not os.path.isfile(image_path):
        raise FileNotFoundError(f"File not found at: {image_path}")

    try:
        with open(image_path, "rb") as image_file:
            file_data = image_file.read()
        return base64.b64encode(file_data).decode("utf-8")
    except Exception as exc:
        raise OSError(f"Error reading file '{image_path}'") from exc


asset_file_path = os.path.abspath(os.path.join(os.path.dirname(__file__), "../assets/cua_screenshot.jpg"))
action_result_file_path = os.path.abspath(os.path.join(os.path.dirname(__file__), "../assets/cua_screenshot_next.jpg"))
project_client = AIProjectClient(endpoint=os.environ["PROJECT_ENDPOINT"], credential=DefaultAzureCredential())

# Initialize Computer Use tool with a browser-sized viewport
environment = os.environ.get("COMPUTER_USE_ENVIRONMENT", "windows")
computer_use = ComputerUseTool(display_width=1026, display_height=769, environment=environment)

with project_client:

    agents_client = project_client.agents

    # Create a new Agent that has the Computer Use tool attached.
    agent = agents_client.create_agent(
        model=os.environ["MODEL_DEPLOYMENT_NAME"],
        name="my-agent-computer-use",
        instructions="""
            You are an computer automation assistant. 
            Use the computer_use_preview tool to interact with the screen when needed.
            """,
        tools=computer_use.definitions,
    )

    print(f"Created agent, ID: {agent.id}")

    # Create thread for communication
    thread = agents_client.threads.create()
    print(f"Created thread, ID: {thread.id}")

    input_message = (
        "I can see a web browser with bing.com open and the cursor in the search box."
        "Type 'movies near me' without pressing Enter or any other key. Only type 'movies near me'."
    )
    image_base64 = image_to_base64(asset_file_path)
    img_url = f"data:image/jpeg;base64,{image_base64}"
    url_param = MessageImageUrlParam(url=img_url, detail="high")
    content_blocks: List[MessageInputContentBlock] = [
        MessageInputTextBlock(text=input_message),
        MessageInputImageUrlBlock(image_url=url_param),
    ]
    # Create message to thread
    message = agents_client.messages.create(thread_id=thread.id, role=MessageRole.USER, content=content_blocks)
    print(f"Created message, ID: {message.id}")

    run = agents_client.runs.create(thread_id=thread.id, agent_id=agent.id)
    print(f"Created run, ID: {run.id}")

    # create a fake screenshot showing the text typed in
    result_image_base64 = image_to_base64(action_result_file_path)
    result_img_url = f"data:image/jpeg;base64,{result_image_base64}"
    computer_screenshot = ComputerScreenshot(image_url=result_img_url)

    while run.status in ["queued", "in_progress", "requires_action"]:
        time.sleep(1)
        run = agents_client.runs.get(thread_id=thread.id, run_id=run.id)

        if run.status == "requires_action" and isinstance(run.required_action, SubmitToolOutputsAction):
            print("Run requires action:")
            tool_calls = run.required_action.submit_tool_outputs.tool_calls
            if not tool_calls:
                print("No tool calls provided - cancelling run")
                agents_client.runs.cancel(thread_id=thread.id, run_id=run.id)
                break

            tool_outputs = []
            for tool_call in tool_calls:
                if isinstance(tool_call, RequiredComputerUseToolCall):
                    print(tool_call)
                    try:
                        action = tool_call.computer_use_preview.action
                        print(f"Executing computer use action: {action.type}")
                        if isinstance(action, TypeAction):
                            print(f"  Text to type: {action.text}")
                            # (add hook to input text in managed environment API here)

                            tool_outputs.append(
                                ComputerToolOutput(tool_call_id=tool_call.id, output=computer_screenshot)
                            )
                        if isinstance(action, ComputerScreenshot):
                            print(f"  Screenshot requested")
                            # (add hook to take screenshot in managed environment API here)

                            tool_outputs.append(
                                ComputerToolOutput(tool_call_id=tool_call.id, output=computer_screenshot)
                            )
                    except Exception as e:
                        print(f"Error executing tool_call {tool_call.id}: {e}")

            print(f"Tool outputs: {tool_outputs}")
            if tool_outputs:
                agents_client.runs.submit_tool_outputs(thread_id=thread.id, run_id=run.id, tool_outputs=tool_outputs)

        print(f"Current run status: {run.status}")

    print(f"Run completed with status: {run.status}")
    if run.status == "failed":
        print(f"Run failed: {run.last_error}")

    # Fetch run steps to get the details of the agent run
    run_steps = agents_client.run_steps.list(thread_id=thread.id, run_id=run.id)
    for step in run_steps:
        print(f"Step {step.id} status: {step.status}")
        print(step)

        if isinstance(step.step_details, RunStepToolCallDetails):
            print("  Tool calls:")
            run_step_tool_calls = step.step_details.tool_calls

            for call in run_step_tool_calls:
                print(f"    Tool call ID: {call.id}")
                print(f"    Tool call type: {call.type}")

                if isinstance(call, RunStepComputerUseToolCall):
                    details = call.computer_use_preview
                    print(f"    Computer use action type: {details.action.type}")

                print()  # extra newline between tool calls

        print()  # extra newline between run steps

    # Optional: Delete the agent once the run is finished.
    agents_client.delete_agent(agent.id)
    print("Deleted agent")

Getting started 

To start using Computer Use in Foundry Agent Service: 

  • Request access 
  • Create deployments in your Azure OpenAI resource once access is approved. 
  • Configure your agent through REST API or SDK: 
    • Computer Use: specify environment (browser, windows, mac, ubuntu) → implement the action loop (execute actions, send screenshots, continue until complete). 
  • Apply best practices 
    • Run Computer Use agents only on low-privilege, isolated machines.

Learn more 

With these steps and resources, you can quickly enable agents that combine text reasoning, image creation, and real-world computer interaction. 

 

The post Announcing Computer Use tool (Preview) in Azure AI Foundry Agent Service appeared first on Azure AI Foundry Blog.

Read the whole story
alvinashcraft
6 hours ago
reply
Pennsylvania, USA
Share this story
Delete

The .NET News Daily Issue #285

1 Share

&

The .NET News Daily Issue #285

Your Daily Dose of .NET Insights, Tools, and Trends

Greetings, fellow code conjurers! It’s another Tuesday, a perfect day to reflect on the elegant complexities of .NET development over a steaming cup of coffee and a playlist of your favorite 80s rock anthems. Today’s collection is all about nuancing your craft—think of it as fine-tuning your virtual carburetor for peak performance. Whether you’re wrestling with C# intricacies or exploring the latest in ASP.NET, let’s get your creative synapses firing on all cylinders!

Today’s Articles

Performance Improvements in Our .NET Application

https://medium.com/@pongsakorn_m/performance-improvements-in-our-net-application-1f08a2c88912

Today, we gonna look at the tips that can make your .NET application faster ⏩

Practical Specification Pattern in .NET 9: From Queries to Clean Architecture

https://medium.com/@mahmednisar/practical-specification-pattern-in-net-9-from-queries-to-clean-architecture-623b3f058bcd

Level Up Your Query Logic: Using the Specification Pattern with .NET 9, Entity Framework Core, and Repository

How to swap deployment slots in Azure App Service?

https://www.c-sharpcorner.com/article/how-to-swap-deployment-slots-in-azure-app-service/

Learn how to leverage Azure App Service deployment slots for seamless website updates with zero downtime. This guide walks you through creating staging slots, deploying code changes, and swapping them…

Use Record Types for DTOs in C#

https://medium.com/@sangheraajit/use-record-types-for-dtos-in-c-dc9a5e253580

In modern C# development, Data Transfer Objects (DTOs) are everywhere — transporting data between APIs, services, and databases.

Logging Like a Pro — Serilog + OpenTelemetry in .NET

https://medium.com/@mahmednisar/logging-like-a-pro-serilog-opentelemetry-in-net-3c9f219b9296

From scattered text files to correlated, structured observability that actually helps you debug production issues

Visual Studio 2026 Insiders; Here’s the Good, the Bad, and the WTF

https://medium.com/@freakyali/microsoft-just-dropped-visual-studio-2026-insiders-heres-the-good-the-bad-and-the-wtf-c76e573b4b22

From performance boosts and AI features to bloat and redesign headaches, here’s everything you need to know about Visual Studio 2026…

AutoMapper vs Mapster: A Comprehensive Technical Analysis for .NET Developers

https://medium.com/@dev.saeid.ghaderi/automapper-vs-mapster-a-comprehensive-technical-analysis-for-net-developers-c8daa1875b38

Object-to-object mapping is a fundamental requirement in modern .NET applications, particularly when dealing with different layers of…

String Interpolation vs Concatenation in C#: The Cleaner Way to Write Strings

https://medium.com/@sweetondonie/string-interpolation-vs-concatenation-in-c-the-cleaner-way-to-write-strings-255a281e554d

When I was about a year into coding, I still glued strings together with + signs like Lego blocks. It worked fine — until my code started…

Multi-Tenant SaaS Architecture | Tenant Isolation & Scalability

https://adilyousaf88.medium.com/multi-tenant-saas-architecture-tenant-isolation-scalability-b48089b6a48b

The Complexity of Building Multi-Tenant SaaS Applications (And How to Simplify It)

What is Prompt Fatigue and How Do You Avoid It?

https://www.c-sharpcorner.com/article/what-is-prompt-fatigue-and-how-do-you-avoid-it/

Prompt fatigue happens when AI prompts become repetitive, less effective, or mentally draining to manage. Learn what prompt fatigue is, why it matters, and how to avoid it in AI workflows.

C# 13 Performance Playbook

https://medium.com/@bhagyarana80/c-13-performance-playbook-00fa47656278

Span<T>, Pipelines, and memory discipline for smooth p99 — without GC drama.

How to Secure a Website?

https://www.c-sharpcorner.com/article/how-to-secure-a-website/

Protect your website from cyber threats with our comprehensive guide to website security. Learn essential practices, from SSL/TLS encryption and WAF implementation to secure coding, access control, an…

Records vs Classes vs Structs in .NET — Which One Should We Use?

https://medium.com/@karthikns999/records-vs-classes-vs-structs-in-net-which-one-should-we-use-fc7d857aad5c

Choosing the Right Type for Performance and Maintainability

Writing Fast, Safe, and Scalable Async in C#

https://medium.com/@freakyali/writing-fast-safe-and-scalable-async-in-c-c5fd8dc19ef5

Master ValueTask, streaming, hot paths, and writing async code that actually scales.

How to Use Migrations in EF Core?

https://www.c-sharpcorner.com/article/how-to-use-migrations-in-ef-core/

Learn how to use Entity Framework Core (EF Core) migrations to keep your database schema in sync with your application’s data model. This guide provides a step-by-step explanation of creating, applyin…

Elevate Your C# Projects with FSM_API: A New Approach to State Management

https://www.c-sharpcorner.com/article/elevate-your-c-sharp-projects-with-fsmapi-a-new-approach-to-state-management/

Simplify complex C# logic with FSM_API, a high-performance, open-source Finite State Machine library. Eliminate tangled code, improve runtime safety with its cascading degradation system, and gain fle…

Graceful Error Handling in ASP.NET Core APIs

https://medium.com/@kittikawin_ball/graceful-error-handling-in-asp-net-core-apis-a9bffeacf3d1

How to Build Robust APIs with Centralized Error Handling in ASP.NET Core.

Introduction to DotNet

https://medium.com/@jithinprem43/introduction-to-dotnet-6879ac05067f

Refined Topics:

Messing up your page layout with a fun Razor mistake

https://blog.jermdavis.dev/posts/2025/messing-up-razor

Sometimes it’s the simplest things that can trip up development work. A case in point is a bug ticket I got handed recently, which I think shows the need to understand your tools when writing code. Re…

Clickjacking Protection with X-Frame-Options and CSP in ASP.NET Core

https://www.c-sharpcorner.com/article/clickjacking-protection-with-x-frame-options-and-csp-in-asp-net-core/

Protect your ASP.NET Core applications from clickjacking attacks! This guide explains how to implement robust defenses using X-Frame-Options and Content Security Policy (CSP) with frame-ancestors. Lea…

Background Jobs in SaaS | Task Scheduling & Cron Jobs Made Easy

https://adilyousaf88.medium.com/background-jobs-in-saas-task-scheduling-cron-jobs-made-easy-87208129b3fb

Every SaaS app runs on tasks that need to happen in the background. Sending welcome emails, generating reports, cleaning up data, and…

Caching in .NET: A Complete Guide

https://shahedbd.medium.com/caching-in-net-a-complete-guide-f36bd581f7b6

Caching is one of the most powerful tools in a developer’s arsenal for boosting performance and scalability in web applications. Whether…

What Is Entity Framework Core and How Is It Different from EF6?

https://www.c-sharpcorner.com/article/what-is-entity-framework-core-and-how-is-it-different-from-ef62/

Understand the key differences between Entity Framework 6 (EF6) and Entity Framework Core (EF Core). This article compares platform support, performance, and features to help you choose the right ORM …

Git Workflows for .NET Teams: Which One Actually Works?

https://medium.com/@vivek-baliyan/git-workflows-for-net-teams-which-one-actually-works-2db52662a90d

Which Git workflow fits your .NET team? GitHub Flow, GitFlow, or Trunk-Based — with real conflict examples and fixes.

Read the whole story
alvinashcraft
6 hours ago
reply
Pennsylvania, USA
Share this story
Delete
Next Page of Stories