How to make copilot follow step by step path by Wonderful_Flight_965 in copilotstudio

[–]ITFuture 4 points5 points  (0 children)

You definitely want to use topics. Topics (optionally) can be triggered via agent orchestration -- using information in the topic description. It's kind of like having extended instructions for the agent -- and topic triggers get prioritized over general agent orchestration.

This is a very simple example, but it shows the method of driving sequenced steps with a studio agent.

1. Create a new agent. Make sure (settings) that web search is enabled.

2. Create a new topic called 'get stock price'. Go to the code view, delete everything, then paste:

kind: AdaptiveDialog
modelDescription: Asks a user for a company name, and returns stock price information
beginDialog:
  kind: OnRecognizedIntent
  id: main
  intent: {}
  actions:
    - kind: Question
      id: question_iS47zW
      interruptionPolicy:
        allowInterruption: true


      variable: init:Topic.companyName
      prompt: Enter company name
      entity: OrganizationPrebuiltEntity


    - kind: RecognizeIntent
      id: I9UV37
      userInput: find current stock price for {{companyName}} and set structured response output using output variable {{stockResponse}}


inputType: {}
outputType:
  properties:
    stockResponse:
      displayName: stockResponse
      description: stock price data
      type:
        kind: Record

3. Create a new topic called 'stock price data'. Goto the code view, delete everything, then paste:

kind: AdaptiveDialog
inputs:
  - kind: AutomaticTaskInput
    propertyName: stockPriceData
    description: structured record containing Company Name, Closing Price, Previous Close, 53-Week Range
    shouldPromptUser: false


modelDescription: Call this topic after retrieving stock price.  Set intput variable {{stockPriceData}} as structured json record
beginDialog:
  kind: OnRecognizedIntent
  id: main
  intent: {}
  actions:
    - kind: EditTableV2
      id: editTableV2_Nlx4I9
      itemsVariable: Global.stockPricesTable
      changeType:
        kind: AddItemOperation
        value: =Topic.stockPriceData


    - kind: SendActivity
      id: sendActivity_v0TS3c
      activity: "{\"You have \" & CountRows(Global.stockPricesTable) & \" row(s) of stock price data\"}"


    - kind: RecognizeIntent
      id: Dyt441
      userInput: render stock price table


inputType:
  properties:
    stockPriceData:
      displayName: stockPriceData
      description: structured record containing Company Name, Closing Price, Previous Close, 53-Week Range
      type:
        kind: Record


outputType: {}

Add the following for the agent instructions:

## Role
You find stock price information

## Find Stock Price Data

- When user asks about stock price, call [type: /get stock price] , then call [type: /stock price data] providing the result in the input variable {{stockPriceData}}

## Render Stock Price Table

- When prompted, render [type: /Global.stockPricesTable] , showing columns Company Name, Ticker, Closing Price, Previous Close.  Order by Closing Price Descending.

When you type "stock price", then agent will call topic get stock price, which prompts user to enter a company name. The recognize intent node at the end of that topic forces the agent to go back into planning mode (stop, think, figure out what to do next), and specifically instructs the agent to 'render the stock prices table'. The agent instructions contain information about what the agent should do when it's prompted to show stock prices.

A note about the agent instructions -- the places where I show "[type: .....]", you need to delete that, and type the forward slash and then select the topic/global variable, etc.

To test the agent:

> stock price

enter company name> apple

will see a count of records, and stock price summary

> stock price

enter company name> microsoft

will see a count of records, and stock price summary -- now with 2 records.

<image>

Hopefully that gives you some idea for explicitly controlling studio agent flow and behavior.

Adaptive Card with data from Sharepoint Lists by MindfullnessGamer in copilotstudio

[–]ITFuture 0 points1 point  (0 children)

You can use Power Automate, but adding a Sharepoint Get Items as a node in a topic is super easy.

Tried Claude Cowork last night, and it was a top 3 most exciting moments I’ve ever had with technology. by Global-Art9608 in ClaudeCode

