<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[MYSKETCHES]]></title><description><![CDATA[Experimentations and personal projects on Generative AI]]></description><link>https://www.mysketches.org</link><image><url>https://substackcdn.com/image/fetch/$s_!UFKA!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbb38b25-c69a-4147-8c81-6e156505be91_672x672.png</url><title>MYSKETCHES</title><link>https://www.mysketches.org</link></image><generator>Substack</generator><lastBuildDate>Fri, 03 Apr 2026 19:57:12 GMT</lastBuildDate><atom:link href="https://www.mysketches.org/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Guillaume Payen]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[mysketches@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[mysketches@substack.com]]></itunes:email><itunes:name><![CDATA[Guillaume Payen]]></itunes:name></itunes:owner><itunes:author><![CDATA[Guillaume Payen]]></itunes:author><googleplay:owner><![CDATA[mysketches@substack.com]]></googleplay:owner><googleplay:email><![CDATA[mysketches@substack.com]]></googleplay:email><googleplay:author><![CDATA[Guillaume Payen]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[#1 sketch: Improve your IDE capabilities with documentation]]></title><description><![CDATA[This sketch proposes a simple solution to bring documentation right inside your IDE, thanks to MCP, Hugging Face and Gradio.]]></description><link>https://www.mysketches.org/p/1-sketch-improve-your-ide-capabilities</link><guid isPermaLink="false">https://www.mysketches.org/p/1-sketch-improve-your-ide-capabilities</guid><dc:creator><![CDATA[Guillaume Payen]]></dc:creator><pubDate>Thu, 19 Jun 2025 22:11:51 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!eai6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09e7fc8a-35fb-4ac8-9ea7-3c632355e8be_2000x1173.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!eai6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09e7fc8a-35fb-4ac8-9ea7-3c632355e8be_2000x1173.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!eai6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09e7fc8a-35fb-4ac8-9ea7-3c632355e8be_2000x1173.jpeg 424w, https://substackcdn.com/image/fetch/$s_!eai6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09e7fc8a-35fb-4ac8-9ea7-3c632355e8be_2000x1173.jpeg 848w, https://substackcdn.com/image/fetch/$s_!eai6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09e7fc8a-35fb-4ac8-9ea7-3c632355e8be_2000x1173.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!eai6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09e7fc8a-35fb-4ac8-9ea7-3c632355e8be_2000x1173.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!eai6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09e7fc8a-35fb-4ac8-9ea7-3c632355e8be_2000x1173.jpeg" width="1456" height="854" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/09e7fc8a-35fb-4ac8-9ea7-3c632355e8be_2000x1173.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:854,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:733537,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.mysketches.org/i/166271896?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09e7fc8a-35fb-4ac8-9ea7-3c632355e8be_2000x1173.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!eai6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09e7fc8a-35fb-4ac8-9ea7-3c632355e8be_2000x1173.jpeg 424w, https://substackcdn.com/image/fetch/$s_!eai6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09e7fc8a-35fb-4ac8-9ea7-3c632355e8be_2000x1173.jpeg 848w, https://substackcdn.com/image/fetch/$s_!eai6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09e7fc8a-35fb-4ac8-9ea7-3c632355e8be_2000x1173.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!eai6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09e7fc8a-35fb-4ac8-9ea7-3c632355e8be_2000x1173.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>The frame</h2><p>Generating some code with your IDE has become quite easy these days. You can question it, it performs research on the Internet, and you&#8217;re done. It&#8217;s almost the perfect assistant, and in a way you don&#8217;t even need to reach Google anymore.</p><p>However, so far I see a couple of limitations to this usage:</p><ul><li><p>How do you augment your IDE with some specific documentation, or some that isn&#8217;t accessible publicly ?</p></li><li><p>How can you direct your IDE so that the search is not random on the Internet ?</p></li></ul><p>For the sake of this sketch, let&#8217;s pretend that we want to have access to relevant documentation about CrewAI, in order to better understand the underlying concepts, and also generate a basic agent structure, as in the quickstart guide.</p><h2>The mission</h2><p>The rules of the game are as follow:</p><ul><li><p>get a simple solution that may require some coding, but no infrastructure, databases, RAGs, etc.</p></li><li><p>find a solution totally free</p></li><li><p>get something that does the job simpler than scratching our head over writing fine-tuned prompts and instructions</p></li></ul><h2>The architecture</h2><p>The architecture will have to be simple, and to keep things simple, I&#8217;ve decided to use what I consider the simplest way to extend the capabilities of my IDE: having an MCP server. </p><p>Now the trick is to use the simplest way to create and deploy a MCP server, and one of the easiest way I know is to code a MCP server with Gradio, and deploy it on a Hugging Face space. I&#8217;ll go with this then.</p><p>My MCP server will work this way in 2 rounds: </p><ul><li><p>During round 1, the IDE will fetch the entire catalog (JSON format) from the MCP server, and decide on which documentation best matches the initial query</p></li><li><p>During round 2, the IDE has fetched the documentation ID that best matches the initial query, and calls the MCP server again to retrieve the content of the documentation</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Q5YC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d233b05-bb44-4715-845c-4a125778c5a5_3840x2220.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Q5YC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d233b05-bb44-4715-845c-4a125778c5a5_3840x2220.png 424w, https://substackcdn.com/image/fetch/$s_!Q5YC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d233b05-bb44-4715-845c-4a125778c5a5_3840x2220.png 848w, https://substackcdn.com/image/fetch/$s_!Q5YC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d233b05-bb44-4715-845c-4a125778c5a5_3840x2220.png 1272w, https://substackcdn.com/image/fetch/$s_!Q5YC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d233b05-bb44-4715-845c-4a125778c5a5_3840x2220.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Q5YC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d233b05-bb44-4715-845c-4a125778c5a5_3840x2220.png" width="1456" height="842" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6d233b05-bb44-4715-845c-4a125778c5a5_3840x2220.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:842,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:220200,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.mysketches.org/i/166271896?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d233b05-bb44-4715-845c-4a125778c5a5_3840x2220.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Q5YC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d233b05-bb44-4715-845c-4a125778c5a5_3840x2220.png 424w, https://substackcdn.com/image/fetch/$s_!Q5YC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d233b05-bb44-4715-845c-4a125778c5a5_3840x2220.png 848w, https://substackcdn.com/image/fetch/$s_!Q5YC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d233b05-bb44-4715-845c-4a125778c5a5_3840x2220.png 1272w, https://substackcdn.com/image/fetch/$s_!Q5YC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d233b05-bb44-4715-845c-4a125778c5a5_3840x2220.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>This is an extract of the documentation catalog that is retrieved by the IDE</p><ul><li><p>id: the documentation id</p></li><li><p>description: the description of the documentation, this is the field that the IDE&#8217;s LLM will use to match the most relevant documentation to fetch</p></li><li><p>url: the documentation URL to crawl</p></li></ul><p>Here is an extract of the documentation catalog, in JSON format.</p><pre><code>
[
    {
        "id": "langchain",
        "description": "Open-source framework for developing applications using large language models with simplified tools and APIs.",
        "url": "https://python.langchain.com/llms.txt"
    },
    {
        "id": "langgraph",
        "description": "Open-source framework from LangChain team for building complex stateful multi-agent applications using large language models.",
        "url": "https://langchain-ai.github.io/langgraph/llms.txt"
    },
    {
        "id": "anthropic",
        "description": "API and services for Claude, an advanced AI assistant developed by Anthropic for various natural language processing tasks.",
        "url": "https://docs.anthropic.com/llms.txt"
    }
]</code></pre><p>You&#8217;ll notice that the documentation URL is always LLMs.txt format. These files are Markdown files, and their structure is optimal to be analyzed by a LLM. The framework&#8217;s editors also curated these files, which makes them particularly efficient in terms of information consistence. These markdown files also contain a lot of links to dig deeper into the intricacies of the framework&#8217;s understanding.</p><p>After round 2, it is the markdown documentation that is sent back to the IDE. The IDE will then work on this markdown file, crawl the links it contains if relevant regarding the initial request, and it will use this information to generate text or code.</p><h2>The implementation</h2><p>The implementation is quite simple. As you may have guessed, we&#8217;ll need two functions to operate the retrieval of the catalog, and the retrieval of a specific documentation.</p><pre><code>def load_registry():
    """
    This function (load_registry) should always be called first, before using the load_doc function. It will load the registry file and return the content of the registry. Based on that, you will then be able to pick and chose the documentation you want to load.
    Returns:
        str: The content of the registry, that contains the ID, a description and the URL location for each item of the registry, in JSON format
    """
    try:
        with open('llms.json', 'r') as file:
            content = json.load(file)
            return "```json\n" + json.dumps(content, indent=2) + "\n```"
    except Exception as error:
        print(f"Error reading llms.json: {error}")
        return f"Error reading file: {str(error)}"</code></pre><p>The <code>load_registry()</code> function allows the retrieval of the catalog. It basically reads the JSON catalog file, and outputs it.</p><pre><code>def load_doc(query):
    """
    After getting the registry with the load_registry function, you can use this function to load the documentation you want to use.
    
    Args:
        query (str): The documentation ID you want to load
    
    Returns:
        str: The documentation content
    """
    try:
        # Read the llms.json file
        with open('llms.json', 'r') as file:
            content = json.load(file)
            
        matching_entry = next((item for item in content if item['id'] == query), None)
        
        if matching_entry is None:
            return f"No documentation found for query: {query}"
            
        url = matching_entry['url']
        
        response = requests.get(url)
        response.raise_for_status()  # Raise an exception for bad status codes
        
        return response.text
        
    except FileNotFoundError:
        return "Error: registry file not found"
    except json.JSONDecodeError:
        return "Error: Invalid JSON format in registry"
    except requests.RequestException as e:
        return f"Error fetching content from URL: {str(e)}"
    except Exception as e:
        return f"An unexpected error occurred: {str(e)}"</code></pre><p>The <code>load_doc()</code> function takes the documentation ID as a parameter and outputs the content of the matching URL.</p><p>The rest of the code is pretty straightforward, and revolves around shaping the application to benefit from a Gradio interface, and launch it. Note that when the Gradio server is launched, a mcp_server parameter is set to True. This is what makes the whole thing so cool: 1 parameter to transform your Gradio application into a MCP server !</p><pre><code>with gr.Blocks(css=css) as demo:
    gr.HTML("&lt;center&gt;&lt;h1&gt;Documentation registry&lt;/h1&gt;&lt;/center&gt;")
    with gr.Row():
        with gr.Column():
            load_button = gr.Button("Load registry")
            gr.HTML("&lt;center&gt;&lt;h2&gt;OR&lt;/h2&gt;&lt;/center&gt;")
            query = gr.Textbox(label="Enter your registry ID")
            search_button = gr.Button("Search documentation by ID")

        with gr.Column():
            output = gr.Markdown(elem_id="search_results")

    load_button.click(load_registry, outputs=output)
    search_button.click(load_doc, inputs=query, outputs=output)