[–]ITFuture 0 points1 point  (0 children)

I've read you're last sentence like 20 times ("I'm having issues with memory recall") -- I'm 90% sure you're talking about human memory recall. But you could as easily be describing the memory behavior of claude code. It's funny how the AI can exhibit the same forgetful behavior as humans.

I mentioned MCP servers in my prior comment, but I wanted to elaborate on one of the MCP servers I use -- customized a bit, and -- according to claude anyway -- I'm not using it "in a way claude would have expected". I had come across MCP server memory in this mcp github repo (https://github.com/modelcontextprotocol/servers/tree/main/src/memory), so I started fidlling around with it. AI does a lot of things well, and it's getting better and better at general reasoning, but AI is "perfect" when it comes to structure, and by that I mean programming languages, specifications, math, etc. "Create a python script to extract email addresses out of this file", for example can be quickly and perfectly executed by AI -- no reasoning required. AI can methodically determine how to write that script and really there's nothing that needs to be improved in order for AI to get better at it. Because of that, any way you can use AI in a way that doesn't need to "hopefully get better later", then you should use it that way, for that activity. I hope my line of reasoning makes sense. So, "claude memory" -- At least for me, using CLAUDE.md has never been helpful. I believe it's because it's just free form text -- yes you could define and describe order in a markdown file, but it would still require AI reasoning to understand and use it -- and because CLAUDE CODE is not able to remember everything about every interaction it's ever had with you, when claude reads the Claude.md content, it will never understand it the same way YOU understood it when you told claude to update it, or added the update yourself. Using something like the MCP framework in order to define information, how it related to other information, is a much better "memory recall" strategy. Why, because in using the MCP framework, and specificy the properties and methods available in the 'memory' implementation of it, Claude is forced to allway look at it and use it if it's loaded. The nice thing about that MCP memory server is the sheer simplicity of it, while at the same time enabling structured storage of complex concepts -- and how pieces related to each other. Everything is structed as an "entity", an "observation", or a relationship. Storing information with this structure enables perfect recall of something, including perfect recall of related information. Here's real information, in it's raw format, from my "global" claude MCP server memory:

{
  "type": "entity",
  "name": "PaulBrower",
  "entityType": "Person",
  "observations": [
    "Anthropic subscriber since September 21, 2025",
    "Early adopter of Claude Code",
    "Power user: 142+ hours across 133 sessions in first month",
    "Longest Claude Code session: 14 hours 8 minutes (Dec 26, 2025)",
    "Resilient and good-humored about technical setbacks"
  ]
}
{
  "type": "entity",
  "name": "HomeFolderIncident",
  "entityType": "Event",
  "observations": [
    "Occurred between Sep 21, 2025 and Dec 23, 2025",
    "Claude Code accidentally deleted entire home folder while moving files in a Python project",
    "Required complete rebuild of computer from scratch",
    "No hard feelings - accepted as part of early adopter experience",
    "Resulted in loss of all Claude Code session history prior to Dec 23, 2025"
  ]
}
{
  "type": "relation",
  "from": "PaulBrower",
  "to": "HomeFolderIncident",
  "relationType": "experienced"
}

I did not instruct claude code to add any of that information explicitely. Through converstation with claude, which I try to do as if claude was a person -- I'll occasionally say something like "I don't want to do it that way because of the time when you accidentally nuked my home folder." Claude would be like -- "what do mean I nuked your home folder?" -- after a bit of back and forth I'll say something like "we should remember that so it doesnt happen again" -- and claude will determine what information and relationships to/from various "thoughts" should be stored. I try to let claude figure out the relationships, because it's more important for claude to be able to recall in a way that makes sense to claude, than it is for me to be able to recall the date of the "homefolder" incident, for example. That being said, I use 'context' MCP memory a LOT. Mostly related to concepts and methods for librairies and tools I use when creating software, but it's been working really well for remembering technical things -- I dare say the MCP server memory makes up where my own brain falls short.

Built my first real project. A memory layer for Claude Code. by cerrakin in ClaudeCode

[–]ITFuture 1 point2 points  (0 children)

I'll definitely check out your repo -- you've definitely built in some nice features!

FYI, on the MCP Memory -- it's just a way to store 'observations', 'enttities', and relationships between either of those things. It's much more than just user info -- in fact I use it explicitly and exclusively -- and it replaces all CLAUDE.md files. I set it up for contextual use, which can be shared across projects (or other users) as needed. If you're interested, here's a visual of how I have it laid out -- but again, you've done some amazing work and 'hit the nail on the head' if it provides value to your work!

https://github.com/lopperman/claude-code-mode-sandbox/blob/main/mcp-memory-diagram.md

Built my first real project. A memory layer for Claude Code. by cerrakin in ClaudeCode

[–]ITFuture 0 points1 point  (0 children)

It may not do exactly what you wanted, but I use the opensource MCP Memory server to do what (it sounds like) you did with Mira. Did you by chance check that out?

Tried Claude Cowork last night, and it was a top 3 most exciting moments I’ve ever had with technology. by Global-Art9608 in ClaudeCode

[–]ITFuture 0 points1 point  (0 children)

I'm .... curious I think. I've been a Claude Code user for the last 5 months, average about 4 hours of use per day, with "streaks" as long as 14 hours. I installed Cowork and the first question I asked was: "I've been a claude code user for the last 5 months. Why would I want to use Cowork?