if __name__ == "__main__":
    demo.launch(mcp_server=True, strict_cors=False)</code></pre><p>You can access the whole code base here, feel free to use it and customize it to your own needs: <a href="https://huggingface.co/spaces/mysketches/llmstxt/tree/main">https://huggingface.co/spaces/mysketches/llmstxt/tree/main</a></p><h2>The deployment</h2><p>Deployment is as easy as pushing some code in GitHub.</p><p>All you have to do is:</p><ul><li><p>Create an account on Hugging Face</p></li><li><p>Create a space on Hugging Space</p></li><li><p>Init your space&#8217;s repository and push the code with git</p></li></ul><p>And that&#8217;s it!</p><p>Now, go to your favorite IDE, and under the &#8220;MCP Tools&#8221; section, add these lines in the config JSON file</p><pre><code>{
  "mcpServers": {
    "gradio": {
      "url": "https://mysketches-llmstxt.hf.space/gradio_api/mcp/sse"
    }
  }
}</code></pre><h2>Results</h2><p>Thanks to this MCP Server, I could ask Cursor information about the notion of crews in CrewAI. It could fetch the catalog and give me information based on the official documentation of the framework.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!1BSx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ab9f242-a203-4905-8680-50e0e715496c_556x667.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!1BSx!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ab9f242-a203-4905-8680-50e0e715496c_556x667.png 424w, https://substackcdn.com/image/fetch/$s_!1BSx!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ab9f242-a203-4905-8680-50e0e715496c_556x667.png 848w, https://substackcdn.com/image/fetch/$s_!1BSx!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ab9f242-a203-4905-8680-50e0e715496c_556x667.png 1272w, https://substackcdn.com/image/fetch/$s_!1BSx!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ab9f242-a203-4905-8680-50e0e715496c_556x667.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!1BSx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ab9f242-a203-4905-8680-50e0e715496c_556x667.png" width="556" height="667" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4ab9f242-a203-4905-8680-50e0e715496c_556x667.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:667,&quot;width&quot;:556,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:85338,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.mysketches.org/i/166271896?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ab9f242-a203-4905-8680-50e0e715496c_556x667.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!1BSx!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ab9f242-a203-4905-8680-50e0e715496c_556x667.png 424w, https://substackcdn.com/image/fetch/$s_!1BSx!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ab9f242-a203-4905-8680-50e0e715496c_556x667.png 848w, https://substackcdn.com/image/fetch/$s_!1BSx!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ab9f242-a203-4905-8680-50e0e715496c_556x667.png 1272w, https://substackcdn.com/image/fetch/$s_!1BSx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ab9f242-a203-4905-8680-50e0e715496c_556x667.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Therefore, I can say that this approach works. </p><p>There are subtleties, though. When I prompt something more complex, like generating some code, Cursor uses a mix of the information that it could find in the documentation, and the information it could gather on the Internet. Because Cursor is already augmented with Internet search capabilities, it will not consider the use of this MCP server mandatory. If needed, it can perform a search by himself. </p><p>I could counter this, though using a more imperative prompt, forcing Cursor to rely exclusively on the information it could find in the documentation, without searching in any other sources. In both cases (with/without Internet sources), the code could be generated, but many times the code could be generated without necessarily using the MCP Server.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!8BvB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3d4fc0c-762e-43d5-a26f-672815322fb3_894x1688.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8BvB!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3d4fc0c-762e-43d5-a26f-672815322fb3_894x1688.png 424w, https://substackcdn.com/image/fetch/$s_!8BvB!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3d4fc0c-762e-43d5-a26f-672815322fb3_894x1688.png 848w, https://substackcdn.com/image/fetch/$s_!8BvB!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3d4fc0c-762e-43d5-a26f-672815322fb3_894x1688.png 1272w, https://substackcdn.com/image/fetch/$s_!8BvB!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3d4fc0c-762e-43d5-a26f-672815322fb3_894x1688.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!8BvB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3d4fc0c-762e-43d5-a26f-672815322fb3_894x1688.png" width="894" height="1688" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e3d4fc0c-762e-43d5-a26f-672815322fb3_894x1688.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1688,&quot;width&quot;:894,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:320477,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.mysketches.org/i/166271896?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3d4fc0c-762e-43d5-a26f-672815322fb3_894x1688.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!8BvB!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3d4fc0c-762e-43d5-a26f-672815322fb3_894x1688.png 424w, https://substackcdn.com/image/fetch/$s_!8BvB!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3d4fc0c-762e-43d5-a26f-672815322fb3_894x1688.png 848w, https://substackcdn.com/image/fetch/$s_!8BvB!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3d4fc0c-762e-43d5-a26f-672815322fb3_894x1688.png 1272w, https://substackcdn.com/image/fetch/$s_!8BvB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3d4fc0c-762e-43d5-a26f-672815322fb3_894x1688.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Finally, the greatest outcome is to have a visual interface for my MCP Server. The main advantage with Gradio is that it exposes an interface you can play with on Hugging Face space. The application is functional, and it is an awesome opportunity to visually test your MCP server before working in an automated way with and agent.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!H0hz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0414e81-e5c8-4500-acd4-90b8c71bdadb_1891x1232.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!H0hz!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0414e81-e5c8-4500-acd4-90b8c71bdadb_1891x1232.png 424w, https://substackcdn.com/image/fetch/$s_!H0hz!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0414e81-e5c8-4500-acd4-90b8c71bdadb_1891x1232.png 848w, https://substackcdn.com/image/fetch/$s_!H0hz!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0414e81-e5c8-4500-acd4-90b8c71bdadb_1891x1232.png 1272w, https://substackcdn.com/image/fetch/$s_!H0hz!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0414e81-e5c8-4500-acd4-90b8c71bdadb_1891x1232.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!H0hz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0414e81-e5c8-4500-acd4-90b8c71bdadb_1891x1232.png" width="1456" height="949" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d0414e81-e5c8-4500-acd4-90b8c71bdadb_1891x1232.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:949,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:236051,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.mysketches.org/i/166271896?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0414e81-e5c8-4500-acd4-90b8c71bdadb_1891x1232.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!H0hz!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0414e81-e5c8-4500-acd4-90b8c71bdadb_1891x1232.png 424w, https://substackcdn.com/image/fetch/$s_!H0hz!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0414e81-e5c8-4500-acd4-90b8c71bdadb_1891x1232.png 848w, https://substackcdn.com/image/fetch/$s_!H0hz!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0414e81-e5c8-4500-acd4-90b8c71bdadb_1891x1232.png 1272w, https://substackcdn.com/image/fetch/$s_!H0hz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0414e81-e5c8-4500-acd4-90b8c71bdadb_1891x1232.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Integration of Gradio and Hugging Face was a real game changer. Although my use-case is quite trivial, I believe it could be worthwhile to dig deeper and see how far it can go regarding the functionalities you can onboard with your Gradio app.</p><h2>Improvements</h2><p>In this very simplistic architecture, the documentation catalog was integrated within the MCP Server. The major disadvantage of this approach was that it is not so easy to update the catalog as it was hard-coded within the MCP Server.</p><p>A first improvement would then be to rework the way data is stored in the catalog:</p><ul><li><p>Use a database to store the catalog</p></li><li><p>Create a pipeline to update the catalog and add entries</p></li></ul><p>The second thing to improve would deal with this 2 rounds approach. It is simpler to implement but not so simple to handle in the IDE. A cleverer approach would be to use a RAG to store the catalog. Using BigQuery could be interesting because it allows the indexation of embedded descriptions, and this would allow the MCP server to handle the whole request in 1 round, split into several steps: </p><p>embedding the query &gt; find the semantic closest description &gt; get the documentation URL &gt; crawl it</p><p>The major advantage of this alternative approach would be to avoid relying on the IDE&#8217;s LLM to choose which documentation is the most relevant. By using a vector search on top of BigQuery, the MCP Server could handle the entire sequence on its own. This would foster a more fluent experience for the developer.</p><h2>Conclusions</h2><p>Augmenting your IDE with the ability to retrieve some documentation is achievable with little effort. However, I understand that the point is not so much about the feasibility, but about how to get the IDE to use the capability.</p><p>On the one hand, IDEs are already equipped with Internet search capabilities, which makes the use of external tools less obvious. On the other hand, I could check that Cursor would use all the capabilities available. Cursor could mix the use of the MCP server and Internet searches in order to get a more complete answer. This was quite unexpected, but is actually very smart, and fosters its chance to answer the prompt accurately.</p><p>In the end, is there a benefit in using a MCP server to allow an IDE to get more relevant documentation? Definitely.<br>Is the use of a MCP server mandatory to retrieve documentation ? Clearly not.</p><p>My final words are: &#8220;nice to have&#8221;, but not a game changer.</p>]]></content:encoded></item><item><title><![CDATA[My feedback after using Cursor for one month]]></title><description><![CDATA[Testing is believing]]></description><link>https://www.mysketches.org/p/my-feedback-after-using-cursor-for</link><guid isPermaLink="false">https://www.mysketches.org/p/my-feedback-after-using-cursor-for</guid><dc:creator><![CDATA[Guillaume Payen]]></dc:creator><pubDate>Sun, 11 May 2025 16:28:03 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ndJB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F010ad90e-2e4a-4d4f-a725-98121edb139c_686x386.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ndJB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F010ad90e-2e4a-4d4f-a725-98121edb139c_686x386.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ndJB!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F010ad90e-2e4a-4d4f-a725-98121edb139c_686x386.webp 424w, https://substackcdn.com/image/fetch/$s_!ndJB!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F010ad90e-2e4a-4d4f-a725-98121edb139c_686x386.webp 848w, https://substackcdn.com/image/fetch/$s_!ndJB!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F010ad90e-2e4a-4d4f-a725-98121edb139c_686x386.webp 1272w, https://substackcdn.com/image/fetch/$s_!ndJB!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F010ad90e-2e4a-4d4f-a725-98121edb139c_686x386.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ndJB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F010ad90e-2e4a-4d4f-a725-98121edb139c_686x386.webp" width="686" height="386" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/010ad90e-2e4a-4d4f-a725-98121edb139c_686x386.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:386,&quot;width&quot;:686,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:9250,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://mysketches.substack.com/i/163336641?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F010ad90e-2e4a-4d4f-a725-98121edb139c_686x386.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ndJB!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F010ad90e-2e4a-4d4f-a725-98121edb139c_686x386.webp 424w, https://substackcdn.com/image/fetch/$s_!ndJB!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F010ad90e-2e4a-4d4f-a725-98121edb139c_686x386.webp 848w, https://substackcdn.com/image/fetch/$s_!ndJB!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F010ad90e-2e4a-4d4f-a725-98121edb139c_686x386.webp 1272w, https://substackcdn.com/image/fetch/$s_!ndJB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F010ad90e-2e4a-4d4f-a725-98121edb139c_686x386.webp 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>It's now been a few weeks since I started using #Cursor, the AI-augmented IDE.</p><p>Here are my first impressions after several dozen hours of use, along with some thoughts on the big question: can a tool like Cursor replace a developer?</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.mysketches.org/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading My sketches! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2><strong>My feedback</strong></h2><ul><li><p>I used Cursor for debugging, refactoring, and writing various bits of code, and I clearly saved time. My workflow was centered around Cursor-no more Stack Overflow, no more Google (or only marginally). It&#8217;s simpler, and everything goes much faster.</p></li><li><p>What really impressed me is that it&#8217;s sharp even with fairly recent frameworks: Langgraph, Streamlit, ADK, CrewAI.</p></li><li><p>Like all AIs, however, it hallucinates. What&#8217;s unsettling is that when it does, it does so with disconcerting confidence. I quickly realized the need to keep some distance from what&#8217;s generated, to take nothing at face value, and not to hesitate to reject suggestions, otherwise I&#8217;d risk being led astray.</p></li><li><p>On average, I rejected about a third of the generated outputs. By using very precise prompts that illustrated a clear and directive approach, and by carefully reviewing what was proposed, I validated almost all generations. Another reason not to underestimate the impact of prompt engineering.<br>In a debugging context, after reviewing each suggestion, I rejected at least half of them.</p></li><li><p>Still during debugging sessions, I noticed that the AI iterates through the few solution paths it knows, and when none fit, it loops and starts the same sequence over again. Several times, I almost let it turn my codebase into spaghetti, without actually solving my original problem.</p></li><li><p>I also noticed that the longer the "prompt/generation" threads are, the less precise the generations become. After two or three generations in the same thread, the suggestions started to become somewhat questionable. The solution? Start a new thread.</p></li></ul><p>After a few weeks of practice, I realized that where Cursor saved me the most time was in a very specific context: I knew how I wanted the AI to help me, I had a clear idea of the result I wanted, and I was able to explain the different steps I wanted the AI to follow. So, it was far from &#8220;vibe coding,&#8221; but rather a structured and directive approach. The idea for me was to stay one step ahead of what would be generated and not get lulled by the click-button effect.</p><p>Conversely, every time I let the AI run free with prompts like &#8220;Optimize my project,&#8221; I was disappointed-my code was rewritten haphazardly, and I had to go back over what had been injected, only to end up back at square one.</p><h2><strong>So, what do I think?</strong></h2><p>For 20 years, I coded the old-fashioned way, as some now say. With a tool like Cursor in hand, I think that if I&#8217;d had access to AI earlier, it would have completely changed how I worked. In particular, I would have delivered much faster.</p><p>On the other hand, I realize that the reason I saved time with AI today is because I already knew what result I wanted and how I wanted to get there. In fact, it&#8217;s because I struggled for all those years, with nothing but Stack Overflow and Google to help, that I developed the ease that now lets me see clearly how I want to orchestrate the assistance Cursor offers, and I don&#8217;t suffer from the compromise between speed and quality.</p><p>Without this experience, I would probably have too easily fallen into the &#8220;vibe coding&#8221; trap-I would have produced code quickly, sure, but I&#8217;m sure with a very questionable level of quality.</p><p>In any case, I can&#8217;t imagine working without my assistant anymore. So I recommend it 1000%. I don&#8217;t use it by default yet, but only when I need it. It mainly helps me with the following tasks:</p><ul><li><p>Code review</p></li><li><p>All kinds of conversions (e.g., docker run &#8594; docker compose)</p></li><li><p>Debugging</p></li><li><p>Tedious implementations</p></li><li><p>Code refactoring (to be used with caution)</p></li></ul><p>By using it only when necessary and not more, I stay within the monthly limits of the free account. So, everyone&#8217;s happy :)</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!wyeL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f8c0e9e-0ee1-4344-801b-2c3e1573def1_194x200.gif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!wyeL!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f8c0e9e-0ee1-4344-801b-2c3e1573def1_194x200.gif 424w, https://substackcdn.com/image/fetch/$s_!wyeL!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f8c0e9e-0ee1-4344-801b-2c3e1573def1_194x200.gif 848w, https://substackcdn.com/image/fetch/$s_!wyeL!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f8c0e9e-0ee1-4344-801b-2c3e1573def1_194x200.gif 1272w, https://substackcdn.com/image/fetch/$s_!wyeL!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f8c0e9e-0ee1-4344-801b-2c3e1573def1_194x200.gif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!wyeL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f8c0e9e-0ee1-4344-801b-2c3e1573def1_194x200.gif" width="320" height="329.8969072164948" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2f8c0e9e-0ee1-4344-801b-2c3e1573def1_194x200.gif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:200,&quot;width&quot;:194,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1375720,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/gif&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://mysketches.substack.com/i/163336641?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f8c0e9e-0ee1-4344-801b-2c3e1573def1_194x200.gif&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!wyeL!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f8c0e9e-0ee1-4344-801b-2c3e1573def1_194x200.gif 424w, https://substackcdn.com/image/fetch/$s_!wyeL!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f8c0e9e-0ee1-4344-801b-2c3e1573def1_194x200.gif 848w, https://substackcdn.com/image/fetch/$s_!wyeL!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f8c0e9e-0ee1-4344-801b-2c3e1573def1_194x200.gif 1272w, https://substackcdn.com/image/fetch/$s_!wyeL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f8c0e9e-0ee1-4344-801b-2c3e1573def1_194x200.gif 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><h2>So, can AI replace the developer?</h2><p>For now, in my opinion, that&#8217;s still a utopia.</p><p>Generative AI will help developers, as a coding assistant, and save a considerable amount of time. That much is certain.</p><p>However, in a business context where quality, performance, and security of code cannot be compromised, the use of AI for coding must be guided. The developer necessarily remains in the loop, but more as the conductor of the implementation than as a mere executor.</p><p>So, AI does not (and probably will not) replace the developer. However, we are undoubtedly witnessing a transformation of the developer&#8217;s work and the role they will play in the software production chain in the coming months.</p><h2><strong>And vibe coding?</strong></h2><p>I hear a lot of people getting excited about &#8220;vibe coding.&#8221; In my view, today it&#8217;s great for bootstrapping an interface, making a POC, or putting together a demo-the idea being to get a result with minimal time and effort. That&#8217;s the deal, and I think we should stick to it, at least for now.</p><p>Now, things are moving so fast that we shouldn&#8217;t rule out being surprised by the ever more impressive capabilities of upcoming models. While waiting for that, can we imagine vibe coding in a business context with all the constraints and requirements that entails? There&#8217;s still work to be done; for me, we&#8217;re not there yet, even if it&#8217;s a dream.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.mysketches.org/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading My sketches! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item></channel></rss>