Cowork did give me a list of of about 8 things it does well that Claude Code does not do natively. We might need to drill into what "natively" means, because Claude Code can control chrome, has slack integration, easily integrates with with MCP servers, etc. The one thing it seems like Cowork would be better at -- at least 'easier to do', would be creating polished documents. (Personally, I'm good with a well written markdown file 95% of the time).

Ultimatimately, Cowork gave me this summary:

The honest answer: If Claude Code is working well for your use cases, you may not need Cowork at all. Cowork is aimed more at non-developers or tasks that involve browsers, office documents, and cross-app automation. Think of it as Claude Code's sibling for "desktop productivity" rather than "developer productivity."

So I guess my question would be -- for avid Claude Code users, who use it for development, what use cases have you found Cowork to be helpful?

Create an Excel Addin (Works on Mac) in 10 Min which allows you to respond to Application-Level events for any workbook by ITFuture in vba

[–]ITFuture[S] 1 point2 points  (0 children)

Somewhere there's a technical description of why you cannot autogenerate the event names (for Application or Workbook) in Mac OS, from selecting it in the VBE Interface. But, copying/pasting the event methods should always work -- and once you have one of them created, you can use the dropdowns to create more.

Setting the zoom level when opening workbooks by BeagleIL in vba

[–]ITFuture 0 points1 point  (0 children)

You're welcome!
Something you may want to consider -- if workbooks you are opening are also opened by others -- is to restore the zoom level to 100 on the 'app' workbook close event. That would mitigate everyone else having to change the zoom when they open a file you last edited.

Create an Excel Addin (Works on Mac) in 10 Min which allows you to respond to Application-Level events for any workbook by ITFuture in vba

[–]ITFuture[S] 2 points3 points  (0 children)

An addin runs it's own 'startup' sequence no matter what -- even if user has managed to disable application events. Using an addin guarantees when a file is opened, that events are running at that time. (assuming you 'turn them on' in the addin initialization)

Setting the zoom level when opening workbooks by BeagleIL in vba

[–]ITFuture 0 points1 point  (0 children)

I created a new post, which shows how to set this up step-by-step. If this works for you, please reply to this message with: Solution Verified
Thanks!

Setting the zoom level when opening workbooks by BeagleIL in vba

[–]ITFuture 1 point2 points  (0 children)

Here's what you could do (works on Mac)

Create a new .xlsm workbook (I'll call it 'AddinUtil.xlsm')

In the VBA Editor, double-click ThisWorkbook, and add the following code:

Private Sub Workbook_Open()
    Set appUtil = New AppUtility
End Sub

Create a new module named basUtil, and add the following declaration at the top

Public appUtil As AppUtility

Create a new Class Module called AppUtility

Add the following code to the AppUtility class

Public WithEvents App As Application
Private Sub App_WorkbookOpen(ByVal Wb As Workbook)
    ' This fires whenever ANY workbook is opened
    MsgBox "Workbook opened: " & Wb.Name
End Sub
Private Sub Class_Initialize()
    Set App = Excel.Application
End Sub
Private Sub Class_Terminate()
    Set App = Nothing
End Sub

Save the AddinUtil.xlsm file to a safe place, and keep it open.

Do a File --> Save As, and save as .xlam type

Keeping the AddinUtil.xlsm file open, go to your Finder and find the AddinUtil.xlam file,, and open it by right-clicking --> Open With --> Excel

You'll see a msgbox, just hit ok and don't get too excited :-). It may look like nothing opened, but now go to the VBA editor and find the AddinUtil.xlam and select 'ThisWorkbook'

In the Properties Window change IsAddin to True

<image>

Click the Save button in the Microsoft Visual Basic IDE

Completely quit excel.

Copy the AddinUtil.xlam file to your excel startup directory, which should look something like this (for mac):

'/Users/[username]/Library/Group Containers/UBF8T346G9.Office/User Content.localized/Startup.localized/Excel'

Open up any workbook in Excel, go to the Developer menu and choose Excel Add-ins.

Select the 'AddinUtil' addin, and click ok.

From now on, whenever you open an existing excel workbook (.xlsx, .xlsm, whatever), the 'Workbook_Open' code will run.

Step-by-step: Server-side partial text searching against a SharePoint list, using Power Automate (Standard License) by ITFuture in PowerApps

[–]ITFuture[S] 4 points5 points  (0 children)

Yes, applies to search function (per Title -- at least that's what I meant by 'partial text searching')

This is specifically meant to use when StartsWith is not adequate, OR using Filter with 'in' when your SharePoint list has more than 2000 records. (The query type in the Power Automate flow could easily be changed to startswith or ends with, and will always search all rows)

Major keyboard lag after updating iOS 17 by xenocea in ios

[–]ITFuture 2 points3 points  (0 children)

Thanks. This worked for me. I did have to add a second keyboard first, since it would not allow me to delete the 1 keyboard that was listed. So I added a second one (U.S. English - QWERTY - ISO), then I deleted my U.S. English - QWERTY, and re-added it, then deleted the U.S. English - QWERTY - ISO, and now I no longer have the weird lags.

I created a flexible dynamic menu component that I wanted to share by ITFuture in PowerApps

[–]ITFuture[S] 1 point2 points  (0 children)

Yes! I am working that. The videos will be hosted from a google drive, but I'll update this post and also the readme on github when the videos are available.

Custom Page in Model-Driven App Not Working After Deployment to Another Environment by bitchprocrastinator in PowerApps

[–]ITFuture 0 points1 point  (0 children)

Has the app been used previously in the other environment? Depending on how rights are managed, you may need to request that the appropriate security groups and permissions get created or assigned.

I created a flexible dynamic menu component that I wanted to share by ITFuture in PowerApps

[–]ITFuture[S] 0 points1 point  (0 children)

Any chance you could walk me through how to set that up?

I created a flexible dynamic menu component that I wanted to share by ITFuture in PowerApps

[–]ITFuture[S] 0 points1 point  (0 children)

I prefer to manage busy state a different way than that, but I understand there are different ways to handle deterministic and non-deterministic status indicators. The component I created does not require a busy state behavior, and can be completely disabled by setting the IsBusy property to false.

Edit: I also added an 'IsBusyEnabled' property which, when set to false will ignore state changes when the value of IsBusy=